ó
    X=Œjc!  ã                   ó¢   • S SK Jr  S SKJr  S SKJrJrJrJrJ	r	J
r
JrJrJrJrJr  \r " S S\5      r " S S\5      r\" S\S	9r " S
 S5      rg)é    )ÚOrderedDict)ÚLock)ÚAnyÚCallableÚDictÚListÚMappingÚOptionalÚoverloadÚSetÚTupleÚTypeVarÚUnionc                   ó   • \ rS rSrSrSrg)ÚPyeeExceptioné   z@An exception internal to pyee. Deprecated in favor of PyeeError.© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚM/Users/stevendouglas/BidBrain/.venv/lib/python3.13/site-packages/pyee/base.pyr   r      s   † ÜJr   r   c                   ó   • \ rS rSrSrSrg)Ú	PyeeErroré   zAn error internal to pyee.r   Nr   r   r   r   r   r      s   † Ü$r   r   ÚHandler)Úboundc                   ó’  • \ rS rSrSrS\SS4S jrS\S\\\	4   4S jr
S\S\\\	4   SS4S	 jr\S\S
\S\\/\4   4S j5       r\S\S
\S\S\4S j5       r S#S\S
\S\\   S\\\\/\4   4   4S jjrS\S
\S\\/\4   4S jrS\S
\S\S\4S jrS\S
\S\S\4S jrS\S\S\\	S4   S\\\	4   SS4
S jrS\S\\   4S jrS\S
\S\	SS4S jrS\S
\S\\	S4   S\\\	4   S\4
S jrS\S
\S\	S\	S\4
S jr S#S\S
\S\\   S\4S jjrS\S
\S\SS4S jrS\S
\S\SS4S jr S#S\S
\\   SS4S  jjr!S\S
\S\"\   4S! jr#S"r$g)$ÚEventEmitteré!   aB  The base event emitter class. All other event emitters inherit from
this class.

Most events are registered with an emitter via the `on` and `once`
methods, and fired with the `emit` method. However, pyee event emitters
have two *special* events:

- `new_listener`: Fires whenever a new listener is created. Listeners for
  this event do not fire upon their own creation.

- `error`: When emitted raises an Exception by default, behavior can be
  overridden by attaching callback to the event.

  For example:

```py
@ee.on('error')
def on_error(message):
    logging.err(message)

ee.emit('error', Exception('something blew up'))
```

All callbacks are handled in a synchronous, blocking manner. As in node.js,
raised exceptions are not automatically handled for you---you must catch
your own exceptions, and treat them accordingly.
ÚselfÚreturnNc                 ó@   • [        5       U l        [        5       U l        g ©N)ÚdictÚ_eventsr   Ú_lock©r%   s    r   Ú__init__ÚEventEmitter.__init__>   s   € ô ‹Fð 	Œô  ›6ˆ�
r   c                 ó@   • U R                   R                  5       nUS	 U$ )Nr+   )Ú__dict__Úcopy©r%   Ústates     r   Ú__getstate__ÚEventEmitter.__getstate__E   s    € Ø—‘×"Ñ"Ó$ˆØ�'ˆNØˆr   r3   c                 óX   • U R                   R                  U5        [        5       U l        g r(   )r0   Úupdater   r+   r2   s     r   Ú__setstate__ÚEventEmitter.__setstate__J   s   € Ø�‰×Ñ˜UÔ#Ü“Vˆ�
r   Úeventc                 ó   • g r(   r   ©r%   r:   s     r   ÚonÚEventEmitter.onN   s   € ØDGr   Úfc                 ó   • g r(   r   ©r%   r:   r?   s      r   r=   r>   P   s   € Ø;>r   c                 óL   • Uc  U R                  U5      $ U R                  X5      $ )aÝ  Registers the function `f` to the event name `event`, if provided.

If `f` isn't provided, this method calls `EventEmitter#listens_to`, and
otherwise calls `EventEmitter#add_listener`. In other words, you may either
use it as a decorator:

```py
@ee.on('data')
def data_handler(data):
    print(data)
```

Or directly:

```py
ee.on('data', data_handler)
```

In both the decorated and undecorated forms, the event handler is
returned. The upshot of this is that you can call decorated handlers
directly, as well as use them in remove_listener calls.

Note that this method's return type is a union type. If you are using
mypy or pyright, you will probably want to use either
`EventEmitter#listens_to` or `EventEmitter#add_listener`.
)Ú
listens_toÚadd_listenerrA   s      r   r=   r>   S   s)   € ð: ‰9Ø—?‘? 5Ó)Ð)à×$Ñ$ UÓ.Ð.r   c                 ó4   ^ ^• S[         S[         4UU 4S jjnU$ )a  Returns a decorator which will register the decorated function to
the event name `event`:

```py
@ee.listens_to("event")
def data_handler(data):
    print(data)
```

By only supporting the decorator use case, this method has improved
type safety over `EventEmitter#on`.
r?   r&   c                 ó,   >• TR                  TX 5        U $ r(   ©Ú_add_event_handler)r?   r:   r%   s    €€r   r=   Ú#EventEmitter.listens_to.<locals>.onƒ   s   ø€ Ø×#Ñ# E¨1Ô0ØˆHr   )r    )r%   r:   r=   s   `` r   rC   ÚEventEmitter.listens_tou   s"   ù€ ð	”'ð 	œg÷ 	ð 	ð ˆ	r   c                 ó*   • U R                  XU5        U$ )zúRegister the function `f` to the event name `event`:

```
def data_handler(data):
    print(data)

h = ee.add_listener("event", data_handler)
```

By not supporting the decorator use case, this method has improved
type safety over `EventEmitter#on`.
rG   rA   s      r   rD   ÚEventEmitter.add_listener‰   s   € ð 	×Ñ ¨!Ô,Øˆr   ÚkÚvc                 óâ   • U R                  SX5        U R                     XR                  ;  a  [        5       U R                  U'   X0R                  U   U'   S S S 5        g ! , (       d  f       g = f)NÚnew_listener)Úemitr+   r*   r   )r%   r:   rM   rN   s       r   rH   ÚEventEmitter._add_event_handler™   sN   € à�	‰	�. %Ô+ð �Z‹ZØŸL™LÓ(Ü&1£m�—‘˜UÑ#Ø%&�L‰L˜Ñ Ñ"÷ �ZŽZús   Ÿ8A Á 
A.Úargs.Úkwargsc                 ó   • U" U0 UD6  g r(   r   )r%   r?   rS   rT   s       r   Ú	_emit_runÚEventEmitter._emit_run¦   s   € ñ 	
ˆ4Ð�6Ór   c                 óH   • [        U R                  R                  5       5      $ )z6Get a set of events that this emitter is listening to.)Úsetr*   Úkeysr,   s    r   Úevent_namesÚEventEmitter.event_names®   s   € ä�4—<‘<×$Ñ$Ó&Ó'Ð'r   Úerrorc                 óZ   • US:X  a%  [        U[        5      (       a  Ue[        SU 35      eg )Nr]   z%Uncaught, unspecified 'error' event: )Ú
isinstanceÚ	Exceptionr   )r%   r:   r]   s      r   Ú_emit_handle_potential_errorÚ)EventEmitter._emit_handle_potential_error²   s4   € Ø�GÓÜ˜%¤×+Ñ+Ø�äÐ"GÈÀwÐ OÓPÐPð	 r   c                 ó  • SnU R                      [        U R                  R                  U[	        5       5      R                  5       5      nS S S 5        W H  nU R                  XbU5        SnM     U$ ! , (       d  f       N-= f)NFT)r+   Úlistr*   Úgetr   ÚvaluesrV   )r%   r:   rS   rT   ÚhandledÚfuncsr?   s          r   Ú_call_handlersÚEventEmitter._call_handlers¹   sg   € ð ˆà�Z‹ZÜ˜Ÿ™×)Ñ)¨%´³Ó?×FÑFÓHÓIˆE÷ ãˆAØ�N‰N˜1 FÔ+ØŠGñ ð ˆ÷ �Zús   �<A2Á2
B c                 ór   • U R                  XU5      nU(       d  U R                  X(       a  US   OS5        U$ )a  Emit `event`, passing `*args` and `**kwargs` to each attached
function. Returns `True` if any functions are attached to `event`;
otherwise returns `False`.

Example:

```py
ee.emit('data', '00101001')
```

Assuming `data` is an attached function, this will call
`data('00101001')'`.
r   N)ri   ra   )r%   r:   rS   rT   rg   s        r   rQ   ÚEventEmitter.emitÉ   s6   € ð& ×%Ñ% e°6Ó:ˆæØ×-Ñ-¨eÅ°T¸!²WÈ$ÔOàˆr   c                 óJ   ^ ^• S[         S[         4UU 4S jjnUc  U$ U" U5      $ )z[The same as `ee.on`, except that the listener is automatically
removed after being called.
r?   r&   c                 óh   >^ • S[         S[         S[         4UU U4S jjnTR                  TT U5        T $ )NrS   rT   r&   c                  óâ   >• TR                      TTR                  ;   a&  TTR                  T   ;   a  TR                  TT5        O
 S S S 5        g  S S S 5        T" U 0 UD6$ ! , (       d  f       N= fr(   )r+   r*   Ú_remove_listener)rS   rT   r:   r?   r%   s     €€€r   ÚgÚ.EventEmitter.once.<locals>._wrapper.<locals>.gí   sh   ø€ ð —Z“Zð  §¡Ó,°°d·l±lÀ5Ñ6IÓ1IØ×-Ñ-¨e°QÕ7à#÷  �Zð 8÷	  ñ ˜$Ð) &Ñ)Ð)÷  •Zús   Ž8A Á 
A.)r   rH   )r?   rq   r:   r%   s   ` €€r   Ú_wrapperÚ#EventEmitter.once.<locals>._wrapperì   s@   ù€ ð*Üð*äð*ô ÷*ñ *ð ×#Ñ# E¨1¨aÔ0ØˆHr   )r   )r%   r:   r?   rs   s   ``  r   ÚonceÚEventEmitter.onceã   s1   ù€ ð	œð 	¤X÷ 	ð 	ð& ‰9ØˆOá˜A“;Ðr   c                 ó¤   • XR                   ;   aA  U R                   U   R                  U5        U R                   U   (       d  U R                   U	 ggg)zNaked unprotected removal.N)r*   ÚpoprA   s      r   rp   ÚEventEmitter._remove_listener  sE   € à—L‘LÓ Ø�L‰L˜Ñ×#Ñ# AÔ&Ø—<‘< ×&Ø—L‘L Ñ'ð 'ð !r   c                 ór   • U R                      U R                  X5        SSS5        g! , (       d  f       g= f)z&Removes the function `f` from `event`.N)r+   rp   rA   s      r   Úremove_listenerÚEventEmitter.remove_listener  s!   € à�Z‹ZØ×!Ñ! %Ô+÷ �ZŽZús   �(¨
6c                 ó¤   • U R                      Ub  [        5       U R                  U'   O[        5       U l        SSS5        g! , (       d  f       g= f)zdRemove all listeners attached to `event`.
If `event` is `None`, remove all listeners on all events.
N)r+   r   r*   r)   r<   s     r   Úremove_all_listenersÚ!EventEmitter.remove_all_listeners  s4   € ð �Z‹ZØÑ Ü&1£m�—‘˜UÒ#ä#›v�”÷	 �ZŽZús   �+AÁ
Ac                 óx   • [        U R                  R                  U[        5       5      R	                  5       5      $ )z:Returns a list of all listeners registered to the `event`.)rd   r*   re   r   rZ   r<   s     r   Ú	listenersÚEventEmitter.listeners  s)   € ä�D—L‘L×$Ñ$ U¬K«MÓ:×?Ñ?ÓAÓBÐBr   )r*   r+   r(   )%r   r   r   r   r   ÚSelfr-   r	   Ústrr   r4   r8   r   r   r    r=   r
   r   rC   rD   rH   r   r   rV   r   r[   ra   Úboolri   rQ   ru   rp   r{   r~   r   r�   r   r   r   r   r#   r#   !   s   † ñð8"�tð " ô "ð˜4ð  G¨C°¨HÑ$5ô ð
˜4ð ¨°°S°Ñ(9ð ¸dô ð ØG�ÐG˜cÐG h°¨y¸'Ð/AÑ&BÓGó ØGØØ>�Ð>˜cÐ> gÐ>°'Ó>ó Ø>ð 8<ñ /Øð /Øð /Ø#+¨GÑ#4ð /à	ˆw˜ ' ¨GÐ!3Ñ4Ð4Ñ	5õ /ðD˜ð  cð ¨h¸°yÀ'Ð7IÑ.Jô ð(˜4ð ¨ð °ð ¸Gô ð ' ð '¨cð '°hð 'À8ô 'ðØðàðð �C˜�H‰oðð �S˜#�X‘ð	ð
 
ôð(˜$ð ( 3 s¡8ô (ðQ¨4ð Q¸ð QÀCð QÈDô QðØðàðð �C˜�H‰oðð �S˜#�X‘ð	ð
 
ôð Øðàðð ðð ð	ð
 
ôð: !%ñØðàðð �HÑðð 
õ	ðB(˜tð (¨Cð (°Hð (Àô (ð,˜dð ,¨3ð ,°8ð ,Àô ,ñ
& 4ð &°¸±ð &Èõ &ðC˜ð C Sð C¨T°(©^÷ Cr   r#   N)Úcollectionsr   Ú	threadingr   Útypingr   r   r   r   r	   r
   r   r   r   r   r   rƒ   r`   r   r   r    r#   r   r   r   Ú<module>r‰      s^   ðõ $Ý ÷÷ ÷ ñ ð €ôK�Iô Kô%�ô %ñ �) 8Ñ
,€÷{Cò {Cr   