o
    ={c                     @   s   d Z ddlZddlm  mZ ddlZddlm	Z	 ddl
mZ dZdd ZG dd	 d	e	jZG d
d de	jZG dd dejZG dd de	jZG dd dejZG dd de	jZdS )z/A simple functional keras model with one layer.    N)model_collection_base)gradient_descent
   c                  C   sX   t jtjddt jd} t jtjddt jd}t jtjddt jd}| ||fS )Ni     dtype   )tfZconstantnpZrandomZrandfloat32)Zx_trainZy_trainZ	x_predict r   >lib/python3.10/site-packages/keras/distribute/simple_models.py_get_data_for_simple_models   s   
r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	SimpleFunctionalModelz)A simple functional model and its inputs.c                 K   s^   d}t jjdtjd}t jjdtj|d|}t j||d}tjdd}|j	d	d
g|d |S )Noutput_1)r   )shaper   r   )r   name)inputsZoutputsMbP?Zlearning_ratemsemaelossmetrics	optimizer)
keraslayersZInputr	   r   DenseModelr   SGDcompile)selfkwargsoutput_namexymodelr   r   r   r   	get_model&   s   zSimpleFunctionalModel.get_modelc                 C      t  S Nr   r#   r   r   r   get_data2      zSimpleFunctionalModel.get_datac                 C      t S r+   _BATCH_SIZEr-   r   r   r   get_batch_size5      z$SimpleFunctionalModel.get_batch_sizeN__name__
__module____qualname____doc__r)   r.   r3   r   r   r   r   r   #   s
    r   c                   @   r   )	SimpleSequentialModelz)A simple sequential model and its inputs.c                 K   sN   d}t  }t jjdtj|dd}|| tjdd}|j	ddg|d	 |S )
Nr   r   r   )r   r   Z	input_dimr   r   r   r   r   )
r   Z
Sequentialr   r   r	   r   addr   r!   r"   )r#   r$   r%   r(   r'   r   r   r   r   r)   <   s   

zSimpleSequentialModel.get_modelc                 C   r*   r+   r,   r-   r   r   r   r.   I   r/   zSimpleSequentialModel.get_datac                 C   r0   r+   r1   r-   r   r   r   r3   L   r4   z$SimpleSequentialModel.get_batch_sizeNr5   r   r   r   r   r:   9   s
    r:   c                       s$   e Zd Z fddZdd Z  ZS )_SimpleModelc                    s"   t    tjjdtjd| _d S )Nr   r   )super__init__r   r   r   r	   r   _dense_layerr-   	__class__r   r   r>   Q   s   
z_SimpleModel.__init__c                 C   s
   |  |S r+   )r?   )r#   r   r   r   r   callU   s   
z_SimpleModel.call)r6   r7   r8   r>   rB   __classcell__r   r   r@   r   r<   P   s    r<   c                   @   r   )	SimpleSubclassModelz%A simple subclass model and its data.c                 K   s*   t  }tjdd}|jddgd|d |S )Nr   r   r   r   F)r   r   Zcloningr   )r<   r   r!   r"   )r#   r$   r(   r   r   r   r   r)   \   s   
zSimpleSubclassModel.get_modelc                 C   r*   r+   r,   r-   r   r   r   r.   e   r/   zSimpleSubclassModel.get_datac                 C   r0   r+   r1   r-   r   r   r   r3   h   r4   z"SimpleSubclassModel.get_batch_sizeNr5   r   r   r   r   rD   Y   s
    	rD   c                   @   s"   e Zd Zdd Zejdd ZdS )_SimpleModulec                 C   s   t d| _d S )Ng      @)r	   ZVariablevr-   r   r   r   r>   m   s   z_SimpleModule.__init__c                 C   s
   | j | S r+   )rF   )r#   r&   r   r   r   __call__p   s   
z_SimpleModule.__call__N)r6   r7   r8   r>   r	   functionrG   r   r   r   r   rE   l   s    rE   c                   @   r   )	SimpleTFModuleModelz/A simple model based on tf.Module and its data.c                 K   s
   t  }|S r+   )rE   )r#   r$   r(   r   r   r   r)   x   s   zSimpleTFModuleModel.get_modelc                 C   r*   r+   r,   r-   r   r   r   r.   |   r/   zSimpleTFModuleModel.get_datac                 C   r0   r+   r1   r-   r   r   r   r3      r4   z"SimpleTFModuleModel.get_batch_sizeNr5   r   r   r   r   rI   u   s
    rI   )r9   Znumpyr
   Ztensorflow.compat.v2compatZv2r	   r   Zkeras.distributer   Zkeras.optimizers.optimizer_v2r   r2   r   ZModelAndInputr   r:   r    r<   rD   ZModulerE   rI   r   r   r   r   <module>   s   		