
    daf%                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d Zd Z G d de      Z G d d	ej                        Zed
k(  r ej$                          yy)    N)loadsdumps)supportc                 Z    t        | d      rt        j                  |       S t        d      )z
    Helper function to convert a slice argument to an integer, and raise
    TypeError with a suitable message on failure.

    	__index__zBslice indices must be integers or None or have an __index__ method)hasattroperatorindex	TypeError)args    */root/Python-3.12.4/Lib/test/test_slice.pyevaluate_slice_indexr      s/     sK ~~c""/0 	0    c                    t        j                  |      }| j                  dnt        | j                        }|dk  rt	        d      |dk(  rt	        d      |dk  rdnd}|dk  r|dz
  n|}| j
                  
|dk  r|n|}n5t        | j
                        }|dk  rt        ||z   |      nt        ||      }| j                  
|dk  r|n|}n5t        | j                        }|dk  rt        ||z   |      nt        ||      }|||fS )zA
    Reference implementation for the slice.indices method.

       r   zlength should not be negativezslice step cannot be zero)	r	   r
   stepr   
ValueErrorstartmaxminstop)slicelengthr   lowerupperr   r   s          r   slice_indicesr      s    ^^F#F

"1(<UZZ(HD z899qy455 (BE(FQJE {{u$U[[1.3aiEFNE*S=N zzque#EJJ/,01Hs4&=%(#dE:J$r   c                       e Zd Zd Zd Zy)MyIndexablec                     || _         y Nvalue)selfr#   s     r   __init__zMyIndexable.__init__B   s	    
r   c                     | j                   S r!   r"   r$   s    r   r   zMyIndexable.__index__E   s    zzr   N)__name__
__module____qualname__r%   r    r   r   r   r   A   s    r   r   c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)	SliceTestc                 t    | j                  t        t               | j                  t        t        dddd       y )Nr            )assertRaisesr   r   r'   s    r   test_constructorzSliceTest.test_constructorK   s*    )U+)UAq!Q7r   c           	      P    | j                  t        t        ddd            d       y )Nr   r/   r0   zslice(1, 2, 3))assertEqualreprr   r'   s    r   	test_reprzSliceTest.test_reprO   s     eAq!n-/?@r   c           	         | j                  t        t        d            t        d      j                                | j                  t        t        dd            t        dd      j                                | j                  t        t        ddd            t        ddd      j                                | j	                  t        d      t        d             | j                  t              5  t        t        ddg              d d d        | j                  t              5  t        t        di              d d d        y # 1 sw Y   =xY w# 1 sw Y   y xY w)N   r   r/   r0      r1   )r5   hashr   __hash__assertNotEqualr2   r   r'   s    r   	test_hashzSliceTest.test_hashR   s   eAhq):):)<=eAqk*E!QK,@,@,BCeAq!n-uQ1~/F/F/HIE!HeAh/y) 	"q!R!	" y) 	q"	 		" 	"	 	s   1E%EEEc                    t        ddd      t        ddd      t        ddd      }| j                         | j                  |       | j                  d        | j                  d       | j                  d        G d dt               G fd	d
t              }t         |             t         |             | j                         | j                  fd       t        d |             t        d |             | j                         | j                  fd       t        dd |             t        dd |             | j                         | j                  fd       y )Nr   r/   r0   r1   )r   r/   r0    c                       e Zd Zy)SliceTest.test_cmp.<locals>.ExcNr(   r)   r*   r+   r   r   ExcrB   h       r   rD   c                       e Zd Z fdZy)"SliceTest.test_cmp.<locals>.BadCmpc                     r!   r+   )r$   otherrD   s     r   __eq__z)SliceTest.test_cmp.<locals>.BadCmp.__eq__l   s    	r   N)r(   r)   r*   rJ   )rD   s   r   BadCmprG   k   s    r   rK   c                       k(  S r!   r+   s1s2s   r   <lambda>z$SliceTest.test_cmp.<locals>.<lambda>r       rRx r   c                       k(  S r!   r+   rM   s   r   rP   z$SliceTest.test_cmp.<locals>.<lambda>w   rQ   r   c                       k(  S r!   r+   rM   s   r   rP   z$SliceTest.test_cmp.<locals>.<lambda>|   rQ   r   )r   r5   r=   	Exceptionobjectr2   )r$   s3rK   rD   rN   rO   s      @@@r   test_cmpzSliceTest.test_cmp^   sI   1a^1a^1a^R B#B%B	*B#	) 		V 	 68_68_R #/01fh1fhR #/01a"1a"R #/0r   c                    t        d      }| j                  |j                  d        | j                  |j                  d       | j                  |j                  d        t        dd      }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d        t        ddd      }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d        G d d      } |       }t        |      }| j                  |j                  |u        y )Nr   r/   r0   c                       e Zd Zy)(SliceTest.test_members.<locals>.AnyClassNrC   r+   r   r   AnyClassrZ      rE   r   r[   )r   r5   r   r   r   
assertTrue)r$   sr[   objs       r   test_memberszSliceTest.test_members~   s   !H$'#&!QK!$#&!QN!$##	 	 j#J#&r   c                 D   	 |j                  |      }	 t        ||      }| j                  ||       |dk\  rH|j                  dk7  r8t        |j                  |       }t        |      |   }| j                  ||       y y y # t        $ r d}Y zw xY w# t        $ r d}Y ~w xY w)N
valueerrorr   )indicesr   r   r5   r   range)r$   r   r   actualexpecteds        r   check_indiceszSliceTest.check_indices   s    	"]]6*F	$$UF3H 	*Q;5::?EMM&12FV}U+HVX. +;  	"!F	"  	$#H	$s"   B  B  BBBBc                 J   | j                  t        d       j                  d      d       | j                  t        d d d      j                  d      d       | j                  t        dd d      j                  d      d       | j                  t        d d d      j                  d      d       | j                  t        d d d	      j                  d      d
       | j                  t        dd d	      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d d      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        d dd      j                  d      d       | j                  t        dd      j                  d      t        d       j                  d             | j                  t        ddd      j                  d      t        d d d      j                  d             | j                  t        ddd      j                  d      d       | j                  t        t	        d            d d t
        j                  dz
     dg       d ddz   ddddddd d!d"ddz  g}ddd d!d"ddz  g}t        j                  |d#      D ]#  }t        | }|D ]  }| j                  ||        % | j                  t        ddd      d$       | j                  t              5  t        d       j                  d       d d d        | j                  t              5  t        ddd      j                  d%       d d d        | j                  t              5  t        d&dd      j                  d%       d d d        | j                  t              5  t        dd'd      j                  d%       d d d        | j                  t              5  t        ddd(      j                  d%       d d d        | j                  t              5  t        ddd      j                  d)       d d d        | j                  t        ddd      j                  d%      d*       | j                  t        t        d      dd      j                  d%      d*       | j                  t        dt        d      d      j                  d%      d*       | j                  t        ddt        d            j                  d%      d*       | j                  t        ddd      j                  t        d%            d*       y # 1 sw Y   -xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   LxY w)+N
   )r   rh   r   r/   )r   rh   r/   r   )r   rh   r/   r   )	   r   r   )ri   r   rj   r0   )r0   r   rj   i)r   r   r   i)r   r   r   i)ri   r   r   iri   )r   ri   r         )ri   rl   r   )ri   ri   r   id   r   i   ii   5   i   @)repeatr9   g        g      $@g      ?g      @)r   r9   r   )r5   r   rb   listrc   sysmaxsize	itertoolsproductrf   r2   r   r   r   )r$   valslengths
slice_argsr]   r   s         r   test_indiceszSliceTest.test_indices   s   t/77;[ItdQ/77;[IqdQ/77;[ItdB/77;[ItdB/77;[IqdB/77;[ItR004i@tS)11"5yAtS)11"5yAtS"-55b9:FtS"-55b9;GtS"-55b9;GtQ//3Y?tR004jAtR004jAtQ+33B7DtQ+33B7DtR,44R8*E$"**2.$K#	
 	#r"**2.$b!))"-	
 	tS!,44R8+FeBi):3;;?):;aSA q#vgvsBAq!R3OaBq#v.#++D; 	.Jz"A! .""1f-.	. 	5B?B/ z* 	$$K#	$ z* 	'!RO##A&	'
 y) 	)#r1%%a(	)y) 	)!T1%%a(	)y) 	)!R%%a(	)y) 	)!RO##C(	) 	q"a003Y?{1~r15==a@)Lq+b/15==a@)Lq"k!n5==a@)Lq"a00Q@)L/	$ 	$	' 	'
	) 	)	) 	)	) 	)	) 	)sH   [	[$[1=[>7\1\[!$[.1[;>\\\"c                     g  G fddt               } |       }d|dd | j                  t        dd      dfg       y )Nc                       e Zd Z fdZy)3SliceTest.test_setslice_without_getslice.<locals>.Xc                 ,    j                  ||f       y r!   )append)r$   iktmps      r   __setitem__z?SliceTest.test_setslice_without_getslice.<locals>.X.__setitem__   s    

Aq6"r   N)r(   r)   r*   r   )r   s   r   Xr}      s    #r   r   *   r   r/   )rU   r5   r   )r$   r   xr   s      @r   test_setslice_without_getslicez(SliceTest.test_setslice_without_getslice   sF    	# 	# C!AaR012r   c                 V   dd l }t        ddd      }t        |j                  dz         D ]}  }t	        t        ||            }| j                  ||       | j                  |j                  d      |j                  d             | j                  t        |      t        |              y )Nr   rh      r0   r      )
pickler   rc   HIGHEST_PROTOCOLr   r   r5   rb   r=   id)r$   r   r]   protocolts        r   test_picklezSliceTest.test_pickle   s    "b!f559: 	.HeAx()AQ"QYYr]AIIbM:1r!u-		.r   c                 *   t        dd      }t        j                  |      }| j                  ||       t        ddd      }t        j                  |      }| j                  ||       t        ddgddgddg      }t        j                  |      }| j                  ||       | j                  |j                  |j                         | j                  |j                  |j                         | j                  |j
                  |j
                         y Nr   rh   r/   r0   r1   r9   r:   )r   copyassertIsr   r   r   r$   r]   cs      r   	test_copyzSliceTest.test_copy   s    !RLIIaLa!ROIIaLa 1a&1a&1a&)IIaLaaggqww'affaff%affaff%r   c                 N   t        dd      }t        j                  |      }| j                  ||       t        ddd      }t        j                  |      }| j                  ||       t        ddgddgddg      }t        j                  |      }| j	                  ||       | j                  ||       | j	                  |j
                  |j
                         | j	                  |j                  |j                         | j	                  |j                  |j                         y r   )r   r   deepcopyr5   assertIsNotr   r   r   r   s      r   test_deepcopyzSliceTest.test_deepcopy  s    !RLMM!A!ROMM!A 1a&1a&1a&)MM!AA!''*((r   c                      G d d      } |       }t        |      |_        t        j                  |      }d }t	        j
                          | j                   |              y )Nc                       e Zd Zy)#SliceTest.test_cycle.<locals>.myobjNrC   r+   r   r   myobjr   "  s    r   r   )r   r]   weakrefrefr   
gc_collectassertIsNone)r$   r   ows       r   
test_cyclezSliceTest.test_cycle!  sH    GAhKKN!#r   N)r(   r)   r*   r3   r7   r>   rW   r_   rf   rz   r   r   r   r   r   r+   r   r   r-   r-   I   sC    8A
1@'./ CMJ3.&")$r   r-   __main__)ru   r	   rs   unittestr   r   r   r   r   testr   r   r   rU   r   TestCaser-   r(   mainr+   r   r   <module>r      se      
     0!L& _!! _B zHMMO r   