
    `iׄ                     H   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	m
Z
mZ d dlZd dlZd dlZd dlmc mZ d dlmZ d dlmZ d dlmZmZ d dlmZ  ej        e          Z	 d dlZdej         d	e!fd
Z"d Z#e G d d                      Z$de	ddd	e	fdZ% G d dej        j&                  Z' G d d          Z( G d d          Z)dZ*g dZ+n# e,$ r	 dZ*g dZ+Y nw xY wd dl-m.Z/ d	e0fdZ1d	e2fdZ3d Z4 G d d e          Z5 G d! d"e          Z6 e4             d# Z7dS )$    N)	dataclass)AnyCallableOptionalUnion)TorchDynamoException)dynamo_timed)ArgumentTarget)sympy_interpereturnc                   
 t          j        |           sJ d|              dt           j        dt          t                   fd}t          j        |           } t          j        |           st          d|            t          j        |           st          j	        |           r| 
                                S |                                 }|                                t	          |          } ||           }t           j        k    rd}nt           j        t           j        fv r
fd
 
|           }nlt           j        k    r|                                 dk    sJ |                     d	          }t          j        |          sJ |                                                                }t           j        d
t           j        dt           j        di}||v r||         } ||          }nt           j        t           j        fv r`|                                 dk    sJ t1          |                     d	                    }|                    d          rd|dd          z   S |S t           j        k    r)|                                 d	k    sJ t	          |          S |dz   d                    |          z   }	d|	                                 dS )Nzunsupported expression type: r   r   c                 ^      fdt                                                     D             S )Nc                 T    g | ]$}t                              |                    %S  )z3strarg).0ir   s     s/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/fx/experimental/validator.py
<listcomp>z/z3str.<locals>.get_args_str.<locals>.<listcomp>@   s)    AAAE!%%((OOAAA    )rangenum_args)r   s   `r   get_args_strzz3str.<locals>.get_args_str?   s-    AAAAU1::<<-@-@AAAAr   zcan't print Z3 expression: powc                      t          j                   r*                                                                 k    st	                     gS  fdt                                                     D             S )Nc                 V    g | ]%}                      |                    D ]}|&S r   )r   )r   r   xcollect_str_argsr   s      r   r   z3z3str.<locals>.collect_str_args.<locals>.<listcomp>^   sU       !1!1!%%((!;!;      r   )z3is_appdeclkindr   r   r   )r   r!   r%   s   `r   r!   zz3str.<locals>.collect_str_argsZ   s|    	! D)@)@!!HH:%    !&qzz||!4!4   r      r   z!=><z(/z(idiv    ())r"   is_exprExprRefliststrsimplifyr#   
ValueErroris_int_valueis_rational_value	as_stringr$   r%   Z3_OP_POWER	Z3_OP_ADD	Z3_OP_MUL	Z3_OP_NOTr   r   Z3_OP_EQZ3_OP_LEZ3_OP_GEZ3_OP_TO_INTZ3_OP_TO_REALr   
startswithZ3_OP_UNINTERPRETEDjoinrstrip)r   r   r$   opargsr   argkindlogic_inverseargstrstringr!   r%   s             @@r   r   r   <   s   z!}}AAAaAAAA}	BBJ 	B49 	B 	B 	B 	B
 KNN y|| 	@>1>>????1 	!!5a!8!8 	!;;== vvxxyy{{YY|A2>!!BBblBL111      $#A&&DDR\!! ::<<1$$$$%%((C9S>>!!>hhjjoo''G TSSM -''"7+#|C((bor'7888::<<1$$$$15588__F   && ,++ MR+++::<<1$$$$t99cCHHTNN*%6==??%%%%r   c                 J     t          j                    fd            }|S )Nc                     t          d |D                       r | S t          d |D                       }t          j         |           S )Nc              3   J   K   | ]}t          |t          j                  V  d S N)
isinstancer"   BoolRef)r   r   s     r   	<genexpr>z/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s?       - -03
3
++- - - - - -r   c              3   @   K   | ]}t          j        |d           V  dS )@   N)r"   Int2BVr   as     r   rO   z/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s.       @ @a1b!1!1 @ @ @ @ @ @r   )alltupler"   BV2Int)selfrD   wrapped_argsbitwise_func	bool_funcs      r   wrapperz_bitwise_op.<locals>.wrapper   sv    $ - -7;- - - * *$ !y$''  @ @4 @ @ @@@L9\\<8999r   )	functoolswraps)rZ   r[   r\   s   `` r   _bitwise_opr_      s>    		&	&	: 	: 	: 	: 	: 
'	&	: r   c                   F   e Zd ZU ded<   edej        dej        fd            Zedej        dej        fd            Zdej        dej        fdZ	d	ej        d
ej        dej        fdZ
dej        dej        fdZd	ej        d
ej        dej        fdZdej        dej        fdZdej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        fdZdej        dej        fdZdej        dej        fdZ eej        ej                  Z eej        ej                  Z eej        d          Z eej        d          ZdS )_Z3OpsTranslationValidator	validatorr    r   c                 V    |                                  r| nt          j        |           S rL   )is_realr"   ToRealr    s    r   to_realz_Z3Ops.to_real   s!    		51115r   c                 V    |                                  r| nt          j        |           S rL   )is_intr"   ToIntrg   s    r   to_intz_Z3Ops.to_int   s!    

3113r   rD   c                      t          |          S rL   )sum)rX   rD   s     r   sym_sumz_Z3Ops.sym_sum   s    t99r   	numeratordenominatorc                     | j                             |dk               t                              |          t                              |          z  S Nr   )rc   add_assertionra   rh   rX   rp   rq   s      r   divz
_Z3Ops.div   s@    N(()9:::>>),,v~~k/J/JJJr   numberc                 6    t                               |          S rL   )ra   rl   rX   rw   s     r   floorz_Z3Ops.floor   s    ==(((r   c                     |                                 p|                                 }t                              |                     ||                    }|rt                              |          n|S rL   )re   ra   rl   rv   rh   )rX   rp   rq   cast_result_to_realresults        r   floordivz_Z3Ops.floordiv   se     #,"3"3"5"5"N9L9L9N9N]]488I{#C#CDDF .AL6>>&)))fLr   c                     t          j        |                     |          |k     |                     |dz             |          S Nr&   )r"   Ifrz   ry   s     r   ceilz_Z3Ops.ceil   s7    5F++f4djj!6L6LfUUUr   c                     t          j        |dk    |                     |          |                     |                    S rs   )r"   r   rz   r   ry   s     r   truncz_Z3Ops.trunc   s2    51djj&8&8$))F:K:KLLLr   rT   bc                 6    t          j        ||k    ||          S rL   r"   r   rX   rT   r   s      r   maxz
_Z3Ops.max       5Q1%%%r   c                 6    t          j        ||k     ||          S rL   r   r   s      r   minz
_Z3Ops.min   r   r   pqc                 :    ||                      ||          |z  z
  S rL   )r~   rX   r   r   s      r   modz
_Z3Ops.mod   s     t}}Q**Q...r   baseexpc                 v    | j                             t          j        |dk    |dk                         ||z  S rs   )rc   rt   r"   OrrX   r   r   s      r   r   z
_Z3Ops.pow   s6    N((tqy#')B)BCCC9r   c                 |    t                               |          }| j                            |dk               |dz  S )Nr         ?)ra   rh   rc   rt   ry   s     r   sqrtz_Z3Ops.sqrt   s;     ^^F++F N((15553;r   c                 *    t          j        |          S rL   )r"   Absry   s     r   absz
_Z3Ops.abs   s    6&>>!r   c                     t          j        |                     |t          j        d                    dk    |                     |dz
            |                     |dz                       S )Nr)   r   )r"   r   r   IntValr   rz   ry   s     r   round_to_intz_Z3Ops.round_to_int   s\     51..#5		&3,''

6C<((  r   N) __name__
__module____qualname____annotations__staticmethodr"   ArithRefrh   rl   ro   rv   rz   r~   r   r   r   r   r   r   r   r   r   r_   operatorand_Andbitwise_andor_r   
bitwise_orlshiftrshiftr   r   r   ra   ra      s         *))) 
	6r{ 	6r{ 	6 	6 	6 
	6 
	4bk 	4bk 	4 	4 	4 
	4	 	 	 	 	 		K 	K2; 	K2; 	K 	K 	K 	K	) 	) 	) 	) 	) 	)	M[	M79{	M[	M 	M 	M 	M	Vr{ 	Vr{ 	V 	V 	V 	V	M 	M 	M 	M 	M 	M	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&
	/ 	/ 	/ 	/ 	/ 	/ 	/	BK 	bk 	bk 	 	 	 	
	r{ 	r{ 	 	 	 		"bk 	"bk 	" 	" 	" 	"	r{ 	r{ 	 	 	 	 "k(-88 [ru55
X_d33X_d33r   ra   rC   rc   rb   c                    t           j        h}| |v fd}t          |          }i t           j         |t          j                  t           j         ||j                  t           j         ||j                  t           j	         ||j	                  t           j
         ||j
                  t           j         ||j                  t           j         ||j                  t           j         ||j                  t           j         ||j                  t           j         ||j                  t&          j         ||j                  t&          j         ||j                  t&          j         ||j                  t.          j         ||j                  t.          j         ||j                  t.          j         ||j                  t.          j         ||j                  t.          j         |d           t.          j          ||j!                  t.          j"        t.          j"        i}| |v r||          n
 ||           S )Nc                 p     dt           j        ffdt          j                    fd            }|S )Nr   c                 4   t          | t          j        t          j        f          r| S t          | t                    sr6t          | t
                    r!t          j        t	          |                     S t          | t
          t          j        f          r!t          j	        t          |                     S t          | t          t          j        f          r!t          j        t          |                     S t          dt          |                      )Nzcan't lift type: )rM   r"   r   rN   boolintBoolValsympyIntegerr   floatFloatRealValr2   type)rT   as_bools    r   wrapz z3op.<locals>.lift.<locals>.wrap  s    a"+rz!:;; H a&& /7 /z!S7I7I /:d1gg...a#u}!566 -9SVV,,,a%!566 0:eAhh/// !>T!WW!>!>???r   c                      t          |           dk    rEt          | d         t          t          f          r#t          fd| d         D                       f}nt          fd| D                       } | S )Nr&   r   c              3   .   K   | ]} |          V  d S rL   r   r   rT   r   s     r   rO   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>&  s+      )C)Ca$$q'')C)C)C)C)C)Cr   c              3   .   K   | ]} |          V  d S rL   r   r   s     r   rO   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>(  s+      (?(?Qa(?(?(?(?(?(?r   )lenrM   r/   rV   )rD   rY   funcr   s     r   r\   z#z3op.<locals>.lift.<locals>.wrapper"  s     t99>>ja4-&H&H>$))C)C)C)C47)C)C)C$C$C#ELL#((?(?(?(?$(?(?(?#?#?Lt\**r   )r"   r.   r]   r^   )r   r\   r   r   s   ` @r   liftzz3op.<locals>.lift  so    @2: @ @ @ @ @ @ _T""+ + + + + #"+ Nr   c                     | r|n|S rL   r   )r   tfs      r   <lambda>zz3op.<locals>.<lambda>D  s    QA r   )#r   not_ra   r"   Notr   r   r   r   r   r   r~   truedivrv   r   r   builtinsroundr   mathr   rz   r   torch	sym_floatrh   sym_maxr   sym_minr   ro   sym_ite	_sym_sqrtr   _assert)rC   rc   boolean_opsr   opsreplacement_mapr   s         @r   z3opr     sQ   
  }o#	 	 	 	 	4 Y
M44<<
 M4400
 L$$s~..	

 OTT#*--
 OTT#*--
 ttCL11
 dd37mm
 L$$sw--
 L$$sw--
 NDD!122
 IttCH~~
 JSY
 JSY
" OTT#+..#
$ M44==%
& M44=='
( M44,,)
* M44 = =>>OTT#(^^ M5=3
 
6 ')O&;&;r""bIr   c                        e Zd Zdej        j        ddf fdZdedee	df         de
eef         d	efd
Zdedee	df         de
eef         d	ef fdZ xZS )PopulateValidatorgraphrc   rb   c                     || _         t          j                            i |          }t	                                          |d           d S )N)rootr   T)garbage_collect_values)rc   r   fxGraphModulesuper__init__)rX   r   rc   module	__class__s       r   r   zPopulateValidator.__init__V  sI    &DN X))r)??FGGVDAAAAAr   targetrD   .kwargsr   c                 h    t          j                    d         }| j                            |          S )Nsymbol)fx_tracebackget_current_metarc   z3var)rX   r   rD   r   r   s        r   placeholderzPopulateValidator.placeholder^  s-     "244X>F>''///r   c                 0   |t           j        k    r6t                                          t	          || j                  ||          S t          |          dk    sJ dt          |           d            | j                            |d                    d S )Nr&   z'expected 1 argument on assertion. Got: r*   r   )r   r   r   call_functionr   rc   r   add_source_expr)rX   r   rD   r   r   s       r   r   zPopulateValidator.call_functiond  s     &&ww,,T&$.-I-I4QWXXX t99>>>F#d))FFF ">> N**4733333r   )r   r   r   r   r   Graphr   r   rV   r
   dictr0   r   r   r   __classcell__)r   s   @r   r   r   U  s        	B%(. 	B=S 	B 	B 	B 	B 	B 	B	0 	0(-hm(<	0FJ3PS8n	0	0 	0 	0 	0	4 	4(-hm(<	4FJ3PS8n	4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4r   r   c                      e Zd Zh dZ	 	 	 	 d!dZdedej        dej	        fd	Z
d
ej        dej        dej        fdZd
ej        dej        dej        fdZd
ej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZdej        dej        dej        fdZd
ej        dej        dej        fdZd
ej        dej        dej        fdZdedefdZdej        dej	        fd ZdS )"	SympyToZ3>   eqgegtleltneaddmulrc   rb   r   Nc                 F    || _         t          | j                   | _        d S rL   )
_validatorra   _ops)rX   rc   s     r   r   zSympyToZ3.__init__z  s      (DOt//DIIIr   valuedtypec                 @   |t           j        u r!t          j        t	          |                    S |t           j        u r!t          j        t          |                    S |t           j        u r!t          j	        t          |                    S t          d|           )Nzunsupported dtype (SympyToZ3): )r   int64r"   r   r   doubler   r   r   r   r2   )rX   r   r   s      r   constantzSympyToZ3.constant  s    ##yU,,,$$z%,,///
""z$u++...FuFFGGGr   r    c                 p    |t           j        k    rt          j        |          S t	          d| d          )Nz	to_dtype z NYI)r   float64r"   rf   NotImplementedErrorrX   r    r   s      r   to_dtypezSympyToZ3.to_dtype  s7    %%y||#%&=%&=&=&=>>>r   c                 *    t          j        |          S rL   )r"   rk   r  s      r   trunc_to_intzSympyToZ3.trunc_to_int  s    8A;;r   c                 6    | j                             |          S rL   )r   r   r  s      r   r   zSympyToZ3.round_to_int  s    9))!,,,r   rp   rq   c                 8    | j                             ||          S rL   r   rv   ru   s      r   int_truedivzSympyToZ3.int_truediv       9==K888r   c                 8    | j                             ||          S rL   r  ru   s      r   r   zSympyToZ3.truediv  r  r   c                 8    | j                             ||          S rL   r   r~   ru   s      r   r~   zSympyToZ3.floordiv  s     9%%i===r   c                 8    | j                             ||          S rL   r  ru   s      r   rv   zSympyToZ3.div  s    9%%i===r   r   r   c                 8    | j                             ||          S rL   r   r   r   s      r   r   zSympyToZ3.pow      9==s+++r   c                 8    | j                             ||          S rL   r  r   s      r   pow_by_naturalzSympyToZ3.pow_by_natural  r  r   r   r   c                 8    | j                             ||          S rL   )r   r   r   s      r   r   zSympyToZ3.mod  s    9==A&&&r   c                 6    | j                             |          S rL   )r   r   r  s      r   ceil_to_intzSympyToZ3.ceil_to_int  s    9>>!$$$r   c                 6    | j                             |          S rL   )r   rz   r  s      r   floor_to_intzSympyToZ3.floor_to_int  s    9??1%%%r   namec                 r   t           j        t           j        t           j        | j        j        | j        j        | j        j        | j        j        | j        j	        | j        j
        | j        j        | j        j        d}||v r||         S || j        v rt          t          |          S t!          d|           )N)r   r   r   r   r   r   r   rz   r   minimummaximumzunhandled operator: )r"   r   r   r   r   r   r   r   r   rz   r   r   r   OPERATOR_HANDLESgetattrr   AttributeError)rX   r  REPLACEMENTs      r   __getattr__zSympyToZ3.__getattr__  s    u#y4"i2)*)*	9=9= K {"""4((t,,,x... !>!>!>???r   exprc                 8    t          | | j        j        |          S rL   )r   r   symbols)rX   r(  s     r   runzSympyToZ3.run  s    do&=tDDDr   )rc   rb   r   N)r   r   r   r#  r   r   r   r   r"   r.   r  r   r	  r  r   r  r   r~   rv   r   r  r   r  r  r0   r'  r   Basicr+  r   r   r   r   r   w  s       MMM	0-	0 	0 	0 	0 	0	H# 	Hek 	Hbj 	H 	H 	H 	H	?bk 	?%+ 	?"+ 	? 	? 	? 	?
	"+ 	ek 	bk 	 	 	 		-"+ 	-ek 	-bk 	- 	- 	- 	-	9[	979{	9[	9 	9 	9 	9
	9[	979{	9[	9 	9 	9 	9
	>[	>79{	>[	> 	> 	> 	>
	> 	>2; 	>2; 	> 	> 	> 	>	,BK 	,bk 	,bk 	, 	, 	, 	,	,r{ 	, 	, 	, 	, 	, 	,	' 	' 	' 	' 	' 	' 	'	% 	%U[ 	%R[ 	% 	% 	% 	%	&"+ 	&ek 	&bk 	& 	& 	& 	&	@C 	@C 	@ 	@ 	@ 	@*	EEK 	EBJ 	E 	E 	E 	E 	E 	Er   r   c                      e Zd ZddZdej        dej        fdZdej        de	dej        fdZ
dej        ddfd	Zdej        dej        fd
Zdej        ddfdZddZdeej        ej        f         ddfdZddZddZdS )rb   r   Nc                     t                               d           i | _        t                      | _        t                      | _        t                      | _        d S )Nznew instance)logdebugr*  set_source_exprs_target_exprs_assertionsrX   s    r   r   zTranslationValidator.__init__  sM    IIn%%% <>DL
 36%%D
 36%%D 14Dr   r   c                 H    || j         v sJ d|             | j         |         S )NzZ3 variable not found for: )r*  )rX   r   s     r   r   zTranslationValidator.z3var  s3    T\)))+Q+Q+Q)))<''r   r   c                    || j         v r| j         |         S t                              d|j        |j                   |t
          u r?t          j        |j                  }|j        r| j	        
                    |dk               nX|t          u rt          j        |j                  }n5|t          u rt          j        |j                  }nt          d|           || j         |<   |S )Nznew variable: %s (%s)r   z"unsupported type for Z3 variable: )r*  r/  r0  r  r   r   r"   Intis_positiver3  r   r   Realr   BoolRuntimeError)rX   r   r   vars       r   add_varzTranslationValidator.add_var  s    %%|F++II-v{DMJJJs{{fV[)) % 4&**37333gfk**gfk**"#N#N#NOOO#&DL Jr   r   c                 |    |j         D ]3}t          |t          j                  sJ |                     |           4d S rL   )free_symbolsrM   r   Symbolr   )rX   r   ss      r   _check_freesymbolsz'TranslationValidator._check_freesymbols  sH    ^  !!U\22222 

1	 r   c                     t          |                               |          }t          |t          j                  sJ d|             |S )Nz"expected boolean expression. Got: )r   r+  rM   r"   rN   rX   r   z3exprs      r   to_z3_boolean_exprz'TranslationValidator.to_z3_boolean_expr  sS    t__((++Ffbj11  =V== 1 Mr   c                     || j         vr(t                              dt          |                     | j                             |           d S )Nzadd source guard: %s)r2  r/  r0  r   r   )rX   r   s     r   r   z$TranslationValidator.add_source_expr  sH    ***		0%((;;;""1%%%%%r   sympy.logic.boolalg.Booleanc                     |                      |           |                     |          }|| j        vr(t                              dt          |                     | j                            |           d S )Nzadd target guard: %s)rC  rG  r3  r/  r0  r   r   rE  s      r   add_target_exprz$TranslationValidator.add_target_expr#  so    ##A&&&,,Q//F***		0%--@@@""6*****r   c                 b   t          |t          j                  r+|                     |           |                     |          }n|}t          |t
          j                  sJ || j        vr(t          	                    dt          |                     | j                            |           d S )Nzadd assertion: %s)rM   r   r,  rC  rG  r"   rN   r4  r/  r0  r   r   )rX   r   refs      r   rt   z"TranslationValidator.add_assertion*  s    !U[)) ''***--a00c2:.....$***		-uSzz:::  %%%%%r   c                 |    t          d          5  |                                 cd d d            S # 1 swxY w Y   d S )NzTranslationValidator.validate)r	   	_validater5  s    r   validatezTranslationValidator.validate5  s    =>> ( (~~''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   155c                 T   t          | j                  dk    st          | j                  dk    rd S t          j        d          }|                    t                                 | j        D ]}|                    |           |                    t          j	        t          j
        | j                               |j        | j          t                              d           |                                }|t          j        k    rB|                                t!          | j        | j        fd| j        D                       |t          j        k    rt                              d           d S |t          j        k    sJ t                              d           d S )	Nr   QF_NRA)timeoutztranslation validation: startc                 >    g | ]}                     |          |S r   )evaluate)r   inpmodels     r   r   z2TranslationValidator._validate.<locals>.<listcomp>`  s;     ) ) ) #PSATAT)) ) )r   )failed_source_exprsz:translation validation: could not validate: got z3.unknownztranslation validation: success)r   r2  r3  r"   	SolverForr1  translation_validation_timeoutr4  r   r   r   r/  r0  checksatrW  ValidationExceptionunknownwarningunsat)rX   solver	assertionrrW  s       @r   rO  zTranslationValidator._validate9  s   4%&&!++s43E/F/F!/K/K t \(++FJJ=??J@@@ "- & &	

9%%%% JJrvbfd&89::;;;FJ*++II5666ABF{{ )$&) ) ) )'+'9) ) )	    
?? KKT    
 ====II?@@@@@r   )r   N)r   rI  r   N)r   r   r   r   r   rA  r"   r.   r   r   r>  r,  rC  rN   rG  r   rK  r   rt   rP  rO  r   r   r   rb   rb     s[       	6 	6 	6 	6*	( 	( 	( 	( 	( 	(
	%, 	d 	rz 	 	 	 	0	 	 	 	 	 		 	
 	 	 	 		&RZ 	&D 	& 	& 	& 	&
	+ 	+ 	+ 	+		&5U[)@#A 		&d 		& 		& 		& 		&	( 	( 	( 	(6	A 6	A 6	A 6	A 6	A 6	Ar   T)	r   r   r   r   rb   translation_validation_enabledrZ  r]  BisectValidationExceptionF)rd  rZ  r]  re  )_configc                  D    t                       t          ot          j        S rL   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   r   r   rd  rd    s     #$$$4v44r   c                      t           j        S rL   )rj  rZ  r   r   r   rZ  rZ    s    00r   c                  D    t           st          j        rJ d            d S d S )Nzotranslation validation requires Z3 package. Please, either install z3-solver or disable translation validation.)ri  rj  rk  r   r   r   rh  rh    s?     &7  	7 7    r   c                       e Zd Zd Zd ZdS )r]  c                    t           sJ dt          ffd}dt          fd} |t          t          |                              } |t          t          t          |                              } |t          t          t          |                              }	 |t          t          t          |                              }
d| _        d| d| d|	 d|
 | _        d S )	Nr   c                     |  d|           S )N: r   )symrW  s    r   	symbolstrz/ValidationException.__init__.<locals>.symbolstr  s    ))U3Z)))r   c                 @    d                     d | D                       S )N
c              3       K   | ]	}d | V  
dS )z  ==> Nr   )r   r    s     r   rO   zBValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>  s(      66a\a\\666666r   )rA   )xss    r   	joinlinesz/ValidationException.__init__.<locals>.joinlines  s#    99662666666r   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

Failed Source Expressions:
)ri  r0   sortedmapr   msgdetails)rX   rW  
assertionstarget_exprsrX  rs  rx  	model_strassertions_strtarget_exprs_strfailed_source_exprs_strs    `         r   r   zValidationException.__init__  s#   w	*c 	* 	* 	* 	* 	* 	*	7S 	7 	7 	7 	7 IfSE%:%:;;<<	"6#eZ*@*@#A#ABB$9VC|,D,D%E%EFF"+)F3u>Q3R3R,S,S"T"T3
 
      r   c                 $    | j          d| j         S N

r{  r|  r5  s    r   __str__zValidationException.__str__      (.....r   Nr   r   r   r   r  r   r   r   r]  r]    s2          8/ / / / /r   r]  c                       e Zd Zd Zd ZdS )re  c                 h    d| d| | _         d|                                 d|j         | _        d S )Nz#translation validation failed when rq  z)Failure occurred while running node:
    r  )r{  format_noder|  )rX   validation_excr(  failed_actiontraced_nodes        r   r   z"BisectValidationException.__init__  sQ    PPP$PP  	 r   c                 $    | j          d| j         S r  r  r5  s    r   r  z!BisectValidationException.__str__  r  r   Nr  r   r   r   re  re    s2          / / / / /r   re  c                    ddl mmm} ddlm}m}m | j        dt          j
        j        d|ffd}d|dt          ffdd|d	t          t          t                            dt          t                   ffd
dt          j
        j        dt          t                   ffd} | |                                           }|st"                              d           d S | j        rt(          j        r|i }d | j        j        D             }ddt1          |          dz
  }}
}	 |||                   ||<   |	|k     rY|	|z   dz  }
||
         }t"                              d|
 ||                      ||          ||
<   ||
         r|
}n|
dz   }	|	|k     Y|	|v rt5          ||	         t                    sJ ||	         } ||          }|                                rd}n#|                                sJ d|             d}|j        }|J t1          |          dk    s"J d|j         dt1          |                       t5          |d         t>          j                   s(J d|j         dtC          |d                                tE          ||	         |d         ||j#        |                   )Nr   )FakeTensorMetareplay_shape_env_eventsShapeEnvEvent)CURRENT_NODE_KEYShapeEnvSHAPEENV_EVENT_KEYnoder   c                 @    | j         v sJ | j                           S rL   )meta)r  r  eventss    r   get_node_eventzbisect.<locals>.get_node_event  s)    !TY....di 2344r   	shape_envc           	      ~    t          |t                    r|S t          |t          j                  r,t          j        |j                                                 S t          |t          j                  r,t          j        |j                                                 S t          |          sJ  t           fd|                                D                       t           fd|	                                D                         |
                                          |j                  S )Nc              3   0   K   | ]} |          V  d S rL   r   r   rB  new_with_shape_envr  s     r   rO   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s1      HHq$$Y22HHHHHHr   c              3   0   K   | ]} |          V  d S rL   r   r  s     r   rO   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s1      JJq$$Y22JJJJJJr   )rM   r   r   SymIntr  with_shape_envSymFloatrV   sizestridestorage_offset	is_nested)r  faker  r  s   ` r   r  z"bisect.<locals>.new_with_shape_env  s&   dC   	KdEL)) 	E<	 8 8 C CDDDdEN++ 	G>$)":":9"E"EFFF$/////~HHHHHDIIKKHHHHHJJJJJDKKMMJJJJJy$*=*=*?*?@@N	
 
 	
r   tracked_fakesc                      |J 	                        fd|D             d |D             d |D                        d S # t          $ r}|cY d }~S d }~ww xY w)Nc                 2    g | ]} |j                   S r   )r  )r   rT   r  r  s     r   r   z8bisect.<locals>.check_shapeenv_fails.<locals>.<listcomp>
  s)    NNN1##Iqv66NNNr   c                     g | ]	}|j         
S r   )sourcerS   s     r   r   z8bisect.<locals>.check_shapeenv_fails.<locals>.<listcomp>  s    111a111r   c                     g | ]	}|j         
S r   )symbolic_contextrS   s     r   r   z8bisect.<locals>.check_shapeenv_fails.<locals>.<listcomp>  s    JJJq 2JJJr   )input_contexts)produce_guardsr]  )r  r  r   r  s   `  r   check_shapeenv_failsz$bisect.<locals>.check_shapeenv_fails  s     (((	 $$NNNNNNNN11=111JJMJJJ %   
 4" 	 	 	HHHHHH	s   9A 
AAAAc                     | j                  } d |dz                      }|j                                          ||         j                  S r   )r  r   lintr  )r  rw   r  r  r  r  r  s      r   check_node_failsz bisect.<locals>.check_node_fails  s[    -.++F<VaZ<,@AA	##Ivf~/KLLLr   z2translation validation succeeded: no errors found.c                 <    g | ]}|j         t          j        k    |S r   )r   r   r   )r   r  s     r   r   zbisect.<locals>.<listcomp>/  s-       $+2N2N2N2N2Nr   r&   r)   zbisecting at %s: %s
evaluatingzunexpected event type: zadding runtime assertzbisecting expects z/ to have at least 2 positional arguments. Got: z9 to have a SymPy expression as its second argument. Got: )r(  r  r  )$torch.fx.experimental.recordingr  r  r  %torch.fx.experimental.symbolic_shapesr  r  r  r  r   r   Noder   r   r/   r]  _snapshot_tracked_fakesr/  infoshould_record_eventsrj   translation_validation_no_bisectr   nodesr   r0  rM   is_evaluate_expris_defer_runtime_assertrD   r  r   r,  r   re  r  )r  r  r  r  r  r  last_exception	exceptionassert_nodesleftmidrightr  eventr  rD   r  r  r  r  r  r  s                   @@@@@@r   bisectr    s            
          F5UX] 5} 5 5 5 5 5 5 5
h 
 
 
 
 
 
 
 
 ,4T#Y,?	%	&     &Mux} M:M1N M M M M M M M M M *)94466 N   	EFFF) V-T   I ".  L !S..2u#D''U(;<<Ie
,,e|!C 		'nnT.B.BCCC *)$//	#S> 	EE7D ,, 9IdO=P!Q!QQDN4  E 0$,,..QQ0Q%0Q0QQQ./:Dt99>>>	UZ 	 	D			 	 >> d1gu{++  	 UZ 	  	 T!W	  	  +
 $$!W#I./	   r   )8r   r]   loggingr   r   dataclassesr   typingr   r   r   r   r   r   torch.fxtorch.fx.tracebackr   	tracebackr   torch._dynamo.excr   torch._dynamo.utilsr	   torch.fx.noder
   r   torch.utils._sympy.interpr   	getLoggerr   r/  r"   r.   r0   r   r_   ra   r   Interpreterr   r   rb   ri  __all__ImportErrortorch.fx.experimentalrf  rj  r   rd  r   rZ  rh  r]  re  r  r   r   r   <module>r     s           ! ! ! ! ! ! 1 1 1 1 1 1 1 1 1 1 1 1    ) ) ) ) ) ) ) ) ) 2 2 2 2 2 2 , , , , , , * * * * * * * * 2 2 2 2 2 2 g!!q	IIIHP& P& P& P& P& P&j  $ ]4 ]4 ]4 ]4 ]4 ]4 ]4 Y]4N?J ?J&< ?J ?J ?J ?J ?JT4 4 4 4 4EH0 4 4 4DVE VE VE VE VE VE VE VELRA RA RA RA RA RA RA RA~ G
 
 
GG    G  GGG2 4 3 3 3 3 35 5 5 5 51 1 1 1 1  / / / / /. / / /B
/ 
/ 
/ 
/ 
/ 4 
/ 
/ 
/        L L L L Ls   'A%C C! C!