
    i'                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
m
Z
 ddlmZ  ed	          j         e            d
<   d  e            d<   e
j         e            d<   ddgZ G d de
          Z G d de          Zd ZeZ	  eee          r	ed         Znej        Zn# eef$ r eZY nw xY wd Zd Z e             ddl m!Z!  e! e"            d           dS )zz
A collection of primitives used by the hub, and suitable for
compilation with Cython because of their frequency of use.

    )absolute_import)division)print_function)refget_objects)greenletBlockingSwitchOutErrorr	   
getcurrentc                      d S N r       F/usr/local/lib/python3.11/dist-packages/gevent/_greenlet_primitives.py<lambda>r      s    D r   greenlet_init_greenlet_switchTrackedRawGreenletSwitchOutGreenletWithLoopc                       e Zd Zd ZdS )r   c                     t          j        | ||           t                      }t          |          | _        	 |j        | _        d S # t          $ r! i | _        |j        r| j        |_        Y d S Y d S w xY wr   )r	   __init__r   wrefspawning_greenletspawn_tree_localsAttributeErrorparent)selffunctionr   currents       r   r   zTrackedRawGreenlet.__init__%   s    $&111
 ,,!%g	C%,%>D""" 	C 	C 	C%'D"~ C,0,B))))C C C	Cs   A $A32A3N)__name__
__module____qualname__r   r   r   r   r   r   #   s(        C C C C Cr   c                       e Zd Zd Zd ZdS )r   c                 r    t          t                      dd           }|
 |             t          |           S )N
switch_out)getattrr   r   )r   r'   s     r   switchz SwitchOutGreenletWithLoop.switch=   s6    Z\\<>>
!JLLL%%%r   c                      t          d          )Nz?Impossible to call blocking function in the event loop callbackr
   )r   s    r   r'   z$SwitchOutGreenletWithLoop.switch_outC   s    $%fgggr   N)r"   r#   r$   r)   r'   r   r   r   r   r   6   s7        & & &h h h h hr   c                  2    d t                      D             S )Nc                 ^    g | ]*}t          |t                    t          |d d          (|+S )greenlet_tree_is_ignoredF)
isinstancer	   r(   ).0xs     r   
<listcomp>z+get_reachable_greenlets.<locals>.<listcomp>P   sN       a""+216PRW+X+X	  r   r   r   r   r   get_reachable_greenletsr2   G   s'     ==   r   bufferc                     	 t          | t                    st          |           n| }|j        r|S |                                S # t          $ r! t
          t          u r t          |           cY S w xY wr   )r.   _memoryviewshapetobytes	TypeError_buffer)datamvs     r   
get_memoryr<   b   s    &0{&C&CM[8 	I zz||    k!!t}}s   .A A (A0/A0c                  "    t                       d S r   )r   r   r   r   _initr>   ~   s    OOOOOr   )import_c_accelzgevent.__greenlet_primitivesN)#__doc__
__future__r   r   r   weakrefr   r   gcr   r	   gevent.exceptionsr   
__import__r   localsr)   __all__r   r   r2   
memoryviewr5   r.   __builtins__dictr9   r3   r   KeyErrorr<   r>   gevent._utilr?   globalsr   r   r   <module>rN      s   
 ' & & & & &       % % % % % %                   4 4 4 4 4 4 $J//: (L '	  
C C C C C C C C&h h h h h 2 h h h"   	z,%% &x( %!   GGG  8    ' ' ' ' ' ' wwyy8 9 9 9 9 9s   B+ +	B76B7