a
    +=ic=*                     @   s  d Z ddlZddl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_shapeZ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   p/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/keras/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   ZLSTMCell).0_r   r   r   
<listcomp>4       zstacked_rnn.<locals>.<listcomp>r   r
   N   r   r   )r   Inputr   Z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	   r1   r   r   Z
departmentr#   r&   N   r   r   )	r   r    r   	Embeddingr*   concatenater   r"   r   )Z
body_inputZ
tags_inputr%   Zbody_featuresZpred_1Zpred_2r   r   r   r   multi_input_multi_outputF   s    r=   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   r0   r   r   r   )r   r   r   r   r    r"   r   )inner_modelr#   r%   r&   r   r   r   r   nested_sequential_in_functionalX   s    r@   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
   Nr>   T)return_state)r(   rA   )Zinitial_stater   r   r)   )Znum_encoder_tokensZnum_decoder_tokensZ
latent_dimZencoder_inputsencoderr   Zstate_hZstate_cZencoder_statesZdecoder_inputsZdecoder_lstmZdecoder_outputsZdecoder_denser   r   r   r   
seq_to_seqh   s,    rC   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.)r3   int32
main_input)r0   Zdtyper1   r4   r   r3   )Z
output_dim	input_dimZinput_lengthr   r:   r5   Z
aux_outputr7   )r4   Z	aux_inputr/   r
   r   r   main_outputr8   )Nr3   )Nr4   r9   )	r   r    r   r;   r*   r   r<   r"   r   )rE   r%   Zlstm_outZauxiliary_outputZauxiliary_inputrG   r   r   r   r   shared_layer_functional   s.    rH   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   )r4   r4   r   )Nr4   r4   r   )Nr   )	r   r   r   ZConv2Dr    r<   ZGlobalAveragePooling2Dr"   r   )r?   Zinputs_1Zinputs_2x1Zx2r%   r&   r   r   r   r   shared_sequential   s    

rJ   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 )
NZmy_subclass_modelr1   rF      r   r   r
   r         ?)super__init___configr   r   r   dense1dense2BatchNormalizationbnDropoutdp)selfrF   	__class__r   r   rP      s    
zMySubclassModel.__init__c                 K   s(   |  |}| |}| |}| |S r-   )rR   rW   rU   rS   )rX   r#   kwargsr%   r   r   r   call   s    


zMySubclassModel.callc                 C   s   | j S r-   )rQ   rX   r   r   r   
get_config   s    zMySubclassModel.get_configc                 C   s   | f i |S r-   r   )clsconfigr   r   r   from_config   s    zMySubclassModel.from_config)r   )
__name__
__module____qualname____doc__rP   r\   r^   classmethodra   __classcell__r   r   rY   r   rK      s   rK   c                  C   s    G dd dt j} t|  ddS )z2A subclass model nested in another subclass model.c                       s(   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
   )rO   rP   r   r   r   rR   rS   rT   rU   rK   inner_subclass_modelr]   rY   r   r   rP      s
    
z=nested_subclassed_model.<locals>.NestedSubclassModel.__init__c                 S   s(   |  |}| |}| |}| |S r-   )rR   rU   rh   rS   rX   r#   r%   r   r   r   r\      s    


z9nested_subclassed_model.<locals>.NestedSubclassModel.callrb   rc   rd   re   rP   r\   rg   r   r   rY   r   NestedSubclassModel   s   rk   r   r   r   r"   r   )rk   r   r   r   nested_subclassed_model   s    rm   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   r>   r
   r   r   r   r   )rK   r   r    r   rT   r   r"   r   )rh   r#   r%   r&   r   r   r   r   %nested_subclassed_in_functional_model   s    rn   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   r>   r   r   r   r
   )r   r    r   r   rT   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_modelrL   r   r   r   r
   )rO   rP   r   r   r   rR   rS   inner_functional_modelr]   )rZ   ro   r   r   rP      s    zWnested_functional_in_subclassed_model.<locals>.NestedFunctionalInSubclassModel.__init__c                 S   s   |  |}| |}| |S r-   )rR   rq   rS   ri   r   r   r   r\      s    

zSnested_functional_in_subclassed_model.<locals>.NestedFunctionalInSubclassModel.callrj   r   ro   rY   r   NestedFunctionalInSubclassModel   s   rs   r   r   rl   )rs   r   rr   r   rp      s    rp   c                  C   s    G dd dt j} t|  ddS )z!Shared layer in a subclass model.c                       s(   e Zd ZdZ fddZdd Z  ZS )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 )NZshared_layer_subclass_modelrL   r   r   r   rN   )
rO   rP   r   r   r   denserV   rW   rT   rU   r]   rY   r   r   rP     s    zHshared_layer_subclassed_model.<locals>.SharedLayerSubclassModel.__init__c                 S   s(   |  |}| |}| |}|  |S r-   )rt   rW   rU   ri   r   r   r   r\     s    


zDshared_layer_subclassed_model.<locals>.SharedLayerSubclassModel.callrj   r   r   rY   r   SharedLayerSubclassModel  s   ru   r   rl   )ru   r   r   r   shared_layer_subclassed_model   s    rv   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   r>   r   r
   mF)r1   Z	trainabler   r   )r   r    r   r   rT   r"   r   r+   r   r   r   functional_with_keyword_args  s    rx   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   :  r   zget_models.<locals>.<listcomp>)
ALL_MODELS)rz   modelsr   ry   r   
get_models8  s    r}   )N)re   collectionsr   
namedtupler   r   r   r'   r,   r=   r@   rC   rH   rJ   r"   rK   rm   rn   rp   rv   rx   r{   r}   r   r   r   r   <module>   sP   
