
    קgc{                     V   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
mZmZmZmZmZmZm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mZ d dlmZ d dlm Z   ej!        e"          Z#	 d dl$Z$de$j%        d	e&f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# e0$ r	 dZ.g dZ/Y nw xY wd dl1m2Z3 d	e4fdZ5d	e6fdZ7d Z8 G d de          Z9 G d  d!e          Z: e8             d" Z;dS )#    N)	dataclass)	AnyCallableDictListOptionalSetTupleTypeUnion)TorchDynamoException)ArgumentTarget)sympy_interp)dynamo_timed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     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/fx/experimental/validator.py
<listcomp>z/z3str.<locals>.get_args_str.<locals>.<listcomp>A   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_args\   s|    	! D)@)@!!HH:%    !&qzz||!4!4   r      r   z!=><z(/z(idiv    ())r'   is_exprExprRefr   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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                   b   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        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        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dS )_Z3OpsTranslationValidator	validatorr%   r   c                 V    |                                  r| nt          j        |           S N)is_realr'   ToRealr%   s    r   to_realz_Z3Ops.to_real   s!    		51115r   c                 V    |                                  r| nt          j        |           S rR   )is_intr'   ToIntrU   s    r   to_intz_Z3Ops.to_int   s!    

3113r   	numeratordenominatorc                     | j                             |dk               t                              |          t                              |          z  S Nr   )rP   add_assertionrN   rV   selfr[   r\   s      r   divz
_Z3Ops.div   s@    N(()9:::>>),,v~~k/J/JJJr   numberc                 6    t                               |          S rR   )rN   rZ   ra   rc   s     r   floorz_Z3Ops.floor   s    ==(((r   c                     |                                 p|                                 }t                              |                     ||                    }|rt                              |          n|S rR   )rS   rN   rZ   rb   rV   )ra   r[   r\   cast_result_to_realresults        r   floordivz_Z3Ops.floordiv   sc    "+"3"3"5"5"N9L9L9N9N]]488I{#C#CDDF .AL6>>&)))fLr   c                     t          j        |                     |          |k     |                     |dz             |          S Nr+   )r'   Ifrf   re   s     r   ceilz_Z3Ops.ceil   s@    5

6""V+

6A:&&  r   abc                 6    t          j        ||k    ||          S rR   r'   rm   ra   ro   rp   s      r   maxz
_Z3Ops.max       5Q1%%%r   c                 6    t          j        ||k     ||          S rR   rr   rs   s      r   minz
_Z3Ops.min   ru   r   pqc                 :    ||                      ||          |z  z
  S rR   )rj   ra   rx   ry   s      r   modz
_Z3Ops.mod   s     t}}Q**Q...r   baseexpc                 v    | j                             t          j        |dk    |dk                         ||z  S r^   )rP   r_   r'   Orra   r}   r~   s      r   r"   z
_Z3Ops.pow   s6    N((tqy#')B)BCCC3;r   c                 |    t                               |          }| j                            |dk               |dz  S )Nr         ?)rN   rV   rP   r_   re   s     r   sqrtz_Z3Ops.sqrt   s;     ^^F++F N((1555S= r   c                 *    t          j        |          S rR   )r'   Absre   s     r   absz
_Z3Ops.abs   s    6&>>!r   c                     t          j        |                     |t          j        d                    dk    |                     |dz
            |                     |dz                       S )Nr.   r   )r'   rm   r|   IntValrn   rf   re   s     r   round_to_intz_Z3Ops.round_to_int   s\     51..#5		&3,''

6C<((  r   N)__name__
__module____qualname____annotations__staticmethodr'   ArithRefrV   rZ   rb   rf   rj   rn   rt   rw   r|   r"   r   r   r   r   r   r   rN   rN      sp         *))) 
	6r{ 	6r{ 	6 	6 	6 
	6 
	4bk 	4bk 	4 	4 	4 
	4	K 	K2; 	K2; 	K 	K 	K 	K	) 	) 	) 	) 	) 	)	Mbk 	M 	MPRP[ 	M 	M 	M 	M	r{ 	r{ 	 	 	 		& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& 	&
	/ 	/ 	/ 	/ 	/ 	/ 	/	BK 	bk 	bk 	 	 	 	
	!r{ 	!r{ 	! 	! 	! 	!	"bk 	"bk 	" 	" 	" 	"	r{ 	r{ 	 	 	 	 	 	r   rN   rG   rP   rO   c                    t           j        t           j        t           j        h}| |v fd}t	          |          }i t           j         |t
          j                  t           j         |t
          j                  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         |d           t(          j         ||j                  t(          j        t(          j        }| |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: )
isinstancer'   r   BoolRefboolintBoolValsympyIntegerr   floatFloatRealValr6   type)ro   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                  *    fd| D             } | S )Nc              3   .   K   | ]} |          V  d S rR   r   )r   ro   r   s     r   	<genexpr>z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>  s+      66AQ666666r   r   )rH   wrapped_argsfuncr   s     r   wrapperz#z3op.<locals>.lift.<locals>.wrapper  s+      7666666t\**r   )r'   r3   	functoolswraps)r   r   r   r   s   ` @r   liftzz3op.<locals>.lift   so    @2: @ @ @ @ @ @ _T""+ + + + + #"+ Nr   c                     | r|n|S rR   r   )rp   tfs      r   <lambda>zz3op.<locals>.<lambda>(  s    QA r   )operatornot_and_or_rN   r'   NotAndr   rj   truedivrb   r|   r   builtinsroundr   mathrn   rf   torch	sym_floatrV   sym_maxrt   sym_minrw   sym_ite	_sym_sqrtr   _assert)rG   rP   boolean_opsr   opsreplacement_mapr   s         @r   z3opr      s   
  }hmX\B#	 	 	 	 	. Y
M44<<
 M44<<
 L$$ru++	

 ttCL11
 dd37mm
 L$$sw--
 L$$sw--
 NDD!122
 IttCH~~
 JSY
  OTT#+..!
" M44==#
$ M44==%
& M44 = =>>'
( OTT#(^^)
. M5=/
2 ')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graphrP   rO   c                     || _         t          j                            i |          }t	                                          |d           d S )N)rootr   T)garbage_collect_values)rP   r   fxGraphModulesuper__init__)ra   r   rP   module	__class__s       r   r   zPopulateValidator.__init__:  sI    &DN X))r)??FGGVDAAAAAr   targetrH   .kwargsr   c                 h    t          j                    d         }| j                            |          S )Nsymbol)fx_tracebackget_current_metarP   z3var)ra   r   rH   r   r   s        r   placeholderzPopulateValidator.placeholderB  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   rP   lenadd_source_expr)ra   r   rH   r   r   s       r   r   zPopulateValidator.call_functionF  s    &&ww,,T&$.-I-I4QWXXX t99>>>#YSQUYY#Y#Y#Y>>>N**4733333r   )r   r   r   r   r   Graphr   r   r
   r   r   r4   r   r   r   __classcell__)r   s   @r   r   r   9  s        	B%(. 	B=S 	B 	B 	B 	B 	B 	B	0f 	0E(C-4H 	0RVWZ\_W_R` 	0eh 	0 	0 	0 	0	4 	4eHcM6J 	4TXY\^aYaTb 	4gj 	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mulrP   rO   r   Nc                 F    || _         t          | j                   | _        d S rR   )
_validatorrN   _ops)ra   rP   s     r   r   zSympyToZ3.__init__X  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   r6   )ra   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'   rT   NotImplementedErrorra   r%   r   s      r   to_dtypezSympyToZ3.to_dtypei  s7    %%y||#%&=%&=&=&=>>>r   c                 *    t          j        |          S rR   )r'   rY   r   s      r   trunc_to_intzSympyToZ3.trunc_to_intn  s    8A;;r   c                 6    | j                             |          S rR   )r   r   r   s      r   r   zSympyToZ3.round_to_intq  s    9))!,,,r   r[   r\   c                 8    | j                             ||          S rR   r   rb   r`   s      r   int_truedivzSympyToZ3.int_truedivt      9==K888r   c                 8    | j                             ||          S rR   r   r`   s      r   r   zSympyToZ3.truedivw  r   r   c                 8    | j                             ||          S rR   r   rj   r`   s      r   rj   zSympyToZ3.floordivz      9%%i===r   c                 8    | j                             ||          S rR   r   r`   s      r   rb   zSympyToZ3.div}  r   r   r}   r~   c                 8    | j                             ||          S rR   r   r"   r   s      r   r"   zSympyToZ3.pow      9==s+++r   c                 8    | j                             ||          S rR   r  r   s      r   pow_by_naturalzSympyToZ3.pow_by_natural  r  r   rx   ry   c                 8    | j                             ||          S rR   )r   r|   r{   s      r   r|   zSympyToZ3.mod  s    9==A&&&r   c                 6    | j                             |          S rR   )r   rn   r   s      r   ceil_to_intzSympyToZ3.ceil_to_int  s    9>>!$$$r   c                 6    | j                             |          S rR   )r   rf   r   s      r   floor_to_intzSympyToZ3.floor_to_int  s    9??1%%%r   namec                    t           j        t           j        t           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   rf   rn   minimummaximumzunhandled operator: )r'   r   r   r   r   rf   rn   rw   rt   OPERATOR_HANDLESgetattrr   AttributeError)ra   r  REPLACEMENTs      r   __getattr__zSympyToZ3.__getattr__  s    u	9=9= K {"""4((t,,,x... !>!>!>???r   exprc                 8    t          | | j        j        |          S rR   )r   r   symbols)ra   r  s     r   runzSympyToZ3.run  s    do&=tDDDr   )rP   rO   r   N)r   r   r   r  r   r   r   r   r'   r3   r   r   r   r   r   r   r   rj   rb   r"   r  r|   r  r
  r4   r  r   Basicr  r   r   r   r   r   U  s       MMM	01	0 	0 	0 	0 	0	H# 	Hek 	Hbj 	H 	H 	H 	H	?bk 	?%+ 	?"+ 	? 	? 	? 	?
	"+ 	ek 	bk 	 	 	 		-"+ 	-ek 	-bk 	- 	- 	- 	-	9 	92; 	9SUS^ 	9 	9 	9 	9	9R[ 	9r{ 	9r{ 	9 	9 	9 	9	>bk 	> 	>PRP[ 	> 	> 	> 	>	> 	>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ej        ddfdZdeej        ej        f         ddfdZddZddZdS )rO   r   Nc                     t                               d           i | _        t                      | _        t                      | _        t                      | _        d S )Nznew instance)logdebugr  set_source_exprs_target_exprs_assertionsra   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  )ra   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  r  r  r   r   r'   Intis_positiver  r   r   Realr   BoolRuntimeError)ra   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 rR   )free_symbolsr   r   Symbolr   )ra   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  r   r'   r   ra   r   z3exprs      r   to_z3_boolean_exprz'TranslationValidator.to_z3_boolean_expr  sJ    t__((++Ffbj11``3`X^3`3````Mr   c                     || j         vr(t                              dt          |                     | j                             |           d S )Nzadd source guard: %s)r  r  r  r   r   )ra   r   s     r   r   z$TranslationValidator.add_source_expr  sH    ***		0%((;;;""1%%%%%r   c                     |                      |           |                     |          }|| j        vr(t                              dt          |                     | j                            |           d S )Nzadd target guard: %s)r/  r3  r  r  r  r   r   r1  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)r   r   r  r/  r3  r'   r   r   r  r  r   r   )ra   r   refs      r   r_   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   	_validater!  s    r   validatezTranslationValidator.validate  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>1  s;     ) ) ) #PSATAT)) ) )r   )failed_source_exprsz:translation validation: could not validate: got z3.unknownztranslation validation: success)r   r  r  r'   	SolverForr  translation_validation_timeoutr   r   r   r   r  r  checksatrB  ValidationExceptionunknownwarningunsat)ra   solver	assertionrrB  s       @r   r:  zTranslationValidator._validate  s   4%&&!++s43E/F/F!/K/K t \(++FJJ=??J@@@ "- & &	

9%%%% JJrvbfd&89::;;;FJ*++II5666ABF{{ )4+T-?) ) ) )'+'9) ) )    
?? KK \]]]]] ====II?@@@@@r   )r   N)r   r   r   r   r   r-  r'   r3   r   r   r*  r  r/  r   r3  r   Exprr6  r   r_   r;  r:  r   r   r   rO   rO     sk       	6 	6 	6 	6*	( 	( 	( 	( 	( 	(
	%, 	d 	rz 	 	 	 	0	 	 	 	 	 		 	
 	 	 	 	
	&RZ 	&D 	& 	& 	& 	&
	+UZ 	+D 	+ 	+ 	+ 	+		&5U[)@#A 		&d 		& 		& 		& 		&	( 	( 	( 	(2	A 2	A 2	A 2	A 2	A 2	Ar   T)	r   r   r   r   rO   translation_validation_enabledrE  rH  BisectValidationExceptionF)rP  rE  rH  rQ  )_configc                  D    t                       t          ot          j        S rR   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   r   r   rP  rP  S  s     #$$$4v44r   c                      t           j        S rR   )rV  rE  r   r   r   rE  rE  Z  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.)rU  rV  rW  r   r   r   rT  rT  ^  sA     &7  	7      r   c                       e Zd Zd Zd ZdS )rH  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   )symrB  s    r   	symbolstrz/ValidationException.__init__.<locals>.symbolstri  s    ))U3Z)))r   c                 @    d                     d | D                       S )N
c              3       K   | ]	}d | V  
dS )z  ==> Nr   )r   r%   s     r   r   zBValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>m  s(      66a\a\\666666r   )rE   )xss    r   	joinlinesz/ValidationException.__init__.<locals>.joinlinesl  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:
)rU  r4   sortedmapr   msgdetails)ra   rB  
assertionstarget_exprsrC  r_  rd  	model_strassertions_strtarget_exprs_strfailed_source_exprs_strs    `         r   r   zValidationException.__init__f  s#   	*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

rg  rh  r!  s    r   __str__zValidationException.__str__      (.....r   Nr   r   r   r   rs  r   r   r   rH  rH  e  s2          8/ / / / /r   rH  c                       e Zd Zd Zd ZdS )rQ  c                 h    d| d| | _         d|                                 d|j         | _        d S )Nz#translation validation failed when r]  z)Failure occurred while running node:
    rq  )rg  format_noderh  )ra   validation_excr  failed_actiontraced_nodes        r   r   z"BisectValidationException.__init__  sQ    PPP$PP  	 r   c                 $    | j          d| j         S rp  rr  r!  s    r   rs  z!BisectValidationException.__str__  rt  r   Nru  r   r   r   rQ  rQ    s2          / / / / /r   rQ  c                 Z   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   )ShapeEnvSHAPEENV_EVENT_KEYCURRENT_NODE_KEY)FakeTensorMetaShapeEnvEventreplay_shape_env_eventsnoder   c                 @    | j         v sJ | j                           S rR   )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          |          sJ  t           fd|                                D                       t           fd|                                D                         |	                                          |j
                  S )Nc              3   0   K   | ]} |          V  d S rR   r   r   r.  new_with_shape_envr  s     r   r   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 rR   r   r  s     r   r   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s1      JJq$$Y22JJJJJJr   )r   r   r   SymIntr  with_shape_envtuple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$/////~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   ro   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   )sourcer   ro   s     r   r   z8bisect.<locals>.check_shapeenv_fails.<locals>.<listcomp>  s    111a111r   c                     g | ]	}|j         
S r   )symbolic_contextr  s     r   r   z8bisect.<locals>.check_shapeenv_fails.<locals>.<listcomp>  s    JJJq 2JJJr   )input_contexts)produce_guardsrH  )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 rl   )r  r   lintr  )r  rc   r  r  r  r  r  s      r   check_node_failsz bisect.<locals>.check_node_fails  s[    -.++F;FQJ;,?@@	##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&    [[[TdkU]>Z>ZD>Z>Z>Zr   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  rz  r{  )$%torch.fx.experimental.symbolic_shapesr~  r  r  torch.fx.experimental.recordingr  r  r  r  r   r   Noder   r   r   rH  _snapshot_tracked_fakesr  infoshould_record_eventsrV   translation_validation_no_bisectr   nodesr   r  r   is_evaluate_expris_defer_runtime_assertrH   r  r   r  r   rQ  r  )r  r~  r  r  r  r  last_exception	exceptionassert_nodesleftmidrightr  eventrz  rH   r  r  r  r  r  r  s                   @@@@@@r   bisectr    s   ddddddddddffffffffffF5UX] 5} 5 5 5 5 5 5 5
h 
 
 
 
 
 
 
 
 $s)AT YabuYv      "Mux} M:M1N M M M M M M M M M *))Y5V5V5X5XYYN  	EFFF) V-T   I \[Y_%:[[[L !S..2u#D
,,e|!C 		'nnT.B.BCCC *)$//	#S> 	EE7D ,, 9IdO=P!Q!QDN4  E 0$,,..QQ0Q%0Q0QQQQ/:Dt99>>>	UZ 	 	D			 	 >> d1gu{++  	 UZ 	  	 T!W	  	   
 $$!W#I./	   r   )<r   loggingr   r   r   r   dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r   torch.fxtorch.fx.tracebackr   	tracebackr   torch._dynamo.excr   torch.fx.noder   r   torch.utils._sympy.interpr   torch._dynamo.utilsr   	getLoggerr   r  r'   r3   r4   r   rN   r   Interpreterr   r   rO   rU  __all__ImportErrortorch.fx.experimentalrR  rV  r   rP  r   rE  rT  rH  rQ  r  r   r   r   <module>r     s            ! ! ! ! ! ! O O O O O O O O O O O O O O O O O O O O O O   ) ) ) ) ) ) ) ) ) 2 2 2 2 2 2 * * * * * * * * 2 2 2 2 2 2 , , , , , ,g!!xIIIJQ& Q& Q& Q& Q& Q&p T T T T T T T YT|:J :J&< :J :J :J :J :JJ4 4 4 4 4EH0 4 4 48LE LE LE LE LE LE LE LExMA MA MA MA MA MA MA MAp G  GG    G  GGG" 4 3 3 3 3 35 5 5 5 51 1 1 1 1  / / / / /. / / /B
/ 
/ 
/ 
/ 
/ 4 
/ 
/ 
/        v v v v vs   1A"C C('C(