a
    +=ic*                     @   sR   d Z ddlm  mZ ddlmZ ddlmZ ddlm	Z	 ddd	Z
dddZdS )z.A simple network to use in tests and examples.    N)core)normalization)optimizer_v2FTc                    s0   dd }t jd|d  fdd}|| fS )z.Example of non-distribution-aware legacy code.c                  S   s$   t jjdgg } | jdddS )N      ?   T)Zdrop_remainder)tfdataDatasetZfrom_tensorsrepeatbatch)Zdataset r   n/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/keras/distribute/test_example.py
dataset_fn   s    z)minimize_loss_example.<locals>.dataset_fnr   use_biasc                    sL    fdd}t tjr.|fddS r<|S | S dS )z(A very simple model written by the user.c                     s"   t  g t d } | |  S )Nr   )r   Zreshapeconstant)y)layerxr   r   loss_fn&   s    z8minimize_loss_example.<locals>.model_fn.<locals>.loss_fnc                      s    j S NZtrainable_variablesr   r   r   r   <lambda>,       z9minimize_loss_example.<locals>.model_fn.<locals>.<lambda>N
isinstancer   ZOptimizerV2Zminimizer   r   r   	optimizeruse_callable_lossr   r   model_fn#   s    
z'minimize_loss_example.<locals>.model_fn)r   Dense)r   r   r    r   r"   r   r   r   minimize_loss_example   s    r$   r   ?c                    sL    fdd}|  t j||ddtjdddfdd}||fS )	zKExample of non-distribution-aware legacy code with batch
    normalization.c                      s    t jjdd t D  S )Nc                    s"   g | ]  fd dt dD qS )c                    s$   g | ]  fd dt dD qS )c                    s$   g | ]}t  d  | d  qS )   d   )float).0r   )r   zr   r   
<listcomp>F   r   zObatchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>.<listcomp>.<listcomp>r&   ranger)   r*   r!   r   r+   E   s   zDbatchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>.<listcomp>   r,   r.   r   r/   r   r+   D   s   
z9batchnorm_example.<locals>.dataset_fn.<locals>.<listcomp>)r   r   r	   Zfrom_tensor_slicesr-   r
   r   )batch_per_epochr   r   r   @   s
    z%batchnorm_example.<locals>.dataset_fnF)renormmomentumZfusedr   r   c                    s<    fdd}t tjr2|fddS |S )zA model that uses batchnorm.c                     sr    dd} t r*t jjt jjjjng . t t | t 	d }W d    n1 sd0    Y  |S )NT)Ztrainingr   )
r   Zcontrol_dependenciescompatv1Zget_collectionZ	GraphKeysZ
UPDATE_OPSZreduce_meanZ
reduce_sumr   )r   Zloss)	batchnormr   update_ops_in_replica_moder   r   r   r   V   s    "z4batchnorm_example.<locals>.model_fn.<locals>.loss_fnc                      s    j S r   r   r   r   r   r   r   f   r   z5batchnorm_example.<locals>.model_fn.<locals>.<lambda>r   r   )r6   r   r   r7   r!   r   r"   S   s    z#batchnorm_example.<locals>.model_fn)r   ZBatchNormalizationr   r#   )Zoptimizer_fnr1   r3   r2   r7   r   r"   r   )r1   r6   r   r   r7   r   batchnorm_example6   s    
r8   )FT)r   r%   FF)__doc__Ztensorflow.compat.v2r4   v2r   Zkeras.legacy_tf_layersr   r   Zkeras.optimizers.optimizer_v2r   r$   r8   r   r   r   r   <module>   s   
     