o
    kiJ7                     @   s   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 dZG dd deZG dd	 d	eZd
ejdejdejfddZ G d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                   @   s
  e Zd Zedd Zedd Zedd Zedd Zed	d
 Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1efd2d3Zed4d5 Zed6d7 Z ed8d9 Z!ed:d; Z"ed<d= Z#ed>d? Z$ed@dA Z%edBdC Z&edDdE Z'edFdG Z(edHdI Z)edJdK Z*edLdM Z+edNdO Z,edPdQ Z-edRdS Z.edTdU Z/dVS )WReferenceAnalysisc                 C   
   t | S N)sympysympifycdtype r   f/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/utils/_sympy/reference.pyconstant(      
zReferenceAnalysis.constantc                 C      | |B S r   r   abr   r   r    or_,      zReferenceAnalysis.or_c                 C      | |@ S r   r   r$   r   r   r    and_0   r(   zReferenceAnalysis.and_c                 C   s,   t | tjst |tjrt| |S | |kS r   )
isinstancer   ExprEqr$   r   r   r    eq4   s   zReferenceAnalysis.eqc                 C   s   |  | ||S r   )not_r.   clsr%   r&   r   r   r    ne:      zReferenceAnalysis.nec                 C   s   | |k S r   r   r$   r   r   r    lt>   r(   zReferenceAnalysis.ltc                 C   s   | |kS r   r   r$   r   r   r    gtB   r(   zReferenceAnalysis.gtc                 C   s   | |kS r   r   r$   r   r   r    leF   r(   zReferenceAnalysis.lec                 C   s   | |kS r   r   r$   r   r   r    geJ   r(   zReferenceAnalysis.gec                 C   s   t | tr	td|  S )Nznot_ needs sympy expr)r+   boolAssertionErrorr%   r   r   r    r/   N   s   
zReferenceAnalysis.not_c                 C   s
   t d| S )Ng      ?r   xr   r   r    
reciprocalT   r"   zReferenceAnalysis.reciprocalc                 C   s
   t | dS )N   r   r<   r   r   r    squareX   r"   zReferenceAnalysis.squarec                 C      t | S r   )r   r=   r   r   r   r    trunc_to_int\   r(   zReferenceAnalysis.trunc_to_intc                 C   r   r   )r   ceilingrC   r   r   r    ceil_to_int`   r"   zReferenceAnalysis.ceil_to_intc                 C   r   r   )r   floorrC   r   r   r    floor_to_intd   r"   zReferenceAnalysis.floor_to_intc                 C      t tj| S r   )r   r   rG   r<   r   r   r    rG   h      zReferenceAnalysis.floorc                 C   rI   r   )r   r   rE   r<   r   r   r    ceill   rJ   zReferenceAnalysis.ceilc                 C   s"   |t jkr	t| S td| dNz	to_dtype z NYI)torchfloat64r   NotImplementedErrorrC   r   r   r    to_dtypep   s   
zReferenceAnalysis.to_dtypec                 C   
   t | |S r   )r   r=   yr   r   r    modv   r"   zReferenceAnalysis.modc                 C   rB   r   )absr<   r   r   r    rU   z   r(   zReferenceAnalysis.absc                 C   s   |  S r   r   r<   r   r   r    neg~   s   zReferenceAnalysis.negc                 C   rQ   r   r;   r$   r   r   r    truediv   r"   zReferenceAnalysis.truedivc                 C   rQ   r   )r
   r$   r   r   r    int_truediv   r"   zReferenceAnalysis.int_truedivc                 C   rQ   r   )r	   r$   r   r   r    floordiv   r"   zReferenceAnalysis.floordivreturnc                 C      t d)NzTODO: truncdivrO   r$   r   r   r    truncdiv   r(   zReferenceAnalysis.truncdivc                 C      t tj| |S r   )r   operatoraddr$   r   r   r    r`         zReferenceAnalysis.addc                 C   s
   t j| S r   )r   Add)r1   argsr   r   r    sym_sum   r"   zReferenceAnalysis.sym_sumc                 C   r^   r   )r   r_   mulr$   r   r   r    re      ra   zReferenceAnalysis.mulc                 C   r^   r   )r   r_   subr$   r   r   r    rf      ra   zReferenceAnalysis.subc                 C   rB   r   )r   r<   r   r   r    exp   r(   zReferenceAnalysis.expc                 C   rB   r   )r   r<   r   r   r    log   r(   zReferenceAnalysis.logc                 C   rB   r   )r   r<   r   r   r    log2   r(   zReferenceAnalysis.log2c                 C   rB   r   )r   r<   r   r   r    sqrt   r(   zReferenceAnalysis.sqrtc                 C   s   t t| |S r   )r   r   r$   r   r   r    pow   s   zReferenceAnalysis.powc                 C   rQ   r   r@   r$   r   r   r    pow_by_natural   r"   z ReferenceAnalysis.pow_by_naturalc                 C   rQ   r   )r   r$   r   r   r    minimum   r"   zReferenceAnalysis.minimumc                 C   rQ   r   )r   r$   r   r   r    maximum   r"   zReferenceAnalysis.maximumc                 C   rB   r   )r   r%   r   r   r   r    round_to_int   r(   zReferenceAnalysis.round_to_intc                 C   rQ   r   )r   r$   r   r   r    round_decimal   r"   zReferenceAnalysis.round_decimalc                 C   rQ   r   )r   r$   r   r   r    bitwise_and   r"   zReferenceAnalysis.bitwise_andc                 C   rQ   r   )r   r$   r   r   r    
bitwise_or   r"   zReferenceAnalysis.bitwise_orc                 C   rQ   r   )r   r$   r   r   r    bitwise_xor   r"   zReferenceAnalysis.bitwise_xorN)0__name__
__module____qualname__staticmethodr!   r'   r*   r.   classmethodr2   r4   r5   r6   r7   r/   r>   rA   rD   rF   rH   rG   rK   rP   rT   rU   rV   rW   rX   rY   r   r]   r`   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   rp   rq   rr   rs   rt   r   r   r   r    r   '   s    







































r   c                   @   sP  e Zd Zedd Zedd Zedd Zedd Zed	d
 Z	edd Z
edd Zedd ZedefddZedefddZedd Zedd Zedd Zedd Zedd Zed d! Zed"d# Zed$d% Zed&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Zed0d1 Zed2d3 Zed4d5 Zd6S )7PythonReferenceAnalysisc                 C   sD   |t ju r	t| S |t ju rt| S |t ju rt| S td| )Nunrecognized dtype )rM   int64intdoublefloatr8   r9   r   r   r   r    r!      s   


z PythonReferenceAnalysis.constantc                 C   r   r   )rM   sym_notr:   r   r   r    r/      r"   zPythonReferenceAnalysis.not_c                 C   s`   t |dkrdS t |dkr|d S | |d |d }tdt |D ]
}| ||| }q#|S )Nr      r?   )lenr`   range)r1   rc   accir   r   r    rd      s   zPythonReferenceAnalysis.sym_sumc                 C   s   | | S r   r   r$   r   r   r    rY      r(   z PythonReferenceAnalysis.floordivc                 C      | | S r   r   rR   r   r   r    rT      r(   zPythonReferenceAnalysis.modc                 C   r   r   r   rR   r   r   r    
python_mod   r(   z"PythonReferenceAnalysis.python_modc                 C      | | S r   r   r$   r   r   r    r]     r(   z PythonReferenceAnalysis.truncdivc                 C   s$   |t jkr
t | S td| drL   )rM   rN   	sym_floatrO   rC   r   r   r    rP     s   

z PythonReferenceAnalysis.to_dtyperZ   c                 C   r[   )Nz!exp is not valid shape sympy exprr9   r<   r   r   r    rg     r(   zPythonReferenceAnalysis.expc                 C   r[   )Nz!log is not valid shape sympy exprr   r<   r   r   r    rh     r(   zPythonReferenceAnalysis.logc                 C   r   r   )rM   	_sym_log2r<   r   r   r    ri     r"   zPythonReferenceAnalysis.log2c                 C   r   r   )rM   	_sym_sqrtr<   r   r   r    rj     r"   zPythonReferenceAnalysis.sqrtc                 C      t | |S r   )rM   sym_minr$   r   r   r    rm        zPythonReferenceAnalysis.minimumc                 C   r   r   )rM   sym_maxr$   r   r   r    rn      r   zPythonReferenceAnalysis.maximumc                 C   r   r   )mathrG   rC   r   r   r    rH   $  r"   z$PythonReferenceAnalysis.floor_to_intc                 C   r   r   )r   rK   rC   r   r   r    rF   (  r"   z#PythonReferenceAnalysis.ceil_to_intc                 C      t t| S r   )r   r   rG   r<   r   r   r    rG   ,  rJ   zPythonReferenceAnalysis.floorc                 C   r   r   )r   r   rK   r<   r   r   r    rK   0  rJ   zPythonReferenceAnalysis.ceilc                 C   r   r   r   r$   r   r   r    rW   4  r(   zPythonReferenceAnalysis.truedivc                 C      | | S r   r   r$   r   r   r    rk   8  r(   zPythonReferenceAnalysis.powc                 C   r   r   r   r$   r   r   r    rl   <  s   z&PythonReferenceAnalysis.pow_by_naturalc                 C   rB   r   roundro   r   r   r    rp   C  r(   z$PythonReferenceAnalysis.round_to_intc                 C   s   t | |dS )N)ndigitsr   r$   r   r   r    rq   G  r   z%PythonReferenceAnalysis.round_decimalc                 C   r)   r   r   r$   r   r   r    rr   K  r(   z#PythonReferenceAnalysis.bitwise_andc                 C   r#   r   r   r$   r   r   r    rs   O  r(   z"PythonReferenceAnalysis.bitwise_orc                 C   s   | |A S r   r   r$   r   r   r    rt   S  r(   z#PythonReferenceAnalysis.bitwise_xorN) ru   rv   rw   rx   r!   r/   ry   rd   rY   rT   r   r]   rP   r   rg   rh   ri   rj   rm   rn   rH   rF   rG   rK   rW   rk   rl   rp   rq   rr   rs   rt   r   r   r   r    rz      sj    
























rz   c                   @   s   e Zd Zedd ZdS ) OptimizedPythonReferenceAnalysisc                 C   r   r   )rM   rd   )rc   r   r   r    rd   [  r"   z(OptimizedPythonReferenceAnalysis.sym_sumN)ru   rv   rw   rx   rd   r   r   r   r    r   Z  s    r   r=   r   rZ   c                 C      t jjj| |S r   )rM   opsprimsconvert_element_typedefaultrC   r   r   r    	_to_dtype`  s   r   c                   @   sv  e Zd Zedd Zedd Zedd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+efd,d-Zed.d/ Zed0d1 Zed2d3 Zed4d5 Zed6d7 Z ed+efd8d9Z!ed:d; Z"ed<d= Z#ed>d? Z$ed@dA Z%edBdC Z&edDdE Z'edFdG Z(edHdI Z)edJdK Z*edLdM Z+edNdO Z,edPdQ Z-edRdS Z.edTdU Z/edVdW Z0edXdY Z1edZd[ Z2ed\d] Z3ed^d_ Z4ed`da Z5edbdc Z6ed+efdddeZ7dfS )gTensorReferenceAnalysisc                 C   s^   |t ju r
t| }n|t ju rt| }n|t ju rt| }ntd| t jjj	j
||dS )Nr{   )r   )rM   r|   r}   r~   r   r8   r9   r   atenscalar_tensorr   )r   r   dr   r   r    r!   u  s   





z TensorReferenceAnalysis.constantc                 C   r   r   )rM   r   r   
logical_orr   r$   r   r   r    r'     r3   zTensorReferenceAnalysis.or_c                 C   r   r   )rM   r   r   logical_andr   r$   r   r   r    r*     r3   zTensorReferenceAnalysis.and_c                 C      t jj| |S r   )rM   r   r   rr   r$   r   r   r    rr     ra   z#TensorReferenceAnalysis.bitwise_andc                 C   r   r   )rM   r   r   rs   r$   r   r   r    rs     ra   z"TensorReferenceAnalysis.bitwise_orc                 C   r   r   )rM   r   r   rt   r$   r   r   r    rt     ra   z#TensorReferenceAnalysis.bitwise_xorc                 C   r   r   )rM   r   r   r.   Tensorr$   r   r   r    r.     r3   zTensorReferenceAnalysis.eqc                 C   s   t jjj||S r   )rM   r   r   r2   r   r0   r   r   r    r2     r3   zTensorReferenceAnalysis.nec                 C   r   r   )rM   r   r   r4   r   r$   r   r   r    r4     r3   zTensorReferenceAnalysis.ltc                 C   r   r   )rM   r   r   r5   r   r$   r   r   r    r5     r3   zTensorReferenceAnalysis.gtc                 C   r   r   )rM   r   r   r6   r   r$   r   r   r    r6     r3   zTensorReferenceAnalysis.lec                 C   r   r   )rM   r   r   r7   r   r$   r   r   r    r7     r3   zTensorReferenceAnalysis.gec                 C      t jjj| S r   )rM   r   r   logical_notr   r:   r   r   r    r/     ra   zTensorReferenceAnalysis.not_c                 C   r   r   )rM   r   r   r>   r   r<   r   r   r    r>     ra   z"TensorReferenceAnalysis.reciprocalc                 C   r   r   )rM   r   r   rA   r   r<   r   r   r    rA     s   zTensorReferenceAnalysis.squarec                 C      t tjjj| |S r   )r   rM   r   r   truncr   rC   r   r   r    rD        z$TensorReferenceAnalysis.trunc_to_intc                 C   r   r   )r   rM   r   r   rK   r   rC   r   r   r    rF     r   z#TensorReferenceAnalysis.ceil_to_intc                 C   r   r   )r   rM   r   r   rG   r   rC   r   r   r    rH     r   z$TensorReferenceAnalysis.floor_to_intc                 C   r   r   )rM   r   r   rG   r   r<   r   r   r    rG     ra   zTensorReferenceAnalysis.floorc                 C   r   r   )rM   r   r   rK   r   r<   r   r   r    rK     ra   zTensorReferenceAnalysis.ceilc                 C   rQ   r   )r   rC   r   r   r    rP     r"   z TensorReferenceAnalysis.to_dtyperZ   c                 C   r[   )Nz8no C-style modulus operation available from frontend atmr\   rR   r   r   r    rT     s   zTensorReferenceAnalysis.modc                 C   r   r   )rM   r   r   rU   r   r<   r   r   r    rU     ra   zTensorReferenceAnalysis.absc                 C   r   r   )rM   r   r   rV   r   r<   r   r   r    rV     ra   zTensorReferenceAnalysis.negc                 C   r   r   )rM   r   r   true_divider   r$   r   r   r    rW     r3   zTensorReferenceAnalysis.truedivc                 C   r[   )Nz8Python int truediv difficult to implement in PyTorch atm)rO   rM   r   r   r   r   r   rN   r$   r   r   r    rX        z#TensorReferenceAnalysis.int_truedivc                 C   s   t jjjj| |ddS )NrG   )rounding_mode)rM   r   r   divTensor_moder$   r   r   r    rY     r   z TensorReferenceAnalysis.floordivc                 C   r[   )Nz9no C-style truncdiv operation available from frontend atmr\   r$   r   r   r    r]     r   z TensorReferenceAnalysis.truncdivc                 C   r   r   )rM   r   r   r`   r   r$   r   r   r    r`     r3   zTensorReferenceAnalysis.addc                 C   r   r   )rM   r   r   re   r   r$   r   r   r    re     r3   zTensorReferenceAnalysis.mulc                 C   r   r   )rM   r   r   rf   r   r$   r   r   r    rf     r3   zTensorReferenceAnalysis.subc                 C   r   r   )rM   r   r   rg   r   r<   r   r   r    rg   
  ra   zTensorReferenceAnalysis.expc                 C   r   r   )rM   r   r   rh   r   r<   r   r   r    rh     ra   zTensorReferenceAnalysis.logc                 C   r   r   )rM   r   r   ri   r   r<   r   r   r    ri     ra   zTensorReferenceAnalysis.log2c                 C   r   r   )rM   r   r   rj   r   r<   r   r   r    rj     ra   zTensorReferenceAnalysis.sqrtc                 C   r   r   )rM   r   r   sinr   r<   r   r   r    r     ra   zTensorReferenceAnalysis.sinc                 C   r   r   )rM   r   r   cosr   r<   r   r   r    r     ra   zTensorReferenceAnalysis.cosc                 C   r   r   )rM   r   r   tanhr   r<   r   r   r    r   "  ra   zTensorReferenceAnalysis.tanhc                 C   r   r   )rM   r   r   sinhr   r<   r   r   r    r   &  ra   zTensorReferenceAnalysis.sinhc                 C   r   r   )rM   r   r   coshr   r<   r   r   r    r   *  ra   zTensorReferenceAnalysis.coshc                 C   r   r   )rM   r   r   tanr   r<   r   r   r    r   .  ra   zTensorReferenceAnalysis.tanc                 C   r   r   )rM   r   r   acosr   r<   r   r   r    r   2  ra   zTensorReferenceAnalysis.acosc                 C   r   r   )rM   r   r   atanr   r<   r   r   r    r   6  ra   zTensorReferenceAnalysis.atanc                 C   r   r   )rM   r   r   asinr   r<   r   r   r    r   :  ra   zTensorReferenceAnalysis.asinc                 C   r   r   rM   r   r   rk   Tensor_Tensorr$   r   r   r    rk   >  r3   zTensorReferenceAnalysis.powc                 C   r   r   r   r$   r   r   r    rl   B  s   z&TensorReferenceAnalysis.pow_by_naturalc                 C   r   r   )rM   r   r   rm   r   r$   r   r   r    rm   G  r3   zTensorReferenceAnalysis.minimumc                 C   r   r   )rM   r   r   rn   r   r$   r   r   r    rn   K  r3   zTensorReferenceAnalysis.maximumc                 C   r   r   )rM   r   r   r   r   ro   r   r   r    rp   O  ra   z$TensorReferenceAnalysis.round_to_intc                 C   r[   )Nz8round decimal doesn't support Tensor second argument atmr\   r$   r   r   r    rq   S  r   z%TensorReferenceAnalysis.round_decimalN)8ru   rv   rw   rx   r!   r'   r*   rr   rs   rt   r.   ry   r2   r4   r5   r6   r7   r/   r>   rA   rD   rF   rH   rG   rK   rP   r   rT   rU   rV   rW   rX   rY   r]   r`   re   rf   rg   rh   ri   rj   r   r   r   r   r   r   r   r   r   rk   rl   rm   rn   rp   rq   r   r   r   r    r   r  s    














































r   )"r   r_   typingr   r   rM   torch.utils._sympy.functionsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r    <module>   s   X 5