Files
aitsc/.venv/Lib/site-packages/blinker/__pycache__/base.cpython-312.pyc

205 lines
21 KiB
Plaintext
Raw Normal View History

2025-02-23 09:07:52 +08:00
<EFBFBD>
2025-08-16 19:28:45 +08:00
<00><18>h<EFBFBD>L<00><01><><00>UddlmZddlmZddlZddlZddlZddl m
2025-02-23 09:07:52 +08:00
Z
ddl m Z ddl mZddlmZddlmZdd lmZdd
lmZej*d ej,d ej.f<00> <0A>Zed<0E>Z dZGd<0F>d<10>ZGd<11>de<1B>ZGd<13>deeef<00>ZGd<15>dej@<00>Z!e<1F>Z"de#d< e"jHZ$de#d<y)<19>)<01> annotationsN)<01> defaultdict)<01>contextmanager)<01>cached_property)<01>iscoroutinefunction<6F>)<01>make_id)<01>make_ref)<01>Symbol<6F>F.)<01>bound<6E>ANYc<01><<00>eZdZUdZeZ eZded< edd<04><04>Z edd<05><04>Z
ddd<07>Z edfdd <09>Z ddd
<EFBFBD>Z eef dd <0B><05>Zed d <0C><04>Z ddd <0A> d!d<0E>Z ddd<0F> d"d<10>Zd#d<11>Z d$d<12>Zefd%d<13>Zd&d<14>Z d'd<15>Z d(d<16>Zd)d<17>Zd)d<18>Zy)*<2A>SignalzKA notification emitter.
:param doc: The docstring for the signal.
ztype[set[t.Any]]<5D> set_classc<01><00>td<01><02>S)z<>Emitted at the end of each :meth:`connect` call.
The signal sender is the signal instance, and the :meth:`connect`
arguments are passed through: ``receiver``, ``sender``, and ``weak``.
.. versionadded:: 1.2
2025-08-16 19:28:45 +08:00
z"Emitted after a receiver connects.<2E><01>doc<6F>r<00><01>selfs <20>0D:\aitsc\.venv\Lib\site-packages\blinker\base.py<70>receiver_connectedzSignal.receiver_connected)s<00><00><16>><3E>?<3F>?<3F>c<01><00>td<01><02>S)a<>Emitted at the end of each :meth:`disconnect` call.
2025-02-23 09:07:52 +08:00
The sender is the signal instance, and the :meth:`disconnect` arguments
are passed through: ``receiver`` and ``sender``.
This signal is emitted **only** when :meth:`disconnect` is called
explicitly. This signal cannot be emitted by an automatic disconnect
when a weakly referenced receiver or sender goes out of scope, as the
instance is no longer be available to be used as the sender for this
signal.
An alternative approach is available by subscribing to
:attr:`receiver_connected` and setting up a custom weakref cleanup
callback on weak receivers and senders.
.. versionadded:: 1.2
z%Emitted after a receiver disconnects.rrrs r<00>receiver_disconnectedzSignal.receiver_disconnected4s<00><00>&<16>A<>B<>BrNc<01><><00>|r||_i|_ d|_t|j<00>|_t|j<00>|_i|_y)NF)<08>__doc__<5F> receivers<72>is_mutedrr<00> _by_receiver<65>
_by_sender<EFBFBD> _weak_senders)rrs r<00>__init__zSignal.__init__IsO<00><00> <0E><1E>D<EFBFBD>L<EFBFBD> <0F> <0A><0E> <0C> $<24><04> <0A>5@<40><14><1E><1E>5P<35><04><19>3><3E>t<EFBFBD>~<7E>~<7E>3N<33><04><0F>>@<40><04>rTc<01><><00>t|<01>}|turtn
t|<02>}|r)t||j |<04><00>|j
|<n||j
|<|j |j|<04>|j|j|<05>|tur7||jvr) t||j|<05><00>|j|<d|jvr8|jj
r" |jj||||<03><02>|S|S#t$rY<00>SwxYw#t$r|j||<02><00>wxYw)a<>Connect ``receiver`` to be called when the signal is sent by
``sender``.
:param receiver: The callable to call when :meth:`send` is called with
the given ``sender``, passing ``sender`` as a positional argument
along with any extra keyword arguments.
:param sender: Any object or :data:`ANY`. ``receiver`` will only be
called when :meth:`send` is called with this sender. If ``ANY``, the
receiver will be called for any sender. A receiver may be connected
to multiple senders by calling :meth:`connect` multiple times.
:param weak: Track the receiver with a :mod:`weakref`. The receiver will
be automatically disconnected when it is garbage collected. When
connecting a receiver defined within a function, set to ``False``,
otherwise it will be disconnected when the function scope ends.
r)<03>receiver<65>sender<65>weak)r r<00>ANY_IDr
<00>_make_cleanup_receiverrr"<00>addr!r#<00>_make_cleanup_sender<65> TypeError<6F>__dict__r<00>send<6E>
disconnect)rr&r'r(<00> receiver_id<69> sender_ids r<00>connectzSignal.connect[sG<00><00> <1E>h<EFBFBD>'<27> <0B>$<24><03>m<EFBFBD>F<EFBFBD><17><16><1F> <09> <0F>*2<><18>$<24>5<>5<>k<EFBFBD>B<>+<0E>D<EFBFBD>N<EFBFBD>N<EFBFBD>;<3B> '<27>+3<>D<EFBFBD>N<EFBFBD>N<EFBFBD>;<3B> '<27> <0C><0F><0F> <09>"<22>&<26>&<26>{<7B>3<> <0C><19><19>+<2B>&<26>*<2A>*<2A>9<EFBFBD>5<> <11><13> <1C><19>$<24>2D<32>2D<32>!D<> <15>08<30><1A>D<EFBFBD>5<>5<>i<EFBFBD>@<40>1<12><04>"<22>"<22>9<EFBFBD>-<2D> <20>4<EFBFBD>=<3D>=<3D> 0<>T<EFBFBD>5L<35>5L<35>5V<35>5V<35> <16><14>'<27>'<27>,<2C>,<2C><18>8<EFBFBD>F<EFBFBD><14>-<2D><12><18><0F>x<EFBFBD><0F><><1D> <15><14> <15><><1D> <16><14><0F><0F><08>&<26>1<><15> <16>s<00>2(D"<00>?D1<00>" D.<03>-D.<03>1Ec<01><00><00><01><02>d<02><00><01>fd<01> }|S)a<>Connect the decorated function to be called when the signal is sent
by ``sender``.
The decorated function will be called when :meth:`send` is called with
the given ``sender``, passing ``sender`` as a positional argument along
with any extra keyword arguments.
:param sender: Any object or :data:`ANY`. ``receiver`` will only be
called when :meth:`send` is called with this sender. If ``ANY``, the
receiver will be called for any sender. A receiver may be connected
to multiple senders by calling :meth:`connect` multiple times.
:param weak: Track the receiver with a :mod:`weakref`. The receiver will
be automatically disconnected when it is garbage collected. When
connecting a receiver defined within a function, set to ``False``,
otherwise it will be disconnected when the function scope ends.=
.. versionadded:: 1.1
c<01>.<00><03><00>j|<00><02><03>|S<00>N)r3)<04>fnrr'r(s <20><><EFBFBD>r<00> decoratorz%Signal.connect_via.<locals>.decorator<6F>s<00><><00> <10>L<EFBFBD>L<EFBFBD><12>V<EFBFBD>T<EFBFBD> *<2A><15>Ir)r7r <00>returnr <00>)rr'r(r8s``` r<00> connect_viazSignal.connect_via<69>s<00><><00>( <16><19>rc#<01><>K<00>|j||d<01><02> d<03><02>|j|<01>y#|j|<01>wxYw<01>w)a<>A context manager that temporarily connects ``receiver`` to the
signal while a ``with`` block executes. When the block exits, the
receiver is disconnected. Useful for tests.
:param receiver: The callable to call when :meth:`send` is called with
the given ``sender``, passing ``sender`` as a positional argument
along with any extra keyword arguments.
:param sender: Any object or :data:`ANY`. ``receiver`` will only be
called when :meth:`send` is called with this sender. If ``ANY``, the
receiver will be called for any sender.
.. versionadded:: 1.1
F)r'r(N)r3r0)rr&r's r<00> connected_tozSignal.connected_to<74>s<<00><00><><00>" <0A> <0C> <0C>X<EFBFBD>f<EFBFBD>5<EFBFBD> <0C>9<> &<26><16>J<EFBFBD> <10>O<EFBFBD>O<EFBFBD>H<EFBFBD> %<25><>D<EFBFBD>O<EFBFBD>O<EFBFBD>H<EFBFBD> %<25>s<00>A<01>.<00>A<01>A<03>Ac#<01>JK<00>d|_ d<02><02>d|_y#d|_wxYw<01>w)z<>A context manager that temporarily disables the signal. No receivers
will be called if the signal is sent, until the ``with`` block exits.
Useful for tests.
TNF)r rs r<00>mutedz Signal.muted<65>s'<00><00><><00> <1D><04> <0A> "<22><16>J<EFBFBD>!<21>D<EFBFBD>M<EFBFBD><4D>E<EFBFBD>D<EFBFBD>M<EFBFBD>s<00>#<01><00>#<01> <03>#)<01>_async_wrapperc <01><><00>|jrgSg}|j|<01>D]F}t|<05>r|<02> td<01><00>||<05>|fi|<03><01>}n ||fi|<03><01>}|j ||f<02><00>H|S)a/Call all receivers that are connected to the given ``sender``
or :data:`ANY`. Each receiver is called with ``sender`` as a positional
argument along with any extra keyword arguments. Return a list of
``(receiver, return value)`` tuples.
The order receivers are called is undefined, but can be influenced by
setting :attr:`set_class`.
If a receiver raises an exception, that exception will propagate up.
This makes debugging straightforward, with an assumption that correctly
implemented receivers will not raise.
:param sender: Call receivers connected to this sender, in addition to
those connected to :data:`ANY`.
:param _async_wrapper: Will be called on any receivers that are async
coroutines to turn them into sync callables. For example, could run
the receiver with an event loop.
:param kwargs: Extra keyword arguments to pass to each receiver.
.. versionchanged:: 1.7
Added the ``_async_wrapper`` argument.
z$Cannot send to a coroutine function.<2E>r <00> receivers_forr<00> RuntimeError<6F>append)rr'r@<00>kwargs<67>resultsr&<00>results rr/z Signal.send<6E>s<><00><00>B <10>=<3D>=<3D><15>I<EFBFBD><14><07><1C>*<2A>*<2A>6<EFBFBD>2<>H<EFBFBD>"<22>8<EFBFBD>,<2C>!<21>)<29>&<26>'M<>N<>N<>1<><1E><08>1<>&<26>C<>F<EFBFBD>C<><06>!<21>&<26>3<>F<EFBFBD>3<><06> <13>N<EFBFBD>N<EFBFBD>H<EFBFBD>f<EFBFBD>-<2D> .<2E>3<><17>r)<01> _sync_wrapperc<00><01>
K<00>|jrgSg}|j|<01>D]V}t|<05>s%|<02> td<02><00>||<05>|fi|<03><01><01>d{<00><02><03>}n||fi|<03><01><01>d{<00><02><03>}|j ||f<02><00>X|S7<00>-7<00><1D>w)a<>Await all receivers that are connected to the given ``sender``
or :data:`ANY`. Each receiver is called with ``sender`` as a positional
argument along with any extra keyword arguments. Return a list of
``(receiver, return value)`` tuples.
The order receivers are called is undefined, but can be influenced by
setting :attr:`set_class`.
If a receiver raises an exception, that exception will propagate up.
This makes debugging straightforward, with an assumption that correctly
implemented receivers will not raise.
:param sender: Call receivers connected to this sender, in addition to
those connected to :data:`ANY`.
:param _sync_wrapper: Will be called on any receivers that are sync
callables to turn them into async coroutines. For example,
could call the receiver in a thread.
:param kwargs: Extra keyword arguments to pass to each receiver.
.. versionadded:: 1.7
Nz(Cannot send to a non-coroutine function.rB)rr'rIrFrGr&rHs r<00>
send_asynczSignal.send_async<6E>s<><00><00><><00>@ <10>=<3D>=<3D><15>I<EFBFBD><14><07><1C>*<2A>*<2A>6<EFBFBD>2<>H<EFBFBD>&<26>x<EFBFBD>0<> <20>(<28>&<26>'Q<>R<>R<>6<>}<7D>X<EFBFBD>6<>v<EFBFBD>H<><16>H<>H<><06>'<27><06>9<>&<26>9<>9<><06> <13>N<EFBFBD>N<EFBFBD>H<EFBFBD>f<EFBFBD>-<2D> .<2E>3<><17><0E> I<01><>9<>s$<00>AB<01>A?<06>B<01>#B<06>$B<01>Bc<01><><00>|jsy|jtry|turyt |<01>|jvS)a<>Check if there is at least one receiver that will be called with the
given ``sender``. A receiver connected to :data:`ANY` will always be
called, regardless of sender. Does not check if weakly referenced
receivers are still live. See :meth:`receivers_for` for a stronger
search.
:param sender: Check for receivers connected to this sender, in addition
to those connected to :data:`ANY`.
FT)rr"r)rr )rr's r<00>has_receivers_forzSignal.has_receivers_for1s:<00><00><14>~<7E>~<7E><18> <0F>?<3F>?<3F>6<EFBFBD> "<22><17> <11>S<EFBFBD>=<3D><18><16>v<EFBFBD><EFBFBD>$<24>/<2F>/<2F>1<>1rc#<01><>K<00>|jsyt|<01>}||jvr$|jt|j|z}n!|jtj <00>}|D]c}|jj |<04>}|<05><01>!t |tj<00>r%|<05>}|<06>|j|t<00><00>[|<06><01><00>`|<05><01><00>ey<01>w)aIYield each receiver to be called for ``sender``, in addition to those
to be called for :data:`ANY`. Weakly referenced receivers that are not
live will be disconnected and skipped.
:param sender: Yield receivers connected to this sender, in addition
to those connected to :data:`ANY`.
N)
rr r"r)<00>copy<70>get<65>
isinstance<EFBFBD>weakref<65>ref<65> _disconnect)rr'r2<00>idsr1r&<00>strongs rrCzSignal.receivers_forFs<><00><00><><00><14>~<7E>~<7E> <12><1B>F<EFBFBD>O<EFBFBD> <09> <14><04><0F><0F> '<27><16>/<2F>/<2F>&<26>)<29>D<EFBFBD>O<EFBFBD>O<EFBFBD>I<EFBFBD>,F<>F<>C<EFBFBD><16>/<2F>/<2F>&<26>)<29>.<2E>.<2E>0<>C<EFBFBD><1E>K<EFBFBD><1B>~<7E>~<7E>)<29>)<29>+<2B>6<>H<EFBFBD><17><1F><18><19>(<28>G<EFBFBD>K<EFBFBD>K<EFBFBD>0<>!<21><1A><06><19>><3E><18>$<24>$<24>[<5B>&<26>9<><1C><1C> <0C><1E><0E><1F>s<00>CCc<01><><00>|turt}n t|<02>}t|<01>}|j||<03>d|jvr6|j
j r|j
j|||<02><02>yyy)aDisconnect ``receiver`` from being called when the signal is sent by
``sender``.
:param receiver: A connected receiver callable.
:param sender: Disconnect from only this sender. By default, disconnect
from all senders.
r)r&r'N)rr)r rTr.rrr/)rr&r'r2r1s rr0zSignal.disconnectlsu<00><00> <12>S<EFBFBD>=<3D><1E>I<EFBFBD><1F><06><0F>I<EFBFBD><1D>h<EFBFBD>'<27> <0B> <0C><18><18><1B>i<EFBFBD>0<> $<24>t<EFBFBD>}<7D>}<7D> 4<><14>*<2A>*<2A>4<>4<> <10> &<26> &<26> +<2B> +<2B>D<EFBFBD>8<EFBFBD>F<EFBFBD> +<2B> S<>5<> 5rc<01>`<00>|tk(ri|jj|d<00><00>0|jj <00>D]}|j |<01><00>|j j|d<00>y|j|j |<01>|j|j |<02>yr6)r)r!<00>popr"<00>values<65>discardr)rr1r2<00>buckets rrTzSignal._disconnect<63>s<><00><00> <14><06> <1E><13> <20> <20>$<24>$<24>[<5B>$<24>7<>C<>"<22>o<EFBFBD>o<EFBFBD>4<>4<>6<>F<EFBFBD><1A>N<EFBFBD>N<EFBFBD>;<3B>/<2F>7<> <11>N<EFBFBD>N<EFBFBD> <1E> <1E>{<7B>D<EFBFBD> 1<> <10>O<EFBFBD>O<EFBFBD>I<EFBFBD> &<26> .<2E> .<2E>{<7B> ;<3B> <10> <1D> <1D>k<EFBFBD> *<2A> 2<> 2<>9<EFBFBD> =rc<01><00><00><01>d<02><01>fd<01> }|S)ztCreate a callback function to disconnect a weakly referenced
receiver when it is garbage collected.
c<01>\<00><02>tj<00>s<17>j<00>t<00>yyr6)<04>sys<79> is_finalizingrTr))rSr1rs <20><>r<00>cleanupz.Signal._make_cleanup_receiver.<locals>.cleanup<75>s&<00><><00><17>$<24>$<24>&<26><14> <20> <20><1B>f<EFBFBD>5<>'r)rSz#weakref.ref[c.Callable[..., t.Any]]r9<00>Noner:)rr1ras`` rr*zSignal._make_cleanup_receiver<65>s<00><><00> 6<> <17>rc<01>.<00><00><01><00>tk7sJ<00>d<02><00>fd<01> }|S)z<>Create a callback function to disconnect all receivers for a weakly
referenced sender when it is garbage collected.
c<01><><00><02><00>jj<00>d<00><00>jj<00>d<01>D] }<01>j|j <00><03><00>"y)Nr:)r#rYr"r!r[)rSr1rr2s <20><>rraz,Signal._make_cleanup_sender.<locals>.cleanup<75>sN<00><><00> <10> <1E> <1E> "<22> "<22>9<EFBFBD>d<EFBFBD> 3<>#<23><EFBFBD><EFBFBD>2<>2<>9<EFBFBD>b<EFBFBD>A<> <0B><14>!<21>!<21>+<2B>.<2E>6<>6<>y<EFBFBD>A<> Br)rSzweakref.ref[t.Any]r9rb)r))rr2ras`` rr,zSignal._make_cleanup_sender<65>s <00><><00> <19>F<EFBFBD>"<22>"<22>"<22> B<01> <17>rc<01><><00>|j|jfD]8}t|j<00><00>D]\}}|r<01> |j |d<01><00><00>:y)aEPrune unused sender/receiver bookkeeping. Not threadsafe.
Connecting & disconnecting leaves behind a small amount of bookkeeping
data. Typical workloads using Blinker, for example in most web apps,
Flask, CLI scripts, etc., are not adversely affected by this
bookkeeping.
With a long-running process performing dynamic signal routing with high
volume, e.g. connecting to function closures, senders are all unique
object instances. Doing all of this over and over may cause memory usage
to grow due to extraneous bookkeeping. (An empty ``set`` for each stale
sender/receiver pair.)
This method will prune that bookkeeping away, with the caveat that such
pruning is not threadsafe. The risk is that cleanup of a fully
disconnected receiver/sender pair occurs while another thread is
connecting that same pair. If you are in the highly dynamic, unique
receiver/sender situation that has lead you to this method, that failure
mode is perhaps not a big deal for you.
N)r"r!<00>list<73>itemsrY)r<00>mapping<6E>identr\s r<00>_cleanup_bookkeepingzSignal._cleanup_bookkeeping<6E>sG<00><00>*<1D><0F><0F><14>):<3A>):<3A>;<3B>G<EFBFBD>!%<25>g<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>!6<> <0A><05>v<EFBFBD><1D><1B>K<EFBFBD>K<EFBFBD><05>t<EFBFBD>,<2C>"7<><rc<01><><00>|jj<00>|jj<00>|jj<00>|jj<00>y)z7Disconnect all receivers and senders. Useful for tests.N)r#<00>clearrr"r!rs r<00> _clear_statezSignal._clear_state<74>sF<00><00> <0C><1A><1A> <20> <20>"<22> <0C><0E><0E><1C><1C><1E> <0C><0F><0F><1D><1D><1F> <0C><19><19><1F><1F>!r)r9rr6)r<00>
str | Noner9rb)r&r r'<00>t.Anyr(<00>boolr9r )F)r'ror(rpr9zc.Callable[[F], F])r&<00>c.Callable[..., t.Any]r'ror9<00>c.Generator[None, None, None])r9rr)r'<00> t.Any | Noner@z^c.Callable[[c.Callable[..., c.Coroutine[t.Any, t.Any, t.Any]]], c.Callable[..., t.Any]] | NonerFror9<00>*list[tuple[c.Callable[..., t.Any], t.Any]])r'rsrIz^c.Callable[[c.Callable[..., t.Any]], c.Callable[..., c.Coroutine[t.Any, t.Any, t.Any]]] | NonerFror9rt)r'ror9rp)r'ror9z/c.Generator[c.Callable[..., t.Any], None, None])r&rqr'ror9rb)r1<00>
c.Hashabler2rur9rb)r1rur9z7c.Callable[[weakref.ref[c.Callable[..., t.Any]]], None])r2rur9z&c.Callable[[weakref.ref[t.Any]], None])r9rb)<1B>__name__<5F>
__module__<EFBFBD> __qualname__rr<00>setr<00>__annotations__rrrr$r3r;rr=r?r/rKrMrCr0rTr*r,rjrmr:rrrrs<00><00><08>
<0E>C<EFBFBD>><3E>"%<25>I<EFBFBD><1F>%<25><08><15>@<01><15>@<01><15>C<01><15>C<01>(A<01>$47<34>T<EFBFBD>0<18>d<19>4<14>@C<>&<26>.<2E>&<26>8=<3D>&<26> &<26>&<26><14>&<26>.<14>
"<22><14>
"<22> $<24>1<17><16>1<17><1C>1<17>
<0F> 1<17><18>1<17>
4<EFBFBD>1<17>j $<24>0<17><16>0<17><1C>0<17>
<0F> 0<17><18>0<17>
4<EFBFBD>0<17>d2<>*$<1F><1B>$<1F> 8<>$<1F>LLO<01>T<01>0 ><3E> <17>%<25> <17> @<40> <17><17>#<23><17> /<2F><17> -<2D>4"rrc<01>2<00><00>eZdZdZdd<05>fd<02> Zd<06>fd<03> Z<05>xZS)<07> NamedSignalaA named generic notification emitter. The name is not used by the signal
itself, but matches the key in the :class:`Namespace` that it belongs to.
:param name: The name of the signal within the namespace.
:param doc: The docstring for the signal.
c<01>2<00><01>t<00>|<00>|<02>||_yr6)<03>superr$<00>name)rrr<00> __class__s <20>rr$zNamedSignal.__init__<5F>s<00><><00> <0A><07><18><13><1D><1E><04> rc<01>J<00><01>t<00>|<00><00>}|dd<00>d|j<00>d<03>S)N<><4E><EFBFBD><EFBFBD><EFBFBD>z; <20>>)r~<00>__repr__r)r<00>baser<65>s <20>rr<>zNamedSignal.__repr__<5F>s-<00><><00><14>w<EFBFBD><1F>!<21><04><16>s<EFBFBD><02>)<29><1B>B<EFBFBD>t<EFBFBD>y<EFBFBD>y<EFBFBD>m<EFBFBD>1<EFBFBD>-<2D>-rr6)r<00>strrrnr9rb)r9r<>)rvrwrxrr$r<><00> __classcell__)r<>s@rr|r|<00>s<00><><00><08><1E> .<2E>.rr|c<01><00>eZdZdZddd<03>Zy)<06> Namespacez A dict mapping names to signals.Nc<01>2<00>||vrt||<02>||<||S)z<>Return the :class:`NamedSignal` for the given ``name``, creating it
if required. Repeated calls with the same name return the same signal.
:param name: The name of the signal.
:param doc: The docstring of the signal.
)r|<00>rrrs r<00>signalzNamespace.signal<61>s&<00><00> <10>t<EFBFBD> <1B>$<24>T<EFBFBD>3<EFBFBD>/<2F>D<EFBFBD><14>J<EFBFBD><13>D<EFBFBD>z<EFBFBD>rr6<00>rr<>rrnr9r|)rvrwrxrr<>r:rrr<>r<><00>s
<00><00>*<2A>
rr<>c<01><00>eZdZddd<02>Zy)<05>_PNamespaceSignalNc<01><00>yr6r:r<>s r<00>__call__z_PNamespaceSignal.__call__<5F>s<00><00>#rr6r<>)rvrwrxr<>r:rrr<>r<><00>s<00><00>Mrr<><00>default_namespacer<65>)%<25>
__future__r<00>collections.abc<62>abc<62>cr_<00>typing<6E>trR<00> collectionsr<00>
contextlibr<00> functoolsr<00>inspectr<00>
_utilitiesr r
r <00>TypeVar<61>Callable<6C>Anyr rr)rr|<00>dictr<74>r<><00>Protocolr<6C>r<>rzr<>r:rr<00><module>r<>s<><00><01>"<22><1B>
<EFBFBD><12><0E>#<23>%<25>%<25>'<27><1F> <20><1E> <0A>A<EFBFBD>I<EFBFBD>I<EFBFBD>c<EFBFBD><11><1A><1A>C<EFBFBD><11><15><15>J<EFBFBD>/<2F>0<><01> <0C>U<EFBFBD>m<EFBFBD><03><1E>
<EFBFBD><06>u"<22>u"<22>p .<2E>&<26>.<2E>& <1A><04>S<EFBFBD>+<2B>%<25>&<26> <1A> N<01><01>
<EFBFBD>
<EFBFBD>N<01> )<29>{<7B><11>9<EFBFBD>*<2A><04>.<2E>4<>4<><06><19>4<>r