
    [Th                     @   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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  \R8                  " \5      r S SKrS\R@                  S	\!4S
 jr"S r#\ " S S5      5       r$S\	SSS	\	4S jr% " S S\R                   RL                  5      r' " S S5      r( " S S5      r)Sr*/ SQr+S SK-J.r/  S	\04S jr1S	\24S jr3S r4 " S S \5      r5 " S! S"\5      r6\4" 5         S# r7g! \, a	    Sr*/ SQr+ NFf = f)$    N)	dataclass)AnyCallableOptionalUnion)TorchDynamoException)dynamo_timed)ArgumentTarget)sympy_interpereturnc                   ^
^ [         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OcT[         R                   :X  a  U R#                  5       S:X  d   eU R%                  S	5      n[         R                  " U5      (       d   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,                  [         R.                  4;   aP  U R#                  5       S:X  d   e[1        U R%                  S	5      5      nUR3                  S5      (       a  SUSS  -   $ U$ T[         R4                  :X  a!  U R#                  5       S	:X  d   e[	        U5      $ US-   SR7                  U5      -   n	SU	R9                  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     W/var/www/auris/envauris/lib/python3.13/site-packages/torch/fx/experimental/validator.pyget_args_strz3str.<locals>.get_args_str?   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_argsZ   s{    		!D)@!!H:% "'qzz|!4!4A!1!%%(!;A !; !4  s   '+B   r   z!=><z(/z(idiv    ())r   is_exprExprRefliststrsimplifyr   
ValueErroris_int_valueis_rational_value	as_stringr   r   Z3_OP_POWER	Z3_OP_ADD	Z3_OP_MUL	Z3_OP_NOTr   r   Z3_OP_EQZ3_OP_LEZ3_OP_GEZ3_OP_TO_INTZ3_OP_TO_REALr   
startswithZ3_OP_UNINTERPRETEDjoinrstrip)r   r   r   opargsr   argkindlogic_inverseargstrstringr!   r   s             @@r   r   r   <   sL   zz!}}A =aSAA}	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\\! ::<1$$$%%(C99S>>!>hhjoo'G TSSM '"+#C(boor'7'788::<1$$$1558_F   &&++ MR+++::<1$$$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)rL   as     r   rM   rN      s      @4a1b!1!14s   $&)alltupler   BV2Int)selfrA   wrapped_argsbitwise_func	bool_funcs      r   wrapper_bitwise_op.<locals>.wrapper   sS    $ -7;- * * !$''  @4 @@L99\<899rF   )	functoolswraps)rX   rY   rZ   s   `` r   _bitwise_opr^      s%    		&	: 
'	: rF   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5rF   c                 \    U R                  5       (       a  U $ [        R                  " U 5      $ r   )is_intr   ToIntrg   s    r   to_int_Z3Ops.to_int   s    

133rF   rA   c                     [        U5      $ r   )sum)rV   rA   s     r   sym_sum_Z3Ops.sym_sum   s    t9rF   	numeratordenominatorc                     U R                   R                  US:g  5        [        R                  U5      [        R                  U5      -  $ Nr   )rc   add_assertionr`   rh   rV   rs   rt   s      r   div
_Z3Ops.div   s6    NN(()9:>>),v~~k/JJJrF   numberc                 ,    [         R                  U5      $ r   )r`   rm   rV   r{   s     r   floor_Z3Ops.floor   s    ==((rF   c                     UR                  5       =(       d    UR                  5       n[        R                  U R                  X5      5      nU(       a  [        R	                  U5      $ U$ r   )re   r`   rm   ry   rh   )rV   rs   rt   cast_result_to_realresults        r   floordiv_Z3Ops.floordiv   sQ     #,"3"3"5"N9L9L9N]]488I#CDF .A6>>&)LfLrF   c                 z    [         R                  " U R                  U5      U:  U R                  US-   5      U5      $ Nr#   )r   Ifr~   r}   s     r   ceil_Z3Ops.ceil   s5    55

6"V+TZZ
-CV rF   c                 t    [         R                  " US:  U R                  U5      U R                  U5      5      $ rv   )r   r   r~   r   r}   s     r   trunc_Z3Ops.trunc   s+    551djj&8$))F:KLLrF   rR   bc                 4    [         R                  " X:  X5      $ r   r   r   rV   rR   r   s      r   max
_Z3Ops.max       55%%rF   c                 4    [         R                  " X:  X5      $ r   r   r   s      r   min
_Z3Ops.min   r   rF   pqc                 .    XR                  X5      U-  -
  $ r   )r   rV   r   r   s      r   mod
_Z3Ops.mod   s    }}Q*Q...rF   baseexpc                 v    U R                   R                  [        R                  " US:g  US:  5      5        X-  $ rv   )rc   rw   r   OrrV   r   r   s      r   r   
_Z3Ops.pow   s/    NN((tqy#')BC9rF   c                 r    [         R                  U5      nU R                  R                  US:  5        US-  $ )Nr         ?)r`   rh   rc   rw   r}   s     r   sqrt_Z3Ops.sqrt   s4     ^^F+F NN((153;rF   c                 .    [         R                  " U5      $ r   )r   Absr}   s     r   abs
_Z3Ops.abs   s    66&>!rF   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<( rF   N )"__name__
__module____qualname____firstlineno____annotations__staticmethodr   ArithRefrh   rm   rq   ry   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   rF   r   r`   r`      sW    *) 
	6r{{ 	6r{{ 	6 
	6 
	4bkk 	4bkk 	4 
	4	 	 		K 	K2;; 	K2;; 	K	) 	) 	)	M[[	M79{{	M[[	M	r{{ 	r{{ 	
	M 	M 	M	& 	& 	& 	&	& 	& 	& 	&
	/ 	/ 	/ 	/	BKK 	bkk 	bkk 	
	r{{ 	r{{ 		"bkk 	"bkk 	"	r{{ 	r{{ 	 "(--8 ruu5
X__d3X__d3rF   r`   r@   rc   rb   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: )rJ   r   r   rK   boolintBoolValsympyIntegerr   floatFloatRealValr/   type)rR   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!>??rF   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   rL   rR   r   s     r   rM   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   rM   r   *  s     (?$Qa$r   )lenrJ   r,   rT   )rA   rW   funcr   s     r   rZ   #z3op.<locals>.lift.<locals>.wrapper$  sV     t9>ja4-&H&H$))C47)C$C#EL#((?$(?#?L\**rF   )r   r+   r\   r]   )r   rZ   r   r   s   ` @r   liftz3op.<locals>.lift  s9    @2:: @ __T"+ #+ NrF   c                     U (       a  U$ U$ r   r   )r   tfs      r   <lambda>z3op.<locals>.<lambda>F  s    QArF   )#r   not_r`   r   Notr   r   r   r   r   r   r   truedivry   r   r   builtinsroundr   mathr   r~   r   torch	sym_floatrh   sym_maxr   sym_minr   rq   sym_ite	_sym_sqrtr   _assert)r@   rc   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IrF   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$ )PopulateValidatoriW  graphrc   rb   c                 j   > X l         [        R                  R                  0 US9n[        TU ]  USS9  g )N)rootr   T)garbage_collect_values)rc   r   fxGraphModulesuper__init__)rV   r   rc   module	__class__s       r   r   PopulateValidator.__init__X  s5    &N XX))r)?FGVDArF   targetrA   .kwargsr   c                 h    [         R                  " 5       S   nU R                  R                  U5      $ )Nsymbol)fx_tracebackget_current_metarc   z3var)rV   r   rA   r   r   s        r   placeholderPopulateValidator.placeholder`  s,     "224X>F>>''//rF   c                    > U[         R                  :w  a#  [        TU ]  [	        XR
                  5      X#5      $ [        U5      S:X  d   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   rc   r   add_source_expr)rV   r   rA   r   r   s       r   r  PopulateValidator.call_functionf  sn     &w,T&..-I4XX D	QF8T1EFNN**473rF   )rc   )r   r   r   r   r   r   Graphr   r   rT   r
   dictr-   r   r  r  r   __classcell__)r   s   @r   r   r   W  s    	B%((.. 	B=S 	B	0 	0(-hm(<	0FJ3PS8n	0	0	4 	4(-hm(<	4FJ3PS8n	4	4 	4rF   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\S\4S jrS\R8                  S\	R                  4S jrS rg)"	SympyToZ3iy  >   eqgegtleltneaddmulr   Nc                 D    Xl         [        U R                   5      U l        g r   )
_validatorr`   _ops)rV   rc   s     r   r   SympyToZ3.__init__|  s     (Ot/DIrF   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   r/   )rV   r  r  s      r   constantSympyToZ3.constant  sr    #yyU,,$zz%,//

"zz$u+..>ugFGGrF   r    c                 t    U[         R                  :X  a  [        R                  " U5      $ [	        SU S35      e)Nz	to_dtype z NYI)r   float64r   rf   NotImplementedErrorrV   r    r  s      r   to_dtypeSympyToZ3.to_dtype  s0    %yy|#%	%&=>>rF   c                 .    [         R                  " U5      $ r   )r   rl   r%  s      r   trunc_to_intSympyToZ3.trunc_to_int  s    88A;rF   c                 8    U R                   R                  U5      $ r   )r  r   r%  s      r   r   SympyToZ3.round_to_int  s    99))!,,rF   rs   rt   c                 8    U R                   R                  X5      $ r   r  ry   rx   s      r   int_truedivSympyToZ3.int_truediv       99==88rF   c                 8    U R                   R                  X5      $ r   r.  rx   s      r   r   SympyToZ3.truediv  r1  rF   c                 8    U R                   R                  X5      $ r   r  r   rx   s      r   r   SympyToZ3.floordiv  s     99%%i==rF   c                 8    U R                   R                  X5      $ r   r5  rx   s      r   ry   SympyToZ3.div  s    99%%i==rF   r   r   c                 8    U R                   R                  X5      $ r   r  r   r   s      r   r   SympyToZ3.pow      99==++rF   c                 8    U R                   R                  X5      $ r   r:  r   s      r   pow_by_naturalSympyToZ3.pow_by_natural  r<  rF   r   r   c                 8    U R                   R                  X5      $ r   )r  r   r   s      r   r   SympyToZ3.mod  s    99==&&rF   c                 8    U R                   R                  U5      $ r   )r  r   r%  s      r   ceil_to_intSympyToZ3.ceil_to_int  s    99>>!$$rF   c                 8    U R                   R                  U5      $ r   )r  r~   r%  s      r   floor_to_intSympyToZ3.floor_to_int  s    99??1%%rF   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)rV   rH  REPLACEMENTs      r   __getattr__SympyToZ3.__getattr__  s    uu#yy44"ii22))**))**		99==99==K ""((,,,x.. #7v!>??rF   exprc                 B    [        X R                  R                  U5      $ r   )r   r  symbols)rV   rR  s     r   runSympyToZ3.run  s    oo&=&=tDDrF   )r  r  )rc   rb   r   N)r   r   r   r   rL  r   r   r   r  r   r+   r   r   r&  r)  r   r/  r   r   ry   r   r>  r   rC  rF  r-   rP  r   BasicrU  r   r   rF   r   r  r  y  sJ   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rF   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)rb   i  r   Nc                     [         R                  S5        0 U l        [        5       U l        [        5       U l        [        5       U l        g )Nznew instance)logdebugrT  set_source_exprs_target_exprs_assertionsrV   s    r   r   TranslationValidator.__init__  s;    IIn% <>DL
 36%D
 36%D 14DrF   r   c                 R    XR                   ;   d
   SU 35       eU R                   U   $ )NzZ3 variable not found for: )rT  )rV   r   s     r   r  TranslationValidator.z3var  s.    \\)Q-H+QQ)<<''rF   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: )rT  rZ  r[  rH  r   r   r   Intis_positiver^  r  r   Realr   BoolRuntimeError)rV   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 JrF   r   c                     UR                    H5  n[        U[        R                  5      (       d   eU R	                  U5        M7     g r   )free_symbolsrJ   r   Symbolr  )rV   r   ss      r   _check_freesymbols'TranslationValidator._check_freesymbols  s4    ^^!!U\\2222 

1	 $rF   c                     [        U 5      R                  U5      n[        U[        R                  5      (       d
   SU 35       eU$ )Nz"expected boolean expression. Got: )r  rU  rJ   r   rK   rV   r   z3exprs      r   to_z3_boolean_expr'TranslationValidator.to_z3_boolean_expr  sL    t_((+F

  =3F8<=  MrF   c                     XR                   ;  a  [        R                  S[        U5      5        U R                   R	                  U5        g )Nzadd source guard: %s)r]  rZ  r[  r   r  )rV   r   s     r   r  $TranslationValidator.add_source_expr   s5    ***		0%(;""1%rF   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)rq  rv  r^  rZ  r[  r   r  rt  s      r   add_target_expr$TranslationValidator.add_target_expr%  sS    ##A&,,Q/F***		0%-@""6*rF   c                 `   [        U[        R                  5      (       a#  U R                  U5        U R	                  U5      nOUn[        U[
        R                  5      (       d   eX R                  ;  a  [        R                  S[        U5      5        U R                  R                  U5        g )Nzadd assertion: %s)rJ   r   rW  rq  rv  r   rK   r_  rZ  r[  r   r  )rV   r   refs      r   rw   "TranslationValidator.add_assertion,  s    !U[[))''*--a0c2::....***		-uSz:  %rF   c                 n    [        S5         U R                  5       sS S S 5        $ ! , (       d  f       g = f)NzTranslationValidator.validate)r	   	_validater`  s    r   validateTranslationValidator.validate7  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(                  :X  d   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translation validation: success)r   r]  r^  r   	SolverForr\  translation_validation_timeoutr_  r  r   r   rZ  r[  checksatmodelValidationExceptionevaluateunknownwarningunsat)rV   solver	assertionrr  inps         r   r  TranslationValidator._validate;  s`   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
 =(=II?@)s   G.G)r_  r]  r^  rT  )r   N)r   zsympy.logic.boolalg.Booleanr   N)r   r   r   r   r   r   ro  r   r+   r  r   rk  rW  rq  rK   rv  r  r{  r   rw   r  r  r   r   rF   r   rb   rb     s    	6*	( 	( 	(
	%,, 	d 	rzz 	0	 	 		 	

 		&RZZ 	&D 	&
	+		&5U[[)@#A 		&d 		&	(6	ArF   T)	r   r   r   r  rb   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   rF   r   r  r    s     #$4v444rF   c                  "    [         R                  $ r   )r  r  r   rF   r   r  r    s    000rF   c                  T    [         (       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   rF   r   r  r    s&    7&77 	7777rF   c                        \ rS rSrS rS rSrg)r  i  c                 v  ^ [         (       d   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 )	Nr   c                    > U  STU     3$ )N: r   )symr  s    r   	symbolstr/ValidationException.__init__.<locals>.symbolstr  s    U"U3ZL))rF   c                 2    SR                  S U  5       5      $ )N
c              3   ,   #    U  H
  nS U 3v   M     g7f)z  ==> Nr   )rL   r    s     r   rM   BValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>  s     62avaS\2s   )r>   )xss    r   	joinlines/ValidationException.__init__.<locals>.joinlines  s    9962666rF   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

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

r  r  r`  s    r   __str__ValidationException.__str__      ((4~..rF   r  r  Nr   r   r   r   r   r  r   r   rF   r   r  r    s    8/rF   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  )rV   validation_excrR  failed_actiontraced_nodes        r   r   "BisectValidationException.__init__  sD    8r$P   	rF   c                 8    U R                    SU R                   3$ r  r  r`  s    r   r  !BisectValidationException.__str__  r  rF   r  Nr  r   rF   r   r  r    s    /rF   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                  :X  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   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   e[5        U5      S:  d    SUR@                   S[5        U5       35       e[9        US   [B        RD                  5      (       d#   SUR@                   S[G        US   5       35       e[I        Xz   US   UURJ                  U   S9es  snf )Nr   )FakeTensorMetareplay_shape_env_eventsShapeEnvEvent)CURRENT_NODE_KEYShapeEnvSHAPEENV_EVENT_KEYnoder   c                 L   > TU R                   ;   d   eTU R                   T      $ r   )meta)r  r  eventss    r   get_node_eventbisect.<locals>.get_node_event  s*    !TYY...dii 2344rF   	shape_envc           	      n  >^  [        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   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      $ )Nc              3   6   >#    U  H  nT" TU5      v   M     g 7fr   r   rL   rp  new_with_shape_envr  s     r   rM   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   rM   r    s     JMq$Y22Mr  )rJ   r   r   SymIntr  with_shape_envSymFloatrT   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$////HDIIKHHJDKKMJJy$*=*=*?@NN	
 	
rF   tracked_fakesc           	      .  > Uc   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)N)input_contexts)produce_guardsr  sourcesymbolic_contextr  )r  r  rR   r   r  s       r   check_shapeenv_fails$bisect.<locals>.check_shapeenv_fails  s     (((	 $$@MN1#Ivv6N#01=a=1<IJMq 2 2MJ % 
 	 O1J # 	H	sD   A> A/A> A4
A> A9)A> /A> >
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LrF   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: )rR  r  r  )&torch.fx.experimental.recordingr  r  r  %torch.fx.experimental.symbolic_shapesr  r  r  r  r   r   Noder   r   r,   r  _snapshot_tracked_fakesrZ  infoshould_record_eventsr   translation_validation_no_bisectr   nodesr   r   r   r[  rJ   is_evaluate_expris_defer_runtime_assertrA   rH  r   rW  r   r  r  )r  r  r  r  r  r  last_exception	exceptionr  assert_nodesleftmidrighteventr  rA   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 , IO=P!Q!QQQD4 E$,,..Q2I%0QQ./::Dt9> 
UZZL )D	{	> d1gu{{++ 
UZZL )T!W	 +
 $!W#II./	 cs   /!KK)8r   r\   loggingr   r   dataclassesr   typingr   r   r   r   r   r   torch.fxtorch.fx.tracebackr   	tracebackr  torch._dynamo.excr   torch._dynamo.utilsr	   torch.fx.noder
   r   torch.utils._sympy.interpr   	getLoggerr   rZ  r   r+   r-   r   r^   r`   r   Interpreterr   r  rb   r  __all__ImportErrortorch.fx.experimentalr  r  r   r  r   r  r  r  r  r  r   rF   r   <module>r     s]        ! 1 1    ) ) 2 , * 2 !s	HP& P& P&j$ _4 _4 _4R?J ?J&< ?J ?JT4EHH00 4DVE VELRA RA~ G
G 45 51 1/. /B
/ 4 
/   LQ  GGs   )A'D DD