
    ^jD                        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 d dl	m
Z
mZmZmZ d dlZd dlZd dlZd dlmc mZ d dlmZ d dlmZ d dlmZmZ d dlmZ erd d	lmZm Z   ejB                  e"      Z# ed
      Z$	 d dl%Z%de%jL                  de'fdZ(dede
f   dede
f   dz  dede
f   fdZ)e G d d             Z*dede
f   dddede
f   fdZ+ G d dej$                  jX                        Z- G d d      Z. G d d      Z/dZ0g dZ1d d!l3m4Z5 de6fd"Z7de8fd#Z9d*d$Z: G d% d&e      Z; G d' d(e      Z< e:        d+d)Z=y# e2$ r	 dZ0g d Z1Y Ew xY w),    N)Callable)	dataclass)AnyoverloadTYPE_CHECKINGTypeVar)TorchDynamoException)dynamo_timed)ArgumentTarget)sympy_interp)ShapeEnvTrackedFake_Rereturnc                 L  
 t        j                  |       st        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.dt         j                  dt        t
           f
fd
 
|       }nt         j"                  k(  r| j%                         dk7  rt        d	| j%                                | j'                  d
      }t        j                  |      st        d      |j                         j                         }t         j(                  dt         j*                  dt         j,                  di}||v r||   } ||      }nӉt         j.                  t         j0                  fv rd| j%                         dk7  rt        d	| j%                                t3        | j'                  d
            }|j5                  d      rd|dd  z   S |S t         j6                  k(  r:| j%                         d
k7  rt        d| j%                                t        |      S |dz   dj9                  |      z   }	d|	j;                          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     j/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/fx/experimental/validator.pyget_args_strzz3str.<locals>.get_args_strF   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_argsa   s|    		!D)@!!H:% "'qzz|!4!1!%%(!;    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   B   s   zz!} #@!DEE	BBJJ 	B49 	B
 KKN yy|:1#>????1!5!5a!8;;= vvxyy{YA2>>!BbllBLL11BJJ 49  $A&DR\\! zz|q $';AJJL>%JKK%%(C99S>$%677hhjoo'G TSSM -'"7+#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%%    bitwise_func.	bool_funcc                 x     t        j                         dddt        j                  dt        f fd       }|S )Nself_Z3OpsrD   r   c                     t        d |D              r | S t        d |D              }t        j                   |       S )Nc              3   P   K   | ]  }t        |t        j                           y wr   )
isinstancer   BoolRef).0r   s     r   	<genexpr>z/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s       -03
3

+-s   $&c              3   H   K   | ]  }t        j                  |d         yw)@   N)r   Int2BV)rS   as     r   rT   z/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s      @a1b!1 @s    ")alltupler   BV2Int)rM   rD   wrapped_argsrJ   rK   s      r   wrapperz_bitwise_op.<locals>.wrapper   sN    $ -7;- * !$''  @4 @@L99\<899rI   )	functoolswrapsr   r.   r   )rJ   rK   r]   s   `` r   _bitwise_opr`      s@     
	&	:( 	:2:: 	:# 	: 
'	: rI   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                  fdZ	d	ej                  d
ej                  dej                  fdZ
dej                  dej                  fdZd	ej                  d
ej                  dej                  fdZdej                  dej                  fdZdej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  fdZdej                  dej                  fdZdej                  dej                  fdZ eej0                  ej2                        Z eej6                  ej8                        Z eej<                  d      Z eej>                  d      Zy)rN   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5rI   c                 P    | j                         r| S t        j                  |       S r   )is_intr   ToIntrg   s    r   to_intz_Z3Ops.to_int   s    
133rI   rD   c                     t        |      S r   )sum)rM   rD   s     r   sym_sumz_Z3Ops.sym_sum   s    t9rI   	numeratordenominatorc                     | j                   j                  |dk7         t        j                  |      t        j                  |      z  S Nr   )rc   add_assertionrN   rh   rM   rp   rq   s      r   divz
_Z3Ops.div   s6    NN(()9:>>),v~~k/JJJrI   numberc                 ,    t         j                  |      S r   )rN   rl   rM   rw   s     r   floorz_Z3Ops.floor   s    ==((rI   c                     |j                         xs |j                         }t        j                  | j                  ||            }|rt        j	                  |      S |S r   )re   rN   rl   rv   rh   )rM   rp   rq   cast_result_to_realresults        r   floordivz_Z3Ops.floordiv   sS     #,"3"3"5"N9L9L9N]]488I{#CDF .A6>>&)LfLrI   c                 x    t        j                  | j                  |      |k  | j                  |dz         |      S Nr%   )r   Ifrz   ry   s     r   ceilz_Z3Ops.ceil   s0    55F+f4djj!6LfUUrI   c                 r    t        j                  |dk\  | j                  |      | j                  |            S rs   )r   r   rz   r   ry   s     r   truncz_Z3Ops.trunc   s+    551djj&8$))F:KLLrI   rX   bc                 6    t        j                  ||kD  ||      S r   r   r   rM   rX   r   s      r   maxz
_Z3Ops.max       55Q1%%rI   c                 6    t        j                  ||k  ||      S r   r   r   s      r   minz
_Z3Ops.min   r   rI   pqc                 2    || j                  ||      |z  z
  S r   )r~   rM   r   r   s      r   modz
_Z3Ops.mod   s    t}}Q*Q...rI   baseexpc                 v    | j                   j                  t        j                  |dk7  |dkD               ||z  S rs   )rc   rt   r   OrrM   r   r   s      r   r   z
_Z3Ops.pow   s1    NN((tqy#')BC9rI   c                 r    t         j                  |      }| j                  j                  |dk\         |dz  S )Nr         ?)rN   rh   rc   rt   ry   s     r   sqrtz_Z3Ops.sqrt   s4     ^^F+F NN((153;rI   c                 ,    t        j                  |      S r   )r   Absry   s     r   absz
_Z3Ops.abs   s    66&>!rI   c                     t        j                  | j                  |t        j                  d            dk(  | j	                  |dz
        | j                  |dz               S )Nr(   r   )r   r   r   IntValr   rz   ry   s     r   round_to_intz_Z3Ops.round_to_int   sP     551.#5		&3,'

6C<( rI   N) __name__
__module____qualname____annotations__staticmethodr   ArithRefrh   rl   ro   rv   rz   r~   r   r   r   r   r   r   r   r   r   r`   operatorand_Andbitwise_andor_r   
bitwise_orlshiftrshift rI   r   rN   rN      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rI   rN   rC   rc   rb   c                    t         j                  h}| |v dt        dt        f   dt        dt        f   ffd}t	        |      }i t         j                   |t
        j                        t         j                   ||j                        t         j                   ||j                        t         j                   ||j                        t         j                   ||j                        t         j                   ||j                        t         j                   ||j                        t         j                    ||j                         t         j"                   ||j"                        t$        j&                   ||j(                        t*        j,                   ||j,                        t*        j.                   ||j.                        t*        j0                   ||j0                        t2        j4                   ||j6                        t2        j8                   ||j:                        t2        j<                   ||j>                        t2        j@                   ||j@                        t2        jB                   |d       t2        jD                   ||jF                        t2        jH                  t2        jH                  i}| |v r||    S  ||       S )Nfunc.r   c                      dt         dt        j                  ffdt        j                         dt         dt
        f fd       }|S )NrX   r   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: )rQ   r   r   rR   boolintBoolValsympyIntegerr   floatFloatRealValr2   type)rX   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!>??rI   rD   c                      t        |       dk(  r2t        | d   t        t        f      rt        fd| d   D              f}nt        fd| D              } | S )Nr%   r   c              3   .   K   | ]  } |        y wr   r   rS   rX   r   s     r   rT   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>5  s     )Ca$q')C   c              3   .   K   | ]  } |        y wr   r   r   s     r   rT   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>7  s     (?Qa(?r   )lenrQ   r/   rZ   )rD   r\   r   r   s     r   r]   z#z3op.<locals>.lift.<locals>.wrapper1  sS     t9>ja4-&H$))C47)C$C#EL#((?$(?#?L\**rI   )objectr   r.   r^   r_   r   )r   r]   r   r   s   ` @r   liftzz3op.<locals>.lift#  sO    @ @2:: @ __T"+v +# + #+ NrI   c                 0    t        j                  | ||      S r   r   )r   tfs      r   <lambda>zz3op.<locals>.<lambda>S  s    aA rI   )%r   not_r   r   rN   r   Notr   r   r   r   r   r   r~   truedivrv   r   r   builtinsroundr   mathr   rz   r   torch	sym_floatrh   sym_maxr   sym_minr   ro   sym_ite	_sym_sqrtr   _assert)rC   rc   boolean_opsr   opsreplacement_mapr   s         @r   z3opr     sI     }}o#	xR( 	Xc2g-> 	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 ')O&;r"IbIrI   c                        e Zd Zdej                  j
                  ddddf fdZdedee	d	f   d
e
eef   defdZdedee	d	f   d
e
eef   def fdZ xZS )PopulateValidatorgraphrc   rb   r   Nc                 x    || _         t        j                  j                  i |      }t        |   |d       y )N)rootr   T)garbage_collect_values)rc   r   fxGraphModulesuper__init__)rM   r   rc   module	__class__s       r   r   zPopulateValidator.__init__e  s9     'DN XX))r)?FGVDArI   targetrD   .kwargsc                 f    t        j                         d   }| j                  j                  |      S )Nsymbol)fx_tracebackget_current_metarc   z3var)rM   r   rD   r   r   s        r   placeholderzPopulateValidator.placeholdero  s,     "224X>F>>''//rI   c                     |t         j                  ur%t        |   t	        || j
                        ||      S t        |      dk7  rt        dt        |       d      | j
                  j                  |d          y )Nr%   z'expected 1 argument on assertion. Got: r)   r   )	r   r   r   call_functionr   rc   r   r-   add_source_expr)rM   r   rD   r   r   s       r   r   zPopulateValidator.call_functionu  ss     U]]*w,T&$..-I4QWXX 4yA~$=c$i[J  NN**473rI   )r   r   r   r   r   Graphr   r   rZ   r   dictr0   r   r   r   __classcell__)r   s   @r   r   r   d  s    	B	B4J	B	B	0 	0(-hm(<	0FJ3PS8n	0	0	4 	4(-hm(<	4FJ3PS8n	4	4 	4rI   r   c                      e Zd Zh dZ	 	 	 	 d dZdeez  e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                  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 y)!	SympyToZ3>   eqgegtleltneaddmulr   Nc                 F    || _         t        | j                         | _        y r   )
_validatorrN   _ops)rM   rc   s     r   r   zSympyToZ3.__init__  s     (DOt/DIrI   valuedtypec                 >   |t         j                  u rt        j                  t	        |            S |t         j
                  u rt        j                  t        |            S |t         j                  u rt        j                  t        |            S t        d|       )Nzunsupported dtype (SympyToZ3): )r   int64r   r   r   doubler   r   r   r   r2   )rM   r  r  s      r   constantzSympyToZ3.constant  sr    #yyU,,$zz%,//

"zz$u+..>ugFGGrI   r#   c                 p    |t         j                  k(  rt        j                  |      S t	        d| d      )Nz	to_dtype z NYI)r   float64r   rf   NotImplementedErrorrM   r#   r  s      r   to_dtypezSympyToZ3.to_dtype  s0    %yy|#%	%&=>>rI   c                 ,    t        j                  |      S r   )r   rk   r  s      r   trunc_to_intzSympyToZ3.trunc_to_int  s    88A;rI   c                 8    | j                   j                  |      S r   )r  r   r  s      r   r   zSympyToZ3.round_to_int  s    99))!,,rI   rp   rq   c                 :    | j                   j                  ||      S r   r  rv   ru   s      r   int_truedivzSympyToZ3.int_truediv       99==K88rI   c                 :    | j                   j                  ||      S r   r  ru   s      r   r   zSympyToZ3.truediv  r  rI   c                 :    | j                   j                  ||      S r   r  r~   ru   s      r   r~   zSympyToZ3.floordiv  s     99%%i==rI   c                 :    | j                   j                  ||      S r   r  ru   s      r   rv   zSympyToZ3.div  s    99%%i==rI   r   r   c                 :    | j                   j                  ||      S r   r  r   r   s      r   r   zSympyToZ3.pow      99==s++rI   c                 :    | j                   j                  ||      S r   r  r   s      r   pow_by_naturalzSympyToZ3.pow_by_natural  r  rI   r   r   c                 :    | j                   j                  ||      S r   r  r   r   s      r   r   zSympyToZ3.mod      99==A&&rI   c                 :    | j                   j                  ||      S r   r  r   s      r   
python_modzSympyToZ3.python_mod  r  rI   c                 8    | j                   j                  |      S r   )r  r   r  s      r   ceil_to_intzSympyToZ3.ceil_to_int  s    99>>!$$rI   c                 8    | j                   j                  |      S r   )r  rz   r  s      r   floor_to_intzSympyToZ3.floor_to_int  s    99??1%%rI   namec                    t         j                  t         j                  t         j                  | j                  j
                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  d}||v r||   S || j                  v rt        t        |      S t!        d|       )N)r   r   r   r   r   r   r   rz   r   minimummaximumzunhandled operator: )r   r   r   r   r  r   r   r   r   rz   r   r   r   OPERATOR_HANDLESgetattrr   AttributeError)rM   r&  REPLACEMENTs      r   __getattr__zSympyToZ3.__getattr__  s    uu#yy44"ii22))**))**		99==99==K {""4((t,,,x.. #7v!>??rI   exprc                 D    t        | | j                  j                  |      S r   )r   r   symbols)rM   r/  s     r   runzSympyToZ3.run  s    doo&=&=tDDrI   )rc   rb   r   N)!r   r   r   r*  r   r   r   r   r   r  r   r.   r  r   r  r  r   r  r   r~   rv   r   r  r   r!  r#  r%  r0   r   r.  r   Basicr2  r   rI   r   r   r     sy   M	0-	0 	0	H#+"4 	HU[[ 	HRZZ 	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rI   r   c                   ^   e Zd ZddZdej
                  dej                  fdZdej
                  de	dej                  fdZ
dej                  ddfd	Zdej                  dej                  fd
Zdej                  ddfdZddZdej                  ej                  z  ddfdZddZddZy)rb   r   Nc                     t         j                  d       i | _        t               | _        t               | _        t               | _        y )Nznew instance)logdebugr1  set_source_exprs_target_exprs_assertionsrM   s    r   r   zTranslationValidator.__init__  s;    IIn% <>DL
 36%D
 36%D 14DrI   r   c                 X    || j                   vrt        d|       | j                   |   S )NzZ3 variable not found for: )r1  r-   )rM   r   s     r   r   zTranslationValidator.z3var  s0    T\\)$'B6(%KLL<<''rI   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: )r1  r6  r7  r&  r   r   r   Intis_positiver:  r   r   Realr   BoolRuntimeError)rM   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 JrI   r   c                     |j                   D ]D  }t        |t        j                        st	        dt        |             | j                  |       F y )NzExpected sympy.Symbol, got )free_symbolsrQ   r   Symbolr-   r   r   )rM   r   ss      r   _check_freesymbolsz'TranslationValidator._check_freesymbols&  sG    ^^ !!U\\2(+FtAwi)PQQ 

1rI   c                     t        |       j                  |      }t        |t        j                        st        d|       |S )Nz"expected boolean expression. Got: )r   r2  rQ   r   rR   r-   rM   r   z3exprs      r   to_z3_boolean_exprz'TranslationValidator.to_z3_boolean_expr.  s<    t_((+Ffbjj1$'I&%RSSMrI   c                     || j                   vrt        j                  dt        |             | j                   j	                  |       y )Nzadd source guard: %s)r9  r6  r7  r   r   )rM   r   s     r   r   z$TranslationValidator.add_source_expr4  s7    ***		0%(;""1%rI   c                     | j                  |       | j                  |      }|| j                  vrt        j	                  dt        |             | j                  j                  |       y )Nzadd target guard: %s)rJ  rN  r:  r6  r7  r   r   rL  s      r   add_target_exprz$TranslationValidator.add_target_expr9  sU    ##A&,,Q/F***		0%-@""6*rI   c                 t   t        |t        j                        r#| j                  |       | j	                  |      }n|}t        |t
        j                        st        dt        |             || j                  vrt        j                  dt        |             | j                  j                  |       y )NzExpected z3.BoolRef, got zadd assertion: %s)rQ   r   r3  rJ  rN  r   rR   r-   r   r;  r6  r7  r   r   )rM   r   refs      r   rt   z"TranslationValidator.add_assertion@  s    !U[[)''*--a0c2::.$'@c%LMM$***		-uSz:  %rI   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.validateL  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(                  k7  rt+        d|       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Expected z3.unsat, got ztranslation validation: success)r   r9  r:  r   	SolverForr8  translation_validation_timeoutr;  r   r   r   r6  r7  checksatmodelValidationExceptionevaluateunknownwarningunsatr-   )rM   solver	assertionrr_  inps         r   rU  zTranslationValidator._validateP  sr   4%%&!+s43E3E/F!/K  \\(+FJJ=?J@ "-- &	

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

? KKT
 BHH},/Fqc-JKKII?@!)s   G#Gr   N)r   zsympy.logic.boolalg.Booleanr   N)r   r   r   r   r   rH  r   r.   r   r   rE  r3  rJ  rR   rN  r   rQ  rt   rV  rU  r   rI   r   rb   rb     s    	6*	( 	( 	(	%,, 	d 	rzz 	0	 	 		 	

 		&RZZ 	&D 	&
	+
	&2::#; 
	& 
	&	(7	ArI   T)	r   r   r   r   rb   translation_validation_enabledr\  r`  BisectValidationExceptionF)rj  r\  r`  rk  )_configc                  F    t                t        xr t        j                  S r   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   rI   r   rj  rj    s     #$4v444rI   c                  "    t         j                  S r   )rp  r\  r   rI   r   r\  r\    s    000rI   c                  H    t         st        j                  rt        d      y y )Nzotranslation validation requires Z3 package. Please, either install z3-solver or disable translation validation.)ro  rp  rq  r-   r   rI   r   rn  rn    s&    688;
 	
 9GrI   c            
       4    e Zd Zdededededdf
dZdefdZy)	r`  r_  
assertionstarget_exprsrZ  r   Nc                    t         st        d      dt        dt        ffd}dt        dt        fd} |t	        t        |                  } |t	        t        t        |                  } |t	        t        t        |                  }	 |t	        t        t        |                  }
d| _        d| d	| d
|	 d|
 | _        y )NzZ3 is requiredsymr   c                     |  d|     S )N: r   )rx  r_  s    r   	symbolstrz/ValidationException.__init__.<locals>.symbolstr  s    U"U3ZL))rI   xsc                 2    dj                  d | D              S )N
c              3   &   K   | ]	  }d |   yw)z  ==> Nr   )rS   r#   s     r   rT   zBValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>  s     6avaS\6s   )rA   )r|  s    r   	joinlinesz/ValidationException.__init__.<locals>.joinlines  s    9962666rI   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

Failed Source Expressions:
)	ro  r-   r   r0   sortedmapr   msgdetails)rM   r_  ru  rv  rZ  r{  r  	model_strassertions_strtarget_exprs_strfailed_source_exprs_strs    `         r   r   zValidationException.__init__  s      !122	*3 	*3 	*	7# 	7# 	7 fSE%:;<	"6#eZ*@#AB$VC|,D%EF"+F3u>Q3R,S"T3
         rI   c                 8    | j                    d| j                   S N

r  r  r<  s    r   __str__zValidationException.__str__      ((4~..rI   )r   r   r   r   r   r0   r  r   rI   r   r`  r`    s;    &)9<SV	>/ /rI   r`  c            
       p    e Zd Zdedej
                  dedej                  j                  ddf
dZ
defdZy)	rk  validation_excr/  failed_actiontraced_noder   Nc                 h    d| d| | _         d|j                          d|j                   | _        y )Nz#translation validation failed when rz  z)Failure occurred while running node:
    r  )r  format_noder  )rM   r  r/  r  r  s        r   r   z"BisectValidationException.__init__  sF     9r$P   	rI   c                 8    | j                    d| j                   S r  r  r<  s    r   r  z!BisectValidationException.__str__  r  rI   )r   r   r   r`  r   r3  r0   r   r   Noder   r  r   rI   r   rk  rk    sO    + kk 	
 XX]] 
/ /rI   rk  c           	      (   ddl mmm} ddlm}m}m | j                  dt        j                  j                  d|ffd}t        d|dt        dt        fd	       t        d|dt        j                  dt        j                  fd
       t        d|dt        j                  dt        j                  fd       t        d|ddfd       d|dt        t        j                  z  t        j                  z  z  dt        t        j                  z  t        j                  z  z  ffdd|dt         d   d z  dt"        d z  ffddt        j                  j                  dt"        d z  ffd} | | j%                               }|st&        j)                  d       y | j*                  rt,        j.                  r|i }| j0                  j2                  D cg c]!  }|j4                  t        j6                  u s |# }	}ddt9        |	      dz
  }}}
 ||	|         ||<   |
|k  rH|
|z   dz  }|	|   }t&        j;                  d| ||              ||      ||<   ||   r|}n|dz   }
|
|k  rH|
|v rt=        ||
   t"              st?        d      ||
   }|	|
   } ||      }|jA                         rd}n |jC                         st?        d|       d}|jD                  }|t?        d      t9        |      dk  r$t?        d|jF                   dt9        |             t=        |d   tH        jJ                        s't?        d|jF                   dtM        |d                tO        ||d   ||jP                  |         c c}w )Nr   )FakeTensorMetareplay_shape_env_eventsShapeEnvEvent)CURRENT_NODE_KEYr   SHAPEENV_EVENT_KEYnoder   c                 Z    | j                   vrt        d      | j                         S )Nz#SHAPEENV_EVENT_KEY not in node.meta)metar-   )r  r  eventss    r   get_node_eventzbisect.<locals>.get_node_event
  s0    TYY. !FGGdii 2344rI   	shape_envfakec                      y r   r   r  r  s     r   new_with_shape_envz"bisect.<locals>.new_with_shape_env  s    CFrI   c                      y r   r   r  s     r   r  z"bisect.<locals>.new_with_shape_env  s    UXrI   c                      y r   r   r  s     r   r  z"bisect.<locals>.new_with_shape_env       rI   c                      y r   r   r  s     r   r  z"bisect.<locals>.new_with_shape_env  r  rI   c           	      h    t        |t              r|S t        |t        j                        r.t        j                  |j                  j                               S t        |t        j                        r.t        j                  |j                  j                               S t        |      st        dt        |              t         fd|j                         D              t         fd|j                         D                |j                               |j                        S )NzExpected FakeTensorMeta, got c              3   0   K   | ]  } |        y wr   r   rS   rI  r  r  s     r   rT   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>0  s     Hq$Y2H   c              3   0   K   | ]  } |        y wr   r   r  s     r   rT   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>1  s     Jq$Y2Jr  )rQ   r   r   SymIntr  with_shape_envSymFloatr-   r   rZ   sizestridestorage_offset	is_nested)r  r  r  r  s   ` r   r  z"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	
 	
rI   tracked_fakesr   c           	      6   |t        d      	 | 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)Nztracked_fakes is None)input_contexts)r-   produce_guardsr  sourcesymbolic_contextr`  )r  r  rX   r   r  s       r   check_shapeenv_failsz$bisect.<locals>.check_shapeenv_fails7  s       !899	 $$@MN1#Iqvv6N#01a1<IJq 2 2J	 %  	 O1J # 	H	sD   B A4B A9
B A>+B 4B 	BBBBc                     | j                      } d |dz          }|j                  j                           ||   j                        S r   )r  r   lintr  )r  rw   r  r  r  r  r  s      r   check_node_failsz bisect.<locals>.check_node_failsL  sN    -.+F<VaZ,@A	#Ivf~/K/KLLrI   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: )r/  r  r  ))torch.fx.experimental.recordingr  r  r  %torch.fx.experimental.symbolic_shapesr  r   r  r  r   r   r  r   r   r  r  r/   r`  _snapshot_tracked_fakesr6  infoshould_record_eventsrp   translation_validation_no_bisectr   nodesr   r   r   r7  rQ   r-   is_evaluate_expris_defer_runtime_assertrD   r&  r   r3  r   rk  r  )r  r  r  r   r  r  last_exception	exceptionr  assert_nodesleftmidrightleft_exceptioneventr  rD   r  r  r  r  r  r  s                    @@@@@@r   bisectr    s    
  F5UXX]] 5} 5 FhFcFcF FXhXellXu||X X#(>>	  #1	 

#&#5#F#W
	u||	enn	,~	=
&,0,?$,F	t	#*Muxx}} M1Dt1K M M *9446N  	EF))V-T-T  I
 #..$++2NL  !S.2u#D'U(;<Ie
,e|!C 		'nT.BC *$/	#S>E7D , I*Yt_>Q"RLMM*3D/ND4 E$,,. #:5'!BCC/::D|122
4y1}  -I; 
 	
 d1gu{{+  -"47m_.
 	

 $!W#II./	 os   %!NNri  )r  r   r   N)>r   r^   loggingr   r   collections.abcr   dataclassesr   typingr   r   r   r   r   r   torch.fxtorch.fx.tracebackr   	tracebackr   torch._dynamo.excr	   torch._dynamo.utilsr
   torch.fx.noder   r   torch.utils._sympy.interpr   r  r   r   	getLoggerr   r6  r   r   r.   r0   r   r`   rN   r   Interpreterr   r   rb   ro  __all__ImportErrortorch.fx.experimentalrl  rp  r   rj  r   r\  rn  r`  rk  r  r   rI   r   <module>r     s        $ ! 8 8    ) ) 2 , * 2 K g!T]C
HU& U& U&tsCx(5=c3h5G$5N	#s(	( ]4 ]4 ]4NAJS#XAJ+AAJ	#s(	AJX4EHH00 4JYE YERUA UAD G
G 45 51 1
!/. !/H/ 4 /(   he  GGs   BE EE