
    YfF                     b    d dl Z d dlZd dlZd dlmZ d dlmZ ej                  deddfd       Zy)    N)Any)Scalenescalenereturnc                 4      G  fdd      }|t         _        y )Nc                   t    e Zd ZdZd fdZddededef fdZddZdefd	Z	dd
Z
ddZdedededdfdZy))replacement_lock.<locals>.ReplacementLockzQReplace lock with a version that periodically yields and updates sleeping status.r   Nc                 0    j                         | _        y N)get_original_lock_ReplacementLock__lock)selfr   s    X/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/scalene/replacement_lock.py__init__z2replacement_lock.<locals>.ReplacementLock.__init__   s     +2*C*C*EDK    blockingtimeoutc                    t        j                         }|dk(  rd}t        j                         }|r9|dk  rt	        j
                         }n!t        |t	        j
                               }nd}	 j                  |       | j                  j                  ||      }j                  |       |ry|sy|dk7  rt        j                         }||z
  |k\  ryg)Nr   FT)	threading	get_identtimeperf_countersysgetswitchintervalminset_thread_sleepingr   acquirereset_thread_sleeping)	r   r   r   tident
start_timeintervalacquired_lockend_timer   s	           r   r   z1replacement_lock.<locals>.ReplacementLock.acquire   s    ((*F1} **,JQ;"446H"7C,A,A,CDH++F3 $ 3 3Hh G--f5  b=#002H*,7$ r   c                 8    | j                   j                          y r   )r   releaser   s    r   r&   z1replacement_lock.<locals>.ReplacementLock.release-   s    KK!r   c                 6    | j                   j                         S r   )r   lockedr'   s    r   r)   z0replacement_lock.<locals>.ReplacementLock.locked0   s    ;;%%''r   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr   )r   _at_fork_reinitAttributeErrorr'   s    r   r+   z9replacement_lock.<locals>.ReplacementLock._at_fork_reinit3   s)    ++-! s    	))c                 $    | j                          y r   )r   r'   s    r   	__enter__z3replacement_lock.<locals>.ReplacementLock.__enter__9       LLNr   typevalue	tracebackc                 $    | j                          y r   )r&   )r   r0   r1   r2   s       r   __exit__z2replacement_lock.<locals>.ReplacementLock.__exit__<   r/   r   )r   N)Tr   )__name__
__module____qualname____doc__r   boolfloatr   r&   r)   r+   r.   strr   r4   )r   s   r   ReplacementLockr	      sb    _	F
	%D 	%% 	% 	%4	"	(D 	(			 	S 	S 	T 	r   r<   )r   Lock)r   r<   s   ` r   replacement_lockr>   	   s    2 2h %INr   )	r   r   r   typingr   scalene.scalene_profilerr   shimr>    r   r   <module>rC      s:    
    , 	5%g 5%$ 5% 5%r   