
    sgc{                     D   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jB                  e"      Z#	 d dl$Z$de$jJ                  d	e&fd
Z'e G d d             Z(de
ddd	e
fdZ) G d dej*                  jT                        Z+ G d d      Z, G d d      Z-dZ.g dZ/d dl1m2Z3 d	e4fdZ5d	e6fdZ7d Z8 G d de      Z9 G d  d!e      Z: e8        d" Z;y# e0$ r	 dZ.g dZ/Y Cw xY w)#    N)	dataclass)	AnyCallableDictListOptionalSetTupleTypeUnion)TorchDynamoException)ArgumentTarget)sympy_interp)dynamo_timedereturnc                 Z  
 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| j                         S | j                         }|j                         t	        |      } ||       }t         j                  k(  rd}nt         j                  t         j                  fv r
fd
 
|       }nQt         j                   k(  r| j#                         dk(  sJ | j%                  d	      }t        j                  |      sJ |j                         j                         }t         j&                  d
t         j(                  dt         j*                  di}||v r||   } ||      }nt         j,                  t         j.                  fv rJ| j#                         dk(  sJ t1        | j%                  d	            }|j3                  d      rd|dd  z   S |S t         j4                  k(  r | j#                         d	k(  sJ t	        |      S |dz   dj7                  |      z   }	d|	j9                          dS )Nzunsupported expression type: r   r   c                     t        | j                               D cg c]  }t        | j                  |             c}S c c}w N)rangenum_argsz3strarg)r   is     R/var/www/html/venv/lib/python3.12/site-packages/torch/fx/experimental/validator.pyget_args_strzz3str.<locals>.get_args_str@   s-    -21::<-@AE!%%(OAAAs   !A zcan't print Z3 expression: powc           	         t        j                  |       r!| j                         j                         k(  st	        |       gS t        | j                               D cg c]   } | j                  |            D ]  }| " c}}S c c}}w r   )z3is_appdeclkindr   r   r   r   )r   r   xcollect_str_argsr#   s      r   r%   zz3str.<locals>.collect_str_args\   s|    		!D)@!!H:% "'qzz|!4!1!%%(!;    s    %B	   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@   zz!}A =aSAA}	BBJJ 	B49 	B
 KKN
 yy|:1#>????1!5!5a!8;;= vvxyy{YA2>>!BbllBLL11 $A&DR\\! ::<1$$$%%(C99S>!>hhjoo'G TSSM -'"7+#C(boor'7'788::<1$$$1558_F   &++ MR+++::<1$$$t9cCHHTN*6==?#1%%    c                      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y)_Z3OpsTranslationValidator	validatorr$   r   c                 P    | j                         r| S t        j                  |       S r   )is_realr    ToRealr$   s    r   to_realz_Z3Ops.to_real   s    		1515rH   c                 P    | j                         r| S t        j                  |       S r   )is_intr    ToIntrP   s    r   to_intz_Z3Ops.to_int   s    
133rH   	numeratordenominatorc                     | j                   j                  |dk7         t        j                  |      t        j                  |      z  S Nr   )rL   add_assertionrJ   rQ   selfrV   rW   s      r   divz
_Z3Ops.div   s6    NN(()9:>>),v~~k/JJJrH   numberc                 ,    t         j                  |      S r   )rJ   rU   r\   r^   s     r   floorz_Z3Ops.floor   s    ==((rH   c                     |j                         xs |j                         }t        j                  | j                  ||            }|rt        j	                  |      S |S r   )rN   rJ   rU   r]   rQ   )r\   rV   rW   cast_result_to_realresults        r   floordivz_Z3Ops.floordiv   sQ    "+"3"3"5"N9L9L9N]]488I{#CDF .A6>>&)LfLrH   c                 x    t        j                  | j                  |      |k  | j                  |dz         |      S Nr&   )r    Ifra   r`   s     r   ceilz_Z3Ops.ceil   s7    55

6"V+

6A:& rH   abc                 6    t        j                  ||kD  ||      S r   r    rh   r\   rj   rk   s      r   maxz
_Z3Ops.max       55Q1%%rH   c                 6    t        j                  ||k  ||      S r   rm   rn   s      r   minz
_Z3Ops.min   rp   rH   pqc                 2    || j                  ||      |z  z
  S r   )re   r\   rs   rt   s      r   modz
_Z3Ops.mod   s    t}}Q*Q...rH   baseexpc                 v    | j                   j                  t        j                  |dk7  |dkD               ||z  S rY   )rL   rZ   r    Orr\   rx   ry   s      r   r   z
_Z3Ops.pow   s1    NN((tqy#')BC3;rH   c                 r    t         j                  |      }| j                  j                  |dk\         |dz  S )Nr         ?)rJ   rQ   rL   rZ   r`   s     r   sqrtz_Z3Ops.sqrt   s4     ^^F+F NN((15S= rH   c                 ,    t        j                  |      S r   )r    Absr`   s     r   absz
_Z3Ops.abs   s    66&>!rH   c                     t        j                  | j                  |t        j                  d            dk(  | j	                  |dz
        | j                  |dz               S )Nr)   r~   )r    rh   rw   IntValri   ra   r`   s     r   round_to_intz_Z3Ops.round_to_int   sP     551.#5		&3,'

6C<( rH   N)__name__
__module____qualname____annotations__staticmethodr    ArithRefrQ   rU   r]   ra   re   ri   ro   rr   rw   r   r   r   r    rH   r   rJ   rJ      s    *) 
	6r{{ 	6r{{ 	6 
	6 
	4bkk 	4bkk 	4 
	4	K 	K2;; 	K2;; 	K	) 	) 	)	Mbkk 	M 	MPRP[P[ 	M	r{{ 	r{{ 		& 	& 	& 	&	& 	& 	& 	&
	/ 	/ 	/ 	/	BKK 	bkk 	bkk 	
	!r{{ 	!r{{ 	!	"bkk 	"bkk 	"	r{{ 	r{{ 	rH   rJ   rB   rL   rK   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.                   ||j0                        t(        j2                   ||j4                        t(        j6                   |d       t(        j8                   ||j:                        t(        j<                  t(        j<                  }| |v r||    S  ||       S )Nc                 t     dt         j                  ffdt        j                          fd       }|S )Nr   c                    t        | t        j                  t        j                  f      r| S t        | t              sr.t        | 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RealValr1   type)rj   as_bools    r   wrapz z3op.<locals>.lift.<locals>.wrap   s    a"++rzz!:;H a&7z!S7I::d1g..a#u}}!5699SV,,a%!56::eAh// #4T!WI!>??rH   c                  $    fd| D        } | S )Nc              3   .   K   | ]  } |        y wr   r   ).0rj   r   s     r   	<genexpr>z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>  s     6AQ6s   r   )rC   wrapped_argsfuncr   s     r   wrapperz#z3op.<locals>.lift.<locals>.wrapper  s      76\**rH   )r    r.   	functoolswraps)r   r   r   r   s   ` @r   liftzz3op.<locals>.lift   s9    @2:: @ __T"+ #+ NrH   c                     | r|S |S r   r   )rk   tfs      r   <lambda>zz3op.<locals>.<lambda>(  s    Q A rH   )operatornot_and_or_rJ   r    NotAndr{   re   truedivr]   rw   r   builtinsroundr   mathri   ra   torch	sym_floatrQ   sym_maxro   sym_minrr   sym_ite	_sym_sqrtr   _assert)rB   rL   boolean_opsr   opsreplacement_mapr   s         @r   z3opr      s   
  }}hmmX\\B#	. Y
MM4<
 MM4<
 LL$ruu+	

 tCLL1
 d377m
 LL$sww-
 LL$sww-
 NND!1!12
 IItCHH~
 JJSYY
  OOT#++.!
" MM4=#
$ MM4=%
& MM4 =>'
( OOT#((^)
. MM5==/
2 ')O&;r"IbIrH   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graphrL   rK   c                 x    || _         t        j                  j                  i |      }t        |   |d       y )N)rootr   T)garbage_collect_values)rL   r   fxGraphModulesuper__init__)r\   r   rL   module	__class__s       r   r   zPopulateValidator.__init__:  s7    &DN XX))r)?FGVDArH   targetrC   .kwargsr   c                 f    t        j                         d   }| j                  j                  |      S )Nsymbol)fx_tracebackget_current_metarL   z3var)r\   r   rC   r   r   s        r   placeholderzPopulateValidator.placeholderB  s*    !224X>F>>''//rH   c                     |t         j                  k7  r%t        |   t	        || j
                        ||      S t        |      dk(  sJ dt        |       d       | j
                  j                  |d          y )Nr&   z'expected 1 argument on assertion. Got: r*   r   )r   r   r   call_functionr   rL   lenadd_source_expr)r\   r   rC   r   r   s       r   r   zPopulateValidator.call_functionF  sl    &w,T&$..-I4QWXX t9>Y%LSQUYKWX#YY>NN**473rH   )r   r   r   r   r   Graphr   r   r
   r   r   r/   r   r   r   __classcell__)r   s   @r   r   r   9  s    	B%((.. 	B=S 	B	0f 	0E(C-4H 	0RVWZ\_W_R` 	0eh 	0	4 	4eHcM6J 	4TXY\^aYaTb 	4gj 	4 	4rH   r   c                   h   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j6                  dej                  fdZy) 	SympyToZ3>   eqgegtleltneaddmulr   Nc                 F    || _         t        | j                         | _        y r   )
_validatorrJ   _ops)r\   rL   s     r   r   zSympyToZ3.__init__X  s     (DOt/DIrH   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   r1   )r\   r   r   s      r   constantzSympyToZ3.constant_  sr    #yyU,,$zz%,//

"zz$u+..>ugFGGrH   r$   c                 p    |t         j                  k(  rt        j                  |      S t	        d| d      )Nz	to_dtype z NYI)r   float64r    rO   NotImplementedErrorr\   r$   r   s      r   to_dtypezSympyToZ3.to_dtypei  s0    %yy|#%	%&=>>rH   c                 ,    t        j                  |      S r   )r    rT   r   s      r   trunc_to_intzSympyToZ3.trunc_to_intn  s    88A;rH   c                 8    | j                   j                  |      S r   )r   r   r   s      r   r   zSympyToZ3.round_to_intq  s    99))!,,rH   rV   rW   c                 :    | j                   j                  ||      S r   r   r]   r[   s      r   int_truedivzSympyToZ3.int_truedivt      99==K88rH   c                 :    | j                   j                  ||      S r   r   r[   s      r   r   zSympyToZ3.truedivw  r   rH   c                 :    | j                   j                  ||      S r   r   re   r[   s      r   re   zSympyToZ3.floordivz      99%%i==rH   c                 :    | j                   j                  ||      S r   r   r[   s      r   r]   zSympyToZ3.div}  r   rH   rx   ry   c                 :    | j                   j                  ||      S r   r   r   r|   s      r   r   zSympyToZ3.pow      99==s++rH   c                 :    | j                   j                  ||      S r   r   r|   s      r   pow_by_naturalzSympyToZ3.pow_by_natural  r   rH   rs   rt   c                 :    | j                   j                  ||      S r   )r   rw   rv   s      r   rw   zSympyToZ3.mod  s    99==A&&rH   c                 8    | j                   j                  |      S r   )r   ri   r   s      r   ceil_to_intzSympyToZ3.ceil_to_int  s    99>>!$$rH   c                 8    | j                   j                  |      S r   )r   ra   r   s      r   floor_to_intzSympyToZ3.floor_to_int  s    99??1%%rH   namec                 t   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   ra   ri   minimummaximumzunhandled operator: )r    r   r{   r   r   ra   ri   rr   ro   OPERATOR_HANDLESgetattrr   AttributeError)r\   r  REPLACEMENTs      r   __getattr__zSympyToZ3.__getattr__  s    uu		99==99==K {""4((t,,,x.. #7v!>??rH   exprc                 D    t        | | j                  j                  |      S r   )r   r   symbols)r\   r  s     r   runzSympyToZ3.run  s    doo&=&=tDDrH   )rL   rK   r   N)r   r   r   r  r   r   r   r   r    r.   r   r   r   r   r   r   r   re   r]   r   r  rw   r  r  r/   r  r   Basicr  r   rH   r   r   r   U  sG   M	01	0 	0	H# 	Hekk 	Hbjj 	H	?bkk 	?%++ 	?"++ 	?
	"++ 	ekk 	bkk 		-"++ 	-ekk 	-bkk 	-	9 	92;; 	9SUS^S^ 	9	9R[[ 	9r{{ 	9r{{ 	9	>bkk 	> 	>PRP[P[ 	>	> 	>2;; 	>2;; 	>	,BKK 	,bkk 	,bkk 	,	,r{{ 	, 	, 	,	' 	' 	' 	'	% 	%U[[ 	%R[[ 	%	&"++ 	&ekk 	&bkk 	&	@C 	@C 	@"	EEKK 	EBJJ 	ErH   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y)rK   r   Nc                     t         j                  d       i | _        t               | _        t               | _        t               | _        y )Nznew instance)logdebugr  set_source_exprs_target_exprs_assertionsr\   s    r   r   zTranslationValidator.__init__  s;    IIn% <>DL
 36%D
 36%D 14DrH   r   c                 P    || j                   v s
J d|        | j                   |   S )NzZ3 variable not found for: )r  )r\   r   s     r   r   zTranslationValidator.z3var  s0    T\\)Q-H+QQ)<<''rH   r   c                    || j                   v r| j                   |   S t        j                  d|j                  |j                         |t
        u rJt        j                  |j                        }|j                  r}| j                  j                  |dkD         n^|t        u r t        j                  |j                        }n6|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)r\   r   r   vars       r   add_varzTranslationValidator.add_var  s    %||F++II-v{{DMMJs{ffV[[) %%&&**373ggfkk*ggfkk*"%Gv#NOO#&DLL JrH   r   c                     |j                   D ]/  }t        |t        j                        sJ | j	                  |       1 y r   )free_symbolsr   r   Symbolr   )r\   r   ss      r   _check_freesymbolsz'TranslationValidator._check_freesymbols  s6    ^^ !!U\\222 

1	rH   c                     t        |       j                  |      }t        |t        j                        s
J d|        |S )Nz"expected boolean expression. Got: )r   r  r   r    r   r\   r   z3exprs      r   to_z3_boolean_exprz'TranslationValidator.to_z3_boolean_expr  s>    t_((+Ffbjj1`5WX^W_3``1MrH   c                     || j                   vrt        j                  dt        |             | j                   j	                  |       y )Nzadd source guard: %s)r  r  r  r   r   )r\   r   s     r   r   z$TranslationValidator.add_source_expr  s7    ***		0%(;""1%rH   c                     | j                  |       | j                  |      }|| j                  vrt        j	                  dt        |             | j                  j                  |       y )Nzadd target guard: %s)r,  r0  r  r  r  r   r   r.  s      r   add_target_exprz$TranslationValidator.add_target_expr  sU    ##A&,,Q/F***		0%-@""6*rH   c                 J   t        |t        j                        r#| j                  |       | j	                  |      }n|}t        |t
        j                        sJ || j                  vrt        j                  dt        |             | j                  j                  |       y )Nzadd assertion: %s)r   r   r  r,  r0  r    r   r  r  r  r   r   )r\   r   refs      r   rZ   z"TranslationValidator.add_assertion  s|    !U[[)''*--a0c2::...$***		-uSz:  %rH   c                 d    t        d      5  | j                         cd d d        S # 1 sw Y   y xY w)NzTranslationValidator.validate)r   	_validater  s    r   validatezTranslationValidator.validate  s*    => (~~'( ( (s   &/c                    t        | j                        dk(  st        | j                        dk(  ry t        j                  d      }|j                  t                      | j                  D ]  }|j                  |        |j                  t        j                  t        j                  | j                                 |j                  | j                    t        j                  d       |j                         }|t        j                  k(  r]|j                         }t!        || j                  | j                  | j                  D cg c]  }|j#                  |      r| c}      |t        j$                  k(  rt        j'                  d       y |t        j(                  k(  sJ t        j                  d       y c c}w )Nr   QF_NRA)timeoutztranslation validation: start)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satmodelValidationExceptionevaluateunknownwarningunsat)r\   solver	assertionrrA  inps         r   r7  zTranslationValidator._validate  s`   4%%&!+s43E3E/F!/K  \\(+FJJ=?J@ "-- &	

9%&
 JJrvvbffd&8&89:;FJJ**+II56ABFF{ )4++T-?-?'+'9'9) #PSAT)  

? KK \] =(=II?@)s   G#G)r   N)r   r   r   r   r   r*  r    r.   r   r   r'  r  r,  r   r0  r   Exprr3  r   rZ   r8  r7  r   rH   r   rK   rK     s    	6*	( 	( 	(
	%,, 	d 	rzz 	0	 	 		 	

 	
	&RZZ 	&D 	&
	+UZZ 	+D 	+		&5U[[)@#A 		&d 		&	(2	ArH   T)	r   r   r   r   rK   translation_validation_enabledr>  rB  BisectValidationExceptionF)rL  r>  rB  rM  )_configc                  F    t                t        xr t        j                  S r   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   rH   r   rL  rL  S  s     #$4v444rH   c                  "    t         j                  S r   )rR  r>  r   rH   r   r>  r>  Z  s    000rH   c                  @    t         st        j                  rJ d       y y )Nzotranslation validation requires Z3 package. Please, either install z3-solver or disable translation validation.)rQ  rR  rS  r   rH   r   rP  rP  ^  s$    &77 	7777rH   c                       e Zd Zd Zd Zy)rB  c                 f   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|
 | _        y )	Nr   c                     |  d|     S )N: r   )symrA  s    r   	symbolstrz/ValidationException.__init__.<locals>.symbolstri  s    U"U3ZL))rH   c                 2    dj                  d | D              S )N
c              3   &   K   | ]	  }d |   yw)z  ==> Nr   )r   r$   s     r   r   zBValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>m  s     6avaS\6s   )r@   )xss    r   	joinlinesz/ValidationException.__init__.<locals>.joinlinesl  s    9962666rH   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

Failed Source Expressions:
)rQ  r/   sortedmapr   msgdetails)r\   rA  
assertionstarget_exprsr<  r[  r`  	model_strassertions_strtarget_exprs_strfailed_source_exprs_strs    `         r   r   zValidationException.__init__f  s    w	*c 	*	7S 	7 fSE%:;<	"6#eZ*@#AB$VC|,D%EF"+F3u>Q3R,S"T3
         rH   c                 8    | j                    d| j                   S N

rc  rd  r  s    r   __str__zValidationException.__str__      ((4~..rH   Nr   r   r   r   ro  r   rH   r   rB  rB  e  s    8/rH   rB  c                       e Zd Zd Zd Zy)rM  c                 h    d| d| | _         d|j                          d|j                   | _        y )Nz#translation validation failed when rY  z)Failure occurred while running node:
    rm  )rc  format_noderd  )r\   validation_excr  failed_actiontraced_nodes        r   r   z"BisectValidationException.__init__  sD    8r$P   	rH   c                 8    | j                    d| j                   S rl  rn  r  s    r   ro  z!BisectValidationException.__str__  rp  rH   Nrq  r   rH   r   rM  rM    s    /rH   rM  c                 6   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} | | j!                               }|st"        j%                  d       y | j&                  rt(        j*                  r|i }| j,                  j.                  D cg c]"  }|j0                  t        j2                  k(  s!|$ }	}ddt5        |	      dz
  }}}
|
|k  rH|
|z   dz  }|	|   }t"        j7                  d| ||              ||      ||<   ||   r|}n|dz   }
|
|k  rH|
|v rt9        ||
   t              sJ |	|
   } ||      }|j;                         rd}n|j=                         s
J d|        d}|j>                  }|J t5        |      dk\  s J d|j@                   dt5        |              t9        |d   tB        jD                        s#J d|j@                   dtG        |d                 tI        ||
   |d   ||jJ                  |         c c}w )Nr   )ShapeEnvSHAPEENV_EVENT_KEYCURRENT_NODE_KEY)FakeTensorMetaShapeEnvEventreplay_shape_env_eventsnoder   c                 H    | j                   v sJ | j                         S r   )meta)r  r{  eventss    r   get_node_eventzbisect.<locals>.get_node_event  s*    !TYY...dii 2344rH   	shape_envc           	          t        |t              r|S t        |t        j                        r.t        j                  |j                  j                               S t        |      sJ  t         fd|j                         D              t         fd|j                         D                |j                               |j                        S )Nc              3   0   K   | ]  } |        y wr   r   r   r+  new_with_shape_envr  s     r   r   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s     Hq$Y2H   c              3   0   K   | ]  } |        y wr   r   r  s     r   r   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s     Jq$Y2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dELL)<<		 8 8 CDD$///HDIIKHHJDKKMJJy$*=*=*?@NN	
 	
rH   tracked_fakesc           	      $   |J 	 | j                  |D cg c]  } | |j                         c}|D cg c]  }|j                   c}|D cg c]  }|j                   c}       y c c}w c c}w c c}w # t        $ r}|cY d }~S d }~ww xY w)N)input_contexts)produce_guardsr  sourcesymbolic_contextrB  )r  r  rj   r   r  s       r   check_shapeenv_failsz$bisect.<locals>.check_shapeenv_fails  s    (((	 $$@MN1#Iqvv6N#01a1<IJq 2 2J % 
 	 O1J # 	H	sD   A: A+A: A0
	A: A5"A: +A: :	BB
B
Bc                     | j                      } d |dz          }|j                  j                           ||   j                        S rg   )r  r   lintr  )r  r^   r  r{  r  r  r  s      r   check_node_failsz bisect.<locals>.check_node_fails  sN    -.+F;FQJ,?@	#Ivf~/K/KLLrH   z2translation validation succeeded: no errors found.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  rv  rw  )&%torch.fx.experimental.symbolic_shapesrz  r{  r|  torch.fx.experimental.recordingr}  r~  r  r  r   r   Noder   r   r   rB  _snapshot_tracked_fakesr  infoshould_record_eventsrR   translation_validation_no_bisectr   nodesr   r   r   r  r   is_evaluate_expris_defer_runtime_assertrC   r  r   r  r   rM  r  )r  rz  r|  r~  r  r  last_exception	exceptionr  assert_nodesleftmidrighteventrv  rC   r}  r{  r  r  r  r  s                   @@@@@@r   bisectr    s   ddffF5UXX]] 5} 5
h 
 
 $s)AT YabuYv "Muxx}} M:M1N M M *)Y5V5V5XYN 	EF))V-T-T  I &/__%:%:[TdkkU]]>ZD[L[ !S.2u#D
,e|!C 		'nT.BC *$/	#S>E7D , 9IdO=P!QQQD4 E$,,.Q2I%0QQ./::Dt9> 
UZZL )D	{	> d1gu{{+ 
UZZL )T!W	 +
 $$!W#II./	 S \s   "J<J)<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    r.   r/   r   rJ   r   Interpreterr   r   rK   rQ  __all__ImportErrortorch.fx.experimentalrN  rR  r   rL  r   r>  rP  rB  rM  r  r   rH   r   <module>r     sZ         ! O O O   ) ) 2 * 2 ,g!xJQ& Q& Q&p T T T|:J :J&< :J :JJ4EHH00 48LE LExMA MAp GG 45 51 1/. /B
/ 4 
/   v{  GGs   3A"D DD