
    9j                      6   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
 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j6                  e      Z	 d dlZd	ej>                  d
e fdZ!d Z"e G d d             Z#deddd
efdZ$ G d dej                  jJ                        Z& G d d      Z' G d d      Z(dZ)g dZ*d dl,m-Z. d
e/fdZ0d
e1fdZ2d Z3 G d  d!e      Z4 G d" d#e      Z5 e3        d$ Z6y# e+$ r	 dZ)g dZ*Y Cw xY w)%    N)Callable)	dataclass)Any)TorchDynamoException)dynamo_timed)ArgumentTarget)sympy_interpereturnc                   
 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
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     _/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torch/fx/experimental/validator.pyget_args_strzz3str.<locals>.get_args_strA   s-    -21::<-@AE!%%(OAAAs   !A zcan't print Z3 expression: powc           	         t        j                  |       r!| j                         j                         k(  st	        |       gS t        | j                               D cg c]   } | j                  |            D ]  }| " c}}S c c}}w r   )z3is_appdeclkindr   r   r   r   )r   r   xcollect_str_argsr   s      r   r   zz3str.<locals>.collect_str_args\   s|    		!D)@!!H:% "'qzz|!4!1!%%(!;    s    %B	   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;;= 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 -'"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%%    c                 F     t        j                          fd       }|S )Nc                     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)rI   as     r   rJ   z/_bitwise_op.<locals>.wrapper.<locals>.<genexpr>   s      @a1b!1 @s    ")alltupler   BV2Int)selfr>   wrapped_argsbitwise_func	bool_funcs      r   wrapperz_bitwise_op.<locals>.wrapper   sN    $ -7;- * !$''  @4 @@L99\<899rC   )	functoolswraps)rT   rU   rV   s   `` r   _bitwise_oprY      s%    		&	: 
'	: rC   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)_Z3OpsTranslationValidator	validatorr   r   c                 P    | j                         r| S t        j                  |       S r   )is_realr   ToRealr   s    r   to_realz_Z3Ops.to_real   s    		1515rC   c                 P    | j                         r| S t        j                  |       S r   )is_intr   ToIntra   s    r   to_intz_Z3Ops.to_int   s    
133rC   r>   c                     t        |      S r   )sum)rR   r>   s     r   sym_sumz_Z3Ops.sym_sum   s    t9rC   	numeratordenominatorc                     | j                   j                  |dk7         t        j                  |      t        j                  |      z  S Nr   )r]   add_assertionr[   rb   rR   rj   rk   s      r   divz
_Z3Ops.div   s6    NN(()9:>>),v~~k/JJJrC   numberc                 ,    t         j                  |      S r   )r[   rf   rR   rq   s     r   floorz_Z3Ops.floor   s    ==((rC   c                     |j                         xs |j                         }t        j                  | j                  ||            }|rt        j	                  |      S |S r   )r_   r[   rf   rp   rb   )rR   rj   rk   cast_result_to_realresults        r   floordivz_Z3Ops.floordiv   sS     #,"3"3"5"N9L9L9N]]488I{#CDF .A6>>&)LfLrC   c                 x    t        j                  | j                  |      |k  | j                  |dz         |      S Nr   )r   Ifrt   rs   s     r   ceilz_Z3Ops.ceil   s0    55F+f4djj!6LfUUrC   c                 r    t        j                  |dk\  | j                  |      | j                  |            S rm   )r   r{   rt   r|   rs   s     r   truncz_Z3Ops.trunc   s+    551djj&8$))F:KLLrC   rN   bc                 6    t        j                  ||kD  ||      S r   r   r{   rR   rN   r   s      r   maxz
_Z3Ops.max       55Q1%%rC   c                 6    t        j                  ||k  ||      S r   r   r   s      r   minz
_Z3Ops.min   r   rC   pqc                 2    || j                  ||      |z  z
  S r   )rx   rR   r   r   s      r   modz
_Z3Ops.mod   s    t}}Q*Q...rC   baseexpc                 v    | j                   j                  t        j                  |dk7  |dkD               ||z  S rm   )r]   rn   r   OrrR   r   r   s      r   r   z
_Z3Ops.pow   s1    NN((tqy#')BC9rC   c                 r    t         j                  |      }| j                  j                  |dk\         |dz  S )Nr         ?)r[   rb   r]   rn   rs   s     r   sqrtz_Z3Ops.sqrt   s4     ^^F+F NN((153;rC   c                 ,    t        j                  |      S r   )r   Absrs   s     r   absz
_Z3Ops.abs   s    66&>!rC   c                     t        j                  | j                  |t        j                  d            dk(  | j	                  |dz
        | j                  |dz               S )Nr"   r   )r   r{   r   IntValr|   rt   rs   s     r   round_to_intz_Z3Ops.round_to_int   sP     551.#5		&3,'

6C<( rC   N) __name__
__module____qualname____annotations__staticmethodr   ArithRefrb   rf   ri   rp   rt   rx   r|   r~   r   r   r   r   r   r   r   rY   operatorand_Andbitwise_andor_r   
bitwise_orlshiftrshift rC   r   r[   r[      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rC   r[   r=   r]   r\   c                    t         j                  h}| |v 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&        j,                   ||j,                        t.        j0                   ||j2                        t.        j4                   ||j6                        t.        j8                   ||j:                        t.        j<                   ||j<                        t.        j>                   |d       t.        j@                   ||jB                        t.        jD                  t.        jD                  i}| |v r||    S  ||       S )Nc                 t     dt         j                  ffdt        j                          fd       }|S )Nr   c                    t        | t        j                  t        j                  f      r| S t        | t              sr.t        | t
              rt        j                  t	        |             S t        | t
        t        j                  f      rt        j                  t        |             S t        | t        t        j                  f      rt        j                  t        |             S t        dt        |              )Nzcan't lift type: )rG   r   r   rH   boolintBoolValsympyIntegerr   floatFloatRealValr,   type)rN   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!>??rC   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   rI   rN   r   s     r   rJ   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>,  s     )Ca$q')C   c              3   .   K   | ]  } |        y wr   r   r   s     r   rJ   z6z3op.<locals>.lift.<locals>.wrapper.<locals>.<genexpr>.  s     (?Qa(?r   )lenrG   r)   rP   )r>   rS   funcr   s     r   rV   z#z3op.<locals>.lift.<locals>.wrapper(  sS     t9>ja4-&H$))C47)C$C#EL#((?$(?#?L\**rC   )r   r(   rW   rX   )r   rV   r   r   s   ` @r   liftzz3op.<locals>.lift  s9    @2:: @ __T"+ #+ NrC   c                 0    t        j                  | ||      S r   r   )r   tfs      r   <lambda>zz3op.<locals>.<lambda>J  s    aA rC   )#r   not_r[   r   Notr   r   r   r   r   r   rx   truedivrp   r   r   builtinsroundr   mathr|   rt   r~   torch	sym_floatrb   sym_maxr   sym_minr   ri   sym_ite	_sym_sqrtr   _assert)r=   r]   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 ')O&;r"IbIrC   c                        e Zd Zdej                  j
                  ddf fdZdedee	df   de
eef   d	efd
Zdedee	df   de
eef   d	ef fdZ xZS )PopulateValidatorgraphr]   r\   c                 x    || _         t        j                  j                  i |      }t        |   |d       y )N)rootr   T)garbage_collect_values)r]   r   fxGraphModulesuper__init__)rR   r   r]   module	__class__s       r   r   zPopulateValidator.__init__\  s7    &DN XX))r)?FGVDArC   targetr>   .kwargsr   c                 f    t        j                         d   }| j                  j                  |      S )Nsymbol)fx_tracebackget_current_metar]   z3var)rR   r   r>   r   r   s        r   placeholderzPopulateValidator.placeholderd  s,     "224X>F>>''//rC   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   r]   r   r'   add_source_expr)rR   r   r>   r   r   s       r   r   zPopulateValidator.call_functionj  ss     U]]*w,T&$..-I4QWXX 4yA~$=c$i[J  NN**473rC   )r   r   r   r   r   Graphr   r	   rP   r   dictr*   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 	4rC   r   c                      e Zd Zh dZ	 	 	 	 d dZdedej                  dej                  fdZ
dej                  dej                  dej                  fd	Zdej                  dej                  dej                  fd
Zdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdej                  dej                  dej                  fdZdedefdZdej8                  dej                  fdZy)!	SympyToZ3>   eqgegtleltneaddmulr   Nc                 F    || _         t        | j                         | _        y r   )
_validatorr[   _ops)rR   r]   s     r   r   zSympyToZ3.__init__  s     (DOt/DIrC   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   r,   )rR   r   r   s      r   constantzSympyToZ3.constant  sr    #yyU,,$zz%,//

"zz$u+..>ugFGGrC   r   c                 p    |t         j                  k(  rt        j                  |      S t	        d| d      )Nz	to_dtype z NYI)r   float64r   r`   NotImplementedErrorrR   r   r   s      r   to_dtypezSympyToZ3.to_dtype  s0    %yy|#%	%&=>>rC   c                 ,    t        j                  |      S r   )r   re   r  s      r   trunc_to_intzSympyToZ3.trunc_to_int  s    88A;rC   c                 8    | j                   j                  |      S r   )r   r   r  s      r   r   zSympyToZ3.round_to_int  s    99))!,,rC   rj   rk   c                 :    | j                   j                  ||      S r   r   rp   ro   s      r   int_truedivzSympyToZ3.int_truediv       99==K88rC   c                 :    | j                   j                  ||      S r   r
  ro   s      r   r   zSympyToZ3.truediv  r  rC   c                 :    | j                   j                  ||      S r   r   rx   ro   s      r   rx   zSympyToZ3.floordiv  s     99%%i==rC   c                 :    | j                   j                  ||      S r   r  ro   s      r   rp   zSympyToZ3.div  s    99%%i==rC   r   r   c                 :    | j                   j                  ||      S r   r   r   r   s      r   r   zSympyToZ3.pow      99==s++rC   c                 :    | j                   j                  ||      S r   r  r   s      r   pow_by_naturalzSympyToZ3.pow_by_natural  r  rC   r   r   c                 :    | j                   j                  ||      S r   r   r   r   s      r   r   zSympyToZ3.mod      99==A&&rC   c                 :    | j                   j                  ||      S r   r  r   s      r   
python_modzSympyToZ3.python_mod  r  rC   c                 8    | j                   j                  |      S r   )r   r|   r  s      r   ceil_to_intzSympyToZ3.ceil_to_int  s    99>>!$$rC   c                 8    | j                   j                  |      S r   )r   rt   r  s      r   floor_to_intzSympyToZ3.floor_to_int  s    99??1%%rC   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   rt   r|   minimummaximumzunhandled operator: )r   r   r   r   r   r   r   r   r   rt   r|   r   r   OPERATOR_HANDLESgetattrr   AttributeError)rR   r  REPLACEMENTs      r   __getattr__zSympyToZ3.__getattr__  s    uu#yy44"ii22))**))**		99==99==K {""4((t,,,x.. #7v!>??rC   exprc                 D    t        | | j                  j                  |      S r   )r
   r   symbols)rR   r(  s     r   runzSympyToZ3.run  s    doo&=&=tDDrC   )r]   r\   r   N)r   r   r   r#  r   r   r   r   r   r(   r   r   r  r  r   r  r   rx   rp   r   r  r   r  r  r  r*   r'  r   Basicr+  r   rC   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rC   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)r\   r   Nc                     t         j                  d       i | _        t               | _        t               | _        t               | _        y )Nznew instance)logdebugr*  set_source_exprs_target_exprs_assertionsrR   s    r   r   zTranslationValidator.__init__  s;    IIn% <>DL
 36%D
 36%D 14DrC   r   c                 X    || j                   vrt        d|       | j                   |   S )NzZ3 variable not found for: )r*  r'   )rR   r   s     r   r   zTranslationValidator.z3var  s0    T\\)$'B6(%KLL<<''rC   r   c                    || j                   v r| j                   |   S t        j                  d|j                  |j                         |t
        u rJt        j                  |j                        }|j                  r}| j                  j                  |dkD         n^|t        u r t        j                  |j                        }n6|t        u r t        j                  |j                        }nt        d|       || j                   |<   |S )Nznew variable: %s (%s)r   z"unsupported type for Z3 variable: )r*  r/  r0  r  r   r   r   Intis_positiver3  r   r   Realr   BoolRuntimeError)rR   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 JrC   r   c                     |j                   D ]D  }t        |t        j                        st	        dt        |             | j                  |       F y )NzExpected sympy.Symbol, got )free_symbolsrG   r   Symbolr'   r   r   )rR   r   ss      r   _check_freesymbolsz'TranslationValidator._check_freesymbols  sG    ^^ !!U\\2(+FtAwi)PQQ 

1rC   c                     t        |       j                  |      }t        |t        j                        st        d|       |S )Nz"expected boolean expression. Got: )r   r+  rG   r   rH   r'   rR   r   z3exprs      r   to_z3_boolean_exprz'TranslationValidator.to_z3_boolean_expr#  s<    t_((+Ffbjj1$'I&%RSSMrC   c                     || j                   vrt        j                  dt        |             | j                   j	                  |       y )Nzadd source guard: %s)r2  r/  r0  r   r   )rR   r   s     r   r   z$TranslationValidator.add_source_expr)  s7    ***		0%(;""1%rC   c                     | j                  |       | j                  |      }|| j                  vrt        j	                  dt        |             | j                  j                  |       y )Nzadd target guard: %s)rC  rG  r3  r/  r0  r   r   rE  s      r   add_target_exprz$TranslationValidator.add_target_expr.  sU    ##A&,,Q/F***		0%-@""6*rC   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)rG   r   r,  rC  rG  r   rH   r'   r   r4  r/  r0  r   r   )rR   r   refs      r   rn   z"TranslationValidator.add_assertion5  s    !U[[)''*--a0c2::.$'@c%LMM$***		-uSz:  %rC   c                 d    t        d      5  | j                         cd d d        S # 1 sw Y   y xY w)NzTranslationValidator.validate)r   	_validater5  s    r   validatezTranslationValidator.validateA  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   r2  r3  r   	SolverForr1  translation_validation_timeoutr4  r   r   r   r/  r0  checksatmodelValidationExceptionevaluateunknownwarningunsatr'   )rR   solver	assertionrrX  inps         r   rN  zTranslationValidator._validateE  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   rA  r   r(   r   r   r>  r,  rC  rH   rG  r   rJ  rn   rO  rN  r   rC   r   r\   r\     s    	6*	( 	( 	(	%,, 	d 	rzz 	0	 	 		 	

 		&RZZ 	&D 	&
	+
	&2::#; 
	& 
	&	(7	ArC   T)	r   r   r   r   r\   translation_validation_enabledrU  rY  BisectValidationExceptionF)rb  rU  rY  rc  )_configc                  F    t                t        xr t        j                  S r   )_assert_z3_installed_if_tv_set_HAS_Z3configtranslation_validationr   rC   r   rb  rb    s     #$4v444rC   c                  "    t         j                  S r   )rh  rU  r   rC   r   rU  rU    s    000rC   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.)rg  rh  ri  r'   r   rC   r   rf  rf    s&    688;
 	
 9GrC   c                       e Zd Zd Zd Zy)rY  c                 x   t         st        d      dt        ffd}dt        fd} |t        t	        |                  } |t        t	        t
        |                  } |t        t	        t
        |                  }	 |t        t	        t
        |                  }
d| _        d| d| d|	 d	|
 | _        y )
NzZ3 is requiredr   c                     |  d|     S )N: r   )symrX  s    r   	symbolstrz/ValidationException.__init__.<locals>.symbolstr  s    U"U3ZL))rC   c                 2    dj                  d | D              S )N
c              3   &   K   | ]	  }d |   yw)z  ==> Nr   )rI   r   s     r   rJ   zBValidationException.__init__.<locals>.joinlines.<locals>.<genexpr>  s     6avaS\6s   )r;   )xss    r   	joinlinesz/ValidationException.__init__.<locals>.joinlines  s    9962666rC   ztranslation validation failed.zModel:
z

Assertions:
z

Target Expressions:
z

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

ry  rz  r5  s    r   __str__zValidationException.__str__      ((4~..rC   Nr   r   r   r   r  r   rC   r   rY  rY    s    :/rC   rY  c                       e Zd Zd Zd Zy)rc  c                 h    d| d| | _         d|j                          d|j                   | _        y )Nz#translation validation failed when ro  z)Failure occurred while running node:
    r  )ry  format_noderz  )rR   validation_excr(  failed_actiontraced_nodes        r   r   z"BisectValidationException.__init__  sD    8r$P   	rC   c                 8    | j                    d| j                   S r  r  r5  s    r   r  z!BisectValidationException.__str__  r  rC   Nr  r   rC   r   rc  rc    s    /rC   rc  c           	      t   ddl mmm} ddlm}m}m | j                  dt        j                  j                  d|ffd}d|dt        ffdd|d	t        t           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 }| j*                  j,                  D cg c]!  }|j.                  t        j0                  u s |# }	}ddt3        |	      dz
  }}}
 ||	|         ||<   |
|k  rH|
|z   dz  }|	|   }t         j5                  d| ||              ||      ||<   ||   r|}n|dz   }
|
|k  rH|
|v rt7        ||
   t              st9        d      |	|
   } ||      }|j;                         rd}n |j=                         st9        d|       d}|j>                  }|t9        d      t3        |      dk  r$t9        d|j@                   dt3        |             t7        |d   tB        jD                        s't9        d|j@                   dtG        |d                tI        ||
   |d   ||jJ                  |         c c}w )Nr   )FakeTensorMetareplay_shape_env_eventsShapeEnvEvent)CURRENT_NODE_KEYShapeEnv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4rC   	shape_envc           	      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   rI   rB  new_with_shape_envr  s     r   rJ   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s     Hq$Y2H   c              3   0   K   | ]  } |        y wr   r   r  s     r   rJ   z5bisect.<locals>.new_with_shape_env.<locals>.<genexpr>  s     Jq$Y2Jr  )rG   r   r   SymIntr  with_shape_envSymFloatr'   r   rP   sizestridestorage_offset	is_nested)r  faker  r  s   ` r   r  z"bisect.<locals>.new_with_shape_env  s    dC KdELL)<<		 8 8 CDDdENN+>>$))":":9"EFF$/ #@d!MNNHDIIKHHJDKKMJJy$*=*=*?@NN	
 	
rC   tracked_fakesc           	      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_contextrY  )r  r  rN   r   r  s       r   check_shapeenv_failsz$bisect.<locals>.check_shapeenv_fails  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 rz   )r  r   lintr  )r  rq   r  r  r  r  r  s      r   check_node_failsz bisect.<locals>.check_node_fails&  sN    -.+F<VaZ,@A	#Ivf~/K/KLLrC   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   Noder   r)   rY  _snapshot_tracked_fakesr/  infoshould_record_eventsrh   translation_validation_no_bisectr   nodesr   r   r   r0  rG   r'   is_evaluate_expris_defer_runtime_assertr>   r  r   r,  r   rc  r  )r  r  r  r  r  r  last_exception	exceptionr  assert_nodesleftmidrighteventr  r>   r  r  r  r  r  r  s                   @@@@@@r   bisectr    s    
  F5UXX]] 5} 5
h 
 
",0I,<	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D4 E$,,. #:5'!BCC/::D|122
4y1}  -I; 
 	
 d1gu{{+  -"47m_.
 	

 $$!W#II./	 ms   !J5/J5)7r   rW   loggingr   r   collections.abcr   dataclassesr   typingr   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   rY   r[   r   Interpreterr   r   r\   rg  __all__ImportErrortorch.fx.experimentalrd  rh  r   rb  r   rU  rf  rY  rc  r  r   rC   r   <module>r     s_        $ !     ) ) 2 , * 2 g!}	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