
    /hhE                         S r SSKrSSKJr  SSKJr  SSKJr   " S S\R                  5      r	 " S S	\R                  5      r
\S
:X  a  \R                  " 5         gg)z$Test equality and order comparisons.    N)	ALWAYS_EQ)Fraction)Decimalc                       \ rS rSrSr " S S5      r " S S5      rSSSS	\" S5      /rS
/SS\" 5       /r\\-   r	S r
S rS rS rS rS rS rSrg)ComparisonSimpleTest   z:Test equality and order comparisons for some simple cases.c                       \ rS rSrS rSrg)ComparisonSimpleTest.Empty   c                     g)Nz<Empty> selfs    :/opt/python-3.13.8/usr/lib/python3.13/test/test_compare.py__repr__#ComparisonSimpleTest.Empty.__repr__   s        r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__r   r   r   Emptyr
      s    	r   r   c                   &    \ rS rSrS rS rS rSrg)ComparisonSimpleTest.Cmp   c                     Xl         g Narg)r   r    s     r   __init__!ComparisonSimpleTest.Cmp.__init__   s    Hr   c                      SU R                   -  $ )Nz<Cmp %s>r   r   s    r   r   !ComparisonSimpleTest.Cmp.__repr__   s    ((r   c                      U R                   U:H  $ r   r   r   others     r   __eq__ComparisonSimpleTest.Cmp.__eq__   s    88u$$r   r   N)r   r   r   r   r!   r   r(   r   r   r   r   Cmpr      s    		)	%r   r*      g       @y       @           )   Nc                     U R                    H\  nU R                    HI  nXR                  ;   a  X R                  ;   d  XL a  U R                  X5        M8  U R                  X5        MK     M^     g r   )
candidatesset1assertEqualassertNotEqualr   abs      r   test_comparisons%ComparisonSimpleTest.test_comparisons   sO    A__))^!yy.af$$Q*''-	 % !r   c           
          / n[        S5       H/  nUR                  [        U5      S-  U R                  5       5        M1     U H*  nU H!  nU R	                  X4:H  X4L SU< SU< 35        M#     M,     g )N
   r+   za=z, b=)rangeinsertlenr   r1   )r   Lir4   r5   s        r   test_id_comparisons(ComparisonSimpleTest.test_id_comparisons%   s`    rAHHSVQY

- A  A1FG  r   c                     U R                  S5      nU R                  S5      nU R                  S5      nU R                  X:H  S5        U R                  X:g  S5        U R                  X:g  S5        g )Nr,   r+   TF)r*   assertIs)r   r4   r5   cs       r   test_ne_defaults_to_not_eq/ComparisonSimpleTest.test_ne_defaults_to_not_eq.   sY    HHQKHHQKHHQKafd#afe$afd#r   c                    ^ / m " U4S jS5      n " U4S jS5      nU" 5       U" 5       :g    U R                  TSS/5        g)z;object.__ne__() should allow reflected __ne__() to be triedc                   "   > \ rS rSrU 4S jrSrg)8ComparisonSimpleTest.test_ne_high_priority.<locals>.Left9   c                  2   > TR                  S5        [        $ )NLeft.__eq__appendNotImplementedargscallss    r   r(   ?ComparisonSimpleTest.test_ne_high_priority.<locals>.Left.__eq__;       ]+%%r   r   Nr   r   r   r   r(   r   rQ   s   r   LeftrH   9       & &r   rV   c                   .   > \ rS rSrU 4S jrU 4S jrSrg)9ComparisonSimpleTest.test_ne_high_priority.<locals>.Right>   c                  2   > TR                  S5        [        $ )NzRight.__eq__rL   rO   s    r   r(   @ComparisonSimpleTest.test_ne_high_priority.<locals>.Right.__eq__?       ^,%%r   c                  2   > TR                  S5        [        $ )NRight.__ne__rL   rO   s    r   __ne__@ComparisonSimpleTest.test_ne_high_priority.<locals>.Right.__ne__B   r]   r   r   Nr   r   r   r   r(   r`   r   rU   s   r   RightrY   >       && &r   rc   rK   r_   NassertSequenceEqual)r   rV   rc   rQ   s      @r   test_ne_high_priority*ComparisonSimpleTest.test_ne_high_priority6   s?    	& 	&
	& 	& 	%'  (GHr   c                    ^ / m " U4S jS5      n " U4S jSU5      nU" 5       U" 5       :g    U R                  TSS/5        g)z4object.__ne__() should not invoke reflected __eq__()c                   "   > \ rS rSrU 4S jrSrg)7ComparisonSimpleTest.test_ne_low_priority.<locals>.BaseK   c                  2   > TR                  S5        [        $ )NBase.__eq__rL   rO   s    r   r(   >ComparisonSimpleTest.test_ne_low_priority.<locals>.Base.__eq__M   rS   r   r   NrT   rU   s   r   Baserk   K   rW   r   rp   c                   .   > \ rS rSrU 4S jrU 4S jrSrg):ComparisonSimpleTest.test_ne_low_priority.<locals>.DerivedP   c                  2   > TR                  S5        [        $ )NzDerived.__eq__rL   rO   s    r   r(   AComparisonSimpleTest.test_ne_low_priority.<locals>.Derived.__eq__Q       -.%%r   c                  2   > TR                  S5        [        $ )NDerived.__ne__rL   rO   s    r   r`   AComparisonSimpleTest.test_ne_low_priority.<locals>.Derived.__ne__T   rv   r   r   Nrb   rU   s   r   Derivedrr   P   rd   r   rz   rx   rn   Nre   )r   rp   rz   rQ   s      @r   test_ne_low_priority)ComparisonSimpleTest.test_ne_low_priorityH   sB    	& 	&
	&d 	& 	')  )9=(IJr   c           	        ^ ^ SS 4SS 4SS 4SS 4S	S
 44nU H  u  p#T R                  U5         U 4S jm " U4S jS5      nU H  u  pVXR:w  d  M  [        XET5        M     US:X  a'  T R                  U" U" 5       [        5       5      S5        O$T R	                  [
        X4" 5       [        5       5        SSS5        M     g! , (       d  f       M  = f)z8No default delegation between operations except __ne__()r(   c                 
    X:H  $ r   r   r4   r5   s     r   <lambda><ComparisonSimpleTest.test_other_delegation.<locals>.<lambda>]       AFr   __lt__c                 
    X:  $ r   r   r   s     r   r   r   ^       AEr   __le__c                 
    X:*  $ r   r   r   s     r   r   r   _   r   r   __gt__c                 
    X:  $ r   r   r   s     r   r   r   `   r   r   __ge__c                 
    X:  $ r   r   r   s     r   r   r   a   r   r   c                  (   > TR                  S5        g )Nz!Unexpected operator method called)fail)rP   r   s    r   
unexpected>ComparisonSimpleTest.test_other_delegation.<locals>.unexpectede   s    IIABr   c                      > \ rS rSr Y rSrg)5ComparisonSimpleTest.test_other_delegation.<locals>.Cg   r   N)r   r   r   r   r`   r   )r   s   r   Cr   g   s    'Fr   r   FN)subTestsetattrrB   objectassertRaises	TypeError)r   opsnamefuncr   r'   _r   s   `      @r   test_other_delegation*ComparisonSimpleTest.test_other_delegationZ   s     *+)**+)**+
 JDd#C( ( #HE}*5 !$ 8#MM$qsFH"5u=%%iqsFHE $# ##s   CA!C
C	c                     S nU R                  U[        5        U R                  [        U5        [        5       nU R                  U[        5        U R                  [        U5        g )Nc                      g r   r   r   r   r   r   6ComparisonSimpleTest.test_issue_1393.<locals>.<lambda>r   s    Dr   )r1   r   r   )r   xys      r   test_issue_1393$ComparisonSimpleTest.test_issue_1393q   sN    I&A&HI&A&r   r   )r   r   r   r   __doc__r   r*   r0   set2r/   r6   r?   rD   rg   r{   r   r   r   r   r   r   r   r      sq    D % % sAtSX&DCtUW%DJ.H$I$K$F.'r   r   c            
          \ rS rSrSr " S S5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r	 " S S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\\\\	\
\\\\\4
rS rS rS-S jrS rS rS rS  rS! rS" rS# rS$ rS% rS& rS' rS( rS) r S* r!S+ r"S,r#g).ComparisonFullTestz   zTest equality and ordering comparisons for built-in types and
user-defined classes that implement relevant combinations of rich
comparison methods.
c                       \ rS rSrSrSrg)ComparisonFullTest.CompBase   zBase class for classes with rich comparison methods.

The "x" attribute should be set to an underlying value to compare.

Derived classes have a "meth" tuple attribute listing names of
comparison methods implemented. See assert_total_order().
r   N)r   r   r   r   r   r   r   r   r   CompBaser      s    	r   r   c                       \ rS rSrSrSrg)ComparisonFullTest.CompNone   r   N)r   r   r   r   methr   r   r   r   CompNoner      s    r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompEq   )eqc                 4    U R                   UR                   :H  $ r   r   r&   s     r   r(    ComparisonFullTest.CompEq.__eq__       66UWW$$r   r   N)r   r   r   r   r   r(   r   r   r   r   CompEqr          	%r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompNe   )nec                 4    U R                   UR                   :g  $ r   r   r&   s     r   r`    ComparisonFullTest.CompNe.__ne__   r   r   r   N)r   r   r   r   r   r`   r   r   r   r   CompNer      r   r   r   c                   $    \ rS rSrSrS rS rSrg)ComparisonFullTest.CompEqNe   )r   r   c                 4    U R                   UR                   :H  $ r   r   r&   s     r   r(   "ComparisonFullTest.CompEqNe.__eq__   r   r   c                 4    U R                   UR                   :g  $ r   r   r&   s     r   r`   "ComparisonFullTest.CompEqNe.__ne__   r   r   r   N)r   r   r   r   r   r(   r`   r   r   r   r   CompEqNer          	%	%r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompLt   )ltc                 4    U R                   UR                   :  $ r   r   r&   s     r   r    ComparisonFullTest.CompLt.__lt__       66EGG##r   r   N)r   r   r   r   r   r   r   r   r   r   CompLtr          	$r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompGt   )gtc                 4    U R                   UR                   :  $ r   r   r&   s     r   r    ComparisonFullTest.CompGt.__gt__   r   r   r   N)r   r   r   r   r   r   r   r   r   r   CompGtr      r   r   r   c                   $    \ rS rSrSrS rS rSrg)ComparisonFullTest.CompLtGt   )r   r   c                 4    U R                   UR                   :  $ r   r   r&   s     r   r   "ComparisonFullTest.CompLtGt.__lt__   r   r   c                 4    U R                   UR                   :  $ r   r   r&   s     r   r   "ComparisonFullTest.CompLtGt.__gt__   r   r   r   N)r   r   r   r   r   r   r   r   r   r   r   CompLtGtr      s    	$	$r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompLe   )lec                 4    U R                   UR                   :*  $ r   r   r&   s     r   r    ComparisonFullTest.CompLe.__le__   r   r   r   N)r   r   r   r   r   r   r   r   r   r   CompLer      r   r   r   c                       \ rS rSrSrS rSrg)ComparisonFullTest.CompGe   )gec                 4    U R                   UR                   :  $ r   r   r&   s     r   r    ComparisonFullTest.CompGe.__ge__   r   r   r   N)r   r   r   r   r   r   r   r   r   r   CompGer      r   r   r   c                   $    \ rS rSrSrS rS rSrg)ComparisonFullTest.CompLeGe   )r   r   c                 4    U R                   UR                   :*  $ r   r   r&   s     r   r   "ComparisonFullTest.CompLeGe.__le__   r   r   c                 4    U R                   UR                   :  $ r   r   r&   s     r   r   "ComparisonFullTest.CompLeGe.__ge__   r   r   r   N)r   r   r   r   r   r   r   r   r   r   r   CompLeGer      r   r   r   c                     [        [        U5      5       Vs/ s H	  o1" 5       PM     nnUR                  [        S9  [	        XB5       H  u  pVXel        M     U$ s  snf )a  Create objects of type `class_` and return them in a list.

`values` is a list of values that determines the value of data
attribute `x` of each object.

Objects in the returned list are sorted by their identity.  They
assigned values in `values` list order.  By assign decreasing
values to objects with increasing identities, testcases can assert
that order comparison is performed by value and not by identity.
)key)r:   r<   sortidzipr   )r   class_values__	instancesinstvalues          r   create_sorted_instances*ComparisonFullTest.create_sorted_instances   sT     ).c&k(:;(:"VX(:	;2y1KDF 2 <s   Ac                    U R                  X:H  U5        U R                  X!:H  U5        U R                  X:g  U(       + 5        U R                  X!:g  U(       + 5        U R                  [        S5         X:    SSS5        U R                  [        S5         X:*    SSS5        U R                  [        S5         X:    SSS5        U R                  [        S5         X:    SSS5        U R                  [        S5         X!:    SSS5        U R                  [        S5         X!:*    SSS5        U R                  [        S5         X!:    SSS5        U R                  [        S5         X!:    SSS5        g! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)zAssert equality result and that ordering is not implemented.

a, b: Instances to be tested (of same or different type).
equal: Boolean indicating the expected equality comparison results.
not supportedNr1   assertRaisesRegexr   )r   r4   r5   equals       r   assert_equality_only'ComparisonFullTest.assert_equality_only   sf    	''U+U+##I?E @##I?F @##I?E @##I?F @##I?E @##I?F @##I?E @##I?F @? @???????????????s`   1E4F7FF(=F9 G
G&G,4
F
F
F%(
F69
G

G
G),
G:Nc                     U R                  XX4U5        U R                  XX4U5        U R                  XX4U5        U R                  XX4U5        U R	                  XX4U5        U R                  XX4U5        g)a  Test total ordering comparison of two instances.

a, b: Instances to be tested (of same or different type).

comp: -1, 0, or 1 indicates that the expected order comparison
   result for operations that are supported by the classes is
   a <, ==, or > b.

a_meth, b_meth: Either None, indicating that all rich comparison
   methods are available, aa for builtins, or the tuple (subset)
   of "eq", "ne", "lt", "le", "gt", and "ge" that are available
   for the corresponding instance (of a user-defined class).
N)assert_eq_subtestassert_ne_subtestassert_lt_subtestassert_le_subtestassert_gt_subtestassert_ge_subtestr   r4   r5   compa_methb_meths         r   assert_total_order%ComparisonFullTest.assert_total_order   sp     	qT6:qT6:qT6:qT6:qT6:qT6:r   c                     Ub  SU;   d  SU;   a/  U R                  X:H  US:H  5        U R                  X!:H  US:H  5        g U R                  X:H  XL 5        U R                  X!:H  XL 5        g )Nr   r   )r1   r  s         r   r  $ComparisonFullTest.assert_eq_subtest  sg    >TV^tv~QVTQY/QVTQY/QVQV,QVQV,r   c                     Ub  SS1R                  XE-   5      (       d/  U R                  X:g  US:g  5        U R                  X!:g  US:g  5        g U R                  X:g  XL5        U R                  X!:g  XL5        g )Nr   r   r   )
isdisjointr1   r  s         r   r  $ComparisonFullTest.assert_ne_subtest  sq    >$!8!8!I!IQVTQY/QVTQY/QVQZ0QVQZ0r   c                 P   Ub  SU;   d  SU;   a/  U R                  X:  US:  5        U R                  X!:  US:  5        g U R                  [        S5         X:    S S S 5        U R                  [        S5         X!:    S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr   r   r   r
  r  r  s         r   r  $ComparisonFullTest.assert_lt_subtest'      >TV^tv~QUD1H-QUD1H-''	?C D''	?C DC DCCC   B8B
B
B%c                 P   Ub  SU;   d  SU;   a/  U R                  X:*  US:*  5        U R                  X!:  US:*  5        g U R                  [        S5         X:*    S S S 5        U R                  [        S5         X!:    S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr   r   r   r
  r  r  s         r   r  $ComparisonFullTest.assert_le_subtest1      >TV^tv~QVTQY/QVTQY/''	?C D''	?C DC DCCCr%  c                 P   Ub  SU;   d  SU;   a/  U R                  X:  US:  5        U R                  X!:  US:  5        g U R                  [        S5         X:    S S S 5        U R                  [        S5         X!:    S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr   r   r   r
  r  r  s         r   r  $ComparisonFullTest.assert_gt_subtest;  r$  r%  c                 P   Ub  SU;   d  SU;   a/  U R                  X:  US:  5        U R                  X!:*  US:  5        g U R                  [        S5         X:    S S S 5        U R                  [        S5         X!:*    S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr   r   r   r
  r  r  s         r   r  $ComparisonFullTest.assert_ge_subtestE  r(  r%  c                 t    [        5       n[        5       nU R                  XS5        U R                  XS5        g)z#Compare instances of type 'object'.TFN)r   r  r3   s      r   test_objectsComparisonFullTest.test_objectsO  s0    HH!!!-!!!.r   c           	         U R                    H  nU R                  U5         U R                  US5      nU R                  US   US   SUR                  UR                  5        U R                  US   US   SUR                  UR                  5        U R                  US   US   SUR                  UR                  5        U R                  US   US   SUR                  UR                  5        SSS5        M     g! , (       d  f       M  = f)z5Compare same-class instances with comparison methods.)r,   r+   r,   r   r+   r,   N)all_comp_classesr   r  r  r   )r   clsr  s      r   test_comp_classes_same)ComparisonFullTest.test_comp_classes_sameV  s     ((Cc" 88iH	 ''	!ilA(+#((< ''	!ilA(+#((< ''	!ilB(+#((< ''	!ilB(+#((<% #" )""s   CC==
D	c           
         U R                    H  nU R                    H  nU R                  XS9   U" 5       nSUl        U" 5       nSUl        U" 5       nSUl        U R                  X4SUR                  UR                  5        U R                  X5SUR                  UR                  5        SSS5        M     M     g! , (       d  f       M  = f)z:Compare different-class instances with comparison methods.r   r,   r+   r   r1  N)r2  r   r   r  r   )r   cls_acls_ba1b1b2s         r   test_comp_classes_different.ComparisonFullTest.test_comp_classes_differento  s     **E..\\E\3BBDBBDBBD++5::uzz;++EJJ

< 43 / +33s   A;B::
C	c                     " S S[         5      n[        S5      n[        S5      nU" S5      nU" S5      nU" S5      nU R                  X"S5        U R                  X#S5        U R                  XDS5        U R                  XES5        U R                  XVS5        U R                  X%S5        U R                  X6S5        U R                  XCS5        U R                  XSS5        g)z(Compare instances of str and a subclass.c                       \ rS rSrSrg)9ComparisonFullTest.test_str_subclass.<locals>.StrSubclassi  r   N)r   r   r   r   r   r   r   r   StrSubclassr@    s    r   rA  r4   r5   r   r1  N)strr  )r   rA  s1s2c1c2c3s          r   test_str_subclass$ComparisonFullTest.test_str_subclass  s    	# 	 XX!,+!,+!,+!,+!,r   c                 l   SnSnU R                  XS5        U R                  XS5        SnSnU R                  X3S5        U R                  X4S5        [        SS5      n[        S	S5      nU R                  XUS5        U R                  XVS5        [        S
5      n[        S5      nU R                  XwS5        U R                  XxS5        Sn	Sn
U R                  XS5        U R                  XS5        X4X4X4X54X74XW44 H  u  pU R                  XS5        M     XXW4 H  nU R                  XS5        M     g)zCompare number types.i  i  r   r1  g     H@gH@i  r+   i  z1001.0z1001.1y     H@        y     H@      ?TFN)r  r   r   r  )r   i1i2f1f2q1q2d1d2rE  rF  n1n2s                r   test_numbersComparisonFullTest.test_numbers  sE    *+*+dAdA*+XX*+!!"$/!!"%0 w"2'B7RGLFB##BA. M2"B%%bd3 #r   c                    SS/nSS/nU R                  XS5        U R                  XS5        SnSnU R                  X3S5        U R                  X4S5        [        SS5      n[        SS5      nU R                  XUS5        U R                  XVS	5        U R                  X1S	5        U R                  XS	5        U R                  XSS	5        g
)zCompare list, tuple, and range.r,   r+   r-   r   r1  r,   r+   r+   r-   TFN)r  r:   r  )r   l1l2t1t2r1r2s          r   test_sequences!ComparisonFullTest.test_sequences  s    VV*+*+1a[1a[!!"$/!!"%0!!"%0!!"%0!!"%0r   c                 X   SnSnU R                  XS5        U R                  XS5        [        S5      n[        S5      nU R                  X3S5        U R                  X4S5        U R                  XS5        U R                  XS5        U R                  X1S5        U R                  X2S5        g)zCompare bytes and bytearray.s   a1s   b2r   r1  N)r  	bytearray)r   bs1bs2ba1ba2s        r   
test_bytesComparisonFullTest.test_bytes  s    !,"-1-"-!,"-!,"-r   c                 `   SS1n1 SknU R                  XS5        U R                  XS5        [        U5      n[        U5      nU R                  X3S5        U R                  X4S5        U R                  XS5        U R                  XS5        U R                  X1S5        U R                  X2S5        g)zCompare set and frozenset.r,   r+   >   r,   r+   r-   r   r1  N)r  	frozenset)r   rC  rD  rM  rN  s        r   	test_setsComparisonFullTest.test_sets  s    V*+r]r]++*+*+r   c                     SSS.nSSS.nSSS.nU R                  XS5        U R                  XS5        U R                  X#S5        g	)
zCompare dict.
        r4   r5   rX  rC   rY  )r-   r+   TFN)r  )r   rQ  rR  d3s       r   test_mappings ComparisonFullTest.test_mappings  sR     !!"$/!!"%0!!"$/r   r   )NN)$r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r  r  r  r  r  r  r  r  r  r.  r4  r<  rH  rU  r`  rh  rl  rp  r   r   r   r   r   r   z   s   
 8 % %
% %
%8 %$ $
$ $
$8 $% %
% %
%8 % FHFHFH	&&6;8-1/<2<$-,"4H1*.","0r   r   __main__)r   unittesttest.supportr   	fractionsr   decimalr   TestCaser   r   r   mainr   r   r   <module>ry     sV    *  "  o'8,, o'd@0** @0F zMMO r   