
    Vpfe                     n   d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlZddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddlm"Z" ddl#m$Z% ddlZ&ddl'Z(ddl)m*Z+  ej,                      ej-                    Z.d Z/d Z0 G d dej1                  Z2 ej3        d           G d dej1                              Z4 G d dej1                  Z5e6d k    r  e
j7         ej8                    !           dS dS )"z\Tests for JAX2TF converted.

Specific JAX primitive conversion tests are in primitives_test.    N)logging)absltestparameterized)ad_checkpoint)dtypes)export)lax)numpy)sharding)config)core)source_info_util)	test_util)
xla_bridge)jax2tf)tf_test_util	shard_map)pjit)PartitionSpec)xlac                      t          t          d          s/t                              t	          j        d                     d S d S )Noptimization_barrierF)jax_remat_opt_barrier)hasattrtfxla_exit_stackenter_contextjtuglobal_config_context     i/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/experimental/jax2tf/tests/jax2tf_test.pysetUpModuler$   7   sJ    	.	/	/ Vc7eTTTUUUUUV Vr"   c                  8    t                                            d S N)r   closer!   r"   r#   tearDownModuler(   ;   s    r"   c                   "    e Zd Ze f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             Z ej        d          d             Z ej        d          d             Z ej        ej        ej        gddg          ej        dfd            Zd Zd Zd Z ej        ddg          dcd            Z ej        ddg          ddd            Zd Z ej        ddg          dcd            Z d Z! ej        ddg          ddd            Z" ej        ddg          ddd            Z# ej        ddg          ddd             Z$d! Z%d" Z& ej        ddg          dcd#            Z' ej        ddg          dcd$            Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d+ Z/d, Z0d- Z1d. Z2d/ Z3d0 Z4d1 Z5d2 Z6 e7j8        d3 d4D                       ded6            Z9d7 Z:d8 Z; ej        g d9:          dfd<            Z< ej        g d9:          dfd=            Z=d> Z>d? Z?d@ Z@dA ZAdB ZBdC ZCdD ZDdE ZE ej        ddg          dcdF            ZF ej        ddg          dcdG            ZGdH ZHdI ZIdJ ZJdK ZKdL ZLdM ZMdN ZNdO ZOdPePjQ        dQeRfdRZSdS ZTdT ZUdU ZV e7j8        dV dWD                       	 	 dgdY            ZWdZ ZX ejY        d[\          d]             ZZd^ Z[d_ Z\d` Z]da Z^db Z_ xZ`S )h
Jax2TfTestc                    g | _         t          j                            d          t          j                            d          z   t          j                                        z   D ]Hj        dk    rt          fd| j         D                       r| j                                        It                                                       d S )NTPUGPU
TPU_SYSTEMc              3   8   K   | ]}j         |j         k    V  d S r&   )device_type).0d	tf_devices     r#   	<genexpr>z(Jax2TfTest.setUpClass.<locals>.<genexpr>J   s-      LLY"am3LLLLLLr"   )	
tf_devicestfr   list_logical_devicesr0   allappendsuper
setUpClass)clsr3   	__class__s    @r#   r;   zJax2TfTest.setUpClassA   s     CNi44U;;i44U;;<i44667 ) )	 
	,	.	.	LLLLS^LLL	L	L )i(((	GGr"   c                 :    d }|                      |dd           d S )Nc                     | S r&   r!   xys     r#   <lambda>z'Jax2TfTest.test_empty.<locals>.<lambda>P        r"   ffffff?   ConvertAndCompareselff_jaxs     r#   
test_emptyzJax2TfTest.test_emptyO   s'    NE5#q)))))r"   c           	         t          j        t          j                  t	          j        d          }t	          j        |          }|                     | |                     |                     | t          j        dd          |                     t          j	        
                    d          t          j	        
                    d          z   t          j	        
                                z   d         t          j        d           t          j        dd          fd	            }t          j        j                  5  |                     | ||                     d d d            d S # 1 swxY w Y   d S )
N      ?FT	autographjit_compiler,   r-   r   zRunning TF on %sc                     t          j        j                  5   |           cd d d            S # 1 swxY w Y   d S r&   )r6   devicename)rA   f_tftf_preferred_devices    r#   f_tf_wrappedz)Jax2TfTest.test_sin.<locals>.f_tf_wrappedf   s    9(-..  tAww                 s   377)r   convertjnpsinnpfloat32assertAllCloser6   functionr   r7   r   inforS   rT   )rJ   rA   sin_xrW   rU   rV   s       @@r#   test_sinzJax2TfTest.test_sinS   s   >#'""D

2AF1IIEttAww'''  =r{457; =  =  ==> @  @ A A A 		&&u--
)
(
(
/
/	0
)
(
(
*
*	+ 		
 L#%8999 [5e444     54 
&+	,	, 2 2
%a1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s    E==FFc                 8    d }|                      |d           d S )Nc                 N    t          j        t          j        |                     S r&   rY   rZ   cosrA   s    r#   rC   z(Jax2TfTest.test_basics.<locals>.<lambda>o       cgcgajj)) r"   rE   rG   rI   s     r#   test_basicszJax2TfTest.test_basicsn   s&    ))E5#&&&&&r"   c                 B   t           j        d             t          j        d          fd            }|                    g dd          }|j        }|                    d           |                    d           |                    d	           |                    d
           |                    d           |                    d           |                    d           |                     t                    5  |                    d           d d d            n# 1 swxY w Y   |                     t                    5  |                    d           d d d            n# 1 swxY w Y   |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           d S )Nc                      fd| D             S )Nc                 :    g | ]}t          j        |          S r!   rY   add)r1   rA   rB   s     r#   
<listcomp>zBJax2TfTest.test_input_output_naming.<locals>.f.<locals>.<listcomp>u   s#    (((cgamm(((r"   r!   )xsrB   s    `r#   fz.Jax2TfTest.test_input_output_naming.<locals>.fs   s    ((((R((((r"   FrP   c                 D   t           j                            t           j        |           } t          j                    5 }t           j                            |j        |             | |          }|                    ||            |cd d d            S # 1 swxY w Y   d S r&   )r6   nestmap_structureconvert_to_tensorGradientTapewatchgradient)ro   rB   taperp   s      r#   uz.Jax2TfTest.test_input_output_naming.<locals>.uw   s    7  !5r::b? 
dj"---Ab!HHa	                 s   A	BBB)      ?       @      @      @jax2tf_arg_0jax2tf_arg_1jax2tf_arg_2jax2tf_arg_3
jax2tf_outjax2tf_out_1jax2tf_out_2jax2tf_arg_4jax2tf_out_3zjax2tf_vjp/jax2tf_arg_0zjax2tf_vjp/jax2tf_arg_1zjax2tf_vjp/jax2tf_arg_2zjax2tf_vjp/jax2tf_arg_3zjax2tf_vjp/jax2tf_outzjax2tf_vjp/jax2tf_out_1zjax2tf_vjp/jax2tf_out_2zjax2tf_vjp/jax2tf_out_3)	r   rX   r6   r^   get_concrete_functiongraphget_operation_by_nameassertRaisesKeyError)rJ   rz   cfgrp   s       @r#   test_input_output_namingz#Jax2TfTest.test_input_output_namingr   s   ^) ) ^) [5!!!    "! 
	 	 r	2	2B
AN+++N+++N+++N+++L)))N+++N+++			8	$	$ . .n---. . . . . . . . . . . . . . .			8	$	$ . .n---. . . . . . . . . . . . . . .5666566656665666344456665666566666s$   D%%D),D)
E,,E03E0c                     dt           t          t          t          t          f         f         dt           t          t          t          t          f         f         fd}ddddf}|                     ||           d S )NrA   returnc                 R    | \  }}|dz  d |                                 D             fS )Nr|   c                      i | ]\  }}||d z  S )r}   r!   )r1   kvs      r#   
<dictcomp>z:Jax2TfTest.test_pytrees.<locals>.f_jax.<locals>.<dictcomp>   s"    ===da1r6===r"   )items)rA   x_ax_dicts      r#   rK   z&Jax2TfTest.test_pytrees.<locals>.f_jax   s1    kc62X==fllnn=====r"   rE   皙??ab)tuplefloatdictstrrH   rJ   rK   rA   s      r#   test_pytreeszJax2TfTest.test_pytrees   sz    >ud3:../ >E%c5jAQ:Q4R > > > > 
2B A5!$$$$$r"   c                 &   d }t          j        |          }t          j        dt          j        d                    }|                      ||          t          j                   |                      |d           ||                     d S )Nc                 N    t          j        t          j        |                     S r&   rd   rf   s    r#   rC   z0Jax2TfTest.test_variable_input.<locals>.<lambda>   rg   r"   rE   dtype)r   rX   r6   Variabledtype_of_valassertIsInstanceTensorr]   )rJ   rK   rU   r   s       r#   test_variable_inputzJax2TfTest.test_variable_input   s    ))E>%  D
Cv2377888A$$q''29---c

DDGG,,,,,r"   c                 \    t          j        d           }|                     |d           d S )Nc                 N    t          j        t          j        |                     S r&   rd   rf   s    r#   rC   z%Jax2TfTest.test_jit.<locals>.<lambda>       cgcgajj11 r"   rE   jaxjitrH   rI   s     r#   test_jitzJax2TfTest.test_jit   1    G1122E5#&&&&&r"   c                 `    t          j        d           }d}|                     ||           d S )Nc                 t    t          j         t          j        t           j                  |                     S r&   )rY   rZ   r   r   re   rf   s    r#   rC   z,Jax2TfTest.test_nested_jit.<locals>.<lambda>   s'    cg&6cgcg&6&6q&9&9:: r"   rE   r   r   s      r#   test_nested_jitzJax2TfTest.test_nested_jit   s6    G::;;EA5!$$$$$r"   c                 `    t           j        d             }d}|                     ||           d S )Nc                     | \  }}||z   S r&   r!   xyrA   rB   s      r#   rK   z0Jax2TfTest.test_nested_jit_pytree.<locals>.f_jax   s    daUlr"   )rE   r   r   )rJ   rK   r   s      r#   test_nested_jit_pytreez!Jax2TfTest.test_nested_jit_pytree   s@    W  W 
B5"%%%%%r"   c                    d }t          j        d          }d }|                      |t          j        |          |                     d }|                      |t          j        |          |                     d S )Nc                    t          j        | d                              t          j        |                    }|j        j                                        D ]*}	 |                    d            dS # t          $ r Y 'w xY wdS )NTrq   _XlaMustCompileF)	r6   r^   r   ru   r   _nodes_by_idvaluesget_attr
ValueError)rU   rA   f_concns       r#   has_xla_must_compilezDJax2TfTest.test_nested_jit_is_compiled.<locals>.has_xla_must_compile   s    {44000FFrG[\]G^G^__f|(//11  !	
**&
'
'
' 	 	 	
(	Us   A55
BBrE   c                     | S r&   r!   rf   s    r#   rC   z8Jax2TfTest.test_nested_jit_is_compiled.<locals>.<lambda>   rD   r"   c                 P     t          j        t          j                  |           S r&   )r   r   rY   rZ   rf   s    r#   rC   z8Jax2TfTest.test_nested_jit_is_compiled.<locals>.<lambda>   s    &cgcg&&q)) r"   )r[   arrayassertFalser   rX   )rJ   r   rA   f_no_jitf_jits        r#   test_nested_jit_is_compiledz&Jax2TfTest.test_nested_jit_is_compiled   s       	A{H))&.*B*BAFFGGG))E))&.*?*?CCDDDDDr"   c                    t          j        d           }|                      |t          j        g                                                     d           |                      |t          j        g                                                     d           t          j        d           }|                      |t          j        g                                                     d           t          j                    fd}t          j        d           }| 	                     | |t          j                                                            t          j        g                     | 	                     | |t          j                                                            t          j        g                     d S )Nc                     | S r&   r!   rf   s    r#   rC   z5Jax2TfTest.test_converts_jax_arrays.<locals>.<lambda>        r"           r{   c                     | | z   S r&   r!   rf   s    r#   rC   z5Jax2TfTest.test_converts_jax_arrays.<locals>.<lambda>   s
    Q r"   r|   c                 T     t          j        d            | g                    S )Nc                     | S r&   r!   rf   s    r#   rC   zGJax2TfTest.test_converts_jax_arrays.<locals>.<lambda>.<locals>.<lambda>   s    a r"   )r   pmap)rp   r   s    r#   rC   z5Jax2TfTest.test_converts_jax_arrays.<locals>.<lambda>   s(    038KK00A388 r"   c                     | S r&   r!   rf   s    r#   rC   z5Jax2TfTest.test_converts_jax_arrays.<locals>.<lambda>   r   r"   )
r6   r^   assertEqualrY   zerosr
   onesr   local_device_countr]   )rJ   rU   
mk_shardedr   s      @r#   test_converts_jax_arraysz#Jax2TfTest.test_converts_jax_arrays   s   ;{{##DTT#)B--((..00"555TT#(2,,''--//444;''DTT#(2,,''--//444 	  A8888J;{{##DZZ	223399;;	1#( ( (ZZ112288::!' ' ' ' 'r"   gpuc           	      ,   d }t          j        t          j        |          dt          j        ddgt           j                  t          j        ddgt           j                  g          }|                     |                                           d S )Nc                     | |z   S r&   r!   r   s     r#   rC   z7Jax2TfTest.test_bfloat16_passed_by_tf.<locals>.<lambda>   
    Q r"   F   rP   input_signature)r6   r^   r   rX   
TensorSpecbfloat16assertIsNotNoner   rJ   rK   rU   s      r#   test_bfloat16_passed_by_tfz%Jax2TfTest.test_bfloat16_passed_by_tf   s    E;v~e,,(*sCj"+(N(N(*sCj"+(N(N(PQ Q QD 	335566666r"   c                     d }t          j        |          }|                      |dd          j        t          j                   d S )Nc                 F    | |z                        t          j                  S r&   astyperY   r   r   s     r#   rC   z:Jax2TfTest.test_bfloat16_returned_by_jax.<locals>.<lambda>   s    !a%55 r"   r{   r|   )r   rX   r   r   r6   r   r   s      r#   test_bfloat16_returned_by_jaxz(Jax2TfTest.test_bfloat16_returned_by_jax   sD    55E>%  DTT"b\\'55555r"   c           	         d fd}t          j        |dt          j        ddgt           j                  t          j        ddgt           j                  g          }|                     |                                           d S )Nc                     | |z   S r&   r!   r   s     r#   rC   z2Jax2TfTest.test_bfloat16_tf_grad.<locals>.<lambda>   r   r"   c                     t          j                    5 }|                    |             t          j                  | |          }d d d            n# 1 swxY w Y   ||                    ||           fS r&   )r6   rv   rw   r   rX   rx   )r   r   ry   resultrK   s       r#   _tf_gradz2Jax2TfTest.test_bfloat16_tf_grad.<locals>._tf_grad   s    ? -

1&&&q!,,- - - - - - - - - - - - - - - T]]61----s   4AAAFr   r   )r6   r^   r   r   r   r   )rJ   r   rU   rK   s      @r#   test_bfloat16_tf_gradz Jax2TfTest.test_bfloat16_tf_grad   s    E. . . . . ;x5(*sCj"+(N(N(*sCj"+(N(N(PQ Q QD 	335566666r"   TF)r   with_functionc                 8   t           j        j        s|                     d           t	          j        dd|          }|                     t          j        |           t          j
        t          j                  }|rt          j        |d          }|                     t          j        |           |t          j        |                               |                     t          j        |           |t          j        |                               d S )Nrequires x64 mode)   l        r   Frq   )r   
enable_x64valueskipTestr[   fullrH   rY   rZ   r   rX   r6   r^   r]   r   constant)rJ   r   r   	big_constf_convs        r#   test_converts_64bitzJax2TfTest.test_converts_64bit   s   
 " )
mm'(((gU333I37I...^CG$$F 4{6U333f 		**r{955668 8 8	**r{955668 8 8 8 8r"   c                    t           j        j        s|                     d           |                     t
          j                            d          j        t
          j	                   |                     t          j        d          j        t          j                   |                      t          j        t          j                  d          j        t
          j                   |                      t          j        t          j        t          j                  d          t          j        dt
          j                            j        t
          j                   |                      t          j        t          j        t          j                  d          t          j        d                    j        t
          j	                   d S )Nr   Q	@Frq   r   )r   r   r   r   r   r6   mathrZ   r   r\   rY   float64r   rX   r^   r   rJ   s    r#   %test_64bit_behavior_enable_x64_readmez0Jax2TfTest.test_64bit_behavior_enable_x64_readme  s_   " )
mm'((( 	RW[[&&,bj999SWT]](#+666 	,V^CG,,T228"*EEEJR[!8!8EJJJ2;W[cecmKnKnKnoouwy  xB  C  C  C 	JR[!8!8EJJJ2;W[K\K\]]cegeopppppr"   c                    t           j        j        r|                     d           |                     t
          j                            d          j        t
          j	                   |                     t          j        d          j        t          j	                   |                     t
          j                            t          j        d                    j        t
          j                   |                     t          j        t          j        d                    j        t          j	                   |                      t          j        t          j                  d          j        t
          j	                   |                      t          j        t          j                  t          j        d                    j        t
          j	                   |                      t          j        t          j        t          j                  d          t          j        dt
          j                            j        t
          j	                   d S )Nzrequires not x64 moder  Frq   r   )r   r   r   r   r   r6   r  rZ   r   r\   rY   r[   r  r   rX   r^   r   r  s    r#   )test_64bit_behavior_not_enable_x64_readmez4Jax2TfTest.test_64bit_behavior_not_enable_x64_readme  s    -
mm+,,, 	RW[[&&,bj999SWT]](#+666RW[[D!1!1228"*EEESWRZ--..4ckBBB 	,V^CG,,T228"*EEE,V^CG,,RZ-=-=>>DbjQQQJR[!8!8EJJJ2;W[cecmKnKnKnoouwy  xB  C  C  C  C  Cr"   c                 \    t          j        d           }|                     |d           d S )Nc                 N    t          j        t          j        |                     S r&   rd   rf   s    r#   rC   z*Jax2TfTest.test_function.<locals>.<lambda>0  r   r"   rE   r   rI   s     r#   test_functionzJax2TfTest.test_function/  r   r"   )r   c                    t          j        t          j        d          }|rt	          j        |d          }t	          j        g           }|                     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 )NFwith_gradientrq   zVGradient explicitly disabled.*The jax2tf-converted function does not support gradients)r   rX   rY   tanr6   r^   r   assertRaisesRegexLookupErrorrv   rw   rx   )rJ   r   rU   rA   ry   rB   _s          r#   test_gradients_disabledz"Jax2TfTest.test_gradients_disabled3  sS   >#'777D 0[///d
A 
		 x
z 
z    ?  

1DGGMM!Q                                                                s6   (C<7B?3C?C	CC	CCCc                    d }t          j        |d          }|rt          j        |d          }t          j        d          }t          j        dt          j        d                    }t          j        d|          }t          j        d	          5 } |||          \  }}	d d d            n# 1 swxY w Y   |                     d
|                    ||                     |                     d|                    ||                     |                     d|                    |	|                     |                     d|                    |	|                     d S )Nc                     | | z  | |z  fS r&   r!   r@   s     r#   rp   z$Jax2TfTest.test_gradients.<locals>.fE  s    UAE\r"   Tr  Frq   r~   r         @
persistent       @r   )	r   rX   r6   r^   r   r   rv   r]   rx   )
rJ   r   rp   rU   default_float_typerA   rB   ry   rz   r   s
             r#   test_gradientszJax2TfTest.test_gradientsC  s     >!4000D 0[///d,R00
Bf1"55666A
B0111A	D	)	)	) TT!QZZda               	q!!4!4555DMM!Q//000DMM!Q//000DMM!Q//00000s   B55B9<B9c                 v   d }t          j        |          }t          j        dt          j                  }t          j                    5 }t          j                    5 } ||          }d d d            n# 1 swxY w Y   |                    ||          }d d d            n# 1 swxY w Y   |                    ||          }|                     t          j        d          |	                                           |                     t          j        d          |	                                           d S )Nc                     | dz  S )N   r!   rf   s    r#   rC   z8Jax2TfTest.test_higher_order_gradients.<locals>.<lambda>V  s
    !q& r"   r~   r   g      H@g      8@)
r   rX   r6   r   r\   rv   rx   r]   r[   r
   )	rJ   rp   rU   rA   t2t1rB   dy_dxd2y_dx2s	            r#   test_higher_order_gradientsz&Jax2TfTest.test_higher_order_gradientsU  sx   A>!D
Crz***A			  b? DGG              
 kk!Qe                              kk%##G
3777
399999s6   B$A7+B$7A;	;B$>A;	?B$$B(+B(c                 B   dt           t          t          f         dt          t          t          f         fd}t	          j        |d          }|rt          j        |d          }t	          j        d          }t          j	        d|	          }t          j	        d
|	          }t          j
        d          5 } |||f          }d d d            n# 1 swxY w Y   |                     d|                    |d         |                     |                     d|                    |d         |                     |                     d
|                    |d         |                     |                     d|                    |d         |                     d S )Nr   r   c                 :    | \  }}t          ||z  ||z            S )N)onetwor   r   s      r#   rp   z+Jax2TfTest.test_gradients_pytree.<locals>.fg  s&    daa!eQ''''r"   Tr  Frq   r~   r   r  r  r  r&  r   r'  )r   r   r   r   r   rX   r6   r^   r   r   rv   r]   rx   )	rJ   r   rp   rU   default_float_dtyperA   rB   ry   uvs	            r#   test_gradients_pytreez Jax2TfTest.test_gradients_pytreee  s   (eE5L! (d3:&6 ( ( ( ( >!4000D 0[///d -b11
B1222A
B1222A	D	)	)	) T4A<<b               	r%y!!<!<===DMM"U)Q77888DMM"U)Q77888DMM"U)Q7788888s   :CCCc           	      "    G d d          t           j                            d fd           dfd}t          j        |           t          j        d          t          j        d                    } ||          } |          }|                     ||                                            t          j
        d	d
          |          }|                     ||           fd}t          j                    }t          j
        |d	t          j        g t          j                  t          j        g t          j                  g          |_        t          j                            t#          j                    t'          t)          |                              }t          j                            ||t          j                            d
                     t          j                            |          dffd}	 |	|          }
|                     ||
            t          j        |          |          }t          j        |j                  t          j        |j                  g}t          j                    5 } || }|                    ||          }d d d            n# 1 swxY w Y   |                     |j        |d                    |                     |j        |d                    d S )Nc                       e Zd Zd ZdS )8Jax2TfTest.test_custom_pytree_readme.<locals>.CustomPairc                 "    || _         || _        d S r&   r   )rJ   r   r   s      r#   __init__zAJax2TfTest.test_custom_pytree_readme.<locals>.CustomPair.__init__|  s    r"   N)__name__
__module____qualname__r0  r!   r"   r#   
CustomPairr.  {  s#            r"   r4  c                 "    | j         | j        fd fS r&   r   rf   s    r#   rC   z6Jax2TfTest.test_custom_pytree_readme.<locals>.<lambda>  s    13*d1C r"   c                      | S r&   r!   )r  abr4  s     r#   rC   z6Jax2TfTest.test_custom_pytree_readme.<locals>.<lambda>  s    ZZ_ r"   pairc                 t    t          j        d          | j        z  t          j        d          | j        z  z   S )Nr|   r}   )r[   r\   r   r   )r8  s    r#   rK   z3Jax2TfTest.test_custom_pytree_readme.<locals>.f_jax  s+    Z^^df$rz"~~'>>>r"   r~   r  FTrO   c                 .      | |                    S r&   r!   )r   r   r4  rU   s     r#   rW   z:Jax2TfTest.test_custom_pytree_readme.<locals>.f_tf_wrapped  s    T**Q""###r"   r   )experimental_custom_gradients)optionsc                 D                         | j        | j                  S r&   )rp   r   r   )r8  restored_models    r#   
restored_fz8Jax2TfTest.test_custom_pytree_readme.<locals>.restored_f  s    dfdf---r"   r   rF   )r   	tree_utilregister_pytree_noder   rX   r[   r\   r]   r
   r6   r^   Moduler   rp   ospathjoinr   get_default_test_tmpdirr   idsaved_modelsaveSaveOptionsloadgradr   r   r   rv   rx   )rJ   rK   rA   res_jaxres_tfres_tf_2rW   my_model	model_dirr?  res_tf_3grad_jaxx_vry   resgrad_tfr4  rU   r>  s                   @@@r#   test_custom_pytree_readmez$Jax2TfTest.test_custom_pytree_readmey  sO          
 M&&z'C'C'D'D'D'DF F F?J ? ? ? ?>%  D
2:b>>2:b>>22AeAhhGT!WWF000Cr{45dCCCAFFH***$ $ $ $ $ $ y{{H\U.0mB
.K.K.0mB
.K.K.MN N NHJ X=??R\\ARARSSIN) " : :Y] : ^ ^  ` ` ` ^((33N. . . . . . . z!}}H***sxq!!H;qsR[--
.C			 (dL#cc3''g( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 	
GAJ///
GAJ/////s   KK	Kc                    d }t          j        |d          }|rt          j        |d          }t          j        d          }t          j        dg|          }t          j        ddg|          }t          j                    }||d	<   ||d
<   t          j        d          5 } ||          }	d d d            n# 1 swxY w Y   | 	                    t          j        dg          |                    |	|                                                     | 	                    t          j        ddg          |                    |	|                                                     d S )Nc                 f    d}|                                  D ]}|t          j        |          z  }|S Nr   )r   rY   sum)inputsoutr   s      r#   rp   z<Jax2TfTest.test_gradients_with_ordered_dict_input.<locals>.f  s7    c}}  !swqzzjr"   Tr  Frq   r~   r   r  rr2   r  r{   )r   rX   r6   r^   r   r   collectionsOrderedDictrv   r]   r[   r   rx   r
   )
rJ   r   rp   rU   r  rA   rB   r\  ry   rz   s
             r#   &test_gradients_with_ordered_dict_inputz1Jax2TfTest.test_gradients_with_ordered_dict_input  s      >!4000D 0[///d,R00
RD 2333A
RH$6777A$&&FF3KF3K	D	)	)	) T
$v,,a               	"a(;(;(A(A(C(CDDD"b**DMM!Q,?,?,E,E,G,GHHHHHs   'B??CCc                    t           j        d             j        fd            }|                     d d                     |                     d t          j                  d                     t          j        d          }|rt          j        |d	          }|                     d |d                     t          j	        dt          j
        d          
          }t          j                    5 }|                    |            ||          }ddd           n# 1 swxY w Y   |                     d|           |                     d|                    ||                     dS )z0Check gradients, for a function with custom JVP.c                     | | z  S r&   r!   rf   s    r#   rp   z4Jax2TfTest.test_gradients_with_custom_jvp.<locals>.f      Ulr"   c                 B    | \  }|\  } |          }d|z  |z  }||fS Nr}   r!   primalstangentsrA   x_dot
primal_outtangent_outrp   s         r#   f_jvpz8Jax2TfTest.test_gradients_with_custom_jvp.<locals>.f_jvp  s8     bafe1Q44jFUNk$$r"         0@r~         (@Tr  Frq   r   N)r   
custom_jvpdefjvpr]   rL  r   rX   r6   r^   r   r   rv   rw   rx   )rJ   r   rm  rU   rA   ry   rB   rp   s          @r#   test_gradients_with_custom_jvpz)Jax2TfTest.test_gradients_with_custom_jvp  s    	^  ^ X% % % % X% 	2'''!R111>!4000D 0[///db***
Bf1"55666A			 d
jjmmm
$q''a               	###q!!4!455555s   !D..D25D2c                    t           j        d             fd}d }                    ||           |                     d d                     |                     d t          j                  d                     t          j        d          }|rt          j        |d	
          }|                     d |d                     t          j	        dt          j
        d                    }t          j                    5 }|                    |            ||          }ddd           n# 1 swxY w Y   |                     d|           |                     d|                    ||                     dS )z0Check gradients, for a function with custom VJP.c                     | | z  S r&   r!   rf   s    r#   rp   z4Jax2TfTest.test_gradients_with_custom_vjp.<locals>.f  rd  r"   c                 $     |           d| z  fS rf  r!   rA   rp   s    r#   f_fwdz8Jax2TfTest.test_gradients_with_custom_vjp.<locals>.f_fwd      QqTT26\r"   c                     | |z  fS r&   r!   residualct_bs     r#   f_bwdz8Jax2TfTest.test_gradients_with_custom_vjp.<locals>.f_bwd      _r"   rn  r~   ro  Tr  Frq   r   N)r   
custom_vjpdefvjpr]   rL  r   rX   r6   r^   r   r   rv   rw   rx   )	rJ   r   rw  r}  rU   rA   ry   rB   rp   s	           @r#   test_gradients_with_custom_vjpz)Jax2TfTest.test_gradients_with_custom_vjp  s    	^  ^       HHUE2'''!R111>!4000D 0[///db***
Bf1"55666A			 d
jjmmm
$q''a               	###q!!4!455555s   !D::D>D>c                 p    d fd}d}t          j        |          }|                     ||           d S )Nc                     d| z  |z   S N   r!   r@   s     r#   rp   z<Jax2TfTest.test_gradient_with_float0_intermediate.<locals>.f      UQYr"   c                 T    d d|                      d          z  | dz            z  S )Nr|   r  int32r~   )r   rv  s    r#   r   z<Jax2TfTest.test_gradient_with_float0_intermediate.<locals>.g  s/    !!A)))1r62222r"   r|   )r   rL  rH   )rJ   r   rA   grad_grp   s       @r#   &test_gradient_with_float0_intermediatez1Jax2TfTest.test_gradient_with_float0_intermediate  s[      3 3 3 3 3 	AXa[[F61%%%%%r"   c                    d fd}t          j        |d          }d} ||          } t          j        |          |          }|                     |j        t          j                   |                     t          j
        t          j        |          t          j                  |                                           d}t          j        |t          j                  } ||          } t          j        |          |          }|                     |j        t          j                   |                     t          j
        t          j        |          t          j                  |                                           d S )Nc                     d| z  |z   S r  r!   r@   s     r#   rp   z6Jax2TfTest.test_gradient_with_float0_result.<locals>.f  r  r"   c                     t          j        d d| z  dt          j        | t          j        d                    z            z            S )Nr|   r  r~   r\   )rY   r[  r   r   rv  s    r#   r   z6Jax2TfTest.test_gradient_with_float0_result.<locals>.g  sC    WR!!AE2	!SYy5I5I(J(J#JKKKLLLr"   T	allow_intr  )r     r   )r   rL  r   rX   r   r   r   float0r]   rY   r   r[   shapebool_r
   r   r  )rJ   r   r  rA   d_dx_jaxd_dx_tfr  rp   s          @r#    test_gradient_with_float0_resultz+Jax2TfTest.test_gradient_with_float0_result  sl     M M M M M Xa4(((F	AvayyH$fnV$$Q''GX^V]333	"(8"4"4bh??) ) ) E
RX&&&AvayyH$fnV$$Q''GX^V]333	"(8"4"4bh??) ) ) ) )r"   c                 ^	   d }d dD             }t          j        d          5 } || }d d d            n# 1 swxY w Y   |                    ||          }|                     |d                                         t          j        d                     |                     |d                    |                     |d	                                         t          j        d
                     |                     |d                    |                    ||t           j        j	                  }|                     |d                                         t          j        d                     |                     |d                                         t          j        d                     |                     |d	                                         t          j        d
                     |                     |d                                         t          j
        d                     t          j        d          5 }t          j        |d          }|rt          j        |d          } || }d d d            n# 1 swxY w Y   |                    ||          }	|                     |	d                                         t          j        d                     |                     |	d                                         t          j        d                     |                     |	d	                                         t          j        d
                     |                     |	d                    |                    ||t           j        j	                  }	|                     |	d                                         t          j        d                     |                     |	d                                         t          j        d                     |                     |	d	                                         t          j        d
                     |                     |	d                                         t          j
        d                     d S )Nc                     | dz  |dz  z   S )Nr   r|   r!   )x0x1x2x3s       r#   fnz<Jax2TfTest.test_gradients_unused_argument_readme.<locals>.fn*  s    "WrBwr"   c                 6    g | ]}t          j        |          S r!   )r6   r   )r1   rA   s     r#   rn   zDJax2TfTest.test_gradients_unused_argument_readme.<locals>.<listcomp>-  s     	6	6	6Q"+a..	6	6	6r"   )g      $@g      &@ro     Tr  r   r   rF   r  r|   r  unconnected_gradientsr  Frq   )r6   rv   rx   r]   r
   r[   r\   assertIsNoneUnconnectedGradientsZEROr  r   rX   r^   )
rJ   r   r  ro   ry   rU  g_tf_nativeg_tf_native_0conv_fng_jax2tfs
             r#   %test_gradients_unused_argument_readmez0Jax2TfTest.test_gradients_unused_argument_readme'  s[      
7	6"5	6	6	6B	D	)	)	) TBGc               --R((KA,,..
2???k!n%%%A,,..
2???k!n%%%MM#r8:8O8T " V VMa(..00"*R..AAAa(..00"*R..AAAa(..00"*R..AAAa(..00"(1++>>> 
D	)	)	) Tr666g	 8+g777GRLc	               }}S"%%H 	))++RZ^^<<<))++RZ^^<<<))++RZ^^<<<hqk"""}}S"575L5Q  S SH))++RZ^^<<<))++RZ^^<<<))++RZ^^<<<))++RXa[[99999s   7;;
4J

JJc                     t          t          j        ddgt          j                  t          j        d          t          j        g dt          j                  t          j        d          t          j        d          t          j        g dt          j                  t          j        g d	t          j                  t          j        g d
t          j                  t          j        ddgddggt          j                  	  	        }d }|f} || }t          j
        |||          \  }} || \  } fd}	t          j        ||t          j        j                  \  }
\  } |	||ddddddd	  	         t          j        ||t          j        j                  \  }
\  } |	||d d d d d            t!          j        |          }|rt          j        |d          }t          j        ||          \  }
\  } |	||dd           t          j        ||t          j        j                  \  }
\  } |	||d d d d d d            t!          j        |          } || \  } |	||dddddd           d S )NrE   r   r   r{   )g?g@gffffff
@r      )rF   r  r  )TFFT)TFFTFTF)	
float_usedfloat_passthroughfloat_unusedint_usedint_passthrough
int_unused	bool_usedbool_passthroughbool_unusedc                     t          | d| d         z  d| d         z  | d         | d         k              }|d= |d= |d	= |S )
Nr|   r  r  r  r  )r  r  r  r  r  r  r(  )staterU  s     r#   jax_fz5Jax2TfTest.test_gradients_int_argument.<locals>.jax_fd  sf    |!44eJ//!+.%2DDG G Gc n

l

m
jr"   c                    t          |                                           }t          |                                          }                    ||           |                                 D ]]\  }}||         }||v r||         dk    rt	          j        |          }nh||         dk    r3t	          j        t	          j        |          t          j                  }n)||         dk    rt	          j	        |          }n||         }|
                    ||           n                    ||           t          |t          j                  r|                                n|}t          |t          j                  r|                                n|}	                     |||           G#  t#          d|             xY wd S )Nr  	ZERO_BOOLr   ONEmsg)err_msgz
Failed at )setkeysr   r   r[   
zeros_liker   r  r  	ones_liker  r   
isinstancer6   r   r
   r]   print)	whatexpectedexpected_overrides	what_keysexpected_keysr   werJ   s	           r#   compare_with_overrideszFJax2TfTest.test_gradients_int_argument.<locals>.compare_with_overridest  s   diikk""i(--//**m
y-000**,,  $!QQK""""f,,a  AA!!$33!BH555AA!!$--QAA"1%A9


A1

%
%
%
%


qa

(
(
(#Ary118AGGIIIq#Ary118AGGIIIq	


aA

.
.
.
.	
 Q  
!
!
!
- s   F55G
r  r  r  )	r  r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r  rq   )r  r  r  r  )r  r  r  r  r  r  r  r  r  )r  r  r  r  r  r  r  r  )r   r[   r   r\   float16int16int8uint32r  r   TransformJaxVJPComputeTfValueAndGradr6   r  r  NONEr   rX   r^   )rJ   r   r  r  argsrM  vjp_jax_funargs_vjprS  r  r  	grad_tf_0grad_tf_Nonef_tf_jaxgrad_tf_jax_0grad_tf_jax_Nonetf_vjp_jax_fungrad_tf_vjp_jaxs   `                 r#   test_gradients_int_argumentz&Jax2TfTest.test_gradients_int_argumentT  s(   
 8S#Jbj999*R..XoooRZ@@@!

8IIIRY777(555RXFFF"C"C"C28TTTHtUmeT];28LLL
 
 
E   8DeTlG(8gNNKX&IH    P #8t2+B+GI I IOA|		$,(.%+eQW$*Ef	V V V V &;t 5:< < <A $-(,t%)t= = = =
 ~e$$H 8X777h&<XtLLA$-+1FL L L L *?$ 5:< < <A  0$-$($4'+tdT T T T ^K00N%~x0O$-,7'2k+6;$/1 1 1 1 1 1r"   c           	      |   t          j        dt           j                  }d }t           t	          j        |d          |                     t           t          j        t	          j        |d                    |                     d }t          j	        |          }t          j
        d          5 }t          |                     ||          |                     t          |                     ||          |t          j        j                             d d d            d S # 1 swxY w Y   d S )	Nr  r   c                 F    |                      t          j                  dz  S Nr|   )r   r[   r\   rf   s    r#   rK   z2Jax2TfTest.test_readme_gradient_int.<locals>.f_jax  s    XXbj!!B&&r"   Tr  c                 F    t          j        | t           j                  dz  S r  )r6   castr\   rf   s    r#   rU   z1Jax2TfTest.test_readme_gradient_int.<locals>.f_tf  s    WQ
##b((r"   r  r  )r[   r   r  r  r   rL  r   rX   r6   r   rv   rx   r  r  )rJ   rA   rK   rU   xvry   s         r#   test_readme_gradient_intz#Jax2TfTest.test_readme_gradient_int  s   
"(###A' ' ' 

)#(5D
)
)
)!
,
,--- 

9&.%4888
9
9!
<
<===) ) ) 
QB	D	)	)	) OTDMM$$r((B''(((DMM$$r((B020G0L  N N O O OO O O O O O O O O O O O O O O O O Os   :A*D11D58D5c                     |                      t          d          5  t          j        d           d d d            d S # 1 swxY w Y   d S )NzExpected a callable valuer  r  	TypeErrorr   rX   r  s    r#   (test_convert_argument_non_callable_errorz3Jax2TfTest.test_convert_argument_non_callable_error  s    				+F	G	G  nR                 s   >AAc                     |                      t          d          5   t          j        d           d            d d d            d S # 1 swxY w Y   d S )Nz!Argument.*is not a valid JAX typec                     | S r&   r!   rf   s    r#   rC   zCJax2TfTest.test_convert_argument_non_tensor_error.<locals>.<lambda>  s    q r"   c                     | S r&   r!   rB   s    r#   rC   zCJax2TfTest.test_convert_argument_non_tensor_error.<locals>.<lambda>  s    A r"   r  r  s    r#   &test_convert_argument_non_tensor_errorz1Jax2TfTest.test_convert_argument_non_tensor_error  s    				 C
E 
E / /!fn[[!!++.../ / / / / / / / / / / / / / / / / /s    A		AAc                      t          j        t          j                  d          } t          j        t          j                  |           d S Nr{   )r   rX   rY   rZ   re   rJ   rA   s     r#   test_argument_eager_tensorz%Jax2TfTest.test_argument_eager_tensor  s?    sw##AFN37Ar"   c                    t          j                    }t          j                    t          j                    g|_        t          j                    t          j                    f|_        t          j                    t          j                    d|_        |                     t          |j                  t                     |                     t          |j                  t                     |                     t          |j                  t                     | 
                    t          j                            |j                  d           | 
                    t          j                            |j                  d           | 
                    t          j                            |j                  d           d S )Nr   r  )r6   rB  r   r   cassertNotEqualtypelistr   r   	assertLenr   r@  tree_leaves)rJ   ms     r#   test_checkpoint_wrapper_typesz(Jax2TfTest.test_checkpoint_wrapper_types  s*   
	A9;;	
$AC9;;	
$AC	")++
.
.ACQS		4(((QS		5)))QS		4(((NN3=,,QS111555NN3=,,QS111555NN3=,,QS11155555r"   c                     G d dt           j                  } |            }t          j        ddg          }t          j                    5 }t          j         ||                    }d d d            n# 1 swxY w Y   |                                }|                    ||          }t          ||          D ],\  }}	|                     |j	        |	j	        |j
                   -d S )Nc                       e Zd Zd Zd ZdS ).Jax2TfTest.test_issue_10586.<locals>.JaxModulec                     t          j        t          j        ddg          d          t          j        t          j        dg          d          d| _        d S )N  
   r  rT   r   )r  r   )r6   r   r   _paramsr  s    r#   r0  z7Jax2TfTest.test_issue_10586.<locals>.JaxModule.__init__  sR    [#r););#FFF["SAAAC Cr"   c                 J     t          j        d           | j        |          S )Nc                 *    || d         z  | d         z   S )Nr  r   r!   )prA   s     r#   rC   zIJax2TfTest.test_issue_10586.<locals>.JaxModule.__call__.<locals>.<lambda>   s    1qv:#+> r"   )r   rX   r  r  s     r#   __call__z7Jax2TfTest.test_issue_10586.<locals>.JaxModule.__call__  s$    ?v~>>??aPPPr"   N)r1  r2  r3  r0  r  r!   r"   r#   	JaxModuler    s:        C C CQ Q Q Q Qr"   r  rF   r  r  )r6   rB  r   rv   
reduce_sumwatched_variablesrx   zipr   r  rT   )
rJ   r  netimagesry   lossparamsgradsvarrL  s
             r#   test_issue_10586zJax2TfTest.test_issue_10586  s<   Q Q Q Q QBI Q Q Q )++CWaXF			 (d]33v;;''d( ( ( ( ( ( ( ( ( ( ( ( ( ( (##%%FMM$''E'' < <	T
sy$*#(;;;;< <s   A66A:=A:c                 n   t           j        d             j        fd            }d}|                     |d           |                     |d           |                     |d           |                     |d           |                     |d           |                     |d	           dS )
z&Conversion of function with custom JVPc                     | | z  S r&   r!   rf   s    r#   rp   z%Jax2TfTest.test_custom_jvp.<locals>.f  rd  r"   c                 B    | \  }|\  } |          }d|z  |z  }||fS rf  r!   rg  s         r#   rm  z)Jax2TfTest.test_custom_jvp.<locals>.f_jvp  s6    bafe1Q44jFUNk$$r"   rE   Njvpvmapjvp_vmaprL  	grad_vmap)r   rp  rq  TransformConvertAndCompare)rJ   rm  argrp   s      @r#   test_custom_jvpzJax2TfTest.test_custom_jvp  s     	^  ^ X% % % % X% C##AsD111##AsE222##AsF333##AsJ777##AsF333##AsK88888r"   c                 *   t           j        d             fd}d }                    ||           d}|                     |d           |                     |d           |                     |d           |                     |d           dS )	z&Conversion of function with custom VJPc                     | | z  S r&   r!   rf   s    r#   rp   z%Jax2TfTest.test_custom_vjp.<locals>.f&  rd  r"   c                 $     |           d| z  fS rf  r!   rv  s    r#   rw  z)Jax2TfTest.test_custom_vjp.<locals>.f_fwd+  rx  r"   c                     | |z  fS r&   r!   rz  s     r#   r}  z)Jax2TfTest.test_custom_vjp.<locals>.f_bwd/  r~  r"   rE   Nr  rL  r  )r   r  r  r  )rJ   rw  r}  r  rp   s       @r#   test_custom_vjpzJax2TfTest.test_custom_vjp#  s     	^  ^       HHUE
C##AsD111##AsF333##AsF333##AsK88888r"   c                 R   d }t          j        |          }t          j        d          }t	          j        t          j        |                    }|                     ||          }t          j
        j        r|                     |d           d S |                     |d           d S )Nc                 ~    t          j        |           }t          j        |          }t          j        |          }|S r&   rY   rZ   )r  r  r  x4s       r#   rp   z Jax2TfTest.test_remat.<locals>.f:  s.    72;;b72;;b72;;bir"   r}   zopt-barrierz8transpose/jax2tf_f_/jvp/checkpoint/cond/branch_1_fun/Sin)r   
checkpointr[   r   r   rX   r   rL  TfToHlor   remat_opt_barrierr   assertRegex)rJ   rp   remat_fr  rU   f_tf_hlos         r#   
test_rematzJax2TfTest.test_remat9  s      
 &q))G (2,,C>#(7++,,D||D#&&H% T
x00000
xRT T T T Tr"   c                 l    d }d}|                      ||d            |                      ||d           d S )Nc                 P    d| z  t           j        fd            } |            S )Nr  c                       S r&   r!   r  s   r#   r   z4Jax2TfTest.test_remat_free_var.<locals>.f.<locals>.gP  s    r"   )r   r%  )rA   r   rB   s     @r#   rp   z)Jax2TfTest.test_remat_free_var.<locals>.fM  s@    
a%a      QSSjr"   r}   rL  )r  )rJ   rp   r  s      r#   test_remat_free_varzJax2TfTest.test_remat_free_varL  sN       C##AsD111##AsF33333r"   c                 F    d } t          j        |          d           d S )Nc                 P    t          j        t          j        |           d          S )NrZ   )r   checkpoint_namerY   rZ   rf   s    r#   rK   z.Jax2TfTest.test_checkpoint_name.<locals>.f_jaxZ  s    *371::u===r"   r{   r   rX   rI   s     r#   test_checkpoint_namezJax2TfTest.test_checkpoint_nameY  s1    > > >FN5"r"   c                 F    d } t          j        |          d           d S )Nc                 H      fd} t          j        |          d          S )Nc                     | z   S r&   r!   rB   rA   s    r#   inner1zOJax2TfTest.test_convert_of_nested_independent_jit.<locals>.func.<locals>.inner1`      1ur"   r{   r   r   rA   r9  s   ` r#   funcz?Jax2TfTest.test_convert_of_nested_independent_jit.<locals>.func_  s6         SWV__R   r"   r|   r3  rJ   r=  s     r#   &test_convert_of_nested_independent_jitz1Jax2TfTest.test_convert_of_nested_independent_jit^  s3    ! ! ! FN4r"   c                 F    d } t          j        |          d           d S )Nc                 H      fd} t          j        |                     S )Nc                     | z   S r&   r!   r8  s    r#   r9  zMJax2TfTest.test_convert_of_nested_dependent_jit.<locals>.func.<locals>.inner1i  r:  r"   r;  r<  s   ` r#   r=  z=Jax2TfTest.test_convert_of_nested_dependent_jit.<locals>.funch  s6         SWV__Qr"   r|   r3  r>  s     r#   $test_convert_of_nested_dependent_jitz/Jax2TfTest.test_convert_of_nested_dependent_jitg  s3          FN4r"   c                    d }t          j        d          t          j        dt           j                  }} t	          j        t          j        |d                    ||          }|                      ||d           |           d S )Nc                 0    | t          j        d          z  S r  r[   r\   rA   y_unuseds     r#   rK   z)Jax2TfTest.test_jit_unused.<locals>.f_jaxq      Br"   r  r  r   Fkeep_unused)	r[   r\   aranger  r   rX   r   r   r]   )rJ   rK   rA   rH  rN  s        r#   test_jit_unusedzJax2TfTest.test_jit_unusedp  s         *R..")ARX">">">xA>V^CGEu===>>q(KKFa/////r"   c              #   8   K   | ]}t          ||           V  dS ))testcase_namemodeNr(  )r1   rP  s     r#   r4   zJax2TfTest.<genexpr>w  sC       "2 "2
 D)))"2 "2 "2 "2 "2 "2r"   )eagerr   compiledrQ  c                 r   d }t          j        d          t          j        dt           j                  }} |||          }t	          j        t          j        |d                    t          j	        |          t          j	        |          }}fd}|dk    rt          j
        |d	          }n|d
k    rt          j
        |dd          } |||          \  }	}
}|                     ||	           |                     t          j        d          |
           |                     |           d S )Nc                 0    | t          j        d          z  S r  rF  rG  s     r#   rK   z.Jax2TfTest.test_jit_unused_grad.<locals>.f_jax{  rI  r"   r  r  r   FrJ  c                    t          j                    5 }|                    |            |                    |            | |          }|                    || |f          \  }}d d d            n# 1 swxY w Y   |||fS r&   r6   rv   rw   rx   )rA   rH  ry   rN  	grad_tf_x	grad_tf_yrU   s         r#   rV  z0Jax2TfTest.test_jit_unused_grad.<locals>.grad_tf  s    ? D

1

8a""#}}Va]CC	9	D D D D D D D D D D D D D D D
 Y	))s   AA33A7:A7r   rq   rR  TrO   r|   )r[   r\   rL  r  r   rX   r   r   r6   r   r^   r]   r  )rJ   rP  rK   rA   rH  rM  x_tfy_unused_tfrV  rN  rW  rX  rU   s               @r#   test_jit_unused_gradzJax2TfTest.test_jit_unused_gradw  sA         *R..")ARX">">">xAeAx  G>#'%U;;;<<DAH(=(=+D* * * * * wGu555gg			Gu$GGGg#*74#=#= FIy(((
2	222i     r"   c                     d }|                      t          d          5   t          j        |          t	          j        dt          j                             d d d            d S # 1 swxY w Y   d S )Nc                 P     t          j        t          j                  |           S r&   r   rX   rY   rZ   r  s    r#   outerz3Jax2TfTest.test_nested_convert_error.<locals>.outer      $V^CG$$Q'''r"   4convert must be used outside all JAX transformationsr  r   )r  r   r   rX   r[   r   r\   rJ   r_  s     r#   test_nested_convert_errorz$Jax2TfTest.test_nested_convert_error  s    ( ( (			J
L 
L = =fnUBGD
;;;<<<= = = = = = = = = = = = = = = = = =s   <A((A,/A,c                     d }|                      t          d          5   t          j        |          d           ddd           dS # 1 swxY w Y   dS )z,The inner convert takes non-tracer argumentsc                 Z     t          j        t          j                  d          }| |z   S r  r^  rB   sin_1s     r#   r_  z>Jax2TfTest.test_nested_convert_error_non_tracer.<locals>.outer  '    %fnSW%%b))eYr"   ra  r|   N)r  r   r   rX   rc  s     r#   $test_nested_convert_error_non_tracerz/Jax2TfTest.test_nested_convert_error_non_tracer  s       
		J
L 
L    fnUB                                   s   A

AA)r   r  rL  r  )	transformr  c                     d }|                      t          d          5  |                     |t          j        d          |           d d d            d S # 1 swxY w Y   d S )Nc                 P     t          j        t          j                  |           S r&   r^  r  s    r#   r_  z<Jax2TfTest.test_convert_under_transform_error.<locals>.outer  r`  r"   ra  rb  r  r   r  r[   r   rJ   rk  r_  s      r#   "test_convert_under_transform_errorz-Jax2TfTest.test_convert_under_transform_error  s    ( ( ( 
		J
L 
L G G
%%eRWT]]IFFFG G G G G G G G G G G G G G G G G G   *AAAc                     d }|                      t          d          5  |                     |t          j        d          |           d d d            d S # 1 swxY w Y   d S )Nc                 Z     t          j        t          j                  d          }| |z   S r  r^  rg  s     r#   r_  zGJax2TfTest.test_convert_under_transform_error_non_tracer.<locals>.outer  ri  r"   ra  rb  rn  ro  s      r#   -test_convert_under_transform_error_non_tracerz8Jax2TfTest.test_convert_under_transform_error_non_tracer  s       
		J
L 
L G G
%%eRWT]]IFFFG G G G G G G G G G G G G G G G G Grq  c                 T   d }t           j        j        r+|                     d|                     |                     d S t          t          j        |d                                          j	        
                                          }d|vr|                     d|           d S d S )Nc                  z    t           j        d             fd}  t          j        | d          d          }|S )Nc                     | | z  S r&   r!   rf   s    r#   my_test_function_jaxzHJax2TfTest.test_name_scope.<locals>.run_tf.<locals>.my_test_function_jax  s    1ur"   c                 >     t          j        |                     S r&   r#  )rA   rx  s    r#   
caller_jaxz>Jax2TfTest.test_name_scope.<locals>.run_tf.<locals>.caller_jax  s    ##CGAJJ///r"   Fr  r|   )r   
named_callr   rX   )rz  r]  rx  s     @r#   run_tfz*Jax2TfTest.test_name_scope.<locals>.run_tf  s\    
~  ~0 0 0 0 0 <FN:U;;;B??cjr"   zmy_test_function_jax/mulFrq   z'my_test_function_jax/pjit_multiply_/Mulz&my_test_function_jax/jit_multiply_/Mul)r   #jax2tf_default_native_serializationr   assertInr&  r   r6   r^   r   r   as_graph_def)rJ   r|  	graph_defs      r#   test_name_scopezJax2TfTest.test_name_scope  s    	 	 	 17 K
mm.V0D0DEEEEEbk&E:::PPRRXeegghhi	2)	C	C>	JJJJJ 
D	Cr"   c                    d }d }t          j        |          }|                      |d                                          t	          j        d                     t          j        |          }|                      |t          j        g d                    t          j        g dt          j                             d S )Nc                 N    |                      t          j                  } | dz  } | S r  r   rf   s    r#   jax_fn_scalarz8Jax2TfTest.test_bfloat16_constant.<locals>.jax_fn_scalar  s#    
((3<
 
 a2gahr"   c                     |                      t          j                  } | t          j        g dt          j                  z  } | S )N)g      ?g      @g      @)r   rY   r   r[   r   rf   s    r#   jax_fn_arrayz7Jax2TfTest.test_bfloat16_constant.<locals>.jax_fn_array  s6    
((3<
 
 a28OOOS\222ahr"         ?      @)r  r  r   )g      @r   g     1@)r   rX   r]   r
   rY   r   r[   r   )rJ   r  r  tf_fn_scalartf_fn_arrays        r#   test_bfloat16_constantz!Jax2TfTest.test_bfloat16_constant  s      
  
 >-00LU++1133S\%5H5HIII...KBHYYY''(("(???36<+A +AB B B B Br"   c                 R   t           j        j        rt          j        d          t
          j                            d                              t
          j	                  fd}| 
                    t          j        |                    }|                     |d           d S )N?shared constants tests not interesting for native serialization   sizec                      | z   z   z   z   S r&   r!   rA   consts    r#   rp   z+Jax2TfTest.test_shared_constants.<locals>.f  s    Y&..r"   rF   )r   r}  r   unittestSkipTestr[   randomuniformr   r\   FindLargeTfConstantsr   rX   r  )rJ   rp   f_tf_constsr  s      @r#   test_shared_constantsz Jax2TfTest.test_shared_constants  s     17 a_```I3''..rz::E/ / / / / ++FN1,=,=uEEKNN;"""""r"   c                    t           j        j        rt          j        d          d}t
          j                            |                              t
          j	                  t          j
        |ft
          j	                  }fdfd}|                     t          j                  ||          }|                     t          j        |          ||          }|                     |t          |                     d S )Nr  r   r  r   c                 X    t          j        | d         dk    fdfd|           z   S )Nr   r   c                     | z   S r&   r!   r  s    r#   rC   zIJax2TfTest.test_shared_constants_under_cond.<locals>.f1.<locals>.<lambda>  s    AI r"   c                     | z  S r&   r!   r  s    r#   rC   zIJax2TfTest.test_shared_constants_under_cond.<locals>.f1.<locals>.<lambda>  s    U r"   r	   condr  s    r#   f1z7Jax2TfTest.test_shared_constants_under_cond.<locals>.f1  s;    Xadbj"5"5"5"57J7J7J7JANNQVVVr"   c                       |           z   S r&   r!   )rA   r  r  s    r#   f2z7Jax2TfTest.test_shared_constants_under_cond.<locals>.f2  s    RUUU]r"   at_leastr   r}  r   r  r  r[   r  r  r   r\   r   r  r   rX   r  len)rJ   
const_sizerA   r  	f1_consts	f2_constsr  r  s         @@r#    test_shared_constants_under_condz+Jax2TfTest.test_shared_constants_under_cond  s    17 a_```JI:..55bjAAE
RZ000AW W W W W     ))&.*<*<a*)UUI))&.*<*<a*)UUINN9c)nn-----r"   c                    t           j        j        rt          j        d          dt
          j                                                          t
          j	                  t          j
        dft
          j	                  }fdfd}|                     t          j                  |          }|                     t          j        |          |          }|                     |t          |                     d S )	Nr  r   r     r   c                 ~    t          j        fdt          j        ft          j                  |           \  }}|S )Nc                     | |z   z   d fS r&   r!   )carryrA   r  s     r#   rC   zIJax2TfTest.test_shared_constants_under_scan.<locals>.f1.<locals>.<lambda>  s    %!)e*;T)B r"   r   )r	   scanrY   r   r[   r\   )ro   rU  r  r  r  s      r#   r  z7Jax2TfTest.test_shared_constants_under_scan.<locals>.f1  sC    xBBBB	:-rzBBBBH Hfc1jr"   c                       |           z   S r&   r!   )ro   r  r  s    r#   r  z7Jax2TfTest.test_shared_constants_under_scan.<locals>.f2  s    RVVe^r"   r  r  )rJ   ro   r  r  r  r  r  r  s        @@@r#    test_shared_constants_under_scanz+Jax2TfTest.test_shared_constants_under_scan  s   17 a_```JI:..55bjAAE	!Z
	3	3	3B     
      ))&.*<*<b:)VVI))&.*<*<b:)VVINN9c)nn-----r"   c                    t           j        j        rt          j        d          t
          j                            d                              t
          j	                  t          j        fd            fd}|                     t          j        |                    }|                     |d           d S )Nr  )   r  r  c                     | z  S r&   r!   r  s    r#   g_jitz9Jax2TfTest.test_shared_constants_under_jit.<locals>.g_jit  s    Yr"   c                 &     |           z   z   S r&   r!   )rA   r  r  s    r#   rp   z5Jax2TfTest.test_shared_constants_under_jit.<locals>.f  s    U1XX%%r"   rF   )r   r}  r   r  r  r[   r  r  r   r\   r   r   r  r   rX   r  )rJ   rp   f_tf_graph_constsr  r  s      @@r#   test_shared_constants_under_jitz*Jax2TfTest.test_shared_constants_under_jit  s    17 a_```I8,,33BJ??EW    W& & & & & & 11&.2C2CUKKNN$a(((((r"   c                    t           j        j        rt          j        d          t
          j                            d          fdfd}t          j	        g dt          j
                  }t          j        t          j        |          d          } ||          }|                     | ||                     d S )	Nr  *   c                 p    | t           j                            | j        ddt          j                  z   S )Nr   d   )r  minvalmaxvalr   )r   r  randintr  r[   r  )rA   keys    r#   f_nested_jaxz>Jax2TfTest.test_shared_constants_randint.<locals>.f_nested_jax&  s>     ##Cqw+,S $ J J J Jr"   c                     t          j         d         dk     fd fd          }|t          j        fd           z  }| t          j        fd          t          j          g                    z  }|            z  }|S )Nr   r  c                                  S r&   r!   r  rA   s   r#   rC   zIJax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>-  s    Q r"   c                                  S r&   r!   r  s   r#   rC   zIJax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>-  s    a r"   c                 .     |           d         dk    S )Nr   r!   rA   r  s    r#   rC   zIJax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>.  s    ll1ooa&8A&= r"   c                 V     t          j         d         dk     fd fd          S )Nr   r  c                                  S r&   r!   r  s   r#   rC   z[Jax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>.<locals>.<lambda>1      a r"   c                                  S r&   r!   r  s   r#   rC   z[Jax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>.<locals>.<lambda>2  r  r"   r  r  s   `r#   rC   zIJax2TfTest.test_shared_constants_randint.<locals>.f_jax.<locals>.<lambda>0  s>    1)@)@)@)@)@)@)@)@)@)@!B !B r"   )r	   r  
while_loopr   r  rY   stack)rA   rU  r  s   ` r#   rK   z7Jax2TfTest.test_shared_constants_randint.<locals>.f_jax,  s    HQqTQY 7 7 7 7 79P9P9P9P9PQQc	S^====|QOOOc	 CSX B B B B C CCF9aQRVCTCTV V Vc 
\\!__cjr"   ){   i  i  r   Frq   )r   r}  r   r  r  r   r  PRNGKeyr[   r   r  r6   r^   r   rX   r]   )rJ   rK   rA   rU   rN  r  r  s        @@r#   test_shared_constants_randintz(Jax2TfTest.test_shared_constants_randint  s     17 a_```
*

R
 
 CJ J J J J     	111A;v~e,,>>>DT!WWFa)))))r"   c                 2   t          j        t          j                  t	          j        fd          }|                      |t          j        dt          j	                            
                                t          j	        d                     d S )Nc                      | d          S r  r!   )rA   muls    r#   rC   z,Jax2TfTest.test_weak_types.<locals>.<lambda>A  s    SSBZZ r"   r  r  )r   r   rY   multiplyr   rX   r]   r6   r   r   r
   )rJ   tf_fnr  s     @r#   test_weak_typeszJax2TfTest.test_weak_types=  s    
'#,

C N////00Ebk%==>>DDFFU++- - - - -r"   c                    d }t          j        |          }|rt          j        |d          }|                      |t          j        dt
          j                            t          j        dt
          j                             d S )Nc                 *    t          j        |           S r&   rY   r[  rf   s    r#   rK   z%Jax2TfTest.test_kwargs.<locals>.f_jaxH      WQZZr"   Frq   r  r   rf   r!   )r   rX   r6   r^   r]   r[   r   r\   )rJ   r   rK   rU   s       r#   test_kwargszJax2TfTest.test_kwargsE  s      >%  D 0[///d
dRXarz***+++hr$$$& & & & &r"   c                    t          j        dt           j                  t          j        dt           j                  f}ddd}t          j        |          }|rt          j        |d          }t
          j                            t
          j	        |          }t          j
                    5 } ||          }d d d            n# 1 swxY w Y   |                    ||          }|                     t          j        |d	         d
          t          j        |d         d          f|d	                                         |d                                         f           d S )Nr  r   r  )r{   r|   rf   c                 r    t          j        | d                   dt          j        | d                   z  z   S )Nr   r|   rF   r  rf   s    r#   rK   z*Jax2TfTest.test_grad_kwargs.<locals>.f_jaxV  s*    WQqT]]R#'!A$--///r"   Frq   r   r{   )
fill_valuerF   r|   )r[   r   r\   r   rX   r6   r^   rs   rt   r   rv   rx   r]   	full_liker
   )	rJ   r   rA   rK   rU   r  ry   rU  rV  s	            r#   test_grad_kwargszJax2TfTest.test_grad_kwargsQ  s    
!2:	&	&	&	!2:	&	&	&	(A 0 0 0 0 0>%  D 0[///d			r{A	.	.B			 dD2JJJc              mmC$$Gadr:::adr:::< ))++WQZ-=-=-?-?@B B B B Bs   0C		CCc                     |                      t          j        t          j        dt          j                             d S )Nr  r  )rH   rY   rZ   r   r\   r  s    r#   test_device_array_argz Jax2TfTest.test_device_array_argc  s.    37CIfck$B$BCCCCCr"   c                 6    d }|                      |           d S )Nc                      t           j                            t           j                            d          ddd          S )Nr  r!   r   rF   )r  r  r  )r   r  r  r  r!   r"   r#   r  z(Jax2TfTest.test_randint.<locals>.randintg  s=    Z
*

R
 
 1Q   @ @ @r"   rG   )rJ   r  s     r#   test_randintzJax2TfTest.test_randintf  s0    @ @ @ 	7#####r"   c                 6   |                      d           t          j        t          j                              }d }t	          j        dt          j                  }|                     ||t          j	        dt          |j        dz   dd          g           d S )	N'include_xla_op_metadata not yet enabledc                 *    t          j        |           S r&   r#  rf   s    r#   f_simplez4Jax2TfTest.test_op_metadata_simple.<locals>.f_simpler  r  r"   r  Sinr  zjax2tf(f_simple)/sinrZ   tf_typesource_filesource_lineop_nameop_typer   r   
user_framecurrentr[   r   r\   CheckOpMetadatar   OpMetadataGraph__file__
start_line)rJ   r  r  rA   s       r#   test_op_metadata_simplez"Jax2TfTest.test_op_metadata_simplem  s    MM;<<< ",-=-E-G-GHHJ   	
##A!		%e2:2<2G!2K.D.3	
5 
5 
5 	    r"   c                    |                      d           t          j        t          j                              }d fd}t	          j        dt          j                  }|                     ||t          j	        dt          |j        dz   dd	          t          j	        d
t          |j        dz   dd	          t          j	        dt          |j        dz   dd	          g           d S )Nr  c                 *    t          j        |           S r&   rY   re   rf   s    r#   f_calleez5Jax2TfTest.test_op_metadata_sub_jit.<locals>.f_callee  r  r"   c                     t          j        |           } t          j                  |          }t          j        |          S r&   )rY   tanhr   r   rZ   rA   rB   zr  s      r#   f_callerz5Jax2TfTest.test_op_metadata_sub_jit.<locals>.f_caller  s7    
(1++a
#'(

A

aWQZZr"   r  Tanhr  jax2tf(f_caller)/tanhr  r  Cosr  z"jax2tf(f_caller)/jit(f_callee)/cosre   r     jax2tf(f_caller)/sinrZ   r  rJ   r  r  rA   r  s       @r#   test_op_metadata_sub_jitz#Jax2TfTest.test_op_metadata_sub_jit      MM;<<< ",-=-E-G-GHHJ      
 	
##A!		%f2:2<2G!2K.E.4	
6 
6 
6
 
	%e2:2<2G!2K.R.3	
5 
5 
5
 
	%e2:2<2G!2K.D.3	
5 
5 
5	    r"   c                    |                      d           t          j        t          j                              }d fd}t	          j        dt          j                  }|                     ||t          j	        dt          |j        dz   dd	          t          j	        d
t          |j        dz   dd	          t          j	        dt          |j        dz   dd	          g           d S )Nr  c                 *    t          j        |           S r&   r  rf   s    r#   r  z3Jax2TfTest.test_op_metadata_named.<locals>.f_callee  r  r"   c                     t          j        |           } t          j        d          |          }t          j        |          S )Ncalleer  )rY   r  r   r{  rZ   r  s      r#   r  z3Jax2TfTest.test_op_metadata_named.<locals>.f_caller  s<    
(1++a
1#.
1
1
1!
4
4aWQZZr"   r  r  r  r  r  r  r  r  z"jax2tf(f_caller)/named(callee)/cosre   r  r  r	  rZ   r  r
  s       @r#   test_op_metadata_namedz!Jax2TfTest.test_op_metadata_named  r  r"   c                    |                      d           t          j        t          j                              }d }t	          j        dt          j                  }|                     ||t          j	        dt          |j        dz   dd          t          j	        d	t          |j        d
z   dd          t          j	        dt          |j        dz   dd          g           d S )Nr  c                 D    d }t          j        d |d| f          \  }}|S )Nc                     | \  }}|dz   t          j        |          t          j        t          j        |d          dk    d d |          z   fS )NrF   r  r   c                 *    t          j        |           S r&   r#  accs    r#   rC   zdJax2TfTest.test_op_metadata_while_and_cond.<locals>.f_while_cond.<locals>.body_fun.<locals>.<lambda>  s    cgcll r"   c                     | S r&   r!   r  s    r#   rC   zdJax2TfTest.test_op_metadata_while_and_cond.<locals>.f_while_cond.<locals>.body_fun.<locals>.<lambda>  s    c r"   )rY   re   r	   r  mod)i_accir  s      r#   body_funzRJax2TfTest.test_op_metadata_while_and_cond.<locals>.f_while_cond.<locals>.body_fun  sZ    3A#'!Q--1,22)/ ! 	!r"   c                     | d         dk    S )Nr   r   r!   )r  s    r#   rC   zRJax2TfTest.test_op_metadata_while_and_cond.<locals>.f_while_cond.<locals>.<lambda>  s    aA r"   r   r	   r  )rA   r  r  r  s       r#   f_while_condz@Jax2TfTest.test_op_metadata_while_and_cond.<locals>.f_while_cond  s>    ! ! ! ~
%
%
QF fa jr"   r  r  r   z#jax2tf(f_while_cond)/while/body/cosre   r  r  r  z0jax2tf(f_while_cond)/while/body/branch_1_fun/sinrZ   FloorModr  z#jax2tf(f_while_cond)/while/body/remremr  )rJ   r  r  rA   s       r#   test_op_metadata_while_and_condz*Jax2TfTest.test_op_metadata_while_and_cond  s   MM;<<< ",-=-E-G-GHHJ   	
##Aa		%e2:2<2G!2K.S.3	
5 
5 
5
 
	%e2:2<2G!2K.`.3	
5 
5 
5
 
	%j2:2<2G!2K.S.3	
5 
5 
5	    r"   c                 4   |                      d           t          j        t          j                              }t          j        d             }d}t          j        t          j	        |          t          j
                                      |          }t	          j        |                              |                              d          }t          j                    }|                    |                                          }|d                                         }t)          d|            |                     ||t-          j        dt0          |j        d	z   d
d          t-          j        dt0          |j        dz   dd          g           d S )Nr  c                 F     d }t          j         fd|           \  }}|S )Nc                 .    t          j        |           }|S r&   r#  )r  	new_carrys     r#   r  zLJax2TfTest.test_op_metadata_batched_while.<locals>.f_while.<locals>.body_fun  s    GENN	r"   c                 4    t          j        | k              S r&   )rY   r8   )r  rA   s    r#   rC   zLJax2TfTest.test_op_metadata_batched_while.<locals>.f_while.<locals>.<lambda>  s    
++ r"   r  )rA   r  r  r  s   `   r#   f_whilez:Jax2TfTest.test_op_metadata_batched_while.<locals>.f_while  sA       
+
+
+
+
A ha lr"   )r  r  r   hlor   zJAX OPT HLO = r  r  zjax2tf(f_while)/while/body/sinrZ   r  	LessEqualr  z"jax2tf(f_while)/while/body_pred/lele)r   r   r  r  r   r  r[   rL  r  prodr\   reshaper   lowercompiler_irxbget_backendcompilehlo_modules	to_stringr  r  r   r  r  r  )	rJ   r  r(  r  rA   jax_compbackendmodulesjax_opt_hlos	            r#   test_op_metadata_batched_whilez)Jax2TfTest.test_op_metadata_batched_while  s   MM;<<< ",-=-E-G-GHHJX  X E
	$)E"""*555==eDDAww%%a((44U;;HnGooh''3355G!*&&((K	
(;
(
()))		%e2:2<2G!2K.N.3	
5 
5 
5
 
	%k2:2<2G!2K.R.2	
4 
4 
4
	    r"   c                     |                      d           d }t          j        dt          j                  }|                     ||g d           d S )Nr  c                 *    t          j        |           S r&   r#  rf   s    r#   r  z6Jax2TfTest.test_op_metadata_disabled.<locals>.f_simple  r  r"   r  F)include_xla_op_metadata)r   r[   r   r\   r  )rJ   r  rA   s      r#   test_op_metadata_disabledz$Jax2TfTest.test_op_metadata_disabled  sk    MM;<<<   	
##A!
 %      r"   r   
scope_namec                    |                                 }|s|                     d           |D ]V}t          j        d|j                   |j                            |          s |                     |j         d| d           WdS )zjAssert all operations name start with ```scope_name```.

    Also the scope_name only occur one time.
    zresult is empty.ztf op.name = %sz does not start with .N)get_operationsfailr   r_   rT   
startswith)rJ   r   r>  r   ops        r#   assertAllOperationStartWithz&Jax2TfTest.assertAllOperationStartWith!  s    
 F $
ii"### B Bl$bg...W
++ B		RW@@:@@@AAAB Br"   c                    t           j        j        r&t           j        j        s|                     d           d }t          j        |dd          }d}t          j                    }|	                                5 }t          j
        |          5  t          j        t          j        dt          j        j                  d	
          }t          j        j                            t          j        j        dd          } |||          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     ||           t          j                    }|	                                5 }t          j
        |          5  t          j        t          j        dt          j        j                  d	
          }t          j        j                            t          j        j        dd          } t          j        |dd          ||          }d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     ||           d S )Nz7shape polymorphism but --jax_dynamic_shapes is not set.c                 T    t          j        |           t          j        |          z   S r&   rd   r@   s     r#   func_jaxz8Jax2TfTest.test_name_scope_polymorphic.<locals>.func_jax3  s    WQZZ#'!**$$r"   z(b,...)T)polymorphic_shapesr  output_a)rF   r   )r  r   rA   r  )Nr   rB   FrQ   rP   )r   r}  r   dynamic_shapesr   r   rX   r6   Graph
as_default
name_scoper   r   r   r\   compatv1placeholderrE  r^   )	rJ   rH  func_tfouter_scoper   rA   rB   r  g2s	            r#   test_name_scope_polymorphicz&Jax2TfTest.test_name_scope_polymorphic.  s9   28 O!'O
mmMNNN% % % nYdD D DG K


A	
 1=%%  KH6):;;;#G G GIL$$RY%6	3GGGAqMM	                             	$$Q444 
B	 JA=%% J JKH6):;;;#G G GIL$$RY%6	3GGCBKTUCCCAqII	J J J J J J J J J J J J J J JJ J J J J J J J J J J J J J J 	$$R55555sn   ;D.A;DD.D	D.D	D..D25D26H>BH'H>'H+	+H>.H+	/H>>IIc                 Z   d t          j        dd          fd            }|                                j        }|                     |d           |j                                        D ]}|                     |j        d           t          j        dd	
          t          j        dd          fd            }|                                j        }|                     |d           |j                                        D ]}|                     |j        d           d S )Nc                     d }t          j        d          5  t          j        | dk    |d |           cd d d            S # 1 swxY w Y   d S )Nc                     t          j        d          5  t          j        | dk     t          j        t          j        |           cd d d            S # 1 swxY w Y   d S )N	jax_f_posr{   )r   named_scoper	   r  rY   re   rZ   rf   s    r#   f_posz9Jax2TfTest.test_name_scope_cond.<locals>.f.<locals>.f_posP  s    _[)) 	7 	7!b&#'37A66	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   /AAAjax_f_outerr   c                     | S r&   r!   rf   s    r#   rC   z<Jax2TfTest.test_name_scope_cond.<locals>.f.<locals>.<lambda>U  s     r"   )r   r[  r	   r  )rA   r\  s     r#   rp   z*Jax2TfTest.test_name_scope_cond.<locals>.fO  s    7 7 7 ?=)) 7 7xB{{A667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   AAATFrK  c                      t          j        d          5  d} t          j                  } ||           }d d d            d S # 1 swxY w Y   d S )Ntf_outer_forwardrN   )r6   rO  r   rX   )rA   rU   r  rp   s      r#   outer_forwardz6Jax2TfTest.test_name_scope_cond.<locals>.outer_forwardW  s    =+,,  ~a  DGG                 s   "AA	A	r`  z&tf_outer_forward/jax2tf_f_/jax_f_outerrN   ztf_outer_back/xr  c                  "   t          j        d          5  t          j                  } 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 )Ntf_outer_back)r6   rO  r   rX   rv   rx   )rU   ry   rN  r  rp   rA   s       r#   
outer_backz3Jax2TfTest.test_name_scope_cond.<locals>.outer_backf  s   =)) ' '~a  _ 	'$477&mmFA&&!	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's4   (B"A, B,A0	0B3A0	4BBBrc  )r6   r^   r   r   rE  
_functionsr   r   )rJ   ra  r   r=  rd  rp   rA   s        @@r#   test_name_scope_condzJax2TfTest.test_name_scope_condN  s~   7 7 7 [TU333    43 	++--3A$$Q(:;;;##%% @ @
&&
*>@ @ @ @ 	C/000A[TU333' ' ' ' ' 43' 	((**0A$$Q888##%% D D
&&tz?CCCCD Dr"   c                    d }t          j        t          j        |          dd          }|                    t          j        d                    j        }|j                                        D ]b}|j        	                                D ]F}|j
                            d|j         d          dk    r|                     d	|j
                    Gcd S )
Nc                     t          j        d          5  d }d }t          j                            |||           }|cd d d            S # 1 swxY w Y   d S )NrT  c                 6    t          j        | d          dk     S )NF)keepdimsr  r  rf   s    r#   	conditionzCJax2TfTest.test_name_scope_while_loop.<locals>.f.<locals>.conditionv  s    U+++c1
1r"   c                 ,    t          j        | d          S r  rl   rf   s    r#   bodyz>Jax2TfTest.test_name_scope_while_loop.<locals>.f.<locals>.bodyx  s    C
 r"   )r6   rO  r   r	   r  )rA   rk  rm  r   s       r#   rp   z0Jax2TfTest.test_name_scope_while_loop.<locals>.ft  s    =''  	2 	2 	2	! 	! 	! ##ItQ77                 s   )AAATFrK  )rF   r  zouter_scope/jax2tf_z_/whilerF   zZtf graph has repeated name issue on when converting lax.while to tf.while.See op.name = : )r6   r^   r   rX   r   r   r   re  r   rA  rT   countr1  rB  )rJ   rp   tf_fr   r=  rD  s         r#   test_name_scope_while_loopz%Jax2TfTest.test_name_scope_while_loops  s       ;v~a((deLLLD""28F#3#344:A##%% , ,
))++ , ,"7==BqzBBBCCaGG
))+!#+ +, , ,,, ,r"   c              #      K   | ]c}d D ]^}|dk    rddgndgD ]N}|dvs|dk    rdgnddgD ]:}t          |rdnd d|dk    r|nd d|dk    r|nd |rd	nd ||||
          V  ;O_ddS ))nonepjit_in_shardings_Nonepjit_in_shardings_Ppjit_in_shardings_Shardingrr  TF)baser   r   
with_mesh_ z2=z_1=_nullary)rO  	with_mesh
transform1
transform2nullaryNr(  )r1   r{  r|  r}  rz  s        r#   r4   zJax2TfTest.<genexpr>  s6      " " )" "  &//4--'-" "&   '>>>6)) &&$-7" "0 / &.\\B - -'611zzr- -(F22

- #*ZZ- - *2 2 2" " " " " " " " "r"   )rr  r   r   rs  rt  ru  r   r   rt  c                 x   |dk    r |dk    s|dv r|rt          j        d          t          j        dt          j                  t          j        t          j                    d d         d          d	 }d
 }dt          ffd} ||dk    r|n||          }|dvsJ  |||          |dk    r
                    d          |s}	g}
nfd}	g }
|dk    r*|rt          j        d          t          j        d          t          j        |	dd          }t          j        |dd          }t          j                    5 }|r|                                |	|
 } t%          j        t'          |	d          st          j        |	          n|	d          d |
D              }d d d            n# 1 swxY w Y   |dk    r7|                     dt          |                                                     d S |                     dt          |                                                     d S )Nrr  r   )rt  ru  z(Skip because must have pjit at top level)r  r  r   rF   )r   c                 0    t          j        | dd          S )Nr   F)axisreverse)r	   cummaxrf   s    r#   rC   z0Jax2TfTest.test_cross_platform.<locals>.<lambda>  s    SZ5999 r"   c                 2    t          j        | ddd          S )Nr   rF   T)r  tiled)r	   
all_gatherrf   s    r#   rC   z0Jax2TfTest.test_cross_platform.<locals>.<lambda>  s    s~a1DIII r"   rk  c                 "   t          | t          j        |           t          j        | d           t          j        | t          d          f          t          j        | t	          j        t          d                    f          t          j        |           t          j        | d d           t          j        | t          d          ft          d                    t          j        | t	          j        t          d                    ft	          j        t          d                              t          | t          dd           ft          dd                     t          j        | dd                    |         }|S )N)in_shardingsr   )r  out_shardings)in_specs	out_specsr   )in_axesout_axes)rr  r   jit_in_shardings_Nonejit_in_shardings_Pjit_in_shardings_Shardingr   rs  rt  ru  r   r   )	r   r   r   Pr   NamedShardingr   r   r   )r=  rk  transformed_funcmeshs      r#   apply_transformz7Jax2TfTest.test_cross_platform.<locals>.apply_transform  sq   gdmm #4 @ @ @ WT3	BBB$'G("8qvv"F"F!H%J %J %Jy!%4d9="? "? "?"iAcFF967ff> > >%)Y$243@@B$243@@&B &B &B
 daTll_"#C,,0 0 0xa!444'  ( 	)* r"   r   r   )rF   c                  V      t          j        j        j                            S )Nr   )rY   r   r  r   )transformed2_funcrA   s   r#   rC   z0Jax2TfTest.test_cross_platform.<locals>.<lambda>  s6     1 1#(17AB3J 3J 3J !K !K r"   z-Cannot lower nested pmap: jit-of-pmap warningz+TODO: figure out how to invoke pmap from TFTtpunative_serializationnative_serialization_platformsFrK  trace)lowering_platformsc              3   T   K   | ]#}t          j        |j        |j                  V  $d S r&   )r   ShapedArrayr  r   )r1   r   s     r#   r4   z1Jax2TfTest.test_cross_platform.<locals>.<genexpr>  s3      	;	;$
17AG
,
,	;	;	;	;	;	;r"   zstablehlo.all_gatherzstablehlo.reduce_window)r  r  r[   r   r\   r   Meshr   devicesr   r-  r   rX   r6   r^   
contextlib	ExitStackr   r   r   r   r~  mlir_module)rJ   rz  r{  r|  r}  r=  func_shard_mapr  transformed1_funcfunc_to_convertr  rU   r  r  exportedr  r  rA   s                  @@@r#   test_cross_platformzJax2TfTest.test_cross_platform  s   D Vk!!KKKPWKHIII
bj)))A=rr*F33D99D JIN      0 (%44$  ]****'(9:FFV
))G

a )oSddK K K K KodV	 Q OPPPKLLL>//39AC C CD ;t???D				 =5	 "D!!!
/4
 a+2?G+L+La37?###Ra%   
<	;d	;	;	;=h= = = = = = = = = = = = = = = [  
mm*C0D0D0F0F,G,GHHHHH
mm-s83G3G3I3I/J/JKKKKKs   A$F==GGc                 ^   t          j        t          j        dd          }t	          j        d          }t          j        dg          r3|                     t          j        |           ||                     d S t          j
        |dd          }|                    |          j                                        }|                     dt          |                     |                     t          j        j        d	          5   ||           d d d            d S # 1 swxY w Y   d S )
NTr  r  rN   r  FrK  XlaCallModulezIThe current platform .* is not among the platforms required by the module)r   rX   rY   rZ   r[   r\   r   test_device_matchesr]   r6   r^   r   r   r  r~  r   r  errorsNotFoundError)rJ   rU   rA   f_tf_funr  s        r#   test_cross_platform_errorz$Jax2TfTest.test_cross_platform_error  sY   >#'9AC C CD

2A
w'' 	
#'!**dd1gg..... TtuEEEh00339FFHHi
mmOS^^444!!")"9
UW W  Q                 s   	D""D&)D&zAusing native_serialization_platforms without native_serialization)messagec                 x   t          j        t          j        d          }t	          j        d          }t          j                            d          }| 	                    |           t          j
        |d                   5  |                     t          j        |           ||                     d d d            n# 1 swxY w Y   t          j        t          j        t           j                                        f          }|                     t          j        |           ||                     d S )N)cpu)r  rN   CPUr   )$native_serialization_disabled_checks)r   rX   rY   rZ   r[   r\   r6   r   r7   assertNotEmptyrS   r]   DisabledSafetyCheckplatform)rJ   rU   rA   tf_cpuss       r#   %test_native_parameters_for_non_nativez0Jax2TfTest.test_native_parameters_for_non_native  sO    >#'9AC C CD

2Ai,,U33G   	71:		 / /
#'!**dd1gg.../ / / / / / / / / / / / / / / >#'"6??AA@DE E ED 	

DDGG,,,,,s   2CCCc                    t          j        t          j        dd          t	          j        dt          j                  }t          j        |          }t          j	        d          fd            }t          j	        |d          }|
                    |          j                                        }t          j        d	|           |                     t!          j        d
t%          |                    d           t'          j        dg          sK|                     t          j        j        d          5   ||           d d d            d S # 1 swxY w Y   d S d S )NTr  r  r  r   Frq   c                     t          j                    5 }|                    |             |           }|                    ||           cd d d            S # 1 swxY w Y   d S r&   rV  )rT  ry   rN  rU   s      r#   	f_grad_tfz<Jax2TfTest.test_native_serialization_grad.<locals>.f_grad_tf!  s    ? *

3c}}VS))* * * * * * * * * * * * * * * * * *s   6AAAzFound graph_def: %szop:\s*"XlaCallModule"r  r  zRThe current platform .* is not among the platforms required by the module: \[TPU\])r   rX   rY   rZ   r[   rL  r\   r6   r   r^   r   r   r  r   r_   r  refindallr   r   r  r  r  r  )rJ   rA   rT  r  f_grad_tf_funr  rU   s         @r#   test_native_serialization_gradz)Jax2TfTest.test_native_serialization_grad  s    >#'9AC C CD
	!2:&&&A
+a..C[5!!!* * * * "!* K	U;;;M33A66<IIKKIL&	222NN2:6IGGKKK"E7++ !!
)
!
_a a   		#                  s   >EEEc                    d }|                      t          d          5   t          j        |d          t	          j        d                     d d d            n# 1 swxY w Y   d }|                      t          d          5   t          j        |d          t	          j        d                     d d d            d S # 1 swxY w Y   d S )Nc                 j    t           j                            d|            t          j        |           S )N{}r   debugr  rY   rZ   rf   s    r#   rK   z,Jax2TfTest.test_effects_error.<locals>.f_jax6  s&    	ioodAWQZZr"   z6serialization of host_callbacks is not yet implementedTr  g      E@c                 n    t           j                            d| d           t          j        |           S )Nr  T)orderedr  rf   s    r#   f_ordered_jaxz4Jax2TfTest.test_effects_error.<locals>.f_ordered_jax>  s*    	ioodAto,,,WQZZr"   )r  NotImplementedErrorr   rX   r[   r\   )rJ   rK   r  s      r#   test_effects_errorzJax2TfTest.test_effects_error5  s      
		 3 X
Z 
Z H H6fnU666rz#GGGH H H H H H H H H H H H H H H   
		 3 X
Z 
Z P P>fn]>>>rz#OOOP P P P P P P P P P P P P P P P P Ps#   2AA!$A!2CC	C	c                 v   t          j        dg          st          j        d          d }d t	          d          D             } t          j        |          j        | }|                     |j	        j
        d                     t          j        |d          | }|                      || |           d S )	Nr  zTest enabled on TPU onlyc                      d}| D ]}||z  }|S rZ  r!   )	many_argsr  r   s      r#   rK   z)Jax2TfTest.test_tuple_args.<locals>.f_jaxK  s&    c  !qjr"   c                 6    g | ]}t          j        |          S r!   rF  )r1   r  s     r#   rn   z.Jax2TfTest.test_tuple_args.<locals>.<listcomp>Q  s     4441A444r"   i  
tuple_argsTr  )r   r  r  r  ranger   r   r.  
assertTrue	_loweringcompile_argsr   rX   r]   )rJ   rK   r  loweredrU  s        r#   test_tuple_argszJax2TfTest.test_tuple_argsF  s     "E7++ :8999   54d444I"cgenn"I.GOOG%2<@AAA
:&.T
:
:
:I
FCy)3/////r"   c                    t           j        d             }t          j        dt          j                  } ||          }t          j        |d          }|                     | ||                     t          j        |          }|                     | ||                     t          j        |d          }|                     | ||                     d S )Nc                     | dz   S NrF   r!   rf   s    r#   rK   z-Jax2TfTest.test_nested_convert.<locals>.f_jax[  rd  r"   r   r   Tr  )	r   r   r[   r   r\   r   rX   r]   call_tf)rJ   rK   r\  rU  rU   f_jax_nestedf_tf_nesteds          r#   test_nested_convertzJax2TfTest.test_nested_convertX  s     	W  W Wb,,,F
%--C>%d;;;DTT&\\***>$''L\\&11222.DIIIK[[0011111r"   c                    t           j        j        r|                     d           t	          dddd          fd}t          j        d          }t          j        |d	d
          }| j	        j
        D ]}t          j        d| d|j                    t          j        |          5   ||          }d d d            n# 1 swxY w Y   t	          ddd          |j                 }|                     |||         z              d S )Nz;TODO: enable when we can handle i64 platform_index_argumentr|   r}   r~   r  )r  r  cudarocmc                 R    | t          j        fdfdfdfd          z   S )Nc                       d         S )Nr  r!   _testing_multi_platform_to_adds   r#   rC   z?Jax2TfTest.test_multi_platform.<locals>.f_jax.<locals>.<lambda>v  s    259 r"   c                       d         S )Nr  r!   r  s   r#   rC   z?Jax2TfTest.test_multi_platform.<locals>.f_jax.<locals>.<lambda>w      3F; r"   c                       d         S )Nr  r!   r  s   r#   rC   z?Jax2TfTest.test_multi_platform.<locals>.f_jax.<locals>.<lambda>x  r  r"   c                       d         S )Nr  r!   r  s   r#   rC   z?Jax2TfTest.test_multi_platform.<locals>.f_jax.<locals>.<lambda>y  s    6u= r"   )r  r  r  default)r	   platform_dependent)rA   r  s    r#   rK   z-Jax2TfTest.test_multi_platform.<locals>.f_jaxt  sT    '9999;;;;;;;;====	    r"   gzG?T)r  r  r  r  zRunning on tf_device = z of device_type = r  r  r  )r  r-   r,   )r   r   r   r   r   r[   r\   r   rX   r=   r5   r   r_   r0   r6   rS   r]   )rJ   rK   rA   rU   r3   rU  tf_device_jax_platformr  s          @r#   test_multi_platformzJax2TfTest.test_multi_platforml  s    S
mmQRRR &*bbr%K%K%K"     	
3A>%;= = =D ^. 
D 
D	lV)VVy?TVVX X X9Y  d1gg              #v5       	*+ABBD D D D
D 
Ds   ,CC	C	)F)T)rQ  )r  )Trt  rt  F)ar1  r2  r3  classmethodr;   rL   ra   rh   r   r   r   r   r   r   r   r   r   skip_on_devicesr   r   r   sample_productr[   int64r  r   r  r  r  r  r  r#  r+  rW  ra  rr  r  r  r  r  r  r  r  r  r  r  r  r  r   r+  r/  r4  r?  rC  rM  r   named_parametersr[  rd  rj  rp  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r9  r=  r6   rM  r   rE  rV  rf  rp  r  r  ignore_warningr  r  r  r  r  r  __classcell__r=   s   @r#   r*   r*   ?   sU           ;* * *2 2 26' ' '"7 "7 "7H% % %- - -' ' '% % %
& & &E E E(' ' '  3u7 7 7 3u6 6 6
 3u7 7 7 38RZ
 -   ')he 8 8 8	 8q q q"C C C$' ' ' 3UDM222      32  3UDM2221 1 1 321": : :  3UDM2229 9 9 329&30 30 30j 3UDM222I I I 32I, 3UDM2226 6 6 326< 3UDM2226 6 6 326<
& 
& 
&) ) )0 3UDM222*: *: *: 32*:X 3UDM222q1 q1 q1 32q1fO O O.  / / /
  
6 
6 
6< < <(9 9 9.9 9 9,T T T&4 4 4  
    0 0 0 "=! "2 "20"2 "2 "2 2 2! ! !2 2!6= = =      3 > > >???G G G @?G 3 > > >???G G G @?GK K K$B B B(
# 
# 
#. . .". . .&) ) )* * *@- - - 3UDM222	& 	& 	& 32	& 3UDM222B B B 32B"D D D$ $ $  &     D     D' ' 'R& & &P
 
 
B28 B B B B B6 6 6@#D #D #DJ, , ,* "=! " "=" " "  : <QDIQL QL QL; :QLf   3abbb- - cb-"  8P P P"0 0 0$2 2 2(D D D D D D Dr"   r*   T)jax_enable_custom_prngc                        e Zd Zd Zd Zd ZdS )Jax2tfWithCustomPRNGTestc                 j   d }t           j                            d          }t           j                            |          }|                     t
          d          5   t          j        |          |          }d d d            n# 1 swxY w Y    ||          }|                     ||           d S )Nc                 B    t           j                            | d          S Nr!   )r   r  r  )r  s    r#   rC   z<Jax2tfWithCustomPRNGTest.test_key_argument.<locals>.<lambda>  s    sz))#r22 r"   r   zRaw arrays as random keys.*)	r   r  r  key_dataassertWarnsRegexFutureWarningr   rX   r   )rJ   r=  r  key_raw	tf_result
jax_results         r#   test_key_argumentz*Jax2tfWithCustomPRNGTest.test_key_argument  s    22D
*

Q

Cj!!#&&G			}.K	L	L 0 0&&.&&w//i0 0 0 0 0 0 0 0 0 0 0 0 0 0 0cJY
+++++s   BBBc                     d }d} t          j        |          |          } ||          }|                     ||           d S )Nc                 |    t           j                            t           j                            |           d          S r  )r   r  r  r  )seeds    r#   rC   z=Jax2tfWithCustomPRNGTest.test_key_from_seed.<locals>.<lambda>  s(    
**3:+=+=d+C+CRHH r"   i  )r   rX   r   )rJ   r=  r  r  r  s        r#   test_key_from_seedz+Jax2tfWithCustomPRNGTest.test_key_from_seed  sQ    HHDD$t$$T**IdJY
+++++r"   c                     fd}t           j                            d           t          j        |                      } |            }|                     ||           d S )Nc                                           d                                          } t          j                            |           S r  )r-  squeezer   r  r  )r  
global_keys    r#   r=  z7Jax2tfWithCustomPRNGTest.test_key_closure.<locals>.func  s8    q!!))++cZ$$$r"   r   )r   r  r  r   rX   r   )rJ   r=  r  r  r  s       @r#   test_key_closurez)Jax2tfWithCustomPRNGTest.test_key_closure  sq    % % % % % ##A&&J$t$$&&IJY
+++++r"   N)r1  r2  r3  r  r  r  r!   r"   r#   r  r    sA        , , ,, , ,, , , , ,r"   r  c                   $     e Zd Z fdZd Z xZS )Jax2TfVersioningTestc                 V    d| _         t                                                       d S )NF)use_max_serialization_versionr:   setUp)rJ   r=   s    r#   r  zJax2TfVersioningTest.setUp  s     ).D&	GGMMOOOOOr"   c                 F    |                      t          j        d           d S )NrE   )rH   rY   rZ   r  s    r#   test_simplez Jax2TfVersioningTest.test_simple  s     37C(((((r"   )r1  r2  r3  r  r  r  r  s   @r#   r  r    sG            ) ) ) ) ) ) )r"   r  __main__)
testLoader)9__doc__r_  r  r  rC  r  r  abslr   absl.testingr   r   r   r   r   r   r	   r
   rY   r   jax._srcr   r   r   r   r   r   r0  jax.experimentalr   jax.experimental.jax2tf.testsr   jax.experimental.shard_mapr   r   jax.shardingr   r  r[   
tensorflowr6   !tensorflow.compiler.tf2xla.pythonr   r   parse_flags_with_abslr  r   r$   r(   JaxToTfTestCaser*   with_configr  r  r1  mainJaxTestLoaderr!   r"   r#   <module>r%     s   C C          				 				        0 0 0 0 0 0 0 0 



                                                 % % % % % % % % % % % % % % % % % % # # # # # # 6 6 6 6 6 6 0 0 0 0 0 0 ! ! ! ! ! ! + + + + + +         : : : : : :     "j"$$V V V  LD LD LD LD LD- LD LD LD^2 ---, , , , ,|; , , .-,6) ) ) ) )<7 ) ) ) z(-,3,..////// r"   