o
    GXh8                     @   sj  	 d dl Z d dlmZmZmZ d dlmZ dd Zdd Zdd	 Z	d
d Z
G dd deZG dd de jZG dd dZdd ZG dd deZG dd deedZG dd deZG dd deZee G dd de jZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*ZG d+d, d,e jZed-kre   dS dS ).    N)eqlene)ABCMetac                 C   s   	 | r||  | } }| s|S N )abr   r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_binop.pygcd   s
   r   c                 C      	 t | tS r   )
isinstanceintxr   r   r
   isint      
r   c                 C   s&   	 t ttfD ]
}t| |r dS qdS )N   r   )r   floatcomplexr   )r   Tr   r   r
   isnum   s   
r   c                 C   r   r   )r   Ratr   r   r   r
   isRat   r   r   c                   @   s   e Zd Z	 ddgZd.ddZdd Zeed	Zd
d Zeed	Z	dd Z
dd Zdd Zdd Zdd ZeZdd Zdd Zdd ZeZdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd	S )/r   	_Rat__num	_Rat__denr   r   c                 C   sd   	 t |std| t |std| |dkrtdt||}t|| | _t|| | _d S )NzRat numerator must be int (%r)z Rat denominator must be int (%r)r   zzero denominator)r   	TypeErrorZeroDivisionErrorr   r   r   r   )selfnumdengr   r   r
   __init__"   s   
zRat.__init__c                 C      	 | j S r   )r   r   r   r   r
   _get_num1      zRat._get_numNc                 C   r#   r   )r   r$   r   r   r
   _get_den6   r&   zRat._get_denc                 C   s   	 d| j | jf S )NzRat(%d, %d)r   r   r$   r   r   r
   __repr__;      zRat.__repr__c                 C   s   	 t t| S r   )strr   r$   r   r   r
   __str__?   s   zRat.__str__c                 C   s   	 | j d | j S )N      ?r(   r$   r   r   r
   	__float__C   r*   zRat.__float__c                 C   sH   	 | j dkrzt| jW S  ty   tdt|  w tdt|  )Nr   z%s too large to convert to intzcan't convert %s to int)r   r   r   OverflowErrorrepr
ValueErrorr$   r   r   r
   __int__G   s   
zRat.__int__c                 C   sX   	 t |r	t|}t|r t| j|j |j| j  | j|j S t|r*t| | S tS r   r   r   r   r   r   r   r   NotImplementedr   otherr   r   r
   __add__Q      
zRat.__add__c                 C   sX   	 t |r	t|}t|r t| j|j |j| j  | j|j S t|r*t| | S tS r   r3   r5   r   r   r
   __sub__^   r8   zRat.__sub__c                 C   sX   	 t |r	t|}t|r t|j| j | j|j  | j|j S t|r*|t|  S tS r   r3   r5   r   r   r
   __rsub__i   r8   zRat.__rsub__c                 C   sV   	 t |rt| j|j | j|j S t|rt| j| | jS t|r)t| | S tS r   r   r   r   r   r   r   r   r4   r5   r   r   r
   __mul__t      zRat.__mul__c                 C   sV   	 t |rt| j|j | j|j S t|rt| j| j| S t|r)t| | S tS r   r;   r5   r   r   r
   __truediv__   r=   zRat.__truediv__c                 C   sV   	 t |rt|j| j |j| j S t|rt|| j | jS t|r)|t|  S tS r   r;   r5   r   r   r
   __rtruediv__   r=   zRat.__rtruediv__c                 C   s4   	 t |r
t|}nt|stS | | }|j|j S r   )r   r   r   r4   r   r   r   r6   r   r   r   r
   __floordiv__   s   
zRat.__floordiv__c                 C   s   	 ||  }|j |j S r   r(   r@   r   r   r
   __rfloordiv__   s   zRat.__rfloordiv__c                 C   s8   	 t |r
t|}nt|stS | | }|| ||  fS r   )r   r   r   r4   r@   r   r   r
   
__divmod__   s   
zRat.__divmod__c                 C   s*   	 t |r
t|}nt|stS t|| S r   )r   r   r   r4   divmodr5   r   r   r
   __rdivmod__   s   

zRat.__rdivmod__c                 C   s   	 t | |d S Nr   rD   r5   r   r   r
   __mod__      zRat.__mod__c                 C   s   	 t || d S rF   rG   r5   r   r   r
   __rmod__   rI   zRat.__rmod__c                 C   sV   	 t |r| jdko| j|kS t|r| j|jko| j|jkS t|r)t| |kS tS rF   )r   r   r   r   r   r   r4   r5   r   r   r
   __eq__   s   z
Rat.__eq__)r   r   )__name__
__module____qualname__	__slots__r"   r%   propertyr   r'   r    r)   r,   r.   r2   r7   __radd__r9   r:   r<   __rmul__r>   r?   rA   rB   rC   rE   rH   rJ   rK   r   r   r   r
   r      s6    






		r   c                   @   sV   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )RatTestCasec                 C   s   |  tddd |  tddd |  tddd |  tddd |  td	dd
 |  tdd
d |  td	d
d
 tddD ]6}tddD ].}| t||dk | t| |dk  | t|| dk | t| | dk  qKqDd S )N
                  r   d      r   )assertEqualr   range
assertTrue)r   ijr   r   r
   test_gcd   s   zRatTestCase.test_gcdc              	   C   sf  t dd}| |jd | |jd t dd}| |jd | |jd t dd}| |jd | |jd t dd}| |jd | |jd t d}| |jd | |jd	 zt d	d
}W n	 tyn   Y nw | d ddddg i d t tf	D ]1}zt |}W n	 ty   Y nw | d|  zt d	|}W n	 ty   Y qw | d|  qd S )NrT   rW   rV      ir\   r[      r   r   z(Rat(1, 0) didn't raise ZeroDivisionError0g        y                r   zRat(%r) didn't raise TypeErrorz!Rat(1, %r) didn't raise TypeError)r   r^   r   r    r   Zfailunittestr   )r   r   Zbadr   r   r
   test_constructor   sF   




zRatTestCase.test_constructorc                 C   s   |  tddtdd d |  tddd tdd |  dtdd tdd |  dtdd d |  tddd d d S )NrV   rd   r   rX   r-         ?r^   r   r$   r   r   r
   test_add   s
   zRatTestCase.test_addc                 C   s   |  tddtdd tdd |  tddd tdd |  dtdd tdd |  tddd d	 |  dtdd d	 d S )
Nre   rV   rX      rT   r   rd   r-         ?rj   r$   r   r   r
   test_sub  s
   "zRatTestCase.test_subc                 C   s~   |  tddtdd tdd |  tddd d |  dtdd d |  tddd d |  dtdd d d S )	NrV   rd   rX   re   rT   rl   rm   r-   rj   r$   r   r   r
   test_mul	  s
   "zRatTestCase.test_mulc                 C   s   |  tddtdd tdd |  tddd tdd |  dtd tdd |  dtd	d d
 |  td	dd d
 d S )NrT   rd   rX   re      	   rV         @r   ri   rj   r$   r   r   r
   test_div  s
   "zRatTestCase.test_divc                 C   s`   |  tdtd d |  tddtdd d |  tdd d |  dtd d d S )NrT      rV   rd   rj   r$   r   r   r
   test_floordiv  s   zRatTestCase.test_floordivc                 C   sZ   |  tdtdd |  tdd |  dtd |  tdd |  dtd d S )NrT   r]   rV   g      $@rj   r$   r   r   r
   test_eq  s
   zRatTestCase.test_eqc                 C   s   |  tddtdd tdd |  tddd tdd |  dtd tdd |  dtd	d d
 |  td	dd d
 |  tdd d S )NrT   rd   rX   re   rp   rq   rV   rr   r   ri   z1/2rm   )r^   r   evalr$   r   r   r
   test_true_div$  s   "zRatTestCase.test_true_divN)rL   rM   rN   rc   rh   rk   rn   ro   rs   ru   rv   rx   r   r   r   r
   rS      s    $rS   c                   @      e Zd Z	 dd Zdd ZdS )OperationLoggerc                 C   s
   || _ d S r   logger)r   r|   r   r   r
   r"   1  s   
zOperationLogger.__init__c                 G   s   | j |  d S r   r{   )r   argsr   r   r
   log_operation3  s   zOperationLogger.log_operationN)rL   rM   rN   r"   r~   r   r   r   r
   rz   /  s    rz   c                 G   sH   	 g }g }|D ]
}| ||j  qz| |  W |S  ty#   Y |S w r   )appendr   )opZclasseslogZ	instancescr   r   r
   op_sequence6  s   
r   c                   @   $   e Zd Zdd Zdd Zdd ZdS )Ac                 C      |  d tS )NA.__eq__r~   r4   r5   r   r   r
   rK   E     
r   c                 C   r   )NA.__le__r   r5   r   r   r
   __le__H  r   r   c                 C   r   )NA.__ge__r   r5   r   r   r
   __ge__K  r   r   NrL   rM   rN   rK   r   r   r   r   r   r
   r   D      r   c                   @   r   )Bc                 C   r   )NB.__eq__r   r5   r   r   r
   rK   P  r   r   c                 C   r   )NB.__le__r   r5   r   r   r
   r   S  r   r   c                 C   r   )NB.__ge__r   r5   r   r   r
   r   V  r   r   Nr   r   r   r   r
   r   O  r   r   )	metaclassc                   @   r   )Cc                 C   r   )NC.__eq__r   r5   r   r   r
   rK   [  r   r   c                 C   r   )NC.__le__r   r5   r   r   r
   r   ^  r   r   c                 C   r   )NC.__ge__r   r5   r   r   r
   r   a  r   r   Nr   r   r   r   r
   r   Z  r   r   c                   @   s&   e Zd Z	 dd Zdd Zdd ZdS )Vc                 C   r   )NV.__eq__r   r5   r   r   r
   rK   g  r   r   c                 C   r   )NV.__le__r   r5   r   r   r
   r   j  r   r   c                 C   r   )NV.__ge__r   r5   r   r   r
   r   m  r   r   Nr   r   r   r   r
   r   e  s
    r   c                   @   s   e Zd Zdd ZdS )OperationOrderTestsc                 C   s4  |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttd	dg | tt	t |  tttt	dd
g |  tttt	ddg d S )Nr   r   r   r   r   r   r   r   r   r   r   )
r^   r   r   r   r   r   r   r`   
issubclassr   r$   r   r   r
   test_comparison_orderst  s   z*OperationOrderTests.test_comparison_ordersN)rL   rM   rN   r   r   r   r   r
   r   s  s    r   c                   @   s   e Zd Z	 dd ZdS )SupEqc                 C      dS NTr   r5   r   r   r
   rK        zSupEq.__eq__NrL   rM   rN   rK   r   r   r   r
   r     s    r   c                   @      e Zd Z	 dZdS )SNr   r   r   r   r
   r         r   c                   @   s   e Zd ZdS )FN)rL   rM   rN   r   r   r   r
   r     s    r   c                   @   r   )XNr   r   r   r   r
   r     r   r   c                   @   r   )SNN)rL   rM   rN   __ne__r   r   r   r
   r     r   r   c                   @   s   e Zd Z	 dd ZdZdS )XNc                 C   r   r   r   r5   r   r   r
   rK     r   z	XN.__eq__N)rL   rM   rN   rK   r   r   r   r   r
   r     s    r   c                   @   ry   )FallbackBlockingTestsc                 C   s   t  t t t f\}}}}| || | || | || | || | tt|| | tt|| | tt|| d S r   )r   r   r   r   r^   assertRaisesr   r   )r   efsr   r   r   r
   test_fallback_rmethod_blocking  s   z4FallbackBlockingTests.test_fallback_rmethod_blockingc                 C   sf   t  t t }}}| ||k | tt|| | tt|| | ||k | tt|| d S r   )r   r   r   ZassertFalser   r   r   )r   r   ZsnZxnr   r   r
   test_fallback_ne_blocking  s   z/FallbackBlockingTests.test_fallback_ne_blockingN)rL   rM   rN   r   r   r   r   r   r
   r     s    r   __main__) rg   operatorr   r   r   abcr   r   r   r   r   objectr   ZTestCaserS   rz   r   r   r   r   r   registerr   r   r   r   r   r   r   r   rL   mainr   r   r   r
   <module>   s:     *j
