
    Vpf1                        d dl mZ d dlZd dlZd dlmZ d dlmZ d dlZd dl	Z
d dlmZ d dlmZ d dlmZ ej                                          G d dej                  Zed	k    r  ej         ej                    
           dS dS )    )absltestN)lax)jax2tf)tf_test_util)	test_utilc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ej        dd          d             ZdS )SavedModelTestc                    t          j        d           }t          j                    }t          j        t          j        |          dt          j        g t          j                  g          |_	        t          j        dt          j                  }|                     |	                    |           ||                     t          j        |          }|                     |	                    |           ||                     d S )Nc                 N    t          j        t          j        |                     S N)jnpsincosxs    m/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/jax2tf/tests/savedmodel_test.py<lambda>z*SavedModelTest.test_eval.<locals>.<lambda>"   s    cgcgajj11     F	autographinput_signatureffffff?dtype)jaxjittfModulefunctionr   convert
TensorSpecfloat32fnparrayr   assertAllCloser   SaveAndLoadModel)selff_jaxmodelr   restored_models        r   	test_evalzSavedModelTest.test_eval!   s    G1122EIKKEk&.//$)+-=RZ+H+H*I  EG 	CK(((A

EE!HH---!2599N((++UU1XX66666r   c                    t           j        d             j        fd            }t          j                    }t          j        t          j        d          dt          j        g t          j	                  g          |_
        t          j        dt          j	                  }|                     |
                    |           |                     t          j        |          }t          j        |          }|                     |
                    |           |                     t          j                    5 }|
                    |          }d	d	d	           n# 1 swxY w Y   |                     |                    ||                                           t          j                  |                     d	S )
z%Save and restore the custom gradient.c                     | | z  S r    r   s    r   r)   z+SavedModelTest.test_gradient.<locals>.f_jax/       Ulr   c                 B    | \  }|\  } |          }||z  dz  }||fS Ng      @r/   primalstangentsr   x_dot
primal_outtangent_outr)   s         r   	f_jax_jvpz/SavedModelTest.test_gradient.<locals>.f_jax_jvp3   8     bafe588jINk$$r   Twith_gradientFr   r   r   N)r   
custom_jvpdefjvpr   r   r   r   r    r!   r"   r#   r$   r%   r   r&   r   r'   VariableGradientTapegradientnumpygrad)	r(   r9   r*   r   r+   xvtapeyr)   s	           @r   test_gradientzSavedModelTest.test_gradient-   s   ^  ^ \% % % % \% IKKEk&.dCCC$)+-=RZ+H+H*IK K KEG 	CK(((A

EE!HH---!2599N	QB((++UU1XX666			 d


2

a              a,,2244'**, , , , ,s   	E++E/2E/c                   	 t           j        d             		j        	fd            }t          j                    }t          j        	fddt          j        g t          j                  g          |_        	fd}t          j
        dt          j                  }|                     |                    |           ||                     t          j        |          }t          j        |          }|                     |                    |           ||                     t          j                    5 }|                    |          }d	d	d	           n# 1 swxY w Y   |                     |                    ||                                           t          j        |          |                     d	S )
zGSave and restore the custom gradient, when combined with other TF code.c                     | | z  S r   r/   r   s    r   r)   z2SavedModelTest.test_gradient_nested.<locals>.f_jaxL   r0   r   c                 B    | \  }|\  } |          }||z  dz  }||fS r2   r/   r3   s         r   r9   z6SavedModelTest.test_gradient_nested.<locals>.f_jax_jvpP   r:   r   c                 |    t           j                             t          j        d          |                     S )NTr;   )r   mathr   r   r    r   r)   s    r   r   z5SavedModelTest.test_gradient_nested.<locals>.<lambda>[   s1    BGKK0YuTX0Y0Y0YZ[0\0\$]$] r   Fr   c                 >    t          j         |                     S r   )r   r   rM   s    r   r   z5SavedModelTest.test_gradient_nested.<locals>.<lambda>^   s    CGEE!HH-- r   r   r   N)r   r=   r>   r   r   r   r!   r"   r#   r$   r%   r   r&   r   r'   r?   r@   rA   rB   rC   )
r(   r9   r*   f_jax_equivr   r+   rD   rE   rF   r)   s
            @r   test_gradient_nestedz#SavedModelTest.test_gradient_nestedJ   s   ^  ^ \% % % % \% IKKEk]]]]$)+-=RZ+H+H*IK K KEG .---K
CK(((A

KKNN333!2599N	QB((++[[^^<<<			 d


2

a              a,,2244---a002 2 2 2 2s   =EE#&E#c                 &   d }t          j                    }t          j        t          j        |d          dt          j        g t           j                  g          |_        t          j	        dt          j                  }|                     |                    |           ||                     t          j        |          }t          j        dt          j                  }|                     |                    |           ||                     |                     t           d          5  t          j                    5  |                    |          }d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                     | | z  S r   r/   r   s    r   r   z7SavedModelTest.test_gradient_disabled.<locals>.<lambda>j   
    a!e r   Fr;   r   r   r   zVGradient explicitly disabled.*The jax2tf-converted function does not support gradients)r   r   r   r   r    r!   r"   r#   r$   r%   r   r&   r   r'   r?   assertRaisesRegexLookupErrorr@   )r(   r)   r*   r   r+   rD   _s          r   test_gradient_disabledz%SavedModelTest.test_gradient_disabledi   s   OEIKKEk&.eDDD$)+-=RZ+H+H*IK K KEG 	CK(((A

EE!HH---!2599N	S	,	,	,B((++UU1XX666			 x
z 
z ! !? ! !R  ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s6   8FE."F.E2	2F5E2	6FF
F
c                    d }t          j        dt          j                  }t	          j                    }t	          j        t          j        |d          dt	          j	        |j
        |j                  g          |_        |                     |                    |           ||                     t          j        |d          }|                     |                    |           ||                     t	          j        |          }t	          j                    5  |                    |          }d d d            d S # 1 swxY w Y   d S )	Nc                     | | z  S r   r/   r   s    r   r   z<SavedModelTest.test_save_without_gradients.<locals>.<lambda>|   rS   r   r   r   Tr;   Fr   save_gradients)r$   r%   r   r"   r   r   r   r   r    r!   shaper   r#   r&   r   r'   r?   r@   )r(   r)   r   r*   r+   rD   rV   s          r   test_save_without_gradientsz*SavedModelTest.test_save_without_gradients{   sv   OE
CK(((AIKKEk&.dCCC$)+-=!'+J+J*KM M MEG 	

EE!HH---!25BGI I IN((++UU1XX666	QB			  


2

a                 s   &E		EEc                    d t          j        dt          j                  t          j        dt          j                  f}t          j                            t          j        |          fd}t	          j                    }t          j        	                              |_
        t	          j        |dd          |_        t          j        d	t          j                  }|                     |                    |           ||                     t          j        |d
          }|                     |                    |           ||                     d S )Nc                 *    | d         | d         |z  z   S )Nr      r/   )paramsinputss     r   	model_jaxzDSavedModelTest.test_save_without_embedding_params.<locals>.model_jax   s    AYV+++r   g      ?r   g       @c                 @     t          j                  |           S r   )r   r    )r   rc   params_varss    r   r   zCSavedModelTest.test_save_without_embedding_params.<locals>.<lambda>   s    7fnY77QGG r   TFjit_compiler   r   rZ   )r$   r%   r   r"   r   nestmap_structurer?   r   flatten
_variablesr   r#   r&   r   r'   )r(   ra   prediction_tfr*   r   r+   rc   re   s         @@r   "test_save_without_embedding_paramsz1SavedModelTest.test_save_without_embedding_params   s>   , , , hs#+...hs#+...0F'''V<<KGGGGGMIKKEw{33Ek-TUKKKEG
CK(((A

IIfa$8$8999!25BGI I IN((++YYvq-A-ABBBBBr   c                    dt          j        dgt           j                  }t          j        dt           j                  }fd}t          j        |          }t          j                    5 } |||          d         }t          j        |          }|	                    ||          }d d d            n# 1 swxY w Y   | 
                    |                                t          j        |j        |j                             t          j                    }	t          j        |d          |	_        |	j                            t          j        |j        |j                  t          j        |j        |j                             t(          j                            t/          j                    t3          t5          |	                              }
t
          j                            d	
          }t
          j                            |	|
|          }t
          j                            |
          }|j        }t          j                    5 } |||          d         }t          j        |          }|	                    ||          }d d d            n# 1 swxY w Y   | 
                    |                                t          j        |j        |j                             d S )N   r`   r   )   rp   c                 j     t           j        fd            }d fd	 | |          \  }}||fS )Nc                 X    t          j        dft           j                  }|}||ffS )N   r   )r   zerosr"   )ra   stateres_out	state_out
batch_sizeconverted_grad_fns       r   "converted_fun_with_custom_gradientzfSavedModelTest.test_save_grad_integers.<locals>.tf_predict.<locals>.converted_fun_with_custom_gradient   s3    (J?"*===	)$&788r   c                 H    t          j        j        j                  |fS )Nr   )r   rt   r\   r   )
res_out_ctstate_out_ct	variablesra   s      r   ry   zUSavedModelTest.test_save_grad_integers.<locals>.tf_predict.<locals>.converted_grad_fn   s!    xFL999<GGr   r   )r   custom_gradient)ra   ru   rz   resrw   ry   rx   s   `    @r   
tf_predictz:SavedModelTest.test_save_grad_integers.<locals>.tf_predict   sy     
9 9 9 9 9 9H H H H H H :9&%HHnc9)^r   r   F)r   T)experimental_custom_gradients)options)r$   r%   int32onesr"   r   r?   r@   reduce_meanrA   r&   rB   rt   r\   r   r   r   fnget_concrete_functionr!   ospathjoinr   get_default_test_tmpdirstridsaved_modelSaveOptionssaveload)r(   ru   ra   r   params_vrE   predslossgr*   save_dirr   rV   restored_modulerestored_fnrx   s                  @r   test_save_grad_integersz&SavedModelTest.test_save_grad_integers   s    JHaS)))EWV2:...F    & {6""H			 (dj5))!,e^E""d
--h
'
'a( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 			28FL#M#M#MNNN IKKE{:777EH	H""
flFL11
ek5;//1 1 1 w||H<>>BuIIOOHn((t(LLG
E8W==An))(33O "$K 
		 (dk(E**1-e^E""d
--h
'
'a( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 			28FL#M#M#MNNNNNs$   1=B::B>B>=JJ!$J!c                     t          j        |          } || }t          j        ||          \  }} || }|                     ||           d S )N
input_args)r   r    r   SaveAndLoadFunctionr&   )r(   r)   argsf_tfr   
restored_frV   res_restoreds           r   _compare_with_saved_modelz(SavedModelTest._compare_with_saved_model   s_     >%  D
$+C 4TdKKKMJ:t$L\*****r   c                    d }t          j        dt           j                  }t          t          j        dt           j                  t          j        dt           j                            } |||          }t	          j        |          } |||          }|                     ||                                           t          j	        |||fd          \  }}|                      |||                                          |                                           t          j                            t          j        |          }	t          j                    5 }
 ||	|          }t          j        |          }|
                    ||	          }d d d            n# 1 swxY w Y   t          j                            t          j        |          }	t          j                    5 }
 ||	|          }t          j        |          }|
                    ||	          }d d d            n# 1 swxY w Y   |                     |d	                                         |d	                                                    |                     |d
                                         |d
                                                    d S )Nc                 *    || d         z  | d         z   S )Nwbr/   )ra   r   s     r   r)   z)SavedModelTest.test_pytree.<locals>.f_jax   s    _vc{**r   )rs   rp   r   )rp      )rs   r   )r   r   T)r   r[   r   r   )r$   r   r"   dictr   r    r&   rB   r   r   r   rh   ri   r?   r@   
reduce_sumrA   )r(   r)   r   ra   res_jaxr   res_tfr   r+   r   rE   r   r   g_tfg_restored_fs                  r   test_pytreezSavedModelTest.test_pytree   s   + + + 	bj)))ABGF"*555GF"*5557 7 7FeFAG>%  DT&!__F000!-!A$TZ\]S^QU"W "W "WJ

61--3355v||~~FFF w$$R[&99H			 +dD1c]3d]]4**d+ + + + + + + + + + + + + + +
 w$$R[&99H			 3dJx##c]3d]]422l3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 	S	))<+<+B+B+D+DEEES	))<+<+B+B+D+DEEEEEs$   "7F%%F),F)-7H00H47H4c                 x    t          j        dt           j                  }d }|                     ||           d S )N
   r   c                 2    t          j        | dgdg          S )Nd   r`   )r   dynamic_slicearrs    r   r)   z>SavedModelTest.test_xla_context_preserved_slice.<locals>.f_jax  s    sSEA3///r   r$   aranger"   r   )r(   r   r)   s      r    test_xla_context_preserved_slicez/SavedModelTest.test_xla_context_preserved_slice  sC    
)Bbj
)
)
)C0 0 0""5#.....r   c                 x    d }t          j        dt           j                  }|                     ||           d S )Nc                     | d         S )Nr   r/   r   s    r   r)   z?SavedModelTest.test_xla_context_preserved_gather.<locals>.f_jax  s    Xor   r   r   r   )r(   r)   r   s      r   !test_xla_context_preserved_gatherz0SavedModelTest.test_xla_context_preserved_gather  sC      
)Bbj
)
)
)C""5#.....r   gputpuc           	      x   d fdt          j        ddg          }|                     t          d          5   t	          j        dd          |           d	d	d	           n# 1 swxY w Y   fd
} ||          }|                     |                                t          j	        t          j        ddgt           j
                                       t          j        ||g          \  }} ||          }|                     |                                |                                           d	S )zMShow how to combine TF-uncompilableble code with compiled JAX-converted code.c                     | S r   r/   r   s    r   r   zESavedModelTest.test_tf_mix_jax_with_uncompilableble.<locals>.<lambda>'  s    Q r   c                     t           j                            | t           j                  }t          j        |t           j                  } ||          S )N)out_type)r   strings	to_numberr"   castfloat16)x_strcompute_tf_fnnumbers_f32numbers_f16s       r   tf_fnzBSavedModelTest.test_tf_mix_jax_with_uncompilableble.<locals>.tf_fn'  sC     J(((DDkGK44k];'''r   z3.14z2.78z<Detected unsupported operations when trying to compile graphTFrf   Nc                      | t          j        t          j        t          j                  dd                    S )NFT)r   rg   )r   )r   r   r   r    r   r   )r   r   s    r   r   zESavedModelTest.test_tf_mix_jax_with_uncompilableble.<locals>.<lambda>7  sC    k&."9"9,1.24 4 4!5 !5 !5 r   gQ	@g=
ףp=@r   r   )r$   r%   rT   	Exceptionr   r   r&   rB   r   r   r   r   r   )r(   r   composed_fnr   r   rV   res_tf_restoredr   s          @r   $test_tf_mix_jax_with_uncompilableblez3SavedModelTest.test_tf_mix_jax_with_uncompilableble$  s    $/; ( ( ( ( Hff%&&E 
		F
H 
H C C <bk%TU;;;EBBBC C C C C C C C C C C C C C C5 5 5 5K
 [F$RZ H H HIIK K K !4[AFI I IMJ j''O--//@@@@@s   !A&&A*-A*N)__name__
__module____qualname__r,   rG   rP   rW   r]   rm   r   r   r   r   r   jtuskip_on_devicesr   r/   r   r   r	   r	      s        
7 
7 
7, , ,:2 2 2>! ! !$  BC C C*6O 6O 6Op+ + + F  F  FF/ / // / / 3ue$$A A %$A A Ar   r	   __main__)
testLoader)absl.testingr   r   r   r   	jax.numpyrB   r   r$   
tensorflowr   jax.experimentalr   jax.experimental.jax2tf.testsr   jax._srcr   r   configparse_flags_with_abslJaxToTfTestCaser	   r   mainJaxTestLoaderr/   r   r   <module>r      s+   " ! ! ! ! ! 				 



                     # # # # # # 6 6 6 6 6 6 % % % % % % 
     " " "eA eA eA eA eA\1 eA eA eAP	 z(-,3,..////// r   