
    N j                     H   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
JrJr  S SKrS SKrS SKrS SKJs  Jr  S SKJr  S SKJr  S SKJrJr  S SKJr  \R:                  " \5      r S SK r S	\ RB                  S
\"4S jr#S r$\ " S S5      5       r%S\SSS
\4S jr& " S S\R"                  RN                  5      r( " S S5      r) " S S5      r*Sr+/ SQr,S SK.J/r0  S
\14S jr2S
\34S jr4S r5 " S  S!\5      r6 " S" S#\5      r7\5" 5         S$ r8g! \- a	    Sr+/ SQr, NFf = f)%    N)Callable)	dataclass)AnyOptionalUnion)TorchDynamoException)dynamo_timed)ArgumentTarget)sympy_interpereturnc                 p  ^
^ [         R                  " U 5      (       d  [        SU  35      eS[         R                  S[        [
           4S jn[         R                  " U 5      n [         R                  " U 5      (       d  [        SU  35      e[         R                  " U 5      (       d  [         R                  " U 5      (       a  U R                  5       $ U R                  5       nUR                  5       m[        U5      nU" U 5      nT[         R                  :X  a  SnGOT[         R                  [         R                   4;   a  U
U4S jm
T
" U 5      nGOT[         R"                  :X  a  U R%                  5       S:w  a  [        S	U R%                  5        35      eU R'                  S
5      n[         R                  " U5      (       d  [        S5      eUR                  5       R                  5       n[         R(                  S[         R*                  S[         R,                  S0nXg;   a  Xv   nU" U5      nOT[         R.                  [         R0                  4;   aj  U R%                  5       S:w  a  [        S	U R%                  5        35      e[3        U R'                  S
5      5      nUR5                  S5      (       a  SUSS  -   $ U$ T[         R6                  :X  a;  U R%                  5       S
:w  a  [        SU R%                  5        35      e[        U5      $ US-   SR9                  U5      -   n	SU	R;                  5        S3$ )Nzunsupported expression type: r   r   c                     [        U R                  5       5       Vs/ s H  n[        U R                  U5      5      PM     sn$ s  snf N)rangenum_argsz3strarg)r   is     p/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/fx/experimental/validator.pyget_args_strz3str.<locals>.get_args_strA   s3    -21::<-@A-@E!%%(O-@AAAs   $Azcan't print Z3 expression: powc           	      8  > [         R                  " U 5      (       a"  U R                  5       R                  5       T:X  d  [	        U 5      /$ [        U R                  5       5       VVs/ s H$  nT" U R                  U5      5        H  nUPM     M&     snn$ s  snnf r   )z3is_appdeclkindr   r   r   r   )r   r   xcollect_str_argsr   s      r   r!   z3str.<locals>.collect_str_args\   s{    		!D)@!!H:% "'qzz|!4!4A!1!%%(!;A !; !4  s   '+B   zExpected 1 arg, got r   zExpected z3 appz!=><z(/z(idiv   zExpected 0 args, got  ())r   is_exprAssertionError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   zz!}} #@!DEE	BBJJ 	B49 	B
 KKN yy||:1#>????1!5!5a!8!8;;= vvxyy{YA2>>!BbllBLL11 $A&DR\\! zz|q $';AJJL>%JKK%%(C99S>>$%677hhjoo'G TSSM '"+#C(boor'7'788zz|q $';AJJL>%JKK1558_F   &&++ MR+++zz|q $'<QZZ\N%KLLt9cCHHTN*6==?#1%%    c                 J   ^ ^ [         R                  " T 5      U U4S j5       nU$ )Nc                    > Tb  [        S U 5       5      (       a  T" U6 $ [        S U 5       5      n[        R                  " T" U6 5      $ )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   )
isinstancer   BoolRef).0r   s     r   	<genexpr>/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s!      -7;
3

++ts   ')c              3   P   #    U  H  n[         R                  " US 5      v   M     g7f)@   N)r   Int2BV)rM   as     r   rN   rO      s      @4a1b!1!14s   $&)alltupler   BV2Int)selfrB   wrapped_argsbitwise_func	bool_funcs      r   wrapper_bitwise_op.<locals>.wrapper   sS    $ -7;- * * !$''  @4 @@L99\<899rG   )	functoolswraps)rY   rZ   r[   s   `` r   _bitwise_opr_      s%    		&	: 
'	: rG   c                      \ rS rSr% S\S'   \S\R                  S\R                  4S j5       r\S\R                  S\R                  4S j5       r	S\R                  S\R                  4S	 jr
S
\R                  S\R                  S\R                  4S jrS\R                  S\R                  4S jrS
\R                  S\R                  S\R                  4S jrS\R                  S\R                  4S jrS\R                  S\R                  4S jrS\R                  S\R                  S\R                  4S jrS\R                  S\R                  S\R                  4S jrS\R                  S\R                  S\R                  4S jrS\R                  S\R                  S\R                  4S jrS\R                  S\R                  4S jrS\R                  S\R                  4S jrS\R                  S\R                  4S jr\" \R2                  \R4                  5      r\" \R8                  \R:                  5      r\" \R>                  S5      r\" \R@                  S5      r S r!g)!_Z3Ops   TranslationValidator	validatorr    r   c                 \    U R                  5       (       a  U $ [        R                  " U 5      $ r   )is_realr   ToRealr    s    r   to_real_Z3Ops.to_real   s    		1515rG   c                 \    U R                  5       (       a  U $ [        R                  " U 5      $ r   )is_intr   ToIntrh   s    r   to_int_Z3Ops.to_int   s    

133rG   rB   c                     [        U5      $ r   )sum)rW   rB   s     r   sym_sum_Z3Ops.sym_sum   s    t9rG   	numeratordenominatorc                     U R                   R                  US:g  5        [        R                  U5      [        R                  U5      -  $ Nr   )rd   add_assertionra   ri   rW   rt   ru   s      r   div
_Z3Ops.div   s6    NN(()9:>>),v~~k/JJJrG   numberc                 ,    [         R                  U5      $ r   )ra   rn   rW   r|   s     r   floor_Z3Ops.floor   s    ==((rG   c                     UR                  5       =(       d    UR                  5       n[        R                  U R                  X5      5      nU(       a  [        R	                  U5      $ U$ r   )rf   ra   rn   rz   ri   )rW   rt   ru   cast_result_to_realresults        r   floordiv_Z3Ops.floordiv   sQ     #,"3"3"5"N9L9L9N]]488I#CDF .A6>>&)LfLrG   c                 z    [         R                  " U R                  U5      U:  U R                  US-   5      U5      $ Nr#   )r   Ifr   r~   s     r   ceil_Z3Ops.ceil   s0    55F+f4djj!6LfUUrG   c                 t    [         R                  " US:  U R                  U5      U R                  U5      5      $ rw   )r   r   r   r   r~   s     r   trunc_Z3Ops.trunc   s+    551djj&8$))F:KLLrG   rS   bc                 4    [         R                  " X:  X5      $ r   r   r   rW   rS   r   s      r   max
_Z3Ops.max       55%%rG   c                 4    [         R                  " X:  X5      $ r   r   r   s      r   min
_Z3Ops.min   r   rG   pqc                 .    XR                  X5      U-  -
  $ r   )r   rW   r   r   s      r   mod
_Z3Ops.mod   s    }}Q*Q...rG   baseexpc                 v    U R                   R                  [        R                  " US:g  US:  5      5        X-  $ rw   )rd   rx   r   OrrW   r   r   s      r   r   
_Z3Ops.pow   s/    NN((tqy#')BC9rG   c                 r    [         R                  U5      nU R                  R                  US:  5        US-  $ )Nr         ?)ra   ri   rd   rx   r~   s     r   sqrt_Z3Ops.sqrt   s4     ^^F+F NN((153;rG   c                 .    [         R                  " U5      $ r   )r   Absr~   s     r   abs
_Z3Ops.abs   s    66&>!rG   c                     [         R                  " U R                  U[         R                  " S5      5      S:H  U R	                  US-
  5      U R                  US-   5      5      $ )Nr&   r   )r   r   r   IntValr   r   r~   s     r   round_to_int_Z3Ops.round_to_int   sP     551.#5		&3,'

6C<( rG   N )"__name__
__module____qualname____firstlineno____annotations__staticmethodr   ArithRefri   rn   rr   rz   r   r   r   r   r   r   r   r   r   r   r   r_   operatorand_Andbitwise_andor_r   
bitwise_orlshiftrshift__static_attributes__r   rG   r   ra   ra      sZ    *) 
	6r{{ 	6r{{ 	6 
	6 
	4bkk 	4bkk 	4 
	4	 	 		K 	K2;; 	K2;; 	K	) 	) 	)	M[[	M79{{	M[[	M	Vr{{ 	Vr{{ 	V	M 	M 	M	& 	& 	& 	&	& 	& 	& 	&
	/ 	/ 	/ 	/	BKK 	bkk 	bkk 	
	r{{ 	r{{ 		"bkk 	"bkk 	"	r{{ 	r{{ 	 "(--8 ruu5
X__d3X__d3rG   ra   rA   rd   rc   c                   ^ [         R                  1nX;   mU4S jn[        U5      n0 [         R                  U" [        R                  5      _[         R
                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R                  U" UR                  5      _[         R"                  U" UR$                  5      _[&        R(                  U" UR(                  5      _[&        R*                  U" UR*                  5      _[&        R,                  U" UR,                  5      _[.        R0                  U" UR2                  5      _[.        R4                  U" UR6                  5      _[.        R8                  U" UR:                  5      _[.        R<                  U" UR<                  5      _[.        R>                  U" S 5      [.        R@                  U" URB                  5      [.        RD                  [.        RD                  0EnX;   a  XP   $ U" U 5      $ )Nc                 |   >^ ^ S[         R                  4U4S jjm[        R                  " T 5      U U4S j5       nU$ )Nr   c                 D  > [        U [        R                  [        R                  45      (       a  U $ [        U [        5      (       d  T(       a4  [        U [
        5      (       a  [        R                  " [	        U 5      5      $ [        U [
        [        R                  45      (       a  [        R                  " [        U 5      5      $ [        U [        [        R                  45      (       a  [        R                  " [        U 5      5      $ [        S[        U 5       35      e)Nzcan't lift type: )rK   r   r   rL   boolintBoolValsympyIntegerr   floatFloatRealValr0   type)rS   as_bools    r   wrap z3op.<locals>.lift.<locals>.wrap  s    a"++rzz!:;;H a&&7z!S7I7I::d1g..a#u}}!56699SV,,a%!566::eAh// #4T!WI!>??rG   c                     > [        U 5      S:X  a8  [        U S   [        [        45      (       a  [        U4S jU S    5       5      4nO[        U4S jU  5       5      nT" U6 $ )Nr#   r   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   r   rM   rS   r   s     r   rN   6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>,  s     )C7a$q''7   c              3   4   >#    U  H  nT" U5      v   M     g 7fr   r   r   s     r   rN   r   .  s     (?$Qa$r   )lenrK   r-   rU   )rB   rX   funcr   s     r   r[   #z3op.<locals>.lift.<locals>.wrapper(  sV     t9>ja4-&H&H$))C47)C$C#EL#((?$(?#?L\**rG   )r   r,   r]   r^   )r   r[   r   r   s   ` @r   liftz3op.<locals>.lift  s9    @2:: @ __T"+ #+ NrG   c                     U (       a  U$ U$ r   r   )r   tfs      r   <lambda>z3op.<locals>.<lambda>J  s    QArG   )#r   not_ra   r   Notr   r   r   r   r   r   r   truedivrz   r   r   builtinsroundr   mathr   r   r   torch	sym_floatri   sym_maxr   sym_minr   rr   sym_ite	_sym_sqrtr   _assert)rA   rd   boolean_opsr   opsreplacement_mapr   s         @r   z3opr     s#   
  }}o#	4 Y
MM4<
 MM40
 LL$s~~.	

 OOT#**-
 OOT#**-
 tCLL1
 d377m
 LL$sww-
 LL$sww-
 NND!1!12
 IItCHH~
 JJSYY
 JJSYY
" OOT#++.#
$ MM4=%
& MM4='
( MM4,)
* MM4 =>OOT#((^ MM5==3
6 ')&;"IbIrG   c                      ^  \ rS rSrS\R
                  R                  SS4U 4S jjrS\S\	\
S4   S	\\\4   S
\4S jrS\S\	\
S4   S	\\\4   S
\4U 4S jjrSrU =r$ )PopulateValidatori[  graphrd   rc   c                 j   > X l         [        R                  R                  0 US9n[        TU ]  USS9  g )N)rootr   T)garbage_collect_values)rd   r   fxGraphModulesuper__init__)rW   r   rd   module	__class__s       r   r   PopulateValidator.__init__\  s5    &N XX))r)?FGVDArG   targetrB   .kwargsr   c                 h    [         R                  " 5       S   nU R                  R                  U5      $ )Nsymbol)fx_tracebackget_current_metard   z3var)rW   r   rB   r   r  s        r   placeholderPopulateValidator.placeholderd  s,     "224X>F>>''//rG   c                    > U[         R                  La#  [        TU ]  [	        XR
                  5      X#5      $ [        U5      S:w  a  [        S[        U5       S35      eU R
                  R                  US   5        g )Nr#   z'expected 1 argument on assertion. Got: r'   r   )	r   r   r   call_functionr   rd   r   r+   add_source_expr)rW   r   rB   r   r   s       r   r  PopulateValidator.call_functionj  sn     U]]*w,T&..-I4XX 4yA~$=c$i[J  NN**473rG   )rd   )r   r   r   r   r   r   Graphr   r   rU   r
   dictr.   r   r  r  r   __classcell__)r   s   @r   r   r   [  s    	B%((.. 	B=S 	B	0 	0(-hm(<	0FJ3PS8n	0	0	4 	4(-hm(<	4FJ3PS8n	4	4 	4rG   r   c                      \ rS rSr1 Skr    S"S jrS\S\R                  S\	R                  4S jrS	\	R                  S\R                  S\	R                  4S
 jrS	\	R                  S\R                  S\	R                  4S jrS	\	R                  S\R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS\	R                  S\	R                  S\	R                  4S jrS	\	R                  S\R                  S\	R                  4S jrS	\	R                  S\R                  S\	R                  4S jrS\S\4S jrS\R:                  S\	R                  4S  jrS!rg)#	SympyToZ3i~  >   eqgegtleltneaddmulr   Nc                 D    Xl         [        U R                   5      U l        g r   )
_validatorra   _ops)rW   rd   s     r   r   SympyToZ3.__init__  s     (Ot/DIrG   valuedtypec                 J   U[         R                  L a  [        R                  " [	        U5      5      $ U[         R
                  L a  [        R                  " [        U5      5      $ U[         R                  L a  [        R                  " [        U5      5      $ [        SU 35      e)Nzunsupported dtype (SympyToZ3): )r   int64r   r   r   doubler   r   r   r   r0   )rW   r  r  s      r   constantSympyToZ3.constant  sr    #yyU,,$zz%,//

"zz$u+..>ugFGGrG   r    c                 t    U[         R                  :X  a  [        R                  " U5      $ [	        SU S35      e)Nz	to_dtype z NYI)r   float64r   rg   NotImplementedErrorrW   r    r  s      r   to_dtypeSympyToZ3.to_dtype  s0    %yy|#%	%&=>>rG   c                 .    [         R                  " U5      $ r   )r   rm   r&  s      r   trunc_to_intSympyToZ3.trunc_to_int  s    88A;rG   c                 8    U R                   R                  U5      $ r   )r  r   r&  s      r   r   SympyToZ3.round_to_int  s    99))!,,rG   rt   ru   c                 8    U R                   R                  X5      $ r   r  rz   ry   s      r   int_truedivSympyToZ3.int_truediv       99==88rG   c                 8    U R                   R                  X5      $ r   r/  ry   s      r   r   SympyToZ3.truediv  r2  rG   c                 8    U R                   R                  X5      $ r   r  r   ry   s      r   r   SympyToZ3.floordiv  s     99%%i==rG   c                 8    U R                   R                  X5      $ r   r6  ry   s      r   rz   SympyToZ3.div  s    99%%i==rG   r   r   c                 8    U R                   R                  X5      $ r   r  r   r   s      r   r   SympyToZ3.pow      99==++rG   c                 8    U R                   R                  X5      $ r   r;  r   s      r   pow_by_naturalSympyToZ3.pow_by_natural  r=  rG   r   r   c                 8    U R                   R                  X5      $ r   r  r   r   s      r   r   SympyToZ3.mod      99==&&rG   c                 8    U R                   R                  X5      $ r   rB  r   s      r   
python_modSympyToZ3.python_mod  rD  rG   c                 8    U R                   R                  U5      $ r   )r  r   r&  s      r   ceil_to_intSympyToZ3.ceil_to_int  s    99>>!$$rG   c                 8    U R                   R                  U5      $ r   )r  r   r&  s      r   floor_to_intSympyToZ3.floor_to_int  s    99??1%%rG   namec                    [         R                  [         R                  [         R                  U R                  R
                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  S.nX;   a  X!   $ XR                  ;   a  [        [        U5      $ [!        SU 35      e)N)r   r   r   r   r   r   r   r   r   minimummaximumzunhandled operator: )r   r   r   r   r  r   r   r   r   r   r   r   r   OPERATOR_HANDLESgetattrr   AttributeError)rW   rN  REPLACEMENTs      r   __getattr__SympyToZ3.__getattr__  s    uu#yy44"ii22))**))**		99==99==K ""((,,,x.. #7v!>??rG   exprc                 B    [        X R                  R                  U5      $ r   )r   r  symbols)rW   rX  s     r   runSympyToZ3.run  s    oo&=&=tDDrG   )r  r  )rd   rc   r   N) r   r   r   r   rR  r   r   r   r  r   r,   r!  r   r'  r*  r   r0  r   r   rz   r   r?  r   rF  rI  rL  r.   rV  r   Basicr[  r   r   rG   r   r  r  ~  sp   M	0-	0 	0	H# 	Hekk 	Hbjj 	H	?bkk 	?%++ 	?"++ 	?
	"++ 	ekk 	bkk 		-"++ 	-ekk 	-bkk 	-	9[[	979{{	9[[	9
	9[[	979{{	9[[	9
	>[[	>79{{	>[[	>
	> 	>2;; 	>2;; 	>	,BKK 	,bkk 	,bkk 	,	,r{{ 	, 	, 	,	' 	' 	' 	'	' 	' 	' 	'	% 	%U[[ 	%R[[ 	%	&"++ 	&ekk 	&bkk 	&	@C 	@C 	@*	EEKK 	EBJJ 	ErG   r  c                   ~   \ rS rSrSS jrS\R                  S\R                  4S jr	S\R                  S\
S\R                  4S jrS	\R                  SS4S
 jrS	\R                  S\R                  4S jrS	\R                  SS4S jrSS jrS	\\R                  \R                  4   SS4S jrSS jrSS jrSrg)rc   i  r   Nc                     [         R                  S5        0 U l        [        5       U l        [        5       U l        [        5       U l        g )Nznew instance)logdebugrZ  set_source_exprs_target_exprs_assertionsrW   s    r   r   TranslationValidator.__init__  s;    IIn% <>DL
 36%D
 36%D 14DrG   r  c                 Z    XR                   ;  a  [        SU 35      eU R                   U   $ )NzZ3 variable not found for: )rZ  r+   )rW   r  s     r   r  TranslationValidator.z3var  s.    \\)$'B6(%KLL<<''rG   r   c                 *   XR                   ;   a  U R                   U   $ [        R                  SUR                  UR                  5        U[
        L aP  [        R                  " UR                  5      nUR                  (       a  U R                  R                  US:  5        ObU[        L a!  [        R                  " UR                  5      nO8U[        L a!  [        R                  " UR                  5      nO[        SU 35      eX0R                   U'   U$ )Nznew variable: %s (%s)r   z"unsupported type for Z3 variable: )rZ  r`  ra  rN  r   r   r   Intis_positiverd  r  r   Realr   BoolRuntimeError)rW   r  r   vars       r   add_varTranslationValidator.add_var  s    %||F++II-v{{DMMJs{ffV[[) %%&&**373ggfkk*ggfkk*"%Gv#NOO#&LL JrG   r   c                     UR                    HJ  n[        U[        R                  5      (       d  [	        S[        U5       35      eU R                  U5        ML     g )NzExpected sympy.Symbol, got )free_symbolsrK   r   Symbolr+   r   r  )rW   r   ss      r   _check_freesymbols'TranslationValidator._check_freesymbols  sE    ^^!!U\\22(+FtAwi)PQQ 

1 $rG   c                     [        U 5      R                  U5      n[        U[        R                  5      (       d  [        SU 35      eU$ )Nz"expected boolean expression. Got: )r  r[  rK   r   rL   r+   rW   r   z3exprs      r   to_z3_boolean_expr'TranslationValidator.to_z3_boolean_expr#  s?    t_((+Ffbjj11$'I&%RSSMrG   c                     XR                   ;  a  [        R                  S[        U5      5        U R                   R	                  U5        g )Nzadd source guard: %s)rc  r`  ra  r   r  )rW   r   s     r   r	  $TranslationValidator.add_source_expr)  s5    ***		0%(;""1%rG   c                     U R                  U5        U R                  U5      nXR                  ;  a  [        R	                  S[        U5      5        U R                  R                  U5        g )Nzadd target guard: %s)rw  r|  rd  r`  ra  r   r  rz  s      r   add_target_expr$TranslationValidator.add_target_expr.  sS    ##A&,,Q/F***		0%-@""6*rG   c                    [        U[        R                  5      (       a#  U R                  U5        U R	                  U5      nOUn[        U[
        R                  5      (       d  [        S[        U5       35      eX R                  ;  a  [        R                  S[        U5      5        U R                  R                  U5        g )NzExpected z3.BoolRef, got zadd assertion: %s)rK   r   r]  rw  r|  r   rL   r+   r   re  r`  ra  r   r  )rW   r   refs      r   rx   "TranslationValidator.add_assertion5  s    !U[[))''*--a0c2::..$'@c%LMM***		-uSz:  %rG   c                 n    [        S5         U R                  5       sS S S 5        $ ! , (       d  f       g = f)NzTranslationValidator.validate)r	   	_validaterf  s    r   validateTranslationValidator.validateA  s!    =>~~' ?>>s   &
4c                    [        U R                  5      S:X  d  [        U R                  5      S:X  a  g [        R                  " S5      nUR                  [        5       S9  U R                   H  nUR                  U5        M     UR                  [        R                  " [        R                  " U R                  6 5      5        UR                  " U R                  6   [        R                  S5        UR                  5       nU[        R                  :X  ab  UR                  5       n[!        UU R                  U R                  U R                   Vs/ s H  oTR#                  U5      (       a  M  UPM     snS9eU[        R$                  :X  a  [        R'                  S5        g U[        R(                  :w  a  [+        SU 35      e[        R                  S5        g s  snf )	Nr   QF_NRA)timeoutztranslation validation: start)failed_source_exprsz:translation validation: could not validate: got z3.unknownzExpected z3.unsat, got ztranslation validation: success)r   rc  rd  r   	SolverForrb  translation_validation_timeoutre  r  r   r   r`  ra  checksatmodelValidationExceptionevaluateunknownwarningunsatr+   )rW   solver	assertionrr  inps         r   r  TranslationValidator._validateE  sn   4%%&!+s43E3E/F!/K  \\(+FJJ=?J@ "--	

9% .
 JJrvvbffd&8&89:;JJ**+II56ABFF{ )$$&&'+'9'9)'9PSAT'9)	  

? KKT
 BHH},/Fqc-JKKII?@!)s   G.G)re  rc  rd  rZ  )r   N)r   zsympy.logic.boolalg.Booleanr   N)r   r   r   r   r   r   ru  r   r,   r  r   rq  r]  rw  rL   r|  r	  r  r   rx   r  r  r   r   rG   r   rc   rc     s    	6*	( 	( 	(	%,, 	d 	rzz 	0	 	 		 	

 		&RZZ 	&D 	&
	+
	&5U[[)@#A 
	&d 
	&	(7	ArG   T)	r   r   r   r  rc   translation_validation_enabledr  r  BisectValidationExceptionF)r  r  r  r  )_configc                  P    [        5         [        =(       a    [        R                  $ r   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   rG   r   r  r    s     #$4v444rG   c                  "    [         R                  $ r   )r  r  r   rG   r   r  r    s    000rG   c                  \    [         (       d!  [        R                  (       a  [        S5      eg g )Nzotranslation validation requires Z3 package. Please, either install z3-solver or disable translation validation.)r  r  r  r+   r   rG   r   r  r    s(    G688;
 	
 9GrG   c                        \ rS rSrS rS rSrg)r  i  c                   ^ [         (       d  [        S5      eS[        4U4S jjnS[        4S jnU" [        [	        UT5      5      5      nU" [        [	        [
        U5      5      5      nU" [        [	        [
        U5      5      5      n	U" [        [	        [
        U5      5      5      n
SU l        SU SU SU	 S	U
 3U l        g )
NzZ3 is requiredr   c                    > U  STU     3$ )N: r   )symr  s    r   	symbolstr/ValidationException.__init__.<locals>.symbolstr  s    U"U3ZL))rG   c                 2    SR                  S U  5       5      $ )N
c              3   ,   #    U  H
  nS U 3v   M     g7f)z  ==> Nr   )rM   r    s     r   rN   BValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>  s     62avaS\2s   )r?   )xss    r   	joinlines/ValidationException.__init__.<locals>.joinlines  s    9962666rG   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

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

r  r  rf  s    r   __str__ValidationException.__str__      ((4~..rG   r  r  Nr   r   r   r   r   r  r   r   rG   r   r  r    s    :/rG   r  c                        \ rS rSrS rS rSrg)r  i  c                 h    SU SU 3U l         SUR                  5        SUR                   3U l        g )Nz#translation validation failed when r  z)Failure occurred while running node:
    r  )r  format_noder  )rW   validation_excrX  failed_actiontraced_nodes        r   r   "BisectValidationException.__init__  sD    8r$P   	rG   c                 8    U R                    SU R                   3$ r  r  rf  s    r   r  !BisectValidationException.__str__  r  rG   r  Nr  r   rG   r   r  r    s    /rG   r  c           	        ^^^^^^ SSK JmJmJn  SSKJnJnJm  U R                  mS[        R                  R                  SU4UU4S jjnSUS[        4UU4S jjmSUS	[        [        [              S[        [           4U4S
 jjmS[        R                  R                  S[        [           4UUUU4S jjnT" X R!                  5       5      nU(       d  ["        R%                  S5        g U R&                  (       a  [(        R*                  (       a  Ue0 nU R,                  R.                   Vs/ s H#  oR0                  [        R2                  L d  M!  UPM%     n	nSS[5        U	5      S-
  pn
U" X   5      X|'   X:  aI  X-   S-  nX   n["        R7                  SX" U5      5        U" U5      X{'   X{   (       a  UnOUS-   n
X:  a  MI  X;   a  [9        Xz   [        5      (       d  [;        S5      eX   nU" U5      nUR=                  5       (       a  SnO%UR?                  5       (       d  [;        SU 35      eSnUR@                  nUc  [;        S5      e[5        U5      S:  a$  [;        SURB                   S[5        U5       35      e[9        US   [D        RF                  5      (       d'  [;        SURB                   S[I        US   5       35      e[K        Xz   US   UURL                  U   S9es  snf )Nr   )FakeTensorMetareplay_shape_env_eventsShapeEnvEvent)CURRENT_NODE_KEYShapeEnvSHAPEENV_EVENT_KEYnoder   c                 ^   > TU R                   ;  a  [        S5      eTU R                   T      $ )Nz#SHAPEENV_EVENT_KEY not in node.meta)metar+   )r  r  eventss    r   get_node_eventbisect.<locals>.get_node_event  s0    TYY. !FGGdii 2344rG   	shape_envc           	        >^  [        U[        5      (       a  U$ [        U[        R                  5      (       a/  [        R                  " UR                  R                  T 5      5      $ [        U[        R                  5      (       a/  [        R                  " UR                  R                  T 5      5      $ [        UT5      (       d  [        S[        U5       35      eT" [        UU 4S jUR                  5        5       5      [        UU 4S jUR                  5        5       5      T" T UR                  5       5      UR                  5      $ )NzExpected FakeTensorMeta, got c              3   6   >#    U  H  nT" TU5      v   M     g 7fr   r   rM   rv  new_with_shape_envr  s     r   rN   5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s     HKq$Y22K   c              3   6   >#    U  H  nT" TU5      v   M     g 7fr   r   r  s     r   rN   r    s     JMq$Y22Mr  )rK   r   r   SymIntr  with_shape_envSymFloatr+   r   rU   sizestridestorage_offset	is_nested)r  faker  r  s   ` r   r  "bisect.<locals>.new_with_shape_env  s    dC  KdELL))<<		 8 8 CDDdENN++>>$))":":9"EFF$// #@d!MNNHDIIKHHJDKKMJJy$*=*=*?@NN	
 	
rG   tracked_fakesc           	      @  > Uc  [        S5      e U R                  U Vs/ s H  nT" XR                  5      PM     snU Vs/ s H  o"R                  PM     snU Vs/ s H  o"R                  PM     snS9  g s  snf s  snf s  snf ! [
         a  nUs S nA$ S nAff = f)Nztracked_fakes is None)input_contexts)r+   produce_guardsr  sourcesymbolic_contextr  )r  r  rS   r   r  s       r   check_shapeenv_fails$bisect.<locals>.check_shapeenv_fails  s       !899	 $$@MN1#Ivv6N#01=a=1<IJMq 2 2MJ % 
 	 O1J # 	H	sE   B A8B A=
B B2B 8B 
BBBBc                    > U R                   T   nT" TS US-    5      nUR                  R                  5         T" UTU   R                  5      $ r   )r  r   lintr  )r  r|   r  r  r  r  r  s      r   check_node_fails bisect.<locals>.check_node_fails&  sN    -.+F<VaZ,@A	#Ivf~/K/KLLrG   z2translation validation succeeded: no errors found.r#   r&   zbisecting at %s: %sz-Expected ValidationException at bisect result
evaluatingzunexpected event type: zadding runtime assertzevent.args is Nonezbisecting expects z/ to have at least 2 positional arguments. Got: z9 to have a SymPy expression as its second argument. Got: )rX  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_eventsr   translation_validation_no_bisectr   nodesr   r   r   ra  rK   r+   is_evaluate_expris_defer_runtime_assertrB   rN  r   r]  r   r  r  )r  r  r  r  r  r  last_exception	exceptionr  assert_nodesleftmidrighteventr  rB   r  r  r  r  r  r  s                   @@@@@@r   bisectr    s    
  F5UXX]] 5} 5 5
h 
 
 
",4T#Y,?	%	&(Muxx}} M:M1N M M *446N  	EF))V-T-T  I
 #...++2N.   !S.2uD'(;<I
,|! 		'nT.BC *$/	>E7D , *Y_>Q"R"RLMMD4 E$,,.. #:5'!BCC/::D|122
4y1}  -I; 
 	
 d1gu{{++  -"47m_.
 	

 $!W#II./	 ms   / K*K*)9r   r]   loggingr   r   collections.abcr   dataclassesr   typingr   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,   r.   r   r_   ra   r   Interpreterr   r  rc   r  __all__ImportErrortorch.fx.experimentalr  r  r   r  r   r  r  r  r  r  r   rG   r   <module>r     s`        $ ! ' '    ) ) 2 , * 2 !}	HU& U& U&t$ ]4 ]4 ]4N?J ?J&< ?J ?JT4EHH00 4FYE YERUA UAD G
G 45 51 1
/. /D
/ 4 
/   TU  GGs   -A'D D! D!