o
    i eK*                     @   s  d Z ddlZddlmZ edg dZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd ZG dd dejZdd Zdd Zdd Zdd  Zd!d" Zdefdefd
e	fde
fdefdefdefdefdefdefdefdefd efd"efgZd%d#d$ZdS )&z2Tests for saving/loading function for keras Model.    NModelFn)modelinput_shapetarget_shapec                  C   s4   t t jjddddt jjdddg} t| dd	S )
zBasic sequential model.   relur   
activationr      softmaxr
   Nr   Nr   keras
SequentiallayersDenser   r    r   R/var/www/myenv/lib/python3.10/site-packages/keras/src/tests/model_architectures.pybasic_sequential   s   r   c                  C   s2   t t jjdddt jjdddg} t| ddS )z+Sequential model with deferred input shape.r   r   r   r   r   r   r   r   r   r   r   r   basic_sequential_deferred&   s   r   c                  C   sT   t d} t jdd tdD }|| }t jd|}t | |}t|ddS )zStacked RNN model.r   c                 S   s   g | ]}t jd qS r   )r   r   LSTMCell).0_r   r   r   
<listcomp>4   s    zstacked_rnn.<locals>.<listcomp>r   r   N   r   r   )r   Inputr   RNNranger   Modelr   )inputslayerxoutputsr   r   r   r   stacked_rnn1   s   
r)   c                  C   sn   t d} t jjddd| }t jjddd|}t jjddd|}t jd|}t | |}t|dd	S )
zLSTM model.r   r    T)return_sequencesr   r   Fr   r   r   r!   r   LSTMr   r$   r   r%   r'   r(   r   r   r   r   lstm;   s   
r.   c                  C   s   t jddd} t jddd}t jdd| }t jd|}t j||g}t jjd	d
dd|}t jjdddd|}t j| |g||gd}t|ddgddgS )zMulti-input Multi-output model.Nbodyshapenamer   tags
   r       r   sigmoidpriorityr
   r3   r   r   
departmentr%   r(   N   r   r   )	r   r!   r   	Embeddingr,   concatenater   r$   r   )
body_input
tags_inputr'   body_featurespred_1pred_2r   r   r   r   multi_input_multi_outputF   s   rE   c                  C   sh   t t jjddddt jjdddg} t jdd}| |}t jjddd|}t ||}t|d	d
S )z0A sequential model nested in a functional model.r   r   r   r	   r   r   r2   r   r   r   )r   r   r   r   r!   r$   r   )inner_modelr%   r'   r(   r   r   r   r   nested_sequential_in_functionalX   s   rH   c                  C   s   d} d}d}t jd| fd}t jj|dd}||\}}}||g}t jd|fd}	t jj|ddd}
|
|	|d\}}}t jj|d	d
}||}t ||	g|}t|dd| fdd|fgdd|fS )zSequence to sequence model.r   r   NrF   T)return_state)r*   rI   )initial_stater   r   r+   )num_encoder_tokensnum_decoder_tokens
latent_dimencoder_inputsencoderr   state_hstate_cencoder_statesdecoder_inputsdecoder_lstmdecoder_outputsdecoder_denser   r   r   r   
seq_to_seqh   s,   rW   c                  C   s   t jdddd} t jjdddd| }t jd	|}t jjd
ddd|}t jddd}t j||g}t jjddd|}t jjd
ddd|}t j| |g||gd}t|ddgddgS )z#Shared layer in a functional model.)r5   int32
main_input)r2   dtyper3   r6   r    r5   )
output_dim	input_diminput_lengthr   r=   r7   
aux_outputr9   )r6   	aux_inputr1   r   r   r   main_outputr;   )Nr5   )Nr6   r<   )	r   r!   r   r>   r,   r   r?   r$   r   )rY   r'   lstm_outauxiliary_outputauxiliary_inputr`   r   r   r   r   shared_layer_functional   s.   rd   c                  C   s   t t jjddddt jjddddg} t d}t d}| |}| |}t j||g}t j |}t ||g|}t|ddgdS )z.Shared sequential model in a functional model.r   r   r   r   )r6   r6   r   )Nr6   r6   r   )Nr    )	r   r   r   Conv2Dr!   r?   GlobalAveragePooling2Dr$   r   )rG   inputs_1inputs_2x1x2r'   r(   r   r   r   r   shared_sequential   s   

rk   c                       s>   e Zd ZdZd fdd	Zdd Zdd Zed	d
 Z  Z	S )MySubclassModelzA subclass model.r   c                    sZ   t  jdd d|i| _tjjddd| _tjjddd| _tj | _	tj
d	| _d S )
Nmy_subclass_modelr3   r\      r   r   r   r         ?)super__init___configr   r   r   dense1dense2BatchNormalizationbnDropoutdp)selfr\   	__class__r   r   rr      s   
zMySubclassModel.__init__c                 K   s(   |  |}| |}| |}| |S r/   )rt   ry   rw   ru   )rz   r%   kwargsr'   r   r   r   call      



zMySubclassModel.callc                 C   s   | j S r/   )rs   rz   r   r   r   
get_config   s   zMySubclassModel.get_configc                 C   s   | di |S )Nr   r   )clsconfigr   r   r   from_config   s   zMySubclassModel.from_configr   )
__name__
__module____qualname____doc__rr   r~   r   classmethodr   __classcell__r   r   r{   r   rl      s    rl   c                  C   s    G dd dt j} t|  ddS )z2A subclass model nested in another subclass model.c                       (   e Zd ZdZ fddZdd Z  ZS )z4nested_subclassed_model.<locals>.NestedSubclassModelzA nested subclass model.c                    sF   t    tjjddd| _tjjddd| _tj | _t	 | _
d S )Nr    r   r   r   )rq   rr   r   r   r   rt   ru   rv   rw   rl   inner_subclass_modelr   r{   r   r   rr      s
   
z=nested_subclassed_model.<locals>.NestedSubclassModel.__init__c                 S   s(   |  |}| |}| |}| |S r/   )rt   rw   r   ru   rz   r%   r'   r   r   r   r~      r   z9nested_subclassed_model.<locals>.NestedSubclassModel.callr   r   r   r   rr   r~   r   r   r   r{   r   NestedSubclassModel   s    r   r   r   r   r$   r   )r   r   r   r   nested_subclassed_model   s   r   c                  C   sT   t  } tjdd}| |}tj |}tjjddd|}t||}t|ddS )z.A subclass model nested in a functional model.r   rF   r   r   r   r   r   )rl   r   r!   r   rv   r   r$   r   )r   r%   r'   r(   r   r   r   r   %nested_subclassed_in_functional_model   s   r   c                     s,   dd  G  fdddt j} t|  ddS )z.A functional model nested in a subclass model.c                  S   sJ   t jdd} t jjddd| }t j |}t jd|}t | |S )N)r    rF   r    r   r   r   )r   r!   r   r   rv   r$   )r%   r'   r(   r   r   r   get_functional_model   s
   zCnested_functional_in_subclassed_model.<locals>.get_functional_modelc                       s*   e Zd ZdZ fddZdd Z  ZS )zNnested_functional_in_subclassed_model.<locals>.NestedFunctionalInSubclassModelz&A functional nested in subclass model.c                    s>   t  jdd tjjddd| _tjjddd| _ | _d S )N%nested_functional_in_subclassed_modelrn   r    r   r   r   )rq   rr   r   r   r   rt   ru   inner_functional_modelr   )r|   r   r   r   rr      s   zWnested_functional_in_subclassed_model.<locals>.NestedFunctionalInSubclassModel.__init__c                 S   s   |  |}| |}| |S r/   )rt   r   ru   r   r   r   r   r~      s   


zSnested_functional_in_subclassed_model.<locals>.NestedFunctionalInSubclassModel.callr   r   r   r{   r   NestedFunctionalInSubclassModel   s    r   r   r   r   )r   r   r   r   r      s   r   c                  C   s    G dd dt j} t|  ddS )z!Shared layer in a subclass model.c                       r   )z?shared_layer_subclassed_model.<locals>.SharedLayerSubclassModelz$A subclass model with shared layers.c                    s>   t  jdd tjjddd| _tjd| _tj | _	d S )Nshared_layer_subclass_modelrn   r   r   r   rp   )
rq   rr   r   r   r   denserx   ry   rv   rw   r   r{   r   r   rr     s   zHshared_layer_subclassed_model.<locals>.SharedLayerSubclassModel.__init__c                 S   s(   |  |}| |}| |}|  |S r/   )r   ry   rw   r   r   r   r   r~     r   zDshared_layer_subclassed_model.<locals>.SharedLayerSubclassModel.callr   r   r   r{   r   SharedLayerSubclassModel  s    r   r   r   )r   r   r   r   shared_layer_subclassed_model   s   r   c                  C   sX   t jdd} t jd| }t j |}t jd|}t j| |ddd}t|dd	S )
z%A functional model with keyword args.r   rF   r    r   mF)r3   	trainabler   r   )r   r!   r   r   rv   r$   r   r-   r   r   r   functional_with_keyword_args  s   r   c                    s    fddt D }|S )z,Get all models excluding the specified ones.c                    s   g | ]
}|d   vr|qS )r   r   )r   r   exclude_modelsr   r   r   :  s    zget_models.<locals>.<listcomp>)
ALL_MODELS)r   modelsr   r   r   
get_models8  s   r   r/   )r   collections	keras.srcsrcr   
namedtupler   r   r   r)   r.   rE   rH   rW   rd   rk   r$   rl   r   r   r   r   r   r   r   r   r   r   r   <module>   sR   
