o
    i e                     @   s   d Z ddlmZ ddlmZ G dd dejZddd	ZG d
d dejZ	G dd dej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dS )z0Keras models for use in Model subclassing tests.    N)
test_utilsc                       s&   e Zd Zd fdd	Zdd Z  ZS )SimpleConvTestModel
   c                    sJ   t  jdd || _tjjdddd| _tj | _tjj	|dd| _
d S )N
test_modelname    )   r	   relu
activationsoftmax)super__init__num_classeskeraslayersConv2Dconv1FlattenflattenDensedense1selfr   	__class__ Z/var/www/myenv/lib/python3.10/site-packages/keras/src/tests/model_subclassing_test_util.pyr      s
   zSimpleConvTestModel.__init__c                 C   s   |  |}| |}| |S N)r   r   r   )r   xr   r   r   call      


zSimpleConvTestModel.call)r   __name__
__module____qualname__r   r!   __classcell__r   r   r   r   r      s    r   F   r	   c                 C   s   t jjddd}|g}|r|t jd |t jj|d dd |g}| r0|t j  |t jj|d dd tj||dd	}|S )
z5Creates MultiIOModel for the tests of subclass model.r   r
   r   g      ?r   r      r   r   )r   r   r   appendDropoutBatchNormalizationr   _MultiIOSubclassModel)use_bnuse_dpr   shared_layerbranch_abranch_bmodelr   r   r   get_multi_io_subclass_model$   s   r5   c                       s*   e Zd ZdZd fdd	Zdd Z  ZS )NestedTestModel1z0A model subclass nested inside a model subclass.r)   c                    s\   t  jdd || _tjjddd| _tjj|dd| _tj | _	t
jddddd| _d S )	Nnested_model_1r   r   r
   r      T)
num_hiddenr   r/   r0   )r   r   r   r   r   r   r   dense2r-   bnr   SmallSubclassMLPtest_netr   r   r   r   r   :   s   zNestedTestModel1.__init__c                 C   (   |  |}| |}| |}| |S r   r   r;   r=   r:   r   inputsr    r   r   r   r!   D      



zNestedTestModel1.callr)   )r$   r%   r&   __doc__r   r!   r'   r   r   r   r   r6   7   s    
r6   c                       s6   e Zd ZdZd	 fdd	Zedd Zdd Z  ZS )
NestedTestModel2z<A model subclass with a functional-API graph network inside.r)   c                    s\   t  jdd || _tjjddd| _tjj|dd| _tj  | _	| _	| 
dd| _d S )Nnested_model_2r   r   r
   r   r8   )r   r   r   r   r   r   r   r:   r-   r;   get_functional_graph_modelr=   r   r   r   r   r   N   s   zNestedTestModel2.__init__c                 C   sL   t j| fd}t jjddd|}t j |}t j||}t ||S )Nshaper   r
   r   r   Inputr   r   r-   Model)	input_dimr   rA   r    outputsr   r   r   rG   V   s
   z+NestedTestModel2.get_functional_graph_modelc                 C   r>   r   r?   r@   r   r   r   r!   _   rB   zNestedTestModel2.callrC   )	r$   r%   r&   rD   r   staticmethodrG   r!   r'   r   r   r   r   rE   K   s    
rE   c                 C   sp   t j| fd}t jjddd|}t j |}G dd dt j}| }||}t j||}t j||ddS )	NrH   r   r
   r   c                       $   e Zd Z fddZdd Z  ZS )z!get_nested_model_3.<locals>.Innerc                    s>   t    tjjddd| _tjjddd| _tj | _d S )Nr   r
   r      )	r   r   r   r   r   r   r:   r-   r;   r   r   r   r   r   p   s   
z*get_nested_model_3.<locals>.Inner.__init__c                 S   s   |  |}| |}| |S r   )r   r:   r;   r@   r   r   r   r!   v   r"   z&get_nested_model_3.<locals>.Inner.callr#   r   r   r   r   Innero   s    rS   nested_model_3r   rJ   )rM   r   rA   r    rS   r   rN   r   r   r   get_nested_model_3f   s   rU   c                       &   e Zd Z fddZdddZ  ZS )CustomCallModelc                    s2   t    tjjddd| _tjjddd| _d S )Nr*   r
   r   r   )r   r   r   r   r   r   r:   rR   r   r   r   r      s   
zCustomCallModel.__init__noTc                 C   s(   |  || | }|dkrd| S |S )Nyesg      $@)r   r:   )r   firstsecondfiddle_with_outputtrainingcombinedr   r   r   r!      s   zCustomCallModel.call)rX   Tr#   r   r   r   r   rW      s    rW   c                       rP   )TrainingNoDefaultModelc                       t    tjd| _d S Nr*   r   r   r   r   r   r   rR   r   r   r   r         
zTrainingNoDefaultModel.__init__c                 C   
   |  |S r   r   )r   r    r]   r   r   r   r!         
zTrainingNoDefaultModel.callr#   r   r   r   r   r_      s    r_   c                       rV   )TrainingMaskingModelc                    r`   ra   rb   rR   r   r   r   r      rc   zTrainingMaskingModel.__init__FNc                 C   rd   r   re   )r   r    r]   maskr   r   r   r!      rf   zTrainingMaskingModel.call)FNr#   r   r   r   r   rg      s    rg   )FFr(   )rD   	keras.srcsrcr   keras.src.testing_infrar   rL   r   r5   r6   rE   rU   rW   r_   rg   r   r   r   r   <module>   s   
	