U
    •Ê¹jç  ã                   @   s  U d dl Z d dlmZmZmZmZ d dlZd dlmZ e  	e
¡ZejejejejejejejejejejejejiZeeej eej f ed< ejejejejfZeeeej  dœdd„Zdejejeeeeejejf  d
œdd„Zejejeejdœdd„ZdS )é    N)ÚDictÚOptionalÚTupleÚType)ÚFloorDivÚ_MIRROR_REL_OP)ÚtypeÚreturnc                 C   s   t  | d ¡S )N)r   Úget)r   © r   úW/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/utils/_sympy/solve.pyÚmirror_rel_op   s    r   é   T)ÚexprÚthingÚtrialsÚfloordiv_inequalityr	   c                 C   s  t t| ƒƒ}t| tjƒr |d kr4t dt| ƒ¡ d S | j |¡}| j	 |¡}|rf|rft d|| ¡ d S g }|rx| 
| ¡ |r�| 
|| j	| jƒ¡ |D ]n}|d kr¢q”t|tjƒs²t‚t|ƒD ]"}	t|||d�}
|
|krØ qÞ|
}qºt|tjƒr”|j|kr”||j	f  S q”d S )Nz$expression with unsupported type: %sz0thing (%s) found in both sides of expression: %s)r   )r   r   Ú
isinstanceÚsympyÚRelÚlogÚdebugÚlhsÚhasÚrhsÚappendÚAssertionErrorÚrangeÚ_try_isolate_lhs)r   r   r   r   ZmirrorZlhs_has_thingZrhs_has_thingZexpressionsÚeÚ_Ztrialr   r   r   Ú	try_solve)   s4    
r!   )r   r   r   r	   c                    sV  | }t | ƒ}t|tjƒrZt|jtjƒr@t‡ fdd„|jjD ƒƒnd}|| j| | j| ƒ}t|tjƒrêt|jtj	ƒrê|j\}}tj	‡ fdd„|jD ƒŽ }t|t
ƒr¬|jd ksê|| }|| }t|t
ƒrÔ|jrÔt|ƒ}|d k	sàt‚|||ƒ}|�rRt|tjƒ�rRt|jtƒ�rR|jjj�rR|jj�rRt| tjƒ�rh|jj\}	}
t t |	|j|
 ¡t |	|jd |
 ¡¡S t| tjƒ�r®|jj\}	}
t t |	|j|
 ¡t |	|jd |
 ¡¡S t| tjtjfƒ�r t| tjƒ�rÖ|jn|jd }t |jjd ||jjd  ¡S t| tjtjfƒ�rRt| tjƒ�r(|jn|jd }t |jjd ||jjd  ¡S |S )Nc                    s   g | ]}|  ˆ ¡s|‘qS r   ©r   ©Ú.0Úa©r   r   r   Ú
<listcomp>i   s     
 z$_try_isolate_lhs.<locals>.<listcomp>r   c                    s   g | ]}|  ˆ ¡s|‘qS r   r"   r#   r&   r   r   r'   r   s     
 é   )r   r   r   r   r   ÚAddÚsumÚargsr   ZMulÚINEQUALITY_TYPESZis_negativer   r   r   ZdivisorZis_positiveÚ
is_integerÚEqÚAndÚGeÚLtÚNeÚOrÚGtÚLe)r   r   r   r   ÚopZlhs_not_thingr   r   ÚotherÚ	numeratorÚdenominatorZquotientr   r&   r   r   `   s^    ÿý

ÿ
þ
ýüû	þþ  r   )r   T)ÚloggingÚtypingr   r   r   r   r   Ztorch.utils._sympy.functionsr   Ú	getLoggerÚ__name__r   r.   r2   r0   r5   r4   r1   r   ZBasicr   Ú__annotations__r,   r   ÚintÚboolr!   r   r   r   r   r   Ú<module>   sD    
      ú 	  üû8  þ