
    dafC&                     
   d dl Z d dlZd dlZd dlmZ  G d de      Z G d de      Z G d de      Z G d	 d
e      Z	 G d de
      Z G d de      Z G d de
      Z G d de      Z G d de      Z G d de
      Z G d de j"                        Z G d de j"                        Z G d dej(                        Z G d de      Z G d  d!e      Z G d" d#ej(                        Zed$k(  r ej4                          yy)%    N)DynamicClassAttributec                       e Zd Zy)PropertyBaseN__name__
__module____qualname__     :/root/Python-3.12.4/Lib/test/test_dynamicclassattribute.pyr   r   	       r   r   c                       e Zd Zy)PropertyGetNr   r
   r   r   r   r      r   r   r   c                       e Zd Zy)PropertySetNr   r
   r   r   r   r      r   r   r   c                       e Zd Zy)PropertyDelNr   r
   r   r   r   r      r   r   r   c                   j    e Zd Zd Zed        Zej                  d        Zej                  d        Zy)	BaseClassc                     d| _         y )N   _spamselfs    r   __init__zBaseClass.__init__   s	    
r   c                     | j                   S )BaseClass.getterr   r   s    r   spamzBaseClass.spam        zzr   c                     || _         y Nr   r   values     r   r   zBaseClass.spam   s	    
r   c                     | ` y r"   r   r   s    r   r   zBaseClass.spam"   s    Jr   N)r   r   r	   r   r   r   setterdeleterr
   r   r   r   r      sK       
[[  
\\ r   r   c                       e Zd Zej                  d   Zej                  d        Zej                  d        Zej                  d        Zy)SubClassr   c                 ,    t        | j                        )SubClass.getter)r   r   r   s    r   r   zSubClass.spam*   s     $**%%r   c                 ,    t        | j                        r"   )r   r   r#   s     r   r   zSubClass.spam/       $**%%r   c                 ,    t        | j                        r"   )r   r   r   s    r   r   zSubClass.spam3   r-   r   N)	r   r   r	   r   __dict__r   getterr&   r'   r
   r   r   r)   r)   &   sX    f%D	[[& & 
[[& & 
\\& &r   r)   c                   *    e Zd ZdZd Z eed      Zy)PropertyDocBase   c                     | j                   S r"   r   r   s    r   	_get_spamzPropertyDocBase._get_spam9   s    zzr   spam spam spam)docN)r   r   r	   r   r5   r   r   r
   r   r   r2   r2   7   s    E 0@ADr   r2   c                   N    e Zd Zej                  d   Zej                  d        Zy)PropertyDocSubr   c                     | j                   S )z*The decorator does not use this doc stringr   r   s    r   r   zPropertyDocSub.spam?   r    r   N)r   r   r	   r2   r/   r   r0   r
   r   r   r9   r9   =   s(    ##F+D	[[ r   r9   c                   N    e Zd Zej                  d   Zej                  d        Zy)PropertySubNewGetterr   c                      y)new docstringr   r
   r   s    r   r   zPropertySubNewGetter.spamF        r   N)r   r   r	   r   r/   r   r0   r
   r   r   r<   r<   D   s(    f%D	[[ r   r<   c                   @    e Zd Zed        Zej
                  d        Zy)PropertyNewGetterc                      y)zoriginal docstringr3   r
   r   s    r   r   zPropertyNewGetter.spamL   r?   r   c                      y)r>      r
   r   s    r   r   zPropertyNewGetter.spamP   r?   r   N)r   r   r	   r   r   r0   r
   r   r   rA   rA   K   s,      
[[ r   rA   c                   :    e Zd Zeej
                  d               Zy) ClassWithAbstractVirtualPropertyc                       y r"   r
   r
   r   r   colorz&ClassWithAbstractVirtualProperty.colorV        	r   N)r   r   r	   r   abcabstractmethodrH   r
   r   r   rF   rF   U   s"      r   rF   )	metaclassc                   :    e Zd Zej                  ed               Zy) ClassWithPropertyAbstractVirtualc                       y r"   r
   r
   r   r   rH   z&ClassWithPropertyAbstractVirtual.color\   rI   r   N)r   r   r	   rJ   rK   r   rH   r
   r   r   rN   rN   [   s"      r   rN   c                   J   e Zd Zd Zd Z ej                  ej                  j                  dk\  d      d        Z
 ej                  ej                  j                  dk\  d      d        Zd Z ej                  ej                  j                  dk\  d      d        Zd	 Zd
 Zy)PropertyTestsc                    t               }| j                  |j                  d       | j                  |j                  d       d|_        | j                  |j                  d       | j                  |j                  d       t	        |d       | j                  t        |d              | j                  t        |d              d|_        | j                  |j                  d       | j                  |j                  d       y )Nr   
   r   r      )r   assertEqualr   r   delattr
assertTruehasattrr   bases     r   !test_property_decorator_baseclassz/PropertyTests.test_property_decorator_baseclassb   s    {A&Q'	B'R(fGD&112GD'223	B'R(r   c                     t               }| j                  t        t        |d       | j                  t        t
        |dd        | j                  t        t        |d       y )Nr   )r)   assertRaisesr   getattrr   setattrr   rV   r   subs     r    test_property_decorator_subclassz.PropertyTests.test_property_decorator_subclassq   sG    j+wV<+wVTB+wV<r      )Docstrings are omitted with -O2 and abovec                 ~    t               }| j                  |j                  j                  d   j                  d       y )Nr   r+   )r)   rU   	__class__r/   __doc__r`   s     r   $test_property_decorator_subclass_docz2PropertyTests.test_property_decorator_subclass_docx   s1     j//7??ARSr   c                 ~    t               }| j                  |j                  j                  d   j                  d       y )Nr   r   )r   rU   rf   r/   rg   rY   s     r   %test_property_decorator_baseclass_docz3PropertyTests.test_property_decorator_baseclass_doc~   s1     {008@@BTUr   c                     t               }t               }| j                  |j                  j                  d   j
                  d       | j                  |j                  j                  d   j
                  d       y )Nr   r6   )r2   r9   rU   rf   r/   rg   )r   rZ   ra   s      r   test_property_decorator_docz)PropertyTests.test_property_decorator_doc   s^     008@@BRS//7??AQRr   c                 h   t               }| j                  |j                  d       | j                  |j                  j                  d   j
                  d       t               }| j                  |j                  d       | j                  |j                  j                  d   j
                  d       y )Nr   r   r>   rD   )r<   rU   r   rf   r/   rg   rA   )r   newgettersub	newgetters      r   !test_property_getter_doc_overridez/PropertyTests.test_property_getter_doc_override   s     ,-**A.//88@HH/Z%'	+,,55f=EEWr   c                 >   ddg dgddfD ]E   G fddt               }| j                  |j                  d   j                  t	                     G  G d	 d
t               | j                  t              5   G fddt               }d d d        y # 1 sw Y   y xY w)NTFr3    1c                   4    e Zd Zd ZW  e_         ee      Zy)EPropertyTests.test_property___isabstractmethod__descriptor.<locals>.Cc                      y r"   r
   r   s    r   foozIPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C.foo       r   Nr   r   r	   rw   __isabstractmethod__r   )vals   r   Cru      s    +.(+C0r   r|   rw   c                       e Zd Zd ZeZy)KPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBoolc                     t               r"   )
ValueErrorr   s    r   __bool__zTPropertyTests.test_property___isabstractmethod__descriptor.<locals>.NotBool.__bool__   s
     l"r   N)r   r   r	   r   __len__r
   r   r   NotBoolr~      s    #Gr   r   c                   >    e Zd Zd Z W         e_         ee      Zy)ru   c                      y r"   r
   r   s    r   rw   zIPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C.foo   rx   r   Nry   )r   s   r   r|   zEPropertyTests.test_property___isabstractmethod__descriptor.<locals>.C   s    +29(+C0r   )objectassertIsr/   rz   boolr]   r   )r   r|   r   r{   s     @@r   ,test_property___isabstractmethod__descriptorz:PropertyTests.test_property___isabstractmethod__descriptor   s    %aS"c2 	MC1F 1
 MM!**U+@@$s)L	M	f 	 z* 	11F 1	1 	1 	1s   8BBc                    | j                  t        t               | j                  t        t                G d dt              }| j                  t        |        G d dt              }| j                  t        |        G d dt              }| j                  t              5  |j
                   d d d        | j                   |       j
                  d        G d d	t              }| j                  t              5  |j
                   d d d        | j                   |       j
                  d
       y # 1 sw Y   xY w# 1 sw Y   7xY w)Nc                       e Zd Zy)0PropertyTests.test_abstract_virtual.<locals>.APVNr   r
   r   r   APVr          r   r   c                       e Zd Zy)0PropertyTests.test_abstract_virtual.<locals>.AVPNr   r
   r   r   AVPr      r   r   r   c                   "    e Zd Zed        Zd Zy)2PropertyTests.test_abstract_virtual.<locals>.Okay1c                     | j                   S r"   _colorr   s    r   rH   z8PropertyTests.test_abstract_virtual.<locals>.Okay1.color       {{"r   c                     d| _         y )Ncyanr   r   s    r   r   z;PropertyTests.test_abstract_virtual.<locals>.Okay1.__init__   s	    $r   Nr   r   r	   r   rH   r   r
   r   r   Okay1r      s    "# ##%r   r   r   c                   "    e Zd Zed        Zd Zy)2PropertyTests.test_abstract_virtual.<locals>.Okay2c                     | j                   S r"   r   r   s    r   rH   z8PropertyTests.test_abstract_virtual.<locals>.Okay2.color   r   r   c                     d| _         y )Nmagentar   r   s    r   r   z;PropertyTests.test_abstract_virtual.<locals>.Okay2.__init__   s	    'r   Nr   r
   r   r   Okay2r      s    "# ##(r   r   r   )r]   	TypeErrorrF   rN   AttributeErrorrH   rU   )r   r   r   r   r   s        r   test_abstract_virtualz#PropertyTests.test_abstract_virtual   s    )%EF)%EF	2 	)S)	2 	)S)	%4 	% ~. 	KK	/	(4 	( ~. 	KK		2	 		 	s   #D4=E 4D= E	N)r   r   r	   r[   rb   unittestskipIfsysflagsoptimizerh   rj   rl   rp   r   r   r
   r   r   rQ   rQ   a   s    )= X__SYY''1,@BTBT X__SYY''1,@BVBVS X__SYY''1,@BXBX1,3r   rQ   c                       e Zd ZdZy)PropertySubz+This is a subclass of DynamicClassAttributeN)r   r   r	   rg   r
   r   r   r   r      s    5r   r   c                       e Zd ZdZdZy)PropertySubSlotszBThis is a subclass of DynamicClassAttribute that defines __slots__r
   N)r   r   r	   rg   	__slots__r
   r   r   r   r      s
    LIr   r   c                   l   e Zd Z ej                   eed      d      d        Z ej                  ej                  j                  dk\  d      d        Z ej                  ej                  j                  dk\  d      d        Z ej                  ej                  j                  dk\  d      d        Zy	)
PropertySubclassTestsrg   z9__doc__ is already present, __slots__ will have no effectc                 V    	  G d dt               }t        d      # t        $ r Y y w xY w)Nc                   B    e Zd Zed        Z edej                         y)FPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Fooc                      y)z5Trying to copy this docstring will raise an exceptionr3   r
   r   s    r   r   zKPropertySubclassTests.test_slots_docstring_copy_exception.<locals>.Foo.spam   s     r   
N)r   r   r	   r   r   printrg   r
   r   r   Foor      s$    ! " d4<<(r   r   zAttributeError not raised)r   	Exceptionr   r   r   s     r   #test_slots_docstring_copy_exceptionz9PropertySubclassTests.test_slots_docstring_copy_exception   s5    
	9)f ) 788  		s    	((rc   rd   c                 t     G d dt               }| j                  |j                  d   j                  d       y )Nc                       e Zd Zed        Zy)6PropertySubclassTests.test_docstring_copy.<locals>.Fooc                      y).spam wrapped in DynamicClassAttribute subclassr3   r
   r   s    r   r   z;PropertySubclassTests.test_docstring_copy.<locals>.Foo.spam        r   Nr   r   r	   r   r   r
   r   r   r   r           r   r   r   r   r   rU   r/   rg   r   s     r   test_docstring_copyz)PropertySubclassTests.test_docstring_copy   s3    	& 	
 	LL ((<	>r   c                     G d dt                       }| j                  |j                  d       d|_        | j                  |j                  d       | j                  j                  d   j                  d        G fdd      } |       }| j                  |j                  d       d	|_        | j                  |j                  d
       | j                  |j                  d   j                  d       y )Nc                   F    e Zd Zd Zed        Zej                  d        Zy)OPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Fooc                     d| _         y )Nr3   r   r   s    r   r   zXPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.__init__   s    Q
r   c                     | j                   S )r   r   r   s    r   r   zTPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.spam   s     zz!r   c                     || _         y)zthis docstring is ignoredNr   r#   s     r   r   zTPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.Foo.spam   s     #
r   N)r   r   r	   r   r   r   r&   r
   r   r   r   r      s/    ." " [[# #r   r   r3   rc   r   r   c                   R    e Zd ZW  j                  d   Zej
                  d        Zy)RPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSubr   c                     d| _         y)zanother ignored docstringeggsNr   r#   s     r   r   zWPropertySubclassTests.test_property_setter_copies_getter_docstring.<locals>.FooSub.spam  s     $
r   N)r   r   r	   r/   r   r&   )r   s   r   FooSubr      s'    <<'D[[$ $r   r      r   )r   rU   r   r/   rg   )r   rw   r   foosubr   s       @r   ,test_property_setter_copies_getter_docstringzBPropertySubclassTests.test_property_setter_copies_getter_docstring   s    		#& 		# e1%1%LL ((<	>	$S 	$ a(f-OOF#++<	>r   c                      G d dt               }| j                  |j                  d   j                  d        G d dt                G fdd      }| j                  |j                  d   j                  d       y )	Nc                   @    e Zd Zed        Zej
                  d        Zy)IPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Fooc                      yza docstringr3   r
   r   s    r   r   zNPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo.spam  r   r   c                      ya new docstringrc   r
   r   s    r   r   zNPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo.spam  r   r   N)r   r   r	   r   r   r0   r
   r   r   r   r     s,      [[ r   r   r   r   c                       e Zd Zed        Zy)MPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBasec                      yr   r
   r   s    r   r   zRPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.FooBase.spam  r   r   Nr   r
   r   r   FooBaser     r   r   r   c                   R    e Zd ZW  j                  d   Zej
                  d        Zy)JPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2r   c                      yr   r
   r   s    r   r   zOPropertySubclassTests.test_property_new_getter_new_docstring.<locals>.Foo2.spam#  r   r   N)r   r   r	   r/   r   r0   )r   s   r   Foo2r   !  s)    ##F+D[[ r   r   r   )r   r   r   r   s      @r   &test_property_new_getter_new_docstringz<PropertySubclassTests.test_property_new_getter_new_docstring  sk    	& 	 	f-557HI	f 	
	7 	 	f-557HIr   N)r   r   r	   r   r   rX   r   r   r   r   r   r   r   r   r
   r   r   r   r      s    X__W-y9GI9I9 X__SYY''1,@B>B> X__SYY''1,@B>B>@ X__SYY''1,@BJBJr   r   __main__)rJ   r   r   typesr   r   r   r   r   r   r   r   r)   r2   r9   r<   rA   ABCMetarF   rN   TestCaserQ   r   r   r   r   mainr
   r   r   <module>r      s    
  '	9 		, 		, 		, 	 "&y &"Bf B_ 9    c3H%% c3N6' 6, XJH-- XJx zHMMO r   