
    Vh$5                     (   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  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 y)    N)Union)_keep_floatBitwiseFn_bitwise_andBitwiseFn_bitwise_or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        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-y*)+ReferenceAnalysisc                 ,    t        j                  |       S N)sympysympifycdtypes     L/home/dcms/DCMS/lib/python3.12/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_/   r*   r#   c                     t        | t        j                        st        |t        j                        rt        j                  | |      S | |k(  S r   )
isinstancer   ExprEqr&   s     r    eqzReferenceAnalysis.eq3   s6    a$
1ejj(A88Aq>!Avr#   c                 D    | j                  | j                  ||            S r   )not_r1   clsr'   r(   s      r    nezReferenceAnalysis.ne9   s    xxq!%%r#   c                     | |k  S r   r%   r&   s     r    ltzReferenceAnalysis.lt=   r*   r#   c                     | |kD  S r   r%   r&   s     r    gtzReferenceAnalysis.gtA   r*   r#   c                     | |k  S r   r%   r&   s     r    lezReferenceAnalysis.leE       Avr#   c                     | |k\  S r   r%   r&   s     r    gezReferenceAnalysis.geI   r=   r#   c                 ,    t        | t              rJ |  S r   )r.   boolr'   s    r    r3   zReferenceAnalysis.not_M   s    a&&&r	r#   c                     t        d|       S )Ng      ?r   xs    r    
reciprocalzReferenceAnalysis.reciprocalR   s    C##r#   c                     t        | d      S )N   r   rE   s    r    squarezReferenceAnalysis.squareV       Aq!!r#   c                     t        |       S r   )r   rF   r   s     r    trunc_to_intzReferenceAnalysis.trunc_to_intZ       !}r#   c                 ,    t        j                  |       S r   )r   ceilingrN   s     r    ceil_to_intzReferenceAnalysis.ceil_to_int^   r"   r#   c                 ,    t        j                  |       S r   )r   floorrN   s     r    floor_to_intzReferenceAnalysis.floor_to_intb   s    {{1~r#   c                 @     t        t        j                        |       S r   )r   r   rU   rE   s    r    rU   zReferenceAnalysis.floorf   s    '{5;;'**r#   c                 @     t        t        j                        |       S r   )r   r   rR   rE   s    r    ceilzReferenceAnalysis.ceilj   s    ){5==)!,,r#   c                 \    |t         j                  k(  rt        |       S t        d| d      Nz	to_dtype z NYI)torchfloat64r   NotImplementedErrorrN   s     r    to_dtypezReferenceAnalysis.to_dtypen   s,    EMM!1:!IeWD"9::r#   c                     t        | |      S r   )r   rF   ys     r    modzReferenceAnalysis.modt       1ayr#   c                     t        |       S r   )absrE   s    r    rf   zReferenceAnalysis.absx   s    1vr#   c                     |  S r   r%   rE   s    r    negzReferenceAnalysis.neg|   s	    r	r#   c                     t        | |      S r   rD   r&   s     r    truedivzReferenceAnalysis.truediv   rL   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#   c                     t        d      )NzTODO: truncdivr^   r&   s     r    truncdivzReferenceAnalysis.truncdiv   s    !"233r#   c                 B     t        t        j                        | |      S r   )r   operatoraddr&   s     r    rt   zReferenceAnalysis.add       ({8<<(A..r#   c                 &    t        j                  | S r   )r   Add)r5   argss     r    sym_sumzReferenceAnalysis.sym_sum   s    yy$r#   c                 B     t        t        j                        | |      S r   )r   rs   mulr&   s     r    r{   zReferenceAnalysis.mul   ru   r#   c                 B     t        t        j                        | |      S r   )r   rs   subr&   s     r    r}   zReferenceAnalysis.sub   ru   r#   c                     t        |       S r   )r   rE   s    r    expzReferenceAnalysis.exp        ##r#   c                     t        |       S r   )r   rE   s    r    logzReferenceAnalysis.log   r   r#   c                     t        |       S r   )r   rE   s    r    log2zReferenceAnalysis.log2       !!$$r#   c                     t        |       S r   )r   rE   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   rJ   r&   s     r    pow_by_naturalz ReferenceAnalysis.pow_by_natural   rL   r#   c                     t        | |      S r   )r   r&   s     r    minimumzReferenceAnalysis.minimum   rd   r#   c                     t        | |      S r   )r   r&   s     r    maximumzReferenceAnalysis.maximum   rd   r#   c                     t        |       S r   )r   r'   r   s     r    round_to_intzReferenceAnalysis.round_to_int   rP   r#   c                     t        | |      S r   )r   r&   s     r    round_decimalzReferenceAnalysis.round_decimal   rL   r#   c                     t        | |      S r   )r   r&   s     r    bitwise_andzReferenceAnalysis.bitwise_and   s    $Q**r#   c                     t        | |      S r   )r   r&   s     r    
bitwise_orzReferenceAnalysis.bitwise_or   s    #Aq))r#   N).__name__
__module____qualname__staticmethodr!   r)   r,   r1   classmethodr6   r8   r:   r<   r?   r3   rG   rK   rO   rS   rV   rU   rY   r_   rc   rf   rh   rj   rl   rn   rq   rt   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r%   r#   r    r   r   &   s4            
 & &           $ $ " "         + + - - ; ;
       " "       4 4 / /     / / / / $ $ $ $ % % % % + + " "       " " + + * *r#   r   c                      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y)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floatrA   AssertionErrorr   s     r    r!   z PythonReferenceAnalysis.constant   sT    EKKq6Mell"8Oejj 7N #6ug!>??r#   c                 ,    t        j                  |       S r   )r\   sym_notrB   s    r    r3   zPythonReferenceAnalysis.not_   r"   r#   c                     t        |      dk(  ryt        |      dk(  r|d   S | j                  |d   |d         }t        dt        |            D ]  }| j                  |||         } |S )Nr      rI   )lenrt   range)r5   rx   accis       r    ry   zPythonReferenceAnalysis.sym_sum   so    t9>t9>7Nggd1gtAw'q#d)$ 	(A''#tAw'C	(
r#   c                     | |z  S r   r%   r&   s     r    rn   z PythonReferenceAnalysis.floordiv   r=   r#   c                     | |z  S r   r%   ra   s     r    rc   zPythonReferenceAnalysis.mod   r*   r#   c                     | |z  S r   r%   r&   s     r    rq   z PythonReferenceAnalysis.truncdiv   r*   r#   c                 p    |t         j                  k(  rt        j                  |       S t        d| d      r[   )r\   r]   	sym_floatr^   rN   s     r    r_   z PythonReferenceAnalysis.to_dtype   s1    EMM!??1%%!IeWD"9::r#   c                     t        d      )Nz!exp is not valid shape sympy exprr   rE   s    r    r   zPythonReferenceAnalysis.exp      @AAr#   c                     t        d      )Nz!log is not valid shape sympy exprr   rE   s    r    r   zPythonReferenceAnalysis.log  r   r#   c                 ,    t        j                  |       S r   )r\   	_sym_log2rE   s    r    r   zPythonReferenceAnalysis.log2	      q!!r#   c                 ,    t        j                  |       S r   )r\   	_sym_sqrtrE   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   )mathrU   rN   s     r    rV   z$PythonReferenceAnalysis.floor_to_int  s    zz!}r#   c                 ,    t        j                  |       S r   )r   rY   rN   s     r    rS   z#PythonReferenceAnalysis.ceil_to_int  s    yy|r#   c                 >    t        t        j                  |             S r   )r   r   rU   rE   s    r    rU   zPythonReferenceAnalysis.floor!  s    TZZ]##r#   c                 >    t        t        j                  |             S r   )r   r   rY   rE   s    r    rY   zPythonReferenceAnalysis.ceil%  s    TYYq\""r#   c                     | |z  S r   r%   r&   s     r    rj   zPythonReferenceAnalysis.truediv)  r*   r#   c                     | |z  S r   r%   r&   s     r    r   zPythonReferenceAnalysis.pow-  s    !tr#   c                     | |z  S r   r%   r&   s     r    r   z&PythonReferenceAnalysis.pow_by_natural1  s    
 !tr#   c                     t        |       S r   roundr   s     r    r   z$PythonReferenceAnalysis.round_to_int8  s    Qxr#   c                     t        | |      S )N)ndigitsr   r&   s     r    r   z%PythonReferenceAnalysis.round_decimal<  s    Q""r#   c                     | |z  S r   r%   r&   s     r    r   z#PythonReferenceAnalysis.bitwise_and@  r*   r#   c                     | |z  S r   r%   r&   s     r    r   z"PythonReferenceAnalysis.bitwise_orD  r*   r#   N)r   r   r   r   r!   r3   r   ry   rn   rc   rq   r_   r   r   r   r   r   r   rV   rS   rU   rY   rj   r   r   r   r   r   r   r%   r#   r    r   r      s   @ @             ; ;
 B B B B " " " " # # # #     $ $ # #         # #    r#   r   c                       e Zd Zed        Zy) OptimizedPythonReferenceAnalysisc                 ,    t        j                  |       S r   )r\   ry   )rx   s    r    ry   z(OptimizedPythonReferenceAnalysis.sym_sumL  s    }}T""r#   N)r   r   r   r   ry   r%   r#   r    r   r   K  s    # #r#   r   rF   r   returnc                 j    t         j                  j                  j                  j	                  | |      S r   )r\   opsprimsconvert_element_typedefaultrN   s     r    	_to_dtyper   Q  s#    99??//775AAr#   c                      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        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,        Z0ed-        Z1ed.        Z2ed/        Z3ed0        Z4ed1        Z5y2)3TensorReferenceAnalysisc                 <   |t         j                  u rt        |       }nJ|t         j                  u rt	        |       }n,|t         j
                  u rt        |       }nt        d|       t         j                  j                  j                  j                  ||      S )Nr   )r   )r\   r   r   r   r   rA   r   r   atenscalar_tensorr   )r   r   ds      r    r!   z TensorReferenceAnalysis.constantf  sz     EKKAAell"aAejj QA #6ug!>??yy~~++33AU3CCr#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   
logical_orr   r&   s     r    r)   zTensorReferenceAnalysis.or_s  s#    yy~~((00A66r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   logical_andr   r&   s     r    r,   zTensorReferenceAnalysis.and_w  s#    yy~~))11!Q77r#   c                 V    t         j                  j                  j                  | |      S r   )r\   r   r   r   r&   s     r    r   z#TensorReferenceAnalysis.bitwise_and{  s    yy~~))!Q//r#   c                 V    t         j                  j                  j                  | |      S r   )r\   r   r   r   r&   s     r    r   z"TensorReferenceAnalysis.bitwise_or  s    yy~~((A..r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r1   Tensorr&   s     r    r1   zTensorReferenceAnalysis.eq  #    yy~~  ''1--r#   c                 j    t         j                  j                  j                  j	                  ||      S r   )r\   r   r   r6   r   r4   s      r    r6   zTensorReferenceAnalysis.ne  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r8   r   r&   s     r    r8   zTensorReferenceAnalysis.lt  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r:   r   r&   s     r    r:   zTensorReferenceAnalysis.gt  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r<   r   r&   s     r    r<   zTensorReferenceAnalysis.le  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r?   r   r&   s     r    r?   zTensorReferenceAnalysis.ge  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   logical_notr   rB   s    r    r3   zTensorReferenceAnalysis.not_  s!    yy~~))11!44r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rG   r   rE   s    r    rG   z"TensorReferenceAnalysis.reciprocal  s!    yy~~((0033r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rK   r   rE   s    r    rK   zTensorReferenceAnalysis.square  s#     yy~~$$,,Q//r#   c                 |    t        t        j                  j                  j                  j                  |       |      S r   )r   r\   r   r   truncr   rN   s     r    rO   z$TensorReferenceAnalysis.trunc_to_int  (    --55a8%@@r#   c                 |    t        t        j                  j                  j                  j                  |       |      S r   )r   r\   r   r   rY   r   rN   s     r    rS   z#TensorReferenceAnalysis.ceil_to_int  s(    ,,44Q7??r#   c                 |    t        t        j                  j                  j                  j                  |       |      S r   )r   r\   r   r   rU   r   rN   s     r    rV   z$TensorReferenceAnalysis.floor_to_int  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rU   r   rE   s    r    rU   zTensorReferenceAnalysis.floor  !    yy~~##++A..r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rY   r   rE   s    r    rY   zTensorReferenceAnalysis.ceil  !    yy~~""**1--r#   c                     t        | |      S r   )r   rN   s     r    r_   z TensorReferenceAnalysis.to_dtype  s    E""r#   c                     t        d      )Nz8no C-style modulus operation available from frontend atmrp   ra   s     r    rc   zTensorReferenceAnalysis.mod  s     "F
 	
r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rf   r   rE   s    r    rf   zTensorReferenceAnalysis.abs  !    yy~~!!))!,,r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   rh   r   rE   s    r    rh   zTensorReferenceAnalysis.neg  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   true_divider   r&   s     r    rj   zTensorReferenceAnalysis.truediv  s#    yy~~))00A66r#   c                     t        d      )Nz8Python int truediv difficult to implement in PyTorch atm)r^   r\   r   r   r  r   r   r]   r&   s     r    rl   z#TensorReferenceAnalysis.int_truediv      !F
 	
r#   c                 n    t         j                  j                  j                  j	                  | |d      S )NrU   )rounding_mode)r\   r   r   divTensor_moder&   s     r    rn   z TensorReferenceAnalysis.floordiv  s(    yy~~!!--a'-JJr#   c                     t        d      )Nz9no C-style truncdiv operation available from frontend atmrp   r&   s     r    rq   z TensorReferenceAnalysis.truncdiv  s    !G
 	
r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   rt   r   r&   s     r    rt   zTensorReferenceAnalysis.add  #    yy~~!!((A..r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r{   r   r&   s     r    r{   zTensorReferenceAnalysis.mul  r  r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r}   r   r&   s     r    r}   zTensorReferenceAnalysis.sub  r  r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   r   r   rE   s    r    r   zTensorReferenceAnalysis.exp  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   r   r   rE   s    r    r   zTensorReferenceAnalysis.log  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   r   r   rE   s    r    r   zTensorReferenceAnalysis.log2  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   r   r   rE   s    r    r   zTensorReferenceAnalysis.sqrt  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   sinr   rE   s    r    r  zTensorReferenceAnalysis.sin  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   cosr   rE   s    r    r  zTensorReferenceAnalysis.cos
  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   tanhr   rE   s    r    r  zTensorReferenceAnalysis.tanh  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   sinhr   rE   s    r    r  zTensorReferenceAnalysis.sinh  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   coshr   rE   s    r    r  zTensorReferenceAnalysis.cosh  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   tanr   rE   s    r    r  zTensorReferenceAnalysis.tan  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   acosr   rE   s    r    r  zTensorReferenceAnalysis.acos  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   atanr   rE   s    r    r!  zTensorReferenceAnalysis.atan"  r   r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   asinr   rE   s    r    r#  zTensorReferenceAnalysis.asin&  r   r#   c                 j    t         j                  j                  j                  j	                  | |      S r   r\   r   r   r   Tensor_Tensorr&   s     r    r   zTensorReferenceAnalysis.pow*  s#    yy~~!!//155r#   c                 j    t         j                  j                  j                  j	                  | |      S r   r%  r&   s     r    r   z&TensorReferenceAnalysis.pow_by_natural.  s%     yy~~!!//155r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r   r   r&   s     r    r   zTensorReferenceAnalysis.minimum3  #    yy~~%%--a33r#   c                 j    t         j                  j                  j                  j	                  | |      S r   )r\   r   r   r   r   r&   s     r    r   zTensorReferenceAnalysis.maximum7  r)  r#   c                 h    t         j                  j                  j                  j	                  |       S r   )r\   r   r   r   r   r   s     r    r   z$TensorReferenceAnalysis.round_to_int;  r   r#   c                     t        d      )Nz8round decimal doesn't support Tensor second argument atmrp   r&   s     r    r   z%TensorReferenceAnalysis.round_decimal?  r  r#   N)6r   r   r   r   r!   r)   r,   r   r   r1   r   r6   r8   r:   r<   r?   r3   rG   rK   rO   rS   rV   rU   rY   r_   rc   rf   rh   rj   rl   rn   rq   rt   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   c  s    
D 
D 7 7 8 8 0 0 / / . . . . . . . . . . . . 5 5 4 4 0 0 A A @ @ A A / / . . # # 
 
 - - - - 7 7 

 

 K K 
 

 / / / / / / - - - - . . . . - - - - . . . . . . - - . . . . . . 6 6 6 6 4 4 4 4 / / 
 
r#   r   )!r   rs   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    <module>r/     s             :h* h*\r/ rn#'> #B Bekk Bell B$`
 `
r#   