
    ajJ7                     (   d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d d          Z G d de          Z G d d	e          Zd
ej        dej        dej        fdZ  G d d          Z!dS )    N)NoReturn)_keep_floatBitwiseFn_bitwise_andBitwiseFn_bitwise_orBitwiseFn_bitwise_xorFloatPowFloatTrueDivFloorDiv
IntTrueDivMaxMinModOpaqueUnaryFn_expOpaqueUnaryFn_logOpaqueUnaryFn_log2OpaqueUnaryFn_sqrtPowByNaturalRoundDecimal
RoundToIntToFloat
TruncToIntc                      e Zd Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zedefd            Zed             Zed             Z ed             Z!ed             Z"ed             Z#ed              Z$ed!             Z%ed"             Z&ed#             Z'ed$             Z(ed%             Z)ed&             Z*ed'             Z+ed(             Z,ed)             Z-ed*             Z.ed+             Z/d,S )-ReferenceAnalysisc                 *    t          j        |           S N)sympysympifycdtypes     a/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torch/utils/_sympy/reference.pyconstantzReferenceAnalysis.constant(       }Q    c                     | |z  S r    abs     r!   or_zReferenceAnalysis.or_,       1ur$   c                     | |z  S r   r&   r'   s     r!   and_zReferenceAnalysis.and_0   r+   r$   c                     t          | t          j                  st          |t          j                  rt          j        | |          S | |k    S r   )
isinstancer   ExprEqr'   s     r!   eqzReferenceAnalysis.eq4   sB    a$$ 	"
1ej(A(A 	"8Aq>>!Avr$   c                 T    |                      |                     ||                    S r   )not_r2   clsr(   r)   s      r!   nezReferenceAnalysis.ne:   s     xxq!%%%r$   c                     | |k     S r   r&   r'   s     r!   ltzReferenceAnalysis.lt>       1ur$   c                     | |k    S r   r&   r'   s     r!   gtzReferenceAnalysis.gtB   r:   r$   c                     | |k    S r   r&   r'   s     r!   lezReferenceAnalysis.leF       Avr$   c                     | |k    S r   r&   r'   s     r!   gezReferenceAnalysis.geJ   r?   r$   c                 P    t          | t                    rt          d          |  S )Nznot_ needs sympy expr)r/   boolAssertionErrorr(   s    r!   r4   zReferenceAnalysis.not_N   s*    a 	: !8999r	r$   c                 "    t          d|           S )Ng      ?r	   xs    r!   
reciprocalzReferenceAnalysis.reciprocalT   s    C###r$   c                 "    t          | d          S )N   r   rH   s    r!   squarezReferenceAnalysis.squareX       Aq!!!r$   c                      t          |           S r   )r   rI   r    s     r!   trunc_to_intzReferenceAnalysis.trunc_to_int\       !}}r$   c                 *    t          j        |           S r   )r   ceilingrQ   s     r!   ceil_to_intzReferenceAnalysis.ceil_to_int`   r#   r$   c                 *    t          j        |           S r   )r   floorrQ   s     r!   floor_to_intzReferenceAnalysis.floor_to_intd   s    {1~~r$   c                 F     t          t          j                  |           S r   )r   r   rX   rH   s    r!   rX   zReferenceAnalysis.floorh   s    '{5;''***r$   c                 F     t          t          j                  |           S r   )r   r   rU   rH   s    r!   ceilzReferenceAnalysis.ceill   s    ){5=))!,,,r$   c                 f    |t           j        k    rt          |           S t          d| d          Nz	to_dtype z NYI)torchfloat64r   NotImplementedErrorrQ   s     r!   to_dtypezReferenceAnalysis.to_dtypep   s5    EM!!1::!"9e"9"9"9:::r$   c                 "    t          | |          S r   )r   rI   ys     r!   modzReferenceAnalysis.modv       1ayyr$   c                      t          |           S r   )absrH   s    r!   ri   zReferenceAnalysis.absz   s    1vvr$   c                     |  S r   r&   rH   s    r!   negzReferenceAnalysis.neg~   s	    r	r$   c                 "    t          | |          S r   rG   r'   s     r!   truedivzReferenceAnalysis.truediv   rO   r$   c                 "    t          | |          S r   )r   r'   s     r!   int_truedivzReferenceAnalysis.int_truediv   s    !Qr$   c                 "    t          | |          S r   )r
   r'   s     r!   floordivzReferenceAnalysis.floordiv   s    1~~r$   returnc                      t          d          )NzTODO: truncdivra   r'   s     r!   truncdivzReferenceAnalysis.truncdiv   s    !"2333r$   c                 H     t          t          j                  | |          S r   )r   operatoraddr'   s     r!   rx   zReferenceAnalysis.add       ({8<((A...r$   c                     t          j        | S r   )r   Add)r6   argss     r!   sym_sumzReferenceAnalysis.sym_sum   s    y$r$   c                 H     t          t          j                  | |          S r   )r   rw   mulr'   s     r!   r   zReferenceAnalysis.mul   ry   r$   c                 H     t          t          j                  | |          S r   )r   rw   subr'   s     r!   r   zReferenceAnalysis.sub   ry   r$   c                      t          |           S r   )r   rH   s    r!   expzReferenceAnalysis.exp        ###r$   c                      t          |           S r   )r   rH   s    r!   logzReferenceAnalysis.log   r   r$   c                      t          |           S r   )r   rH   s    r!   log2zReferenceAnalysis.log2       !!$$$r$   c                      t          |           S r   )r   rH   s    r!   sqrtzReferenceAnalysis.sqrt   r   r$   c                 >     t          t                    | |          S r   )r   r   r'   s     r!   powzReferenceAnalysis.pow   s     %{8$$Q***r$   c                 "    t          | |          S r   rM   r'   s     r!   pow_by_naturalz ReferenceAnalysis.pow_by_natural   rO   r$   c                 "    t          | |          S r   )r   r'   s     r!   minimumzReferenceAnalysis.minimum   rg   r$   c                 "    t          | |          S r   )r   r'   s     r!   maximumzReferenceAnalysis.maximum   rg   r$   c                      t          |           S r   )r   r(   r    s     r!   round_to_intzReferenceAnalysis.round_to_int   rS   r$   c                 "    t          | |          S r   )r   r'   s     r!   round_decimalzReferenceAnalysis.round_decimal   rO   r$   c                 "    t          | |          S r   )r   r'   s     r!   bitwise_andzReferenceAnalysis.bitwise_and       $Q***r$   c                 "    t          | |          S r   )r   r'   s     r!   
bitwise_orzReferenceAnalysis.bitwise_or   s    #Aq)))r$   c                 "    t          | |          S r   )r   r'   s     r!   bitwise_xorzReferenceAnalysis.bitwise_xor   r   r$   N)0__name__
__module____qualname__staticmethodr"   r*   r-   r2   classmethodr7   r9   r<   r>   rA   r4   rJ   rN   rR   rV   rY   rX   r\   rb   rf   ri   rk   rm   ro   rq   r   ru   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r$   r!   r   r   '   s           \    \   \   \
 & & [&   \   \   \   \   \
 $ $ \$ " " \"   \     \    \ + + \+ - - \- ; ; \;
   \   \   \ " " \"     \    \ 4( 4 4 4 \4 / / \/     [  / / \/ / / \/ $ $ \$ $ $ \$ % % \% % % \% + + \+ " " \"   \   \   \ " " \" + + \+ * * \* + + \+ + +r$   r   c                   V   e Zd Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed             Zed	efd
            Zed	efd            Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )PythonReferenceAnalysisc                     |t           j        u rt          |           S |t           j        u rt	          |           S |t           j        u rt          |           S t          d|           )Nunrecognized dtype )r_   int64intdoublefloatrC   rD   r   s     r!   r"   z PythonReferenceAnalysis.constant   sa    EKq66Mel""88Oej  77N !>u!>!>???r$   c                 *    t          j        |           S r   )r_   sym_notrE   s    r!   r4   zPythonReferenceAnalysis.not_   r#   r$   c                 "   t          |          dk    rdS t          |          dk    r|d         S |                     |d         |d                   }t          dt          |                    D ]}|                     |||                   }|S )Nr      rL   )lenrx   range)r6   r|   accis       r!   r}   zPythonReferenceAnalysis.sym_sum   s    t99>>1t99>>7Nggd1gtAw''q#d))$$ 	( 	(A''#tAw''CC
r$   c                     | |z  S r   r&   r'   s     r!   rq   z PythonReferenceAnalysis.floordiv   s    Avr$   c                     | |z  S r   r&   rd   s     r!   rf   zPythonReferenceAnalysis.mod   r+   r$   c                     | |z  S r   r&   rd   s     r!   
python_modz"PythonReferenceAnalysis.python_mod   r+   r$   c                     | |z  S r   r&   r'   s     r!   ru   z PythonReferenceAnalysis.truncdiv  r+   r$   c                 p    |t           j        k    rt          j        |           S t          d| d          r^   )r_   r`   	sym_floatra   rQ   s     r!   rb   z PythonReferenceAnalysis.to_dtype  s9    EM!!?1%%%!"9e"9"9"9:::r$   rr   c                      t          d          )Nz!exp is not valid shape sympy exprrD   rH   s    r!   r   zPythonReferenceAnalysis.exp      @AAAr$   c                      t          d          )Nz!log is not valid shape sympy exprr   rH   s    r!   r   zPythonReferenceAnalysis.log  r   r$   c                 *    t          j        |           S r   )r_   	_sym_log2rH   s    r!   r   zPythonReferenceAnalysis.log2      q!!!r$   c                 *    t          j        |           S r   )r_   	_sym_sqrtrH   s    r!   r   zPythonReferenceAnalysis.sqrt  r   r$   c                 ,    t          j        | |          S r   )r_   sym_minr'   s     r!   r   zPythonReferenceAnalysis.minimum      }Q"""r$   c                 ,    t          j        | |          S r   )r_   sym_maxr'   s     r!   r   zPythonReferenceAnalysis.maximum   r   r$   c                 *    t          j        |           S r   )mathrX   rQ   s     r!   rY   z$PythonReferenceAnalysis.floor_to_int$  s    z!}}r$   c                 *    t          j        |           S r   )r   r\   rQ   s     r!   rV   z#PythonReferenceAnalysis.ceil_to_int(  s    y||r$   c                 D    t          t          j        |                     S r   )r   r   rX   rH   s    r!   rX   zPythonReferenceAnalysis.floor,  s    TZ]]###r$   c                 D    t          t          j        |                     S r   )r   r   r\   rH   s    r!   r\   zPythonReferenceAnalysis.ceil0  s    TYq\\"""r$   c                     | |z  S r   r&   r'   s     r!   rm   zPythonReferenceAnalysis.truediv4  r+   r$   c                     | |z  S r   r&   r'   s     r!   r   zPythonReferenceAnalysis.pow8  s    !tr$   c                     | |z  S r   r&   r'   s     r!   r   z&PythonReferenceAnalysis.pow_by_natural<  s    
 !tr$   c                      t          |           S r   roundr   s     r!   r   z$PythonReferenceAnalysis.round_to_intC  s    Qxxr$   c                 $    t          | |          S )N)ndigitsr   r'   s     r!   r   z%PythonReferenceAnalysis.round_decimalG  s    Q""""r$   c                     | |z  S r   r&   r'   s     r!   r   z#PythonReferenceAnalysis.bitwise_andK  r+   r$   c                     | |z  S r   r&   r'   s     r!   r   z"PythonReferenceAnalysis.bitwise_orO  r+   r$   c                     | |z  S r   r&   r'   s     r!   r   z#PythonReferenceAnalysis.bitwise_xorS  r+   r$   N) r   r   r   r   r"   r4   r   r}   rq   rf   r   ru   rb   r   r   r   r   r   r   r   rY   rV   rX   r\   rm   r   r   r   r   r   r   r   r&   r$   r!   r   r      s       @ @ \@     \    [   \   \   \   \ ; ; \;
 B( B B B \B B( B B B \B " " \" " " \" # # \# # # \#   \   \ $ $ \$ # # \#   \   \   \   \ # # \#   \   \   \  r$   r   c                   $    e Zd Zed             ZdS ) OptimizedPythonReferenceAnalysisc                 *    t          j        |           S r   )r_   r}   )r|   s    r!   r}   z(OptimizedPythonReferenceAnalysis.sym_sum[  s    }T"""r$   N)r   r   r   r   r}   r&   r$   r!   r   r   Z  s-        # # \# # #r$   r   rI   r    rr   c                 V    t           j        j        j                            | |          S r   )r_   opsprimsconvert_element_typedefaultrQ   s     r!   	_to_dtyper   `  s    9?/775AAAr$   c                   l   e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zedefd            Zed             Zed             Zed             Zed             Zed             Z edefd            Z!ed             Z"ed             Z#ed              Z$ed!             Z%ed"             Z&ed#             Z'ed$             Z(ed%             Z)ed&             Z*ed'             Z+ed(             Z,ed)             Z-ed*             Z.ed+             Z/ed,             Z0ed-             Z1ed.             Z2ed/             Z3ed0             Z4ed1             Z5ed2             Z6edefd3            Z7d4S )5TensorReferenceAnalysisc                 0   |t           j        u rt          |           }nN|t           j        u rt	          |           }n0|t           j        u rt          |           }nt          d|           t           j        j        j	        
                    ||          S )Nr   )r    )r_   r   r   r   r   rC   rD   r   atenscalar_tensorr   )r   r    ds      r!   r"   z TensorReferenceAnalysis.constantu  s     EKAAAel""aAAej  QAA !>u!>!>???y~+33AU3CCCr$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   
logical_orr   r'   s     r!   r*   zTensorReferenceAnalysis.or_  s    y~(00A666r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   logical_andr   r'   s     r!   r-   zTensorReferenceAnalysis.and_  s    y~)11!Q777r$   c                 L    t           j        j                            | |          S r   )r_   r   r   r   r'   s     r!   r   z#TensorReferenceAnalysis.bitwise_and      y~))!Q///r$   c                 L    t           j        j                            | |          S r   )r_   r   r   r   r'   s     r!   r   z"TensorReferenceAnalysis.bitwise_or  s    y~((A...r$   c                 L    t           j        j                            | |          S r   )r_   r   r   r   r'   s     r!   r   z#TensorReferenceAnalysis.bitwise_xor  r   r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r2   Tensorr'   s     r!   r2   zTensorReferenceAnalysis.eq      y~ ''1---r$   c                 V    t           j        j        j                            ||          S r   )r_   r   r   r7   r   r5   s      r!   r7   zTensorReferenceAnalysis.ne  r   r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r9   r   r'   s     r!   r9   zTensorReferenceAnalysis.lt  r   r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r<   r   r'   s     r!   r<   zTensorReferenceAnalysis.gt  r   r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r>   r   r'   s     r!   r>   zTensorReferenceAnalysis.le  r   r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   rA   r   r'   s     r!   rA   zTensorReferenceAnalysis.ge  r   r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   logical_notr   rE   s    r!   r4   zTensorReferenceAnalysis.not_  s    y~)11!444r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   rJ   r   rH   s    r!   rJ   z"TensorReferenceAnalysis.reciprocal  s    y~(00333r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   rN   r   rH   s    r!   rN   zTensorReferenceAnalysis.square  s     y~$,,Q///r$   c                 p    t          t          j        j        j                            |           |          S r   )r   r_   r   r   truncr   rQ   s     r!   rR   z$TensorReferenceAnalysis.trunc_to_int  '    -55a88%@@@r$   c                 p    t          t          j        j        j                            |           |          S r   )r   r_   r   r   r\   r   rQ   s     r!   rV   z#TensorReferenceAnalysis.ceil_to_int  s'    ,44Q77???r$   c                 p    t          t          j        j        j                            |           |          S r   )r   r_   r   r   rX   r   rQ   s     r!   rY   z$TensorReferenceAnalysis.floor_to_int  r   r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   rX   r   rH   s    r!   rX   zTensorReferenceAnalysis.floor      y~#++A...r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r\   r   rH   s    r!   r\   zTensorReferenceAnalysis.ceil      y~"**1---r$   c                 "    t          | |          S r   )r   rQ   s     r!   rb   z TensorReferenceAnalysis.to_dtype  s    E"""r$   rr   c                      t          d          )Nz8no C-style modulus operation available from frontend atmrt   rd   s     r!   rf   zTensorReferenceAnalysis.mod  s     "F
 
 	
r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   ri   r   rH   s    r!   ri   zTensorReferenceAnalysis.abs      y~!))!,,,r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   rk   r   rH   s    r!   rk   zTensorReferenceAnalysis.neg  r	  r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   true_divider   r'   s     r!   rm   zTensorReferenceAnalysis.truediv  s    y~)00A666r$   c                      t          d          )Nz8Python int truediv difficult to implement in PyTorch atm)ra   r_   r   r   r  r   r   r`   r'   s     r!   ro   z#TensorReferenceAnalysis.int_truediv      !F
 
 	
r$   c                 Z    t           j        j        j                            | |d          S )NrX   )rounding_mode)r_   r   r   divTensor_moder'   s     r!   rq   z TensorReferenceAnalysis.floordiv  s$    y~!--a'-JJJr$   c                      t          d          )Nz9no C-style truncdiv operation available from frontend atmrt   r'   s     r!   ru   z TensorReferenceAnalysis.truncdiv  s    !G
 
 	
r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   rx   r   r'   s     r!   rx   zTensorReferenceAnalysis.add      y~!((A...r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r   r   r'   s     r!   r   zTensorReferenceAnalysis.mul  r  r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r   r   r'   s     r!   r   zTensorReferenceAnalysis.sub  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r   r   rH   s    r!   r   zTensorReferenceAnalysis.exp
  r	  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r   r   rH   s    r!   r   zTensorReferenceAnalysis.log  r	  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r   r   rH   s    r!   r   zTensorReferenceAnalysis.log2  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r   r   rH   s    r!   r   zTensorReferenceAnalysis.sqrt  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   sinr   rH   s    r!   r  zTensorReferenceAnalysis.sin  r	  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   cosr   rH   s    r!   r  zTensorReferenceAnalysis.cos  r	  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   tanhr   rH   s    r!   r!  zTensorReferenceAnalysis.tanh"  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   sinhr   rH   s    r!   r#  zTensorReferenceAnalysis.sinh&  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   coshr   rH   s    r!   r%  zTensorReferenceAnalysis.cosh*  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   tanr   rH   s    r!   r'  zTensorReferenceAnalysis.tan.  r	  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   acosr   rH   s    r!   r)  zTensorReferenceAnalysis.acos2  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   atanr   rH   s    r!   r+  zTensorReferenceAnalysis.atan6  r  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   asinr   rH   s    r!   r-  zTensorReferenceAnalysis.asin:  r  r$   c                 V    t           j        j        j                            | |          S r   r_   r   r   r   Tensor_Tensorr'   s     r!   r   zTensorReferenceAnalysis.pow>  s    y~!//1555r$   c                 V    t           j        j        j                            | |          S r   r/  r'   s     r!   r   z&TensorReferenceAnalysis.pow_by_naturalB  s!     y~!//1555r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r   r   r'   s     r!   r   zTensorReferenceAnalysis.minimumG      y~%--a333r$   c                 V    t           j        j        j                            | |          S r   )r_   r   r   r   r   r'   s     r!   r   zTensorReferenceAnalysis.maximumK  r3  r$   c                 T    t           j        j        j                            |           S r   )r_   r   r   r   r   r   s     r!   r   z$TensorReferenceAnalysis.round_to_intO  r  r$   c                      t          d          )Nz8round decimal doesn't support Tensor second argument atmrt   r'   s     r!   r   z%TensorReferenceAnalysis.round_decimalS  r  r$   N)8r   r   r   r   r"   r*   r-   r   r   r   r2   r   r7   r9   r<   r>   rA   r4   rJ   rN   rR   rV   rY   rX   r\   rb   r   rf   ri   rk   rm   ro   rq   ru   rx   r   r   r   r   r   r   r  r  r!  r#  r%  r'  r)  r+  r-  r   r   r   r   r   r   r&   r$   r!   r   r   r  s        
D 
D \
D 7 7 \7 8 8 \8 0 0 \0 / / \/ 0 0 \0 . . \. . . [. . . \. . . \. . . \. . . \. 5 5 \5 4 4 \4 0 0 \0 A A \A @ @ \@ A A \A / / \/ . . \. # # \# 
X 
 
 
 \
 - - \- - - \- 7 7 \7 
 
 \
 K K \K 
( 
 
 
 \

 / / \/ / / \/ / / \/ - - \- - - \- . . \. . . \. - - \- - - \- . . \. . . \. . . \. - - \- . . \. . . \. . . \. 6 6 \6 6 6 \6 4 4 \4 4 4 \4 / / \/ 
x 
 
 
 \
 
 
r$   r   )"r   rw   typingr   r   r_   torch.utils._sympy.functionsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r   r&   r$   r!   <module>r9     s                                                       <n+ n+ n+ n+ n+ n+ n+ n+hz z z z z/ z z z~# # # # #'> # # #B Bek Bel B B B B$e
 e
 e
 e
 e
 e
 e
 e
 e
 e
r$   