
    daf.                        d Z ddlmZmZ dgdz  ZdZ G d de      Z G d d	e      Z G d
 de      Z	efdZ
d Z e       ZdaefdZefdZeefdZeefdZe e	d      fdZe ed      fdZe eddg      fdZe e       fdZefdZd Z e       ZefdZeefdZe e	d      fdZe ed      fdZedgfdZe edg      fd Zeddifd!Zed"difd#Z edgfd$Z!e edg      fd%Z"e edg      fd&Z#edgfd'Z$e edg      fd(Z%eddifd)Z&ed"difd*Z'efd+Z(e)d,k(  rdd-l*m+Z+ g d.e
eeeeeeeeed/eeeeeed0eeee d1e$e%e&e'd2e!e"e#d3e(D ]e  Z, e-e,e.      r	 e/e,        e0 e+e,      jc                  d4d5            Z2e2d6 e3e      ez  z  z  Z2 e/d7ji                  e2e,jR                               g yy)8zEShow relative speeds of local, nonlocal, global, and built-in access.    )deque
namedtupleNi     c                       e Zd Zd Zy)Ac                      y N )selfs    9/root/Python-3.12.4/Tools/scripts/var_access_benchmark.pymzA.m   s        N)__name__
__module____qualname__r   r
   r   r   r   r      s    r   r   c                       e Zd ZdZd Zy)Bxc                     || _         y r	   r   r   r   s     r   __init__z
B.__init__   	    r   N)r   r   r   	__slots__r   r
   r   r   r   r      s    Ir   r   c                       e Zd Zd Zy)Cc                     || _         y r	   r   r   s     r   r   z
C.__init__   r   r   N)r   r   r   r   r
   r   r   r   r      s    r   r   c                 z    d}| D ]4  }| | | | | | | | | | | | | | | | | | | | | | | | | 6 y N   r
   trialsv_localts      r   
read_localr%      sO    G @GGGGGGGGGG@r   c                  0    dt         ffd	} d| _        | S )Nr    c                 x    | D ]4  }                         6 y r	   r
   r"   r$   
v_nonlocals     r   innerz#make_nonlocal_reader.<locals>.inner%   sK     	GA
J
J
J
J
J
J
J
J
J
J	Gr   read_nonlocalr"   r   r*   r)   s    @r   make_nonlocal_readerr.   #   s    J G %ENLr   r    c                 >   | D ]  }t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t           y r	   v_globalr"   r$   s     r   read_globalr3   2   sH     9(Hh(Hh(Hh(Hh(Hh9r   c                 >   | D ]  }t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t          t           y r	   )octr2   s     r   read_builtinr6   :   sH      S#sCS#sCS#sCS#sCS#sC r   c                 |   d|_         | D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r   r   r"   r   r$   s      r   read_classvar_from_classr9   B   s    
AC ,					,r   c                    d|_          |       }| D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r   r   )r"   r   ar$   s       r   read_classvar_from_instancer<   K   s    
AC	A ,					,r   c                 n   | D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r	   r   r"   r;   r$   s      r   read_instancevarr?   U        ,					,r   c                 n   | D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r	   r   r>   s      r   read_instancevar_slotsrB   ]   r@   r   Dr   c                 ~    |d      }| D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r   r   )r"   rC   r;   r$   s       r   read_namedtuplerE   e   s    	!A ,					,r   c                 n   | D ]/  }|j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    |j                    2 y r	   )r   r>   s      r   read_boundmethodrG   n   r@   r   c                 z    d}| D ]4  }d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}6 y r   r
   r!   s      r   write_localrI   v   s    G HqWA'waGqWA'waGqWA'waGqWA'waGqWA'waGHr   c                  0    dt         ffd	} d| _        | S )Nr    c                 x    | D ]4  }ddddddddddddddddddddddddd6 y r   r
   r(   s     r   r*   z#make_nonlocal_writer.<locals>.inner   s     	[AJJJJYZJJJJJYZJJJJJYZJJJJJYZJJJJJYZJ	[r   write_nonlocalr,   r-   s    @r   make_nonlocal_writerrM      s    J [ &ENLr   c                 v    | D ]4  }da da da da da da da da da da da da da da da da da da da da da da da da da 6 y r   r0   r2   s     r   write_globalrO      s|     MhqHQ(1hqHQ(1hqHQ(1hqHQ(1hqHQ(1Mr   c                 p   | D ]  }d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_          y r   r   r8   s      r   write_classvarrQ           @!ACa!ACa!ACa!ACa!ACa!ACa!ACa!ACa!ACa!ACa@r   c                 p   | D ]  }d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_          y r   r   r>   s      r   write_instancevarrT      rR   r   c                 p   | D ]  }d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_         d|_          y r   r   r>   s      r   write_instancevar_slotsrV      rR   r   c                    | D ]  }|d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d     y Nr   r
   r>   s      r   	read_listrY           -	!!!!!	!!!!!	!!!!!	!!!!!	!!!!!-r   c                    | D ]  }|d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d     y rX   r
   r>   s      r   
read_dequer\      rZ   r   c                    | D ]  }|d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d     y rX   r
   r>   s      r   	read_dictr^      rZ   r   keyc                    | D ]  }|d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d    |d     y )Nr_   r
   r>   s      r   read_strdictra      s     A	%AeH%AeH%	%AeH%AeH%	%AeH%AeH%	%AeH%AeH%	%AeH%AeH%Ar   c                 4   |j                   |j                  }}| D ]z  } |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |        } y r   appendpopr"   r;   apre   r$   s        r   list_append_poprh      #   hhB M
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1suMr   c                 4   |j                   |j                  }}| D ]z  } |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |        } y r   rc   rf   s        r   deque_append_poprk      ri   r   c                 4   |j                   |j                  }}| D ]z  } |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |         |d        |        } y r   )rd   popleftrf   s        r   deque_append_popleftrn      s#   hh		B N
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1su
1subeSUBqE35"Q%1suNr   c                    | D ]  }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<    y Nr    r   r
   r>   s      r   
write_listrq           /!Q!Q!Q!Q!!Q!Q!Q!Q!!Q!Q!Q!Q!!Q!Q!Q!Q!!Q!Q!Q!Q!/r   c                    | D ]  }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<    y rp   r
   r>   s      r   write_dequert      rr   r   c                    | D ]  }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<    y rp   r
   r>   s      r   
write_dictrv      rr   r   c                    | D ]  }d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<   d|d<    y )Nr    r_   r
   r>   s      r   write_strdictrx     s     C%QAeH%QAeH%%QAeH%QAeH%%QAeH%QAeH%%QAeH%QAeH%%QAeH%QAeH%Cr   c                     | D ]  } y r	   r
   r2   s     r   loop_overheadrz   
  s     r   __main__)Timerz#Variable and attribute read access:z%
Variable and attribute write access:z
Data structure read access:z
Data structure write access:z
Stack (or queue) operations:z
Timing loop overhead:   i  i@B z{:6.1f} ns	{})5__doc__collectionsr   r   r"   steps_per_trialobjectr   r   r   r%   r.   r+   r1   r3   r6   r9   r<   r?   rB   rE   rG   rI   rM   rL   rO   rQ   rT   rV   rY   r\   r^   ra   rh   rk   rn   rq   rt   rv   rx   rz   r   timeitr|   f
isinstancestrprintminrepeattiminglenformatr
   r   r   <module>r      s   G *
#  
   @
 %& 9    %+a , (. , #ad , #)AaD , "ZcU%; , #ac ,  H &' M !A @ $qt @ $*QqT @ s - qc
 - 1v - 5!* A "aS M #eQCj M !'%* N  / s / A /  E1: C   
 Z1%'24@ % 'B 	 5	
 
 . 5  ( *6  . 0G ,  " $- /; -  $ &0 2? -  . 0D &  ! ;" a!HU1X__Q-.'S[?:;;%%fajj9:-;	 r   