§
    ’Þj@å  ã                   óú  — d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z ddlmZ ddlmZ dZd	Zeeee ed¦  «        ej        ej        fZdadag Zg Zda e¦   «         Z g Z!g Z"i Z# e¦   «         Z$ e¦   «         Z%g Z&d
a'd
a( ej)        ¦   «         Z*d„ Z+ej,        d;d„¦   «         Z-d„ Z.d„ Z/d„ Z0ddddœd„Z1d„ Z2d<d„Z3d=d„Z4d„ Z5 G d„ dej6        j7        ¦  «        Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d „ Z>d!„ d"D ¦   «         Z? G d#„ d$e¦  «        Z@d%„ ZAd&„ ZBd'„ ZC G d(„ d)eD¦  «        ZEd*„ ZFd+„ ZG eH¦   «         fd,„ZId-„ ZJd.„ ZKd/„ ZLd0„ ZMd1„ ZNd2„ ZO G d3„ d4e¦  «        ZP G d5„ d6¦  «        ZQd7„ ZRd8„ ZS G d9„ d:¦  «        ZTdS )>až  Automatic CUDA graphs of the blocks of the towers (the repeated layers of a transformer): the host work of a block call (Python,
kernel launches) is recorded once and replayed, for models whose steps are short enough for the host to be the bottleneck.

Inside `scope()` (the denoising loop of a model; elsewhere blocks run as usual), each call of a block is keyed by the tensor objects of
its weights, its active LoRAs and their scalings, the shapes of its tensor arguments and extra inputs, its other arguments and the
registered global keys: the first call of a key runs eagerly (it compiles and tunes the kernels, makes the caches of the weights), then
is captured into a CUDA graph that the next calls replay. Blocks run eagerly, without captures, while the placement of their weights is not
settled (`ready()` False: e.g. an automatic preload measuring a new workload, which keeps other blocks in VRAM at the next step). A block thus has a graph per location of its weights (kept in VRAM, or each
slot of the swapped blocks), and a model loaded again captures its graphs again. The tensor arguments, extra inputs (tensors that come
and go with a block, e.g. its LoRA copies) and outputs go through static buffers shared by the graphs, the arguments a block modifies in
place are copied back when needed, and an output that is an argument is that argument. A block keeps its `MAX_KEYS` most recently used graphs (a new
resolution replaces them); all the graphs go with the model or `invalidate()`. With MMGP's VMM allocator, eager preparation and capture
share a pool. Suitable live arguments and first-call outputs supply the static storage; retained caller outputs are protected before
another call can overwrite them. A large argument that only its caller holds (a tower's hidden state, new at each step) moves into its
static buffer instead of being copied there: the caller's tensor takes the buffer's storage and frees its own, so the graphs keep no
second copy of it and the next blocks copy nothing; while the caller holds it, other calls use another buffer. Eager stages beside the
blocks (input preparation, output head) can run on the pool's idle memory with `pooled()`. Graph warmup is scoped to its manager's pool.
A consumed single-tensor list can transfer its input's execution lifetime: after its last execution view dies, later temporaries may use
its physical pages while every graph address stays fixed. Caller references, storage aliases and recorded stream consumers prevent this
transfer. Large outputs can reuse their warmup storage at the corresponding captured allocation; a changed allocation trace is recaptured
without that output plan. These plans add no replay-time mapping or synchronization, and do not participate in ordinary, non-graph
allocation.

Contract of a block call in a scope: the block reads only its weights, its tensor arguments (in lists, tuples, dicts and dataclasses),
the state registered for its model (register_state) and tensors it creates; its effects are its outputs and in-place updates of its
tensor arguments or of that state (Python side effects are not replayed, and the capture runs the Python of the block once more); no
synchronization or CPU round trip. The capture checks the reads and raises an error naming any other tensor.

A model's own loop over a tower (run_blocks) replays each run of consecutive blocks kept in VRAM as one graph, while the blocks streamed
in between go through the hooks that transfer them.
é    N)Útqdm)Ú_pytree)ÚTorchDispatchModeé   )Úruntimeé   é   Fc                  óx   ‡— da 	 ddlm}  n# t          $ r Y dS w xY w| j        j        Šˆfd„}|| j        _        dS )a“  Triton's autotuners (@triton.autotune) benchmark their configurations on a cache miss: inside a capture, the benchmark launches
    would be recorded in the graph and CUDA refuses its timing synchronizations. The eager call that precedes each capture tunes the keys
    a block uses (sizes and dtypes); a miss that still happens in a capture (a key that differs there) raises an error naming the kernel.Tr   )Ú	autotunerNc                 óš   •— t           r8t          | d| j        ¦  «        }t          dt          |d|¦  «        › d�¦  «        ‚ ‰| g|¢R i |¤ŽS )NÚbase_fnzthe Triton kernel Ú__name__zz would tune itself (@triton.autotune) during a CUDA graph capture, for a key the eager call before the capture did not use)Ú
_capturingÚgetattrÚfnÚRuntimeError)ÚselfÚargsÚkwargsr   Úbenchs       €ú8C:\Users\johnn\OneDrive\Documents\AI\mmgp\cuda_graphs.pyÚguarded_benchz-_guard_triton_autotune.<locals>.guarded_benchM   sz   ø€ Ýð 	[Ý˜˜y¨$¬'Ñ2Ô2ˆBÝð  ZµG¸BÀ
ÈBÑ4OÔ4Oð  Zð  Zð  Zñ [ô [ð [àˆu�TÐ+˜DÐ+Ð+Ð+ FÐ+Ð+Ð+ó    )Ú_autotune_guardedÚtriton.runtimer   ÚImportErrorÚ	AutotunerÚ_bench)r   r   r   s     @r   Ú_guard_triton_autotuner   A   s~   ø€ ð
 ÐðØ,Ð,Ð,Ð,Ð,Ð,Ð,øÝð ð ð ØˆˆðøøøàÔÔ&€Eð,ð ,ð ,ð ,ð ,ð "/€IÔÔÐÐs   … Œ
™Tc              #   ó¾  K  — | r‰t           dk    r~|r)t          d„ d„ t          D ¦   «         D ¦   «         d¦  «        ndat          �Jt          t          vr<t                               t          ¦  «         t          j        dt          › d�¦  «         t           t          | ¦  «        z  a 	 dV — t           t          | ¦  «        z  a dS # t           t          | ¦  «        z  a w xY w)zêBlock calls in this scope use CUDA graphs when the mode is on for their model (a no-op otherwise). gated=False: the registered
    gates do not apply (blocks that never use what they check, e.g. an LLM with its own attention kernels).r   c              3   ó   K  — | ]}|¯|V — Œ	d S ©N© )Ú.0Úreasons     r   ú	<genexpr>zscope.<locals>.<genexpr>]   s'   è è € ÐTÐT FÈVÐT˜ÐTÐTÐTÐTÐTÐTr   c              3   ó*   K  — | ]} |¦   «         V — Œd S r"   r#   )r$   Úgates     r   r&   zscope.<locals>.<genexpr>]   s(   è è € Ð.IÐ.I¸$¨t¨t©v¬vÐ.IÐ.IÐ.IÐ.IÐ.IÐ.Ir   Nz[MMGP] CUDA graphs are off: ú.)	Ú_depthÚnextÚ_gatesÚ_blockedÚ	_reportedÚaddr   ÚwriteÚbool)ÚenabledÚgateds     r   Úscoper4   W   sÚ   è è € ð
 ð C•6˜Q’;�;Ø_dÐn•4ÐTÐTÐ.IÐ.IÅ&Ð.IÑ.IÔ.IÐTÑTÔTÐVZÑ[Ô[Ð[ÐjnˆÝÐ¥HµIÐ$=Ð$=Ý�MŠM�(Ñ#Ô#Ð#ÝŒJÐAµhÐAÐAÐAÑBÔBÐBÝ
�d�7‰mŒmÑ€Fð Øˆˆˆå•$�w‘-”-Ñˆˆˆø�•$�w‘-”-Ñˆˆˆˆˆs   Â&C ÃCc                  ó   — t           dk    S )a  True while a block of a graphed model runs to be captured (its first, eager call and its capture): a kernel launched outside
    PyTorch's current stream (e.g. on the legacy default stream) would be missing from its graph, so code with such kernels uses others.r   )Ú
_recordingr#   r   r   Ú	recordingr7   h   s   € õ ˜Š>Ðr   c                 óp   — t          j        | ¦  «        }|€d S |\  }}|j                             |¦  «        S r"   )r   Ú_ownerÚcuda_graphsÚget)ÚmoduleÚownerÚmanagerÚmodel_ids       r   Ú_graphsr@   n   s<   € ÝŒN˜6Ñ"Ô"€EØ€}ØˆtØÑ€GˆXØÔ×"Ò" 8Ñ,Ô,Ð,r   c                 ó†   — t           rt          | ¦  «        nd}|duo%t          du o|j        du o|                     ¦   «         S )a   Whether a managed module can use graphs in the current scope.

    Includes mode selection, registered gates and weight-residency readiness.
    Use only to skip preparation specific to a graph stage; run() also enforces
    these conditions. Unmanaged/released modules return False.
    N)r*   r@   r-   ÚdisabledÚready)r<   Úgraphss     r   Ú
is_enabledrE   v   sK   € õ !'Ð0�W�V‰_Œ_ˆ_¨D€FØ˜ÐÐa¥(¨dÐ"2Ða°v´È$Ð7NÐaÐSY×S_ÒS_ÑSaÔSaÐar   Úforward)r=   Úmethodr2   c                ó¢   — t          | |¦  «        }|rt          rt          |€| n|¦  «        nd}|€ ||i |¤Žn|                     | |||¦  «        S )aÕ  Execute an extra stage using its owner's existing graph cache and lifetime.

    Call inside scope(). An unregistered stage may supply a managed owner whose
    weights it uses; its parameters need not be registered a second time. The
    selected method must satisfy the same graph contract as a tower block.
    Outside a scope, with enabled=False, or without an active graph manager,
    execute the method normally. Gates/readiness and cache invalidation/release
    remain MMGP-owned. PyTorch compilation does not enable these CUDA graphs.
    A stage may span several blocks of its owner (e.g. a whole decoding step) only while
    runtime.weights_resident(owner): graphed blocks it calls are then captured inline.
    N)r   r*   r@   Úcall)r<   r=   rG   r2   r   r   rF   rD   s           r   ÚrunrJ   �   sj   € õ �f˜fÑ%Ô%€GØ<CÐXÍÐX�W˜u˜}�V�V°%Ñ8Ô8Ð8ÐTX€FØ'- ~ˆ7ˆ7�DÐ#˜FÐ#Ð#Ð#¸6¿;º;ÀvÈwÐX\Ð^dÑ;eÔ;eÐer   c                 óè   — ddl m} t          r!t          s|j        dk    rt          | ¦  «        nd}|�"t          €|j        €|                     ¦   «         s ||i |¤ŽS | 	                    |||¦  «        S )ay  Run an eager stage beside the graphed blocks of `owner`'s model (its input preparation, its output head) on the idle memory of the
    model's graph pool, where its temporaries would otherwise add to the pool's memory.

    Call inside scope(); fn runs normally while the model's graphs are off. The stage keeps nothing but its
    outputs (no cache filled, no tensor stored elsewhere: checked). Its tensor outputs leave the pool before any graph replays: a
    large one (a hidden state) moves into the free static buffer of its signature, which the next block then reads without a copy,
    the others move to ordinary memory.
    r   ©Ú	allocatorÚvmmN)
Ú rM   r*   r6   Úactiver@   r-   rB   rC   Úpooled)r=   r   r   r   rM   rD   s         r   rQ   rQ   ’   sŒ   € ð ÐÐÐÐÐÝ%Ð`­jÐ`¸YÔ=MÐQVÒ=VÐ=V�W�U‰^Œ^ˆ^Ð\`€FØ€~�Ð-°´Ð1LÐTZ×T`ÒT`ÑTbÔTbÐ1LØˆr�4Ð"˜6Ð"Ð"Ð"Ø�=Š=˜˜T 6Ñ*Ô*Ð*r   r#   c                 ó,  — t          | ¦  «        }|€dS t          rt          d¦  «        ‚t          d„ |D ¦   «         ¦  «        }t          |¦  «        }|j                             |¦  «        |j                             |d¦  «        }}|��t          |¦  «        t          |¦  «        k    rpt          d„ t          ||¦  «        D ¦   «         ¦  «        rIt          |¦  «        t          |¦  «        k    r)t          d„ t          ||¦  «        D ¦   «         ¦  «        rdS |�| 
                    ¦   «          ||c|j        |<   |j        |<   d„ |j                             ¦   «         D ¦   «         |_        d„ |j                             ¦   «         D ¦   «         |_        dS )	a1  Tensors that the graphs of owner's model read or update in place besides its weights and arguments (caches, recurrent states,
    buffers its loop fills before each call), at fixed addresses until release_state: never copied, whatever the allocator, and allowed
    by the read check. holders: objects holding these tensors that blocks take as arguments (e.g. a transformers StaticCache passed to
    every layer), keyed by their identity and passed as they are. A new registration under the same name replaces the previous one and
    drops the model's graphs.NzNCUDA graph state must be registered before its graphs are prepared or capturedc              3   ó^   K  — | ](}t          |¦  «        t          j        u ¯|j        ¯$|V — Œ)d S r"   )ÚtypeÚtorchÚTensorÚis_cuda©r$   Úts     r   r&   z!register_state.<locals>.<genexpr>­   s;   è è € ÐPÐP˜!­$¨q©'¬'µU´\Ð*AÐ*AÀaÄiÐ*A�AÐ*AÐ*AÐ*AÐ*AÐPÐPr   r#   c              3   ó$   K  — | ]\  }}||u V — Œd S r"   r#   ©r$   ÚaÚbs      r   r&   z!register_state.<locals>.<genexpr>°   s-   è è € ÐFqÐFqÑRVÐRSÐUVÀqÈAÀvÐFqÐFqÐFqÐFqÐFqÐFqr   c              3   ó$   K  — | ]\  }}||u V — Œd S r"   r#   r[   s      r   r&   z!register_state.<locals>.<genexpr>±   s*   è è € Ð=pÐ=pÉÈÈA¸aÀ1¸fÐ=pÐ=pÐ=pÐ=pÐ=pÐ=pr   c                 ó6   — h | ]}|D ]}t          |¦  «        ’ŒŒS r#   ©Úid©r$   ÚstaterY   s      r   ú	<setcomp>z!register_state.<locals>.<setcomp>¶   ó+   € ÐPÐPÐP %È%ÐPÐPÀQ�˜1™œÐPÐPÐPÐPr   c                 ó6   — h | ]}|D ]}t          |¦  «        ’ŒŒS r#   r`   ©r$   rc   Úhs      r   rd   z!register_state.<locals>.<setcomp>·   ó+   € ÐSÐSÐS 5ÈUÐSÐSÈ�˜A™œÐSÐSÐSÐSr   )r@   r6   r   Útuplerc   r;   ÚholdersÚlenÚallÚzipÚclearÚvaluesÚ	state_idsÚ
holder_ids)r=   ÚnameÚtensorsrk   rD   ÚpreviousÚprevious_holderss          r   Úregister_staterw   ¢   s�  € õ �U‰^Œ^€FØ€~ØˆÝð mÝÐkÑlÔlÐlÝÐPÐP˜wÐPÑPÔPÑPÔP€GÝ�G‰nŒn€GØ!'¤×!1Ò!1°$Ñ!7Ô!7¸¼×9KÒ9KÈDÐRTÑ9UÔ9UÐ€HØÐ¥ X¡¤µ#°g±,´,Ò!>Ð!>Å3ÐFqÐFqÕZ]Ð^fÐhoÑZpÔZpÐFqÑFqÔFqÑCqÔCqÐ!>ÝÐ$Ñ%Ô%­¨W©¬Ò5Ð5½#Ð=pÐ=pÕQTÐUeÐgnÑQoÔQoÐ=pÑ=pÔ=pÑ:pÔ:pÐ5ØˆØÐØ�Š‰ŒˆØ/6¸Ð,€F„L�Ñ˜œ tÑ,ØPÐP¨6¬<×+>Ò+>Ñ+@Ô+@ÐPÑPÔP€FÔØSÐS¨F¬N×,AÒ,AÑ,CÔ,CÐSÑSÔS€FÔÐÐr   c                 óÜ  — t          | ¦  «        }|�|j        sdS |€3|j                             ¦   «          |j                             ¦   «          n|j                             |d¦  «        €dS |j                             |d¦  «         d„ |j                             ¦   «         D ¦   «         |_        d„ |j                             ¦   «         D ¦   «         |_        |                     ¦   «          dS )ztForgets the state registered under name (all of owner's when None) and drops the graphs of its model, which read it.Nc                 ó6   — h | ]}|D ]}t          |¦  «        ’ŒŒS r#   r`   rb   s      r   rd   z release_state.<locals>.<setcomp>Å   re   r   c                 ó6   — h | ]}|D ]}t          |¦  «        ’ŒŒS r#   r`   rg   s      r   rd   z release_state.<locals>.<setcomp>Æ   ri   r   )r@   rc   ro   rk   Úpoprp   rq   rr   )r=   rs   rD   s      r   Úrelease_stater|   º   sÛ   € å�U‰^Œ^€FØ€~˜Vœ\€~ØˆØ€|ØŒ×ÒÑÔÐØŒ×ÒÑÔÐÐØ	Œ×	Ò	˜$ Ñ	%Ô	%Ð	-ØˆØ
„N×Ò�t˜TÑ"Ô"Ð"ØPÐP¨6¬<×+>Ò+>Ñ+@Ô+@ÐPÑPÔP€FÔØSÐS¨F¬N×,AÒ,AÑ,CÔ,CÐSÑSÔS€FÔØ
‡L‚L�N„N€N€N€Nr   c                 ó˜  ‡— t           rt          st          | ¦  «        nd}|�"t          €|j        €|                     ¦   «         s"t          |¦  «        D ]\  Š} |‰||g|¢R Ž }Œ|S dt          j        | |¦  «        dcŠ}}‰t          |¦  «        k     r¶t          ˆfd„|D ¦   «         ¦  «        \  }	}
}|r#|
‰z
  dk    r|st          j        | |¦  «        d}}ŒW|rD|
‰z
  dk    r;|                     |‰|
||¦  «        }|                     ||j        ||fi ¦  «        }|
Šn |‰|‰         |g|¢R Ž }‰dz   dcŠ}‰t          |¦  «        k     °¶|S )a:  Runs the blocks of a tower of owner's model (a ModuleList) in order, carry = step(index, block, carry, *shared), and returns the last
    carry: a list of tensors that each step takes over (it may empty it to free them early) and returns anew. Inside scope(), each run of
    consecutive blocks kept in VRAM is one graph, the others go through MMGP's hooks (transfers, block graphs); the first block of a tower
    whose automatic preload starts its cycles there runs through its hooks. The step of a run follows the contract of a block call (no
    Python side effect).Nr   Tc              3   óT   •K  — | ]"}|d          ‰cxk    r|d         k     ¯n n|V — Œ#dS )r   r   Nr#   )r$   rJ   Úindexs     €r   r&   zrun_blocks.<locals>.<genexpr>×   sL   øè è € Ð QÐ Q¨¸¸A¼À%Ð8PÐ8PÒ8PÐ8PÈ#ÈaÌ&Ò8PÐ8PÐ8PÐ8PÐ8P Ð8PÐ8PÐ8PÐ8PÐ QÐ Qr   r   F)r*   r6   r@   r-   rB   rC   Ú	enumerater   Úresident_runsrl   r+   ÚspanrI   rF   )r=   ÚblocksÚstepÚcarryÚsharedrD   ÚblockÚrunsÚcurrentÚ_ÚstopÚresidentr‚   r   s                @r   Ú
run_blocksr�   Ê   s¦  ø€ õ  &ÐB­jÐB�W�U‰^Œ^ˆ^¸d€FØ€~�Ð-°´Ð1LÐTZ×T`ÒT`ÑTbÔTbÐ1LÝ% fÑ-Ô-ð 	7ð 	7‰LˆE�5Ø�D˜  uÐ6¨vÐ6Ð6Ð6ˆEˆEØˆØ�gÔ3°E¸6ÑBÔBÀDÐ€Eˆ4�Ø
•#�f‘+”+Ò
Ð
Ý Ð QÐ QÐ QÐ Q°Ð QÑ QÔ QÑQÔQÑˆˆ4�Øð 	˜˜u™ qÒ(Ð(°Ð(õ $Ô1°%¸Ñ@Ô@À$�'ˆDØØð 	.˜˜u™ qÒ(Ð(Ø—;’;˜v u¨d°D¸$Ñ?Ô?ˆDØ—K’K  d¤l°U¸F°OÀRÑHÔHˆEØˆEˆEà�D˜  u¤¨uÐ>°vÐ>Ð>Ð>ˆEØ" Q™Y¨ˆNˆE�7ð •#�f‘+”+Ò
Ð
ð €Lr   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú_SpanzsConsecutive blocks of a tower kept in VRAM: one graph stage of run_blocks, keyed and read-checked by their weights.c                 óì   •— t          ¦   «                              ¦   «          t          j                             t          |¦  «        ||…         ¦  «        ||c| _        | _        | _        || j	        d<   d S )Nr„   )
ÚsuperÚ__init__rU   ÚnnÚ
ModuleListÚlistrƒ   ÚstartÚ_mm_graph_keysÚ__dict__)r   rƒ   r–   r‹   r„   Úmax_keysÚ	__class__s         €r   r’   z_Span.__init__ê   sg   ø€ Ý‰Œ×ÒÑÔÐÝ7<´x×7JÒ7JÍ4ÐPVÉ<Ì<ÐX]Ð^bÐXbÔKcÑ7dÔ7dÐfkÐmuÐ4ˆŒ�T”Z Ô!4Ø $ˆŒ�fÑÐÐr   c                 ój   — t          | j        ¦  «        D ]\  }} | j        | j        |z   ||g|¢R Ž }Œ|S r"   )r€   rƒ   r„   r–   )r   r…   r†   Úoffsetr‡   s        r   rF   z_Span.forwardï   sL   € Ý& t¤{Ñ3Ô3ð 	Jð 	J‰MˆF�EØ�D”I˜dœj¨6Ñ1°5¸%ÐIÀ&ÐIÐIÐIˆEˆEØˆr   )r   Ú
__module__Ú__qualname__Ú__doc__r’   rF   Ú__classcell__©rš   s   @r   r�   r�   ç   sM   ø€ € € € € Ø}Ð}ð%ð %ð %ð %ð %ð
ð ð ð ð ð ð r   r�   c                 óP   — | t           vrt                                | ¦  «         dS dS )z|provider() -> hashable: a global state that changes what blocks compute (attention mode, kernel options), part of every key.N)Ú_key_providersÚappend)Úproviders    r   Úregister_keyr¦   õ   s/   € à•~Ð%Ð%Ý×Ò˜hÑ'Ô'Ð'Ð'Ð'ð &Ð%r   c                 óP   — | t           vrt                                | ¦  «         dS dS )zƒgate() -> None, or the reason why the blocks must run eagerly (e.g. a kernel that cannot be captured): checked when a scope starts.N)r,   r¤   )r(   s    r   Úregister_gater¨   û   s-   € à•6ÐÐÝ�Š�dÑÔÐÐÐð Ðr   c                 ó  — ddl m} |                     ¦   «         rVt          rt	          d¦  «        ‚|                     ¦   «         5  |                      ¦   «         } ddd¦  «         n# 1 swxY w Y   t                               | ¦  «         | S )z•A tensor that blocks may read and that is never freed nor replaced (a process-wide cache, e.g. a rotation matrix): graphs read it
    at its address.r   rL   zOA persistent CUDA graph constant must be prepared during warmup, before captureN)	rO   rM   Úin_graph_warmupr   r   Únormal_allocationsÚcloneÚ
_constantsr¤   )ÚtensorrM   s     r   Úregister_constantr¯     sÏ   € ð ÐÐÐÐÐØ× Ò Ñ"Ô"ð $Ýð 	rÝÐpÑqÔqÐqØ×)Ò)Ñ+Ô+ð 	$ð 	$Ø—\’\‘^”^ˆFð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$å×Ò�fÑÔÐØ€Ms   ÁA&Á&A*Á-A*c                 óP   — | t           vrt                                | ¦  «         dS dS )a	  setup(stream) is called before each capture on the capture stream, the one stream of the captures of a device: it prepares what a
    library would allocate there on first use, which a capture cannot do (per-stream workspaces), and returns at once when it is ready.N)Ú_capture_setupsr¤   )Úsetups    r   Úregister_capture_setupr³     s1   € ð •OÐ#Ð#Ý×Ò˜uÑ%Ô%Ð%Ð%Ð%ð $Ð#r   c                 óD  — ddl m} |                     ¦   «         5  t          j                             | ¦  «        5  t          j        ¦   «         5  t          j                             ¦   «         | j        f}|t          vr\t          j
        dt          j        | j        ¬¦  «        }t          j        |d         ||¦  «         t                               |¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nr   rL   )é   rµ   ©ÚdtypeÚdevicer   )rO   rM   r«   rU   ÚcudaÚstreamÚinference_modeÚcurrent_blas_handleÚcuda_streamÚ_blas_workspacesÚzerosÚfloat16r¸   Úaddmmr/   )rº   rM   ÚkeyÚmatrixs       r   Ú_prepare_blas_streamrÄ     sÆ  € ð ÐÐÐÐÐØ	×	%Ò	%Ñ	'Ô	'ð &ð &­¬×):Ò):¸6Ñ)BÔ)Bð &ð &ÅEÔDXÑDZÔDZð &ð &ÝŒz×-Ò-Ñ/Ô/°Ô1CÐDˆØÕ&Ð&Ð&Ý”[ µ´ÀvÄ}ÐUÑUÔUˆFÝŒK˜˜qœ	 6¨6Ñ2Ô2Ð2Ý× Ò  Ñ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &sY   › D»C=ÁBC&ÃC=Ã&C*Ã*C=Ã-C*Ã.C=Ã1DÃ=D	ÄDÄD	ÄDÄDÄDc                 ó¼   — t                                | d ¦  «        }|€)t          j                             | ¦  «        x}t           | <   t
          D ]} ||¦  «         Œ|S r"   )Ú_capture_streamsr;   rU   r¹   ÚStreamr±   )r¸   rº   r²   s      r   Ú_capture_streamrÈ   !  s_   € Ý×!Ò! &¨$Ñ/Ô/€FØ€~Ý,1¬J×,=Ò,=¸fÑ,EÔ,EÐEˆÕ! &Ñ)Ý ð ð ˆØˆˆf‰ŒˆˆØ€Mr   c                 óŠ   — h | ]@}t          t          j        j        |¦  «        ¯!t	          t          j        j        |¦  «        ’ŒAS r#   )ÚhasattrrU   ÚopsÚatenr   )r$   rs   s     r   rd   rd   *  sc   € ð Ið Ið I¨tÝjqÕrwÔr{ô  sAð  CGñ  kHô  kHðI�W•U”Y”^ TÑ*Ô*ð Ið Ið Ir   )ÚmmrÁ   ÚbmmÚbaddbmmÚaddbmmÚmvÚaddmvÚdotÚvdotÚ_addmm_activationÚ_int_mmÚ
_scaled_mmÚ_scaled_mm_v2Ú_grouped_mmc                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )Ú_BlasUsea  The eager warmup of a graph: its first cuBLAS operation prepares the stream's cuBLAS workspaces outside the graph pool, and the capture
    stream gets them only then. A model computing without cuBLAS (e.g. with its own kernels) keeps no workspace for the capture stream.c                 óV   •— t          ¦   «                              ¦   «          d| _        d S ©NF)r‘   r’   Úused)r   rš   s    €r   r’   z_BlasUse.__init__2  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ	ˆ	ˆ	r   r#   Nc                 ó¤   — | j         s@|j        t          v r2d| _         t          t          j                             ¦   «         ¦  «          ||i |pi ¤ŽS )NT)rÞ   ÚoverloadpacketÚ	_BLAS_OPSrÄ   rU   r¹   Úcurrent_stream)r   ÚfuncÚtypesr   r   s        r   Ú__torch_dispatch__z_BlasUse.__torch_dispatch__6  sU   € ØŒyð 	>˜TÔ0µIÐ=Ð=ØˆDŒIÝ ¥¤×!:Ò!:Ñ!<Ô!<Ñ=Ô=Ð=Øˆt�TÐ,˜f˜l¨Ð,Ð,Ð,r   ©r#   N©r   r�   rž   rŸ   r’   rå   r    r¡   s   @r   rÛ   rÛ   .  sX   ø€ € € € € ðKð Kðð ð ð ð ð-ð -ð -ð -ð -ð -ð -ð -r   rÛ   c                  óB   — t           D ]} |                      ¦   «          ŒdS )zQDrops every graph, e.g. after a change of the settings that the graphs depend on.N)Ú	_managersro   )r>   s    r   Ú
invalidaterê   =  s*   € åð ð ˆØ�Š‰Œˆˆðð r   c                 ó˜   — t          | ¦  «        D ]9}|                     ¦   «          |t          v rt                               |¦  «         Œ:dS )zODrops the graphs of these managers for good (their offload object is released).N)r•   ro   ré   Úremove)Úmanagersr>   s     r   Úreleaserî   C  sN   € å˜‘>”>ð &ð &ˆØ�Š‰ŒˆØ•iÐÐÝ×Ò˜WÑ%Ô%Ð%øð&ð &r   c                 óÖ   ‡ ‡— d„ t          j        ‰ ¦  «        D ¦   «         Št          j        ‰ ˆfd„ˆ ˆfd„‰ j        › d‰ j        › �¬¦  «         t                               ‰ ¦  «         d S )Nc                 ó   — g | ]	}|j         ‘Œ
S r#   )rs   )r$   Úfields     r   ú
<listcomp>z'_register_dataclass.<locals>.<listcomp>L  s   € Ð>Ð>Ð>˜UˆeŒjÐ>Ð>Ð>r   c                 ó&   •‡ — ˆ fd„‰D ¦   «         d fS )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r#   )r   )r$   rs   Úobjs     €r   rò   z9_register_dataclass.<locals>.<lambda>.<locals>.<listcomp>M  s#   ø€ Ð2YÐ2YÐ2YÈ$µ7¸3ÀÑ3EÔ3EÐ2YÐ2YÐ2Yr   r#   )rõ   Úfieldss   `€r   ú<lambda>z%_register_dataclass.<locals>.<lambda>M  s$   øø€ Ð2YÐ2YÐ2YÐ2YÐRXÐ2YÑ2YÔ2YÐ[_Ð1`€ r   c           
      óJ   •—  ‰di t          t          ‰| ¦  «        ¦  «        ¤ŽS )Nr#   )Údictrn   )rp   rŠ   Úclsrö   s     €€r   r÷   z%_register_dataclass.<locals>.<lambda>N  s)   ø€ °#°#Ð2RÐ2R½½SÀÈÑ=PÔ=PÑ8QÔ8QÐ2RÐ2R€ r   r)   )Úserialized_type_name)Údataclassesrö   ÚpytreeÚregister_pytree_noder�   rž   Ú_registeredr/   )rú   rö   s   `@r   Ú_register_dataclassr   K  s¥   øø€ Ø>Ð>¥kÔ&8¸Ñ&=Ô&=Ð>Ñ>Ô>€FÝ
Ô Ð%`Ð%`Ð%`Ð%`Ø RÐ RÐ RÐ RÐ RÐloÔlzð  jPð  jPð  ~Aô  ~Nð  jPð  jPðQñ Qô Qð Qå‡O‚O�CÑÔÐÐÐr   c                   ó   — e Zd Zd„ ZdS )Ú_OverlappingArgumentc                 ó   — || _         d S r"   )r   )r   r   s     r   r’   z_OverlappingArgument.__init__S  s   € ØˆŒ
ˆ
ˆ
r   N)r   r�   rž   r’   r#   r   r   r  r  R  s#   € € € € € ðð ð ð ð r   r  c                 ó¾  ‡ ‡‡‡— ‰ ‰u r‰S t          j        ‰ ¦  «        r6t          ‰ t          ¦  «        s!ˆ fd„t          j        ‰ ¦  «        D ¦   «         }nlt          ‰ t
          ¦  «        rd„ ‰                      ¦   «         D ¦   «         }n8t          ‰ t          t          f¦  «        rd„ t          ‰ ¦  «        D ¦   «         }ndS t          ˆˆˆfd„|D ¦   «         d¦  «        S )zhWhere `target` sits in a block call's arguments (lists, tuples, dicts, dataclasses), for error messages.c                 óN   •— g | ]!}d |j         › �t          ‰|j         ¦  «        f‘Œ"S )r)   )rs   r   )r$   rñ   Útrees     €r   rò   z"_argument_path.<locals>.<listcomp>\  s5   ø€ ÐeÐeÐeÀ5Ð"�e”jÐ"Ð"¥G¨D°%´*Ñ$=Ô$=Ð>ÐeÐeÐer   c                 ó$   — g | ]\  }}d |›d�|f‘ŒS ©ú[ú]r#   )r$   rÂ   Úvalues      r   rò   z"_argument_path.<locals>.<listcomp>^  s)   € ÐFÐFÐF©:¨3°�,�c�,�,�, Ð&ÐFÐFÐFr   c                 ó$   — g | ]\  }}d |› d�|f‘ŒS r  r#   )r$   r   r  s      r   rò   z"_argument_path.<locals>.<listcomp>`  s)   € ÐKÐKÐK©<¨5°%�,�e�,�,�, Ð&ÐKÐKÐKr   Nc              3   óN   •K  — | ]\  }}t          |‰‰|z   ¦  «        xŠ®‰V — Œ d S r"   )Ú_argument_path)r$   Úsuffixr  ÚfoundÚpathÚtargets      €€€r   r&   z!_argument_path.<locals>.<genexpr>c  sE   øè è € ÐyÐy™=˜6 5½~ÈeÐU[Ð]aÐdjÑ]jÑ?kÔ?kÐ6k°eÐ5x�Ð5xÐ5xÐ5xÐ5xÐyÐyr   )rü   Úis_dataclassÚ
isinstancerT   rö   rù   Úitemsr•   rj   r€   r+   )r  r  r  r  r  s   ``` @r   r  r  W  sù   øøøø€ àˆv€~€~ØˆÝÔ Ñ%Ô%ð ­j¸½tÑ.DÔ.Dð ØeÐeÐeÐeÍKÔL^Ð_cÑLdÔLdÐeÑeÔeˆˆÝ	�D�$Ñ	Ô	ð ØFÐF¸¿º¹¼ÐFÑFÔFˆˆÝ	�D�4¥˜-Ñ	(Ô	(ð ØKÐK½9ÀT¹?¼?ÐKÑKÔKˆˆàˆtÝÐyÐyÐyÐyÐyÐy¨EÐyÑyÔyÐ{ñ  Aô  Að  Ar   c                 ó€   — 	 t          j        | ¦  «        \  }}d„ |D ¦   «         }|s||fS |D ]}t          |¦  «         ŒŒ>)NTc                 óª   — h | ]P}t          j        |¦  «        ¯t          |t          ¦  «        °+t          |¦  «        t          v¯At          |¦  «        ’ŒQS r#   )rü   r  r  rT   rÿ   ©r$   Úleafs     r   rd   z_flatten.<locals>.<setcomp>i  s|   € ð  Qð  Qð  Q˜dµÔ0HÈÑ0NÔ0Nð  QÕWaÐbfÕhlÑWmÔWmð  QÕrvÐw{Ñr|Ôr|õ  EPð  sPð  sP�t�D‰zŒzð  sPð  sPð  sPr   )rý   Útree_flattenr   )r  ÚleavesÚspecÚnewrú   s        r   Ú_flattenr  f  st   € ð%ÝÔ*¨4Ñ0Ô0‰ˆ�ð Qð  Q fð  Qñ  Qô  QˆØð 	 Ø˜4�<ÐØð 	%ð 	%ˆCÝ Ñ$Ô$Ð$Ð$ð%r   c                 ó°  — g }| D �]B}t          |t          j        ¦  «        rH|                     t	          |j        ¦  «        |                     ¦   «         |j        |j        f¦  «         Œet          |t          ¦  «        st          |t          j        ¦  «        r|                     |¦  «         Œªt          |t          ¦  «        r)|                     d|j        |j        |j        f¦  «         Œèt!          |¦  «        |v r&|                     dt!          |¦  «        f¦  «         �Œt#          dt%          |¦  «        j        › d�¦  «        ‚t	          |¦  «        S )NÚslicerc   z+CUDA graph block call: an argument of type z0 is not supported, pass its tensors as arguments)r  rU   rV   r¤   rj   ÚshapeÚstrider·   r¸   Ú_SCALARSÚenumÚEnumr   r–   r‹   r„   ra   Ú	TypeErrorrT   r   )r  rk   Ú	signaturer  s       r   Ú
_signaturer(  p  sS  € Ø€IØð 
Qñ 
QˆÝ�d�EœLÑ)Ô)ð 		QØ×Ò�e D¤JÑ/Ô/°·²±´ÀÄ
ÈDÌKÐXÑYÔYÐYÐYÝ˜�hÑ'Ô'ð 	Q­:°d½D¼IÑ+FÔ+Fð 	QØ×Ò˜TÑ"Ô"Ð"Ð"Ý˜�eÑ$Ô$ð 	QØ×Ò˜g t¤z°4´9¸d¼iÐHÑIÔIÐIÐIÝ�‰XŒX˜Ð Ð Ø×Ò˜g¥r¨$¡x¤xÐ0Ñ1Ô1Ð1Ñ1åð  PÍ$ÈtÉ*Ì*ÔJ]ð  Pð  Pð  Pñ  Qô  Qð  QÝ�ÑÔÐr   c                 óN   — |                       ¦   «                              ¦   «         S r"   )Úuntyped_storageÚdata_ptr)rY   s    r   Ú_storager,  €  s    € Ø×ÒÑÔ×'Ò'Ñ)Ô)Ð)r   c                 óÒ   — |d uoc|                       ¦   «         |                      ¦   «         k    o9| j        |j        k    o)|                      ¦   «         |                     ¦   «         k    S r"   )r+  r!  r"  )r\   r]   s     r   Ú_same_bufferr.  „  sX   € Ø�Dˆ=Ðm˜QŸZšZ™\œ\¨Q¯ZªZ©\¬\Ò9Ðm¸a¼gÈÌÒ>PÐmÐUV×U]ÒU]ÑU_ÔU_Ðcd×ckÒckÑcmÔcmÒUmÐmr   c                 óª   — |                       ¦   «         }t          j                             |j        ¦  «        dk    ot          j        |¦  «        dk    S )Né   é   )r*  rU   Ú_CÚ_storage_Use_CountÚ_cdataÚsysÚgetrefcount)r®   Ústorages     r   Ú	_unsharedr8  ˆ  sF   € à×$Ò$Ñ&Ô&€GÝŒ8×&Ò& w¤~Ñ6Ô6¸!Ò;Ð]ÅÄÐPWÑ@XÔ@XÐ\]Ò@]Ð]r   c                 ó"  — ddl m} | j        r't                               t          | ¦  «        ¦  «        nd }t          | ¦  «        t          j        u o¾| j        o·| j	         o¯|  
                    ¦   «         dk    o—t          j        | ¦  «        dk    o|                      ¦   «                              ¦   «         |                      ¦   «         |                      ¦   «         z  k    o.|                     | ¦  «        o|d u p|                     ¦   «         |u S )Nr   rL   r   )rO   rM   rW   Ú_static_storagesr;   r,  rT   rU   rV   Úrequires_gradÚstorage_offsetÚ_debug_has_internal_overlapr*  ÚnbytesÚnumelÚelement_sizeÚowns_tensorÚ
_mm_graphs)r®   r=   rM   Ústatics       r   Ú
_adoptablerD  Ž  s8  € ð ÐÐÐÐÐØ7=´~ÐOÕ×!Ò!¥(¨6Ñ"2Ô"2Ñ3Ô3Ð3È4€FÝ�‰LŒL�EœLÐ(ð _¨V¬^ð _ÀFÔDXÐ@Xð _Ð]c×]rÒ]rÑ]tÔ]tÐxyÒ]yð _ÝÔ-¨fÑ5Ô5¸Ò:ð_Ø?E×?UÒ?UÑ?WÔ?W×?^Ò?^Ñ?`Ô?`Ðdj×dpÒdpÑdrÔdrÐu{÷  vIò  vIñ  vKô  vKñ  eKò  @Kð_à×!Ò! &Ñ)Ô)ð_à/5¸¨~Ð/]À×ARÒARÑATÔATÐX]ÐA]ð`r   c                 óf  — ddl m} |j        dk    o t          | ¦  «        t          j        u o…| j         o}|                      ¦   «         |                      ¦   «         z  t          k    oKt	          j
        ¦   «         p|                      ¦   «          o#t          | ¦  «        o|                     |¦  «        S )Nr   rL   rN   )rO   rM   rP   rT   rU   rV   r;  r?  r@  Ú
MOVE_BYTESÚis_inference_mode_enabledÚis_inferencer8  rA  )r  rC  rM   s      r   Ú_movablerI  ˜  sï   € ð ÐÐÐÐÐØÔ Ò%ð E­$¨t©*¬*½¼Ð*Dð EÈTÔM_ÐI_ð EÐdh×dnÒdnÑdpÔdpÐsw÷  tEò  tEñ  tGô  tGñ  eGõ  KUò  eUð EÝÔ0Ñ2Ô2ÐM¸$×:KÒ:KÑ:MÔ:MÐ6MðEÝS\Ð]aÑSbÔSbðEØgp×g|Òg|ð  ~Dñ  hEô  hEðFr   c                 óB  — t          j        d¦  «        5  t          j        d| j        | j        ¬¦  «                             |                      ¦   «         |                      ¦   «         | j        |  	                    ¦   «         ¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )NFr   r¶   )
rU   r»   Úemptyr·   r¸   Úset_r*  r<  r!  r"  )r®   s    r   Ú_buffer_aliasrM     s  € å	Ô	˜eÑ	$Ô	$ð _ð _ÝŒ{˜1 F¤L¸¼ÐGÑGÔG×LÒLÈV×McÒMcÑMeÔMeÐgm×g|Òg|Ñg~Ôg~ð  AGô  AMð  OU÷  O\ò  O\ñ  O^ô  O^ñ  _ô  _ð_ð _ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _ð _ð _s   •A2BÂBÂBc                   ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )Ú
_ReadCheckzwRecords, during a capture, the CUDA tensors read by the operations that are neither allowed nor created by the capture.c                 óf   •— t          ¦   «                              ¦   «          |g c| _        | _        d S r"   )r‘   r’   ÚallowedÚunknown)r   rQ  rš   s     €r   r’   z_ReadCheck.__init__©  s-   ø€ Ý‰Œ×ÒÑÔÐØ%,¨bÐ"ˆŒ�d”l�l�lr   r#   Nc           	      ó„  — |pi }t          j        ||f¦  «        D ]½}t          |¦  «        t          j        u r |j        r™t          |¦  «        | j        vrƒt          | j	        ¦  «        dk     rk| j	         
                    |› dt          |j        ¦  «        › d|j        › d�d                     t          j        d¬¦  «        d d…         ¦  «        z   ¦  «         Œ¾ ||i |¤Ž}t          j        |¦  «        D ]J}t#          |t          j        ¦  «        r.|j        r'| j                             t          |¦  «        ¦  «         ŒK|S )	Nr   z reads a tensor ú ú
rO   é   )Úlimitéþÿÿÿ)rý   Útree_leavesrT   rU   rV   rW   r,  rQ  rl   rR  r¤   rj   r!  r·   ÚjoinÚ	tracebackÚformat_stackr  r/   )r   rã   rä   r   r   r  Úouts          r   rå   z_ReadCheck.__torch_dispatch__­  s„  € Ø�˜2ˆÝÔ&¨¨f ~Ñ6Ô6ð 	Rð 	RˆDÝ�D‰zŒz�Uœ\Ð)Ð)¨d¬lÐ)½xÈ¹~¼~ÐUYÔUaÐ?aÐ?aÕfiÐjnÔjvÑfwÔfwÐz{Òf{Ðf{Ø”×#Ò# tÐ$_Ð$_½UÀ4Ä:Ñ=NÔ=NÐ$_Ð$_ÐQUÔQ[Ð$_Ð$_Ð$_Ðbd×biÒbiÕjsô  kAð  HJð  kKñ  kKô  kKð  LOð  MOð  LOô  kPñ  cQô  cQñ  %Qñ  Rô  Rð  RøØˆd�DÐ#˜FÐ#Ð#ˆÝÔ& sÑ+Ô+ð 	1ð 	1ˆDÝ˜$¥¤Ñ-Ô-ð 1°$´,ð 1Ø”× Ò ¥¨$¡¤Ñ0Ô0Ð0øØˆ
r   ræ   rç   r¡   s   @r   rO  rO  ¦  sX   ø€ € € € € ð Bð  Bð1ð 1ð 1ð 1ð 1ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   rO  c                   ó   — e Zd ZdZdS )Ú_Graph)ÚgraphÚ	positionsrC  Úextra_staticÚ
static_keyÚmutatedÚ
out_leavesÚout_specÚoutputsÚ	lifetimesÚemptiedN)r   r�   rž   Ú	__slots__r#   r   r   r_  r_  ¹  s   € € € € € ð W€I€I€Ir   r_  c                 ó$  ‡— i t          ¦   «         }}| |g}|�rw|                     ¦   «         Št          ‰¦  «        |v rŒ)|                     t          ‰¦  «        ¦  «         t	          ‰t
          ¦  «        rLt          ‰¦  «        dk    r9t	          ‰d         t          j        ¦  «        r‰|t          ‰d         ¦  «        <   nËt	          ‰t
          t          f¦  «        r| 
                    ‰¦  «         n™t	          ‰t          ¦  «        r(| 
                    ‰                     ¦   «         ¦  «         n\t          j        ‰¦  «        rHt	          ‰t          ¦  «        s3| 
                    ˆfd„t          j        ‰¦  «        D ¦   «         ¦  «         |�°w|S )znSingle-tensor lists can transfer ownership to a block. Other argument containers retain their normal lifetime.r   r   c              3   óB   •K  — | ]}t          ‰|j        ¦  «        V — Œd S r"   )r   rs   )r$   rñ   r  s     €r   r&   z_handoffs.<locals>.<genexpr>Í  s/   øè è € Ð]Ð]¸%�7 5¨%¬*Ñ5Ô5Ð]Ð]Ð]Ð]Ð]Ð]r   )Úsetr{   ra   r/   r  r•   rl   rU   rV   rj   Úextendrù   rp   rü   r  rT   rö   )r   r   r  ÚseenÚpendingr  s        @r   Ú	_handoffsrq  ½  sp  ø€ à•c‘e”eˆ4€EØ�Vˆn€GØ
ñ ^Ø—’‘”ˆÝˆe‰9Œ9˜ÐÐØØ�Š•�E‘”ÑÔÐÝ�e�TÑ"Ô"ð 	^¥s¨5¡z¤z°Q¢ ½:ÀeÈAÄhÕPUÔP\Ñ;]Ô;] Ø"'ˆE•"�U˜1”X‘,”,ÑÐÝ˜¥¥e˜}Ñ-Ô-ð 	^Ø�NŠN˜5Ñ!Ô!Ð!Ð!Ý˜�tÑ$Ô$ð 	^Ø�NŠN˜5Ÿ<š<™>œ>Ñ*Ô*Ð*Ð*ÝÔ% eÑ,Ô,ð 	^µZÀÅtÑ5LÔ5Lð 	^Ø�NŠNÐ]Ð]Ð]Ð]Å;ÔCUÐV[ÑC\ÔC\Ð]Ñ]Ô]Ñ]Ô]Ð]ð ñ ^ð €Lr   c           	      ó€  — |s
 | |i |¤ŽdfS ddl m} t          ||¦  «        }g }g }	 |D ]�}	||	         }
|                     t	          |
¦  «        ¦  «        }|€Œ/|                     |
¦  «        \  }}|�7|                     |	||
t          j        |¦  «        ||j	        f¦  «         ||d<   ~Œ‚ | |i |¤Ž}t          |¦  «        \  }}d„ |D ¦   «         }t          |¦  «        D �]\  }	}t          |t          j        ¦  «        rë|                     t          |¦  «        ¦  «        x}
�Çt!          |
|¦  «        r|
j        |j        k    r|
||	<   Œjt          j        d¦  «        5  t          j        d|j        |j        ¬¦  «                             |
                     ¦   «         |                     ¦   «         |j        |                     ¦   «         ¦  «        ||	<   ddd¦  «         n# 1 swxY w Y   �Œt5          j        ||¦  «        }|D ]�\  }	}}
}}}|                     |¦  «        r|                     |	¦  «          |¦   «         }|�Q|j	        |k    r$t          j        j                             |
¦  «         tA          |¦  «        dk    r|d         |u r|
|d<   Œ‘n˜# |D ]�\  }	}}
}}}|                     |¦  «        r|                     |	¦  «          |¦   «         }|�Q|j	        |k    r$t          j        j                             |
¦  «         tA          |¦  «        dk    r|d         |u r|
|d<   Œ‘w xY w|tC          |¦  «        fS )	zoPlan consumed input storage during warmup/capture; no operation dispatch interception or replay-time remapping.r#   r   rL   Nr   c                 ó<   — i | ]\  }}}}}}t          |¦  «        |“ŒS r#   ©r,  )r$   rŠ   Úsources      r   ú
<dictcomp>z&_execute_lifetimes.<locals>.<dictcomp>ç  s/   € ÐUÐUÐUÑ3H°1°a¸ÀÀAÀq•h˜vÑ&Ô&¨ÐUÐUÐUr   Fr¶   )"rO   rM   rq  r;   ra   Úlifetime_viewr¤   ÚweakrefÚrefÚ_versionr  r€   r  rU   rV   r,  r.  r·   r»   rK  r¸   rL  r*  r<  r!  r"  rý   Útree_unflattenÚend_lifetimeÚautogradr`  Úincrement_versionrl   rj   )rF   r   r   ra  r  rM   Ú
containersÚbindingsÚreleasedr   ru  Ú	containerÚviewÚtokenr]  Úflatr  Ú
by_storager  ry  Úversions                        r   Ú_execute_lifetimesrˆ  Ñ  sç  € àð ,Øˆw˜Ð' Ð'Ð'¨Ð+Ð+ØÐÐÐÐÐÝ˜4 Ñ(Ô(€JØ€HØ€Hð!*Øð 		ð 		ˆEØ˜E”]ˆFØ"Ÿš¥r¨&¡z¤zÑ2Ô2ˆIØÐ ØØ#×1Ò1°&Ñ9Ô9‰KˆD�%ØÐ Ø—’ ¨	°6½7¼;ÀtÑ;LÔ;LÈeÐUYÔUbÐ cÑdÔdÐdØ#�	˜!‘Ø�Øˆg�tÐ&˜vÐ&Ð&ˆå˜c‘]”]‰
ˆˆdØUÐUÈHÐUÑUÔUˆ
Ý% d™OœOð 	kñ 	k‰LˆE�5Ý˜%¥¤Ñ.Ô.ð k¸j¿nºnÍXÐV[É_Ì_Ñ>]Ô>]Ð4]°FÐ3jÝ ¨Ñ.Ô.ð k°6´<À5Ä;Ò3NÐ3NØ"(�D˜‘K�KåÔ-¨eÑ4Ô4ð kð kÝ&+¤k°!¸5¼;ÈuÌ|Ð&\Ñ&\Ô&\×&aÒ&aØ"×2Ò2Ñ4Ô4°e×6JÒ6JÑ6LÔ6LÈeÌkÐ[`×[gÒ[gÑ[iÔ[iñ'kô 'k˜˜U™ðkð kð kñ kô kð kð kð kð kð kð køøøð kð kð kð kùõ Ô# D¨$Ñ/Ô/ˆà=Eð 	*ð 	*Ñ9ˆE�9˜f c¨5°'Ø×%Ò% eÑ,Ô,ð 'Ø—’ Ñ&Ô&Ð&Ø�3‘5”5ˆDØÐØ”= GÒ+Ð+Ý”NÔ(×:Ò:¸6ÑBÔBÐBÝ�y‘>”> QÒ&Ð&¨9°Q¬<¸4Ð+?Ð+?Ø#)�I˜a‘Løð	*ø¸Xð 	*ð 	*Ñ9ˆE�9˜f c¨5°'Ø×%Ò% eÑ,Ô,ð 'Ø—’ Ñ&Ô&Ð&Ø�3‘5”5ˆDØÐØ”= GÒ+Ð+Ý”NÔ(×:Ò:¸6ÑBÔBÐBÝ�y‘>”> QÒ&Ð&¨9°Q¬<¸4Ð+?Ð+?Ø#)�I˜a‘Løð	*øøøð •�h‘”ÐÐs2   ¨D7J ÅA6G!ÇJ Ç!G%	Ç%J Ç(G%	Ç)J ÊBL,c                   ó‚   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zdd„Zd„ Zdd„Zd„ Zdd„Zdd„Zd„ ZdS )ÚBlockGraphsz-CUDA graphs of the tower blocks of one model.Nc                 ót  — |||||f\  | _         | _        | _        | _        | _        || _        d | _        d| _        t          ¦   «         | _	        i | _
        i | _        t          ¦   «         | _        i | _        t          ¦   «         | _        |                      ¦   «          t                                | ¦  «         d S rÝ   )rs   Úweights_keyÚweight_tensorsÚextra_inputsrC   ÚforgetrB   Úreportedrm  ÚcheckedÚblasrc   rq   rk   rr   ro   ré   r¤   )r   rs   rŒ  r�  rŽ  rC   r�  s          r   r’   zBlockGraphs.__init__  s°   € ð [_Ð`kÐm{ð  ~Jð  LQð  [QÑWˆŒ	�4Ô# TÔ%8¸$Ô:KÈTÌZØˆŒØˆŒØˆŒÝ‘u”uˆŒØˆŒ	ØˆŒ
Ý™œˆŒØˆŒÝ™%œ%ˆŒØ�
Š
‰ŒˆÝ×Ò˜ÑÔÐÐÐr   c                 ó.  — i i i d f\  | _         | _        | _        | _        i i c| _        | _        t          ¦   «         | _        i | _        i i c| _	        | _
        i | _        t                               ¦   «          | j        �|                      ¦   «          d S d S r"   )ÚentriesÚkeysrC  ÚpoolÚstatic_by_bufferÚstatic_by_baserm  ÚborrowedÚ_tensor_refsÚspansÚ	span_runsÚmemor¾   ro   r�  )r   s    r   ro   zBlockGraphs.clear  s�   € à:<¸bÀ"ÀdÐ:JÑ7ˆŒ�d”i ¤¨d¬iØ57¸Ð2ˆÔ˜tÔ2Ý™œˆŒØˆÔØ%'¨Ð"ˆŒ
�D”NØˆŒ	Ý×ÒÑ Ô Ð ØŒ;Ð"Ø�KŠK‰MŒMˆMˆMˆMð #Ð"r   c                 óö  ‡‡	‡
— t          |d|¦  «        Š
| j                             t          ‰¦  «        ‰
f¦  «        |k    rÑ|| j        t          ‰¦  «        ‰
f<   ˆˆ
fd„|D ¦   «         Š	ˆˆ	ˆ
fd„| j        D ¦   «         D ]}t          | j                             t          | j                             |¦  «        ¦  «        i ¦  «        ¦  «        D ]/}|                      | j	                             |¦  «        ¦  «         Œ0Œ€|  
                    ¦   «          t          ‰¦  «        ||‰
f}| j                             |¦  «        }|€7t          ‰|||t          ‰|         dt          ¦  «        ¦  «        x}| j        |<   |S )NÚ__func__c                 óT   •— h | ]$\  }}}|¯||z
  d k    ¯t          ‰¦  «        ||‰f’Œ%S )r   r`   )r$   r\   r]   rŒ   rƒ   rã   s       €€r   rd   z#BlockGraphs.span.<locals>.<setcomp>#  sE   ø€ ÐeÐeÐe±N°A°q¸(ÈhÐeÐ[\Ð_`Ñ[`ÐcdÒ[dÐ[d�˜6™
œ
 A q¨$Ð/Ð[dÐ[dÐ[dr   c                 ób   •— g | ]+}|d          t          ‰¦  «        k    ¯|d         ‰u ¯%|‰v¯)|‘Œ,S )r   r1  r`   )r$   rÂ   rƒ   r‰   rã   s     €€€r   rò   z$BlockGraphs.span.<locals>.<listcomp>$  sG   ø€ ÐtÐtÐt °S¸´V½rÀ&¹z¼zÒ5IÐ5IÈcÐRSÌfÐX\ÈnÈnÐadÐlsÐasÐas˜ÐasÐasÐasr   r—   )r   rœ  r;   ra   r›  r•   r•  r{   Ú_forgetr”  Ú_pruner�   ÚMAX_KEYS)r   rƒ   r–   r‹   r„   rˆ   rÂ   Úentryr‚   r‰   rã   s    `       @@r   r‚   zBlockGraphs.span  sr  øøø€ å�t˜Z¨Ñ.Ô.ˆØŒ>×Ò�r &™zœz¨4Ð0Ñ1Ô1°TÒ9Ð9Ø15ˆDŒN�B˜v™JœJ¨Ð-Ñ.ØeÐeÐeÐeÐeÀdÐeÑeÔeˆGØtÐtÐtÐtÐtÐt t¤zÐtÑtÔtð :ð :�Ý! $¤)§-¢-µ°4´:·>²>À#Ñ3FÔ3FÑ0GÔ0GÈÑ"LÔ"LÑMÔMð :ð :�EØ—L’L ¤×!1Ò!1°%Ñ!8Ô!8Ñ9Ô9Ð9Ð9ð:à�KŠK‰MŒMˆMÝ�&‰zŒz˜5 $¨Ð-ˆØŒz�~Š~˜cÑ"Ô"ˆØˆ<Ý%*¨6°5¸$ÀÅgÈfÐUZÌmÐ]mÕowÑFxÔFxÑ%yÔ%yÐyˆD�4”:˜c‘?Øˆr   c                 ó   ‡ ‡‡— ˆˆˆ fd„}|S )Nc                  óZ   •— t           dk    r ‰| i |¤ŽS ‰                     ‰‰| |¦  «        S ©Nr   )r*   rI   )r   r   rF   r<   r   s     €€€r   Úgraphed_forwardz)BlockGraphs.wrap.<locals>.graphed_forward/  s9   ø€ Ý˜Š{ˆ{Ø�w Ð/¨Ð/Ð/Ð/Ø—9’9˜V W¨d°FÑ;Ô;Ð;r   r#   )r   r<   rF   r©  s   ``` r   ÚwrapzBlockGraphs.wrap.  s0   øøø€ ð	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð Ðr   c                 ój  ‡ ‡)‡*‡+‡,‡-— t           s"t          €‰ j        €‰                      ¦   «         s ||i |¤ŽS t	          |d|¦  «        }|s@‰ j                             t          |¦  «        |rt          |d         ¦  «        nd f¦  «        nd }|��|d         |u �rüt          |d         ¦  «        t          |¦  «        k    �rÕt          d„ t          ||d         ¦  «        D ¦   «         ¦  «        �r§t          d„ t          ||d         ¦  «        D ¦   «         ¦  «        �ry‰                      |¦  «        t          d„ t          D ¦   «         ¦  «        }}|d         Š*|d         |d	         d         u �r'|dd …         |d	         dd …         k    �r
||d
         k    rþ‰                      |¦  «        sé|d         \  }	}
}}}|	D ]\  }}|                     |¦  «         Œ‰*j                             ¦   «          t$          j                             ¦   «         }||vr/|                     |¦  «         |
D ]}|                     |¦  «         Œ|D ]O\  }}t/          ||¦  «        r%t$          j        j                             |¦  «         Œ:|                     |¦  «         ŒP|S t5          ||f¦  «        \  Š+}t7          ‰+‰ j        ¦  «        Š,‰                      |¦  «        }t7          d„ |D ¦   «         ¦  «        }d„ t;          ‰+¦  «        D ¦   «         }ˆ,fd„|D ¦   «         t=          |¦  «        z   }	 ‰                      |ˆ+fd„|D ¦   «         d gt          |¦  «        z  z   d¬¦  «        \  }}n¢# t@          $ r•}‰+||j!                          }tE          ||d¦  «        ptE          ||d¦  «        }tG          d‰ j$        › dtK          |¦  «        j&        › d|› dt          |j'        ¦  «        › d| (                    ¦   «         › d�¦  «        d ‚d }~ww xY wt          |¦  «        |‰,|‰                      |¦  «        t          d„ t          D ¦   «         ¦  «        t          |¦  «        |f}‰ j)         *                    t          |¦  «        i ¦  «        }‰ j+                             |d ¦  «        Š*d }‰*�j‰*j,        rc‰  -                    ||‰+||¦  «        }t]          ‰*j,        ¦  «         /                    |¦  «        s#g |¢d‘R }‰ j+                             |¦  «        Š*d}‰*d uo4ta          ˆ fd„‰*j1        t          |¦  «        d …         D ¦   «         ¦  «        }|r‰  2                    ||¦  «         d Š*‰*�€E|€‰  -                    ||‰+||¦  «        }t          |¦  «        t	          |dtf          ¦  «        k    r0‰  2                    ti          tk          |¦  «        ¦  «        |¦  «         t;          |¦  «        D ]_\  }}t/          ||         ‰+|         ¦  «        s>tm          ‰+|         ||         ¦  «        r"‰  7                    ||         ‰+|         ¦  «         Œ`t           dz  a 	 ddl8m9Š) ‰ j:        €#t$          j         ;                    ¦   «         ‰ _:        ‰) <                    ‰ j:        ¦  «        5  ‰) =                    ‰ j:        ¦  «        } 	 t          |¦  «        ||j>                             d d!¦  «        rd n‰,f}!|!‰ j?        v rO‰ j?        |!         r+t�          t$          j                             ¦   «         ¦  «         tƒ          ||||‰+¦  «        \  }"}#nMt…          ¦   «         }$|$5  tƒ          ||||‰+¦  «        \  }"}#d d d ¦  «         n# 1 swxY w Y   |$jC        ‰ j?        |!<   |  D                    ¦   «          |#r”t5          |"¦  «        \  }%}&t;          |%¦  «        D ]Z\  }Š-t‹          ‰-t$          jF        ¦  «        r;‰-jG        r4ta          ˆ)ˆ+ˆ-fd"„|#D ¦   «         ¦  «        r‰- H                    ¦   «         |%|<   Œ[t“          jJ        |%|&¦  «        }"d Š-~%|#| c‰ _K        ‰ _L        ‰  M                    ||‰+|‰,|||"||| ‰ j?        |!         ¦  «        Š*‰*€3d ‰ _L        ‰  M                    ||‰+|‰,|||"||| ‰ j?        |!         ¦  «        Š*‰*‰ j+        |<   ‰ j>         N                    d#d ¦  «         ‰ j>         N                    d$d ¦  «         |  O                    ¦   «          nO# ‰ j>         N                    d#d ¦  «         ‰ j>         N                    d$d ¦  «         |  O                    ¦   «          w xY w	 d d d ¦  «         n# 1 swxY w Y   t           dz  a ‰  P                    ¦   «          n## t           dz  a ‰  P                    ¦   «          w xY wd ||<   |"S | N                    |¦  «        ||<   ‰ jQ        �rz|�sw|�st‰*j,        �sl‰*jR        �sdt          ‰*j1        ¦  «        t          ‰*jS        ¦  «        k    �r9t          ‰+¦  «        t          |¦  «        k    �rt          ˆ fd%„t          ‰+|¦  «        D ¦   «         ¦  «        rï‰  T                    ‰*‰+|¦  «        }ˆ+fd&„t          ‰*jU        ‰*jS        ¦  «        D ¦   «         }	ˆ fd'„t]          ‰*j1        ¦  «        D ¦   «         }
ˆ*ˆ+fd(„‰*jV        D ¦   «         }||t          d)„ |D ¦   «         ¦  «        |d
         |d         ‰*|	|
||t$          j                             ¦   «         gff‰ j        t          |¦  «        |rt          |d         ¦  «        nd f<   |S ‰  T                    ‰*‰+|¦  «        }‰*jR        rXt¯          ||¦  «        }'‰*jR        D ]@}|'                     t          ‰+|         ¦  «        ¦  «        }(|(�|( X                    ¦   «          ŒA|S )*NrŸ  r   r   c              3   ó$   K  — | ]\  }}||u V — Œd S r"   r#   r[   s      r   r&   z#BlockGraphs.call.<locals>.<genexpr>?  s0   è è € ÐXÐXÑdhÐdeÐghÐYZÐ^_ÐY_ÐXÐXÐXÐXÐXÐXr   c              3   óT   K  — | ]#\  }}|d u p|                      ¦   «         |k    V — Œ$d S r"   )r+  )r$   r\   Úps      r   r&   z#BlockGraphs.call.<locals>.<genexpr>@  s<   è è € ÐVÐV¹4¸1¸a˜˜T˜	Ð6 Q§Z¢Z¡\¤\°QÒ%6ÐVÐVÐVÐVÐVÐVr   r0  c              3   ó*   K  — | ]} |¦   «         V — Œd S r"   r#   ©r$   r¥   s     r   r&   z#BlockGraphs.call.<locals>.<genexpr>A  s)   è è € Ð@kÐ@kÐPXÀÀÁÄÐ@kÐ@kÐ@kÐ@kÐ@kÐ@kr   é   r1  é   é   c                 ó$   — g | ]\  }}||         ‘ŒS r#   r#   ©r$   Úholderr   s      r   rò   z$BlockGraphs.call.<locals>.<listcomp>W  s    € Ð%PÐ%PÐ%P¹¸À f¨U¤mÐ%PÐ%PÐ%Pr   c                 óL   — g | ]!\  }}t          |t          j        ¦  «        ¯|‘Œ"S r#   ©r  rU   rV   ©r$   r   r  s      r   rò   z$BlockGraphs.call.<locals>.<listcomp>X  s/   € ÐbÐbÐb™{˜u dÅ:ÈdÕTYÔT`ÑCaÔCaÐb�UÐbÐbÐbr   c                 ó    •— g | ]
}‰|         ‘ŒS r#   r#   ©r$   r   r'  s     €r   rò   z$BlockGraphs.call.<locals>.<listcomp>Y  s   ø€ ÐDÐDÐD°˜I eÔ,ÐDÐDÐDr   c                 ó    •— g | ]
}‰|         ‘ŒS r#   r#   )r$   r   r  s     €r   rò   z$BlockGraphs.call.<locals>.<listcomp>[  s   ø€ ÐBhÐBhÐBhÐUZÀ6È%Ä=ÐBhÐBhÐBhr   T)Ú	argumentsr   r   zCUDA graph block call of 'ú' (z): argument z. is a view whose elements share memory (shape z	, stride zµ, e.g. from expand), which a graph's static buffer cannot hold. Pass the unexpanded tensor and expand it inside the block's forward (no cost), or make it contiguous before the call.c              3   ó*   K  — | ]} |¦   «         V — Œd S r"   r#   r°  s     r   r&   z#BlockGraphs.call.<locals>.<genexpr>b  sM   è è € ð  ]Hð  ]HÐltÐ]eÐ]eÑ]gÔ]gð  ]Hð  ]Hð  ]Hð  ]Hð  ]Hð  ]Hr   zretained-inputsr#   c              3   ó`   •K  — | ](}|‰j         v ot          ‰j        |         ¦  «         V — Œ)d S r"   ©r™  r8  rC  ©r$   Úkr   s     €r   r&   z#BlockGraphs.call.<locals>.<genexpr>l  s]   øè è € ð  4Sð  4SÐmn°A¸¼Ð4FÐ4hÍyÐY]ÔYdÐefÔYgÑOhÔOhÐKhð  4Sð  4Sð  4Sð  4Sð  4Sð  4Sr   r—   rL   Ú_mm_graph_check_onceFc              3   óP   •K  — | ] }‰                      ‰‰|         ¦  «        V — Œ!d S r"   )Úgraph_storage_overlaps)r$   ÚpositionrM   r  r  s     €€€r   r&   z#BlockGraphs.call.<locals>.<genexpr>‘  s[   øè è € ð ]|ð ]|Øfn¨	×(HÒ(HÈÐPVÐW_ÔP`Ñ(aÔ(að]|ð ]|ð ]|ð ]|ð ]|ð ]|r   Ú_capture_lifetimesÚ_capture_output_planc              3   óˆ   •K  — | ]<\  }}||u o0t          |t          j        ¦  «         pt          |¦  «        ‰j        v V — Œ=d S r"   )r  rU   rV   ra   rq   )r$   r  Úargr   s      €r   r&   z#BlockGraphs.call.<locals>.<genexpr>©  s�   øè è € ð  5jð  5jñ  KTð  KOð  QT°T¸S°[ð  6FÍ*ÐUXÕZ_ÔZfÑJgÔJgÐFgð  GEÕkmÐnqÑkrÔkrÐvzô  wEð  lEð  5jð  5jð  5jð  5jð  5jð  5jr   c                 óV   •— g | ]%\  }}t          |‰|         ¦  «        °|‰|         f‘Œ&S r#   )r.  )r$   r   rC  r  s      €r   rò   z$BlockGraphs.call.<locals>.<listcomp>­  sk   ø€ ð  Rð  Rð  R±-°%¸Õmyð  {Að  CIð  JOô  CPñ  nQô  nQð  R�v˜v eœ}Ð-ð  Rð  Rð  Rr   c                 ó<   •— g | ]}|‰j         v ¯‰j        |         ‘ŒS r#   )r™  rC  rÂ  s     €r   rò   z$BlockGraphs.call.<locals>.<listcomp>®  s+   ø€ Ð\Ð\Ð\¨1ÈÈdÌmÐI[ÐI[˜œ AœÐI[ÐI[ÐI[r   c                 óP   •— g | ]"}‰‰j         |                  ‰j        |         f‘Œ#S r#   )ra  rC  )r$   r   r¥  r  s     €€r   rò   z$BlockGraphs.call.<locals>.<listcomp>¯  s2   ø€ ÐhÐhÐhÐQV˜˜uœ¨uÔ5Ô6¸¼ÀUÔ8KÐLÐhÐhÐhr   c              3   óv   K  — | ]4}t          |t          j        ¦  «        r|                     ¦   «         nd V — Œ5d S r"   ©r  rU   rV   r+  )r$   rË  s     r   r&   z#BlockGraphs.call.<locals>.<genexpr>°  s‡   è è € ð  Zeð  Zeð  Y\ÕlvÐwzõ  }Bô  }Iñ  mJô  mJð  [TÐZ]×ZfÒZfÑZhÔZhÐZhð  PTð  Zeð  Zeð  Zeð  Zeð  Zeð  Zer   )Yr6   r-   rB   rC   r   r�  r;   ra   rl   rm   rn   rŒ  rj   r£   rŽ  Úcopy_r`  ÚreplayrU   r¹   râ   r¤   Úrecord_streamr.  r}  r~  r  r(  rr   r€   r•   Ú_buffersr  r   r  Ú
ValueErrorrs   rT   r   r!  r"  r•  Ú
setdefaultr”  rh  Ú_consumablerm  ÚissubsetÚanyrc  Ú_evictr¤  r+   ÚiterrI  Ú_moverO   rM   r–  Úgraph_pool_handleÚgraph_warmupÚ
OutputPlanr˜   r’  rÄ   rˆ  rÛ   rÞ   Úpauser  rV   rW   r¬   rý   r{  rÈ  rÉ  Ú_capturer{   Úcloser£  rq   ri  rC  Ú_replayra  rd  rq  ro   ).r   r<   rF   r   r   rG   r�  ÚweightsÚ	providersÚcopiesr™  rd  ÚresultÚstreamsrC  r  rº   r  ÚextrasÚextra_signaturera  Úinput_signaturesrc  ÚbuffersÚoverlaprs   rÂ   r•  rh  Úretained_outputÚordinalr   ÚplanÚblas_keyr]  Úconsumedr’  r…  rf  Úhandoffsr‚  rM   r¥  r  r'  r  s.   `                                        @@@@@r   rI   zBlockGraphs.call5  s·  øøøøøø€ õ ð 	,�Ð-°´Ð1JÐRV×R\ÒR\ÑR^ÔR^Ð1JØ�7˜DÐ+ FÐ+Ð+Ð+Ý˜ *¨gÑ6Ô6ˆð RXÐaˆtŒy�}Š}�b ™jœj¸Ð*G­"¨T°!¬W©+¬+¨+À4ÐHÑIÔIÐIÐ]aˆØÑ  a¤¨FÐ!2Ñ!2µs¸4À¼7±|´|ÅsÈ4ÁyÄyÒ7PÑ7PÕUXÐXÐXÕloÐptÐvzÐ{|Ôv}Ñl~Ôl~ÐXÑXÔXÑUÔUÑ7PÝÐVÐVÅ3ÀtÈTÐRSÌWÑCUÔCUÐVÑVÔVÑVÔVñ 8Qà!%×!1Ò!1°&Ñ!9Ô!9½5Ð@kÐ@kÕ\jÐ@kÑ@kÔ@kÑ;kÔ;k�YˆGØ˜”GˆEà�qŒz˜T !œW QœZÐ'Ñ'¨G°A°B°B¬K¸4À¼7À1À2À2¼;Ò,FÑ,FÈ9ÐX\Ð]^ÔX_ÒK_ÐK_Ðhl×hyÒhyð  {Añ  iBô  iBÐK_Ø=AÀ!¼WÑ:�˜ '¨6°7Ø$*ð 'ð '‘L�F˜DØ—L’L Ñ&Ô&Ð&Ð&Ø”×"Ò"Ñ$Ô$Ð$Ýœ×2Ò2Ñ4Ô4�Ø Ð(Ð(Ø—N’N 6Ñ*Ô*Ð*Ø"*ð 5ð 5˜Ø×,Ò,¨VÑ4Ô4Ð4Ð4Ø$+ð +ð +‘L�D˜&Ý# D¨&Ñ1Ô1ð +ÝœÔ,×>Ò>¸tÑDÔDÐDÐDàŸ
š
 6Ñ*Ô*Ð*Ð*Ø�Ý  v Ñ/Ô/‰ˆ�Ý˜v t¤Ñ7Ô7ˆ	Ø×"Ò" 6Ñ*Ô*ˆÝ$Ð%PÐ%PÈÐ%PÑ%PÔ%PÑQÔQˆØbÐb­i¸Ñ.?Ô.?ÐbÑbÔbˆ	ØDÐDÐDÐD¸)ÐDÑDÔDÅtÈOÑG\ÔG\Ñ\Ðð	XØ"&§-¢-Ð0@ÐBhÐBhÐBhÐBhÐ^gÐBhÑBhÔBhÐlpÐkqÕtwÐx~ÑtÔtÑkÑBð  LP -ñ  #Qô  #QÑˆJ˜˜øÝ#ð 	Xð 	Xð 	XØ˜) G¤MÔ2Ô3ˆDÝ! $¨¨fÑ5Ô5Ð_½ÈÐPTÐV^Ñ9_Ô9_ˆDÝð M¸$¼)ð Mð MÍÈVÉÌÔH]ð Mð MÐkoð Mð MÝ',¨T¬ZÑ'8Ô'8ðMð MØCGÇ;Â;Á=Ä=ðMð Mð Mñ Nô Nð TXðXøøøøð	Xøøøõ �&‰zŒz˜4 ¨O¸T×=MÒ=MÈfÑ=UÔ=UÕW\ð  ]Hð  ]Hõ  yGð  ]Hñ  ]Hô  ]Hñ  XHô  XHõ  JOð  PZñ  J[ô  J[ð  ]cð  dˆØŒy×#Ò#¥B v¡J¤J°Ñ3Ô3ˆØ”× Ò   dÑ+Ô+ˆØˆ	ØÐ ¤ÐØ×(Ò(¨¨v°v¸yÈ'ÑRÔRˆIÝ�u”Ñ'Ô'×0Ò0°Ñ;Ô;ð Ø/˜Ð/Ð.Ð/Ð/�Øœ×(Ò(¨Ñ-Ô-�Ø�	Ø tÐ+ð  Sµð  4Sð  4Sð  4Sð  4SÐrwô  sCõ  DGð  HOñ  DPô  DPð  DQð  DQô  sRð  4Sñ  4Sô  4Sñ  1Sô  1SˆØð 	Ø�KŠK˜˜ZÑ(Ô(Ð(ØˆEØ‰=ØÐ Ø ×,Ò,¨T°6¸6À9ÈgÑVÔV�	Ý�4‰yŒy�G FÐ,<½hÑGÔGÒGÐGØ—’�D¥ d¡¤Ñ,Ô,¨jÑ9Ô9Ð9Ý"+¨IÑ"6Ô"6ð Cð C‘�˜Ý# G¨GÔ$4°f¸U´mÑDÔDð CÍÐRXÐY^ÔR_ÐahÐipÔaqÑIrÔIrð CØ—J’J˜z¨'Ô2°F¸5´MÑBÔBÐBøÝ˜!‰OˆJð+Ø'Ð'Ð'Ð'Ð'Ð'Ø”9Ð$Ý %¤
× <Ò <Ñ >Ô >�D”IØ×+Ò+¨D¬IÑ6Ô6ð $%ð $%Ø$×/Ò/°´	Ñ:Ô:�Dð"%Ý$& v¡J¤J°ÀÄ×@SÒ@SÐTjÐlqÑ@rÔ@rð  9B¸¸ð  yBð  $C˜Ø# t¤yÐ0Ð0Ø#œy¨Ô2ð RÝ 4µU´Z×5NÒ5NÑ5PÔ5PÑ QÔ QÐ QÝ,>¸wÈÈfÐV_ÐagÑ,hÔ,h™M˜C  å#+¡:¤:˜DØ!%ð mð mÝ0BÀ7ÈDÐRXÐZcÐekÑ0lÔ0l¡  Xðmð mð mñ mô mð mð mð mð mð mð møøøð mð mð mð mà26´)˜DœI hÑ/ØŸ
š
™œ˜Ø#ð %õ .6°c©]¬]™N˜D (Ý09¸$±´ð @ð @¡  uÝ#-¨eµU´\Ñ#BÔ#Bð !@ÀuÄ}ð !@ÕY\ð ]|ð ]|ð ]|ð ]|ð ]|ð ]|Ørzð]|ñ ]|ô ]|ñ Z|ô Z|ð !@à27·+²+±-´- D¨¡KøÝ"(Ô"7¸¸hÑ"GÔ"G˜CØ$(˜EØ $àMUÐW[ÐJ˜Ô/°Ô1JØ $§¢¨f°g¸vÀtÈYÐX^Ð`oÐqtð  wAð  CJð  P_ð  L_ð  aeô  ajð  ksô  atñ  !uô  !u˜Ø ˜=Ø8<˜DÔ5Ø$(§M¢M°&¸'À6È4ÐQZÐ\bÐdsÐuxð  {Eð  GNð  Tcð  Pcð  eiô  enð  owô  exñ  %yô  %y˜EØ,1˜œ SÑ)àœ×)Ò)Ð*>ÀÑEÔEÐEØœ×)Ò)Ð*@À$ÑGÔGÐGØŸ
š
™œ˜˜øð œ×)Ò)Ð*>ÀÑEÔEÐEØœ×)Ò)Ð*@À$ÑGÔGÐGØŸ
š
™œ˜˜øøø˜ðI$%ð $%ð $%ñ $%ô $%ð $%ð $%ð $%ð $%ð $%ð $%øøøð $%ð $%ð $%ð $%õL ˜a‘�
Ø—’‘”��øõ ˜a‘�
Ø—’‘”��øøøØˆD�‰IØˆJØ—H’H˜S‘M”MˆˆS‰	ØŒNñ 
	 6ñ 
	°&ñ 
	ÀÄñ 
	ÐY^ÔYfñ 
	ÕknÐotÔoñ  lAô  lAõ  EHð  INô  IUñ  EVô  EVò  lVñ  lVÝ˜‘K”K¥3 t¡9¤9Ò,Ñ,µð  5jð  5jð  5jð  5jõ  X[ð  \bð  dhñ  Xiô  Xið  5jñ  5jô  5jñ  2jô  2jÐ,Ø—\’\ %¨°Ñ8Ô8ˆFð Rð  Rð  Rð  RÅ3ÀuÄÐX]ÔXdÑCeÔCeð  Rñ  Rô  RˆFØ\Ð\Ð\Ð\µ°EÔ4DÑ0EÔ0EÐ\Ñ\Ô\ˆHØhÐhÐhÐhÐhÐZ_ÔZgÐhÑhÔhˆGØFLÈdÕTYð  Zeð  Zeð  `dð  Zeñ  Zeô  Zeñ  Ueô  Ueð  gjð  klô  gmð  orð  stô  ouð  w|Ø&,¨h¸ÀÍ%Ì*×JcÒJcÑJeÔJeÐIfÐ%gðFiˆDŒI•r˜&‘z”z°$Ð#@¥2 d¨1¤g¡;¤; ;¸DÐAÑBàˆMØ—’˜e V¨VÑ4Ô4ˆØŒ=ð 	&Ý   vÑ.Ô.ˆHØœð &ð &�Ø$ŸLšL­¨F°5¬MÑ):Ô):Ñ;Ô;�	ØÐ(Ø—O’OÑ%Ô%Ð%øØˆsŠ   Ì&;M" Í"
PÍ,BO<Ï<PÙ
A
e9 ÚeÚ0Bc3Ý]*Ýc3Ý*].	Ý.c3Ý1].	Ý2D6c3â(Aeã3Ad?ä?eåe9 åeåe9 åeåe9 å9 fc                 ó†  — | j         |         }|                     |¦  «         |                     t          j                             ¦   «         ¦  «         |                     |                     ¦   «         |                     ¦   «         |j	        | 
                    ¦   «         ¦  «         | j                             |¦  «         d S r"   )rC  rÑ  rÓ  rU   r¹   râ   rL  r*  r<  r!  r"  r™  r/   )r   rÂ   r  rC  s       r   rÜ  zBlockGraphs._move¼  s�   € à”˜SÔ!ˆØ�Š�TÑÔÐØ×Ò�5œ:×4Ò4Ñ6Ô6Ñ7Ô7Ð7Ø�	Š	�&×(Ò(Ñ*Ô*¨F×,AÒ,AÑ,CÔ,CÀVÄ\ÐSY×S`ÒS`ÑSbÔSbÑcÔcÐcØŒ×Ò˜#ÑÔÐÐÐr   c                 óò   — | j                              t          |f¦  «        d         dfd¦  «        D ]D}|| j        vst	          | j        |         ¦  «        rt          || j        |         ¦  «        r|c S ŒEd S )Nr   r#   )r˜  r;   r(  r™  r8  rC  rI  )r   r  rÂ   s      r   Ú_free_staticzBlockGraphs._free_staticÄ  s‚   € àÔ&×*Ò*­J¸°wÑ,?Ô,?ÀÔ,BÀAÐ+FÈÑKÔKð 	ð 	ˆCØ˜4œ=Ð(Ð(­I°d´kÀ#Ô6FÑ,GÔ,GÐ(ÍXÐVZÐ\`Ô\gÐhkÔ\lÑMmÔMmÐ(Ø�
�
�
øØˆtr   c           	      óÊ  — ddl m} | j        €#t          j                             ¦   «         | _        |                     | j        ¦  «        }|                     | j        ¦  «        5   ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   i }t          |¦  «        d         D ]q}t          |t          j
        ¦  «        rU|j        rN|                     || j        ¦  «        r3||                     t          |¦  «        i ¦  «        t          |¦  «        <   Œr|                     ¦   «         D �]…}	t#          |	                     ¦   «         ¦  «        }	|	d         }t%          |	¦  «        dk    r|                      |¦  «        nd }
|
�@|
| j        v r |                     | j        |
         ¦  «         |                      |
|¦  «         Œ˜|                     ¦   «         }t          j                             |j        ¦  «        t%          |	¦  «        dz   k    rt9          d| j        › d�¦  «        ‚t          j        |                     ¦   «         |j         ¬¦  «        }| !                    |¦  «         |	D ]C}| "                    || #                    ¦   «         |j$        | %                    ¦   «         ¦  «         ŒD~�Œ‡|                     | j        ¦  «        |z
  }|rt9          d| j        › d|› d�¦  «        ‚|S )	Nr   rL   r   zA pooled stage of 'z’' returned a tensor whose graph-pool storage is also held elsewhere (a view kept by the stage, a cache): the next graph replay would overwrite it.)r¸   z' kept z³ allocation(s) in the graph pool beyond its outputs (a cache filled or a tensor stored elsewhere), which the next graph replay would overwrite: fill such caches outside the stage.)&rO   rM   r–  rU   r¹   rÝ  Ú	pool_liverÞ  r  r  rV   rW   Úin_poolrÖ  r,  ra   rp   r•   rl   rö  r™  Úprepare_reuserC  rÜ  r*  r2  r3  r4  r   rs   ÚUntypedStorager>  r¸   rÑ  rL  r<  r!  r"  )r   r   r   r   rM   Úliver]  rk   r  rt   rÂ   r7  Úcopyr®   Úlefts                  r   rQ   zBlockGraphs.pooledË  s9  € ØÐÐÐÐÐØŒ9ÐÝœ
×4Ò4Ñ6Ô6ˆDŒIØ×"Ò" 4¤9Ñ-Ô-ˆØ×#Ò# D¤IÑ.Ô.ð 	&ð 	&Ø�"�dÐ%˜fÐ%Ð%ˆCð	&ð 	&ð 	&ñ 	&ô 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&øøøð 	&ð 	&ð 	&ð 	&àˆÝ˜S‘M”M !Ô$ð 	Hð 	HˆDÝ˜$¥¤Ñ-Ô-ð H°$´,ð HÀ9×CTÒCTÐUYÐ[_Ô[dÑCeÔCeð HØCG�×"Ò"¥8¨D¡>¤>°2Ñ6Ô6µr¸$±x´xÑ@øØ—~’~Ñ'Ô'ð 	ñ 	ˆGÝ˜7Ÿ>š>Ñ+Ô+Ñ,Ô,ˆGØ˜1”:ˆDÝ-0°©\¬\¸QÒ->Ð->�$×#Ò# DÑ)Ô)Ð)ÀDˆCØˆØ˜$œ-Ð'Ð'Ø×+Ò+¨D¬K¸Ô,<Ñ=Ô=Ð=Ø—
’
˜3 Ñ%Ô%Ð%ØØ×*Ò*Ñ,Ô,ˆGÝŒx×*Ò*¨7¬>Ñ:Ô:½cÀ'¹l¼lÈQÑ>NÒNÐNÝ"ð $a¸¼ð $að $að $añ bô bð båÔ'¨¯ªÑ(8Ô(8ÀÄÐMÑMÔMˆDØ�JŠJ�wÑÔÐØ!ð Zð Z�Ø—’˜D &×"7Ò"7Ñ"9Ô"9¸6¼<ÈÏÊÉÌÑYÔYÐYÐYØ‘Ø×"Ò" 4¤9Ñ-Ô-°Ñ4ˆØð 	GÝð  F°T´Yð  Fð  FÀtð  Fð  Fð  Fñ Gô Gð Gàˆ
s   Á%	A:Á:A>ÂA>c                 ó’  ‡— ddl m} |j        dk    rdS t          ||¦  «        }g }t	          |¦  «        D �]\  }	}
||
         ||	         cŠ}t          ‰¦  «        |vsc‰j        r\‰                     ¦   «         ‰                     ¦   «         z  dk     s/t          ‰|¦  «        rt          ˆfd„|D ¦   «         ¦  «        dk    rŒŒ| j                             t          ‰¦  «        d¦  «        dz   t          ˆfd	„|D ¦   «         ¦  «        z   t          ‰|u ¦  «        z   }t          j        ‰¦  «        |k    s‰                     ¦   «         dk    r�Œ‰                     ¦   «         }‰                     ¦   «         dk    s‘|                     ¦   «         ‰                     ¦   «         ‰                     ¦   «         z  k    sRt(          j                             |j        ¦  «        d
t          ‰|u¦  «        z   k    st          j        |¦  «        dk    r�ŒÖ|                     ‰¦  «        s�Œí|                     |
¦  «         �Œt5          |¦  «        S )Nr   rL   rN   r#   r	   c              3   ó    •K  — | ]}|‰u V — Œ	d S r"   r#   ©r$   r  ru  s     €r   r&   z*BlockGraphs._consumable.<locals>.<genexpr>÷  s(   øè è € Ð;`Ð;`ÐPU¸EÀV¸OÐ;`Ð;`Ð;`Ð;`Ð;`Ð;`r   r   r²  c              3   ó    •K  — | ]}|‰u V — Œ	d S r"   r#   r  s     €r   r&   z*BlockGraphs._consumable.<locals>.<genexpr>û  s(   øè è € ÐEkÐEkÐZ_ÀeÈvÀoÐEkÐEkÐEkÐEkÐEkÐEkr   r0  r1  )rO   rM   rP   rq  r€   ra   rW   r?  r@  r.  Úsumrš  r;   Úintr5  r6  Ú
_use_countr*  r<  r>  rU   r2  r3  r4  Úlifetime_availabler¤   rj   )r   r   r   r  ra  rì  rM   ró  Úeligiblerï  r   ÚbufferÚexpectedr7  ru  s                 @r   r×  zBlockGraphs._consumableî  sn  ø€ ØÐÐÐÐÐØÔ˜uÒ$Ð$Ø�2Ý˜T 6Ñ*Ô*ˆØˆÝ'¨	Ñ2Ô2ð 	#ñ 	#‰NˆG�UØ# Eœ]¨G°GÔ,<ˆNˆF�FÝ�6‘
”
 (Ð*Ð*°&´.Ð*ÀFÇLÂLÁNÄNÐU[×UhÒUhÑUjÔUjÑDjÐm}ÒD}ÐD}Ý$ V¨VÑ4Ô4ð E~Ý8;Ð;`Ð;`Ð;`Ð;`ÐY_Ð;`Ñ;`Ô;`Ñ8`Ô8`ÐdeÒ8eÐ8eØð Ô(×,Ò,­R°©Z¬Z¸Ñ;Ô;¸aÑ?Å#ÐEkÐEkÐEkÐEkÐcjÐEkÑEkÔEkÑBkÔBkÑkÕnqÐrxð  }Cð  sCñ  oDô  oDñ  DˆHÝŒ˜vÑ&Ô&¨(Ò2Ð2°f×6GÒ6GÑ6IÔ6IÈQÒ6NÐ6NÙØ×,Ò,Ñ.Ô.ˆGØ×%Ò%Ñ'Ô'¨1Ò,Ð,°·²Ñ0@Ô0@ÀFÇLÂLÁNÄNÐU[×UhÒUhÑUjÔUjÑDjÒ0jÐ0jÝ”H×/Ò/°´Ñ?Ô?À1ÅsÈ6ÐY_ÐK_ÑG`ÔG`ÑC`Ò`Ð`ÕdgÔdsÐt{Ñd|Ôd|ð  ABò  eBð  eBÙØ×/Ò/°Ñ7Ô7ð ÙØ�OŠO˜EÑ"Ô"Ð"Ñ"Ý�X‰ŒÐr   c                 ó  — d„ t          |¦  «        D ¦   «         }g }t          |¦  «        d         D ]Ú}t          |t          j        ¦  «        r©|                     |                     ¦   «         d¦  «        \  }}|d uoI|j        |j        k    o9|j        |j        k    o)| 	                    ¦   «         | 	                    ¦   «         k    }| 
                    |rd|fnt          |f¦  «        d         ¦  «         ŒÅ| 
                    d ¦  «         ŒÛ|S )Nc                 óv   — i | ]6\  }}t          |t          j        ¦  «        ¯|                     ¦   «         ||f“Œ7S r#   rÐ  r¹  s      r   rv  z(BlockGraphs._outputs.<locals>.<dictcomp>	  s?   € Ð|Ð|Ð|¹¸ÀÕ]gÐhlÕnsÔnzÑ]{Ô]{Ð|�d—m’m‘o”o¨¨t }Ð|Ð|Ð|r   r   )NNÚargument)r€   r  r  rU   rV   r;   r+  r·   r!  r"  r¤   r(  )	r   r  r]  Ú
by_pointerrg  r  r   r  Úsames	            r   Ú_outputszBlockGraphs._outputs  s-  € à|Ð|Í	ÐRXÑHYÔHYÐ|Ñ|Ô|ˆ
ØˆÝ˜S‘M”M !Ô$ð 	%ð 	%ˆDÝ˜$¥¤Ñ-Ô-ð %Ø",§.¢.°·²±´À,Ñ"OÔ"O‘��xØ tÐ+ð  U°´
¸h¼nÒ0Lð  UÐQUÔQ[Ð_gÔ_mÒQmð  UÐrv×r}Òr}ÑrÔrð  DL÷  DSò  DSñ  DUô  DUò  sU�Ø—’°dÐV 
¨EÐ2Ð2Å
ÈDÈ7Ñ@SÔ@SÐTUÔ@VÑWÔWÐWÐWà—’˜tÑ$Ô$Ð$Ð$Øˆr   r#   c                 ó¶   — | j         |d                  |= | j                             |¦  «        }|                      |¦  «         |                      |¦  «         d S r¨  )r•  r”  r{   r¢  r£  )r   rÂ   Úkeepr¥  s       r   rÚ  zBlockGraphs._evict  sT   € ØŒI�c˜!”fÔ˜cÐ"Ø”× Ò  Ñ%Ô%ˆØ�Š�UÑÔÐØ�Š�DÑÔÐÐÐr   c                 óh   ‡— ˆfd„| j                              ¦   «         D ¦   «         D ]
}| j         |= Œd S )Nc                 ó.   •— g | ]\  }}|d          ‰v ¯|‘ŒS )r±  r#   )r$   Úmemo_keyr�  r”  s      €r   rò   z'BlockGraphs._forget.<locals>.<listcomp>  s-   ø€ Ð`Ð`Ð`¡n h°ÈTÐRSÌWÐX_ÐM_ÐM_˜ÐM_ÐM_ÐM_r   )r�  r  )r   r”  r  s    ` r   r¢  zBlockGraphs._forget  sI   ø€ à`Ð`Ð`Ð`¸¼	¿ºÑ8IÔ8IÐ`Ñ`Ô`ð 	$ð 	$ˆHØ”	˜(Ð#Ð#ð	$ð 	$r   c                 ó‚  ‡— t          |¦  «        d„ | j                             ¦   «         D ¦   «         z  Št          ˆfd„| j        D ¦   «         ¦  «        rnˆfd„| j                             ¦   «         D ¦   «         | _        i i c| _        | _        | j                             ¦   «         D ]\  }}|                      ||¦  «         Œ| j	         
                    ‰¦  «         i }| j                             ¦   «         D ]8}|                     t          |¦  «        d¦  «        dz   |t          |¦  «        <   Œ9| j                             ¦   «         D ]m}g |j        ¢|j        ¢|j        ¢R D ]R}t          |t           j        ¦  «        r6|                     t          |¦  «        d¦  «        dz   |t          |¦  «        <   ŒSŒn|| _        d S )Nc                 ó&   — h | ]}|j         D ]}|’ŒŒS r#   )rc  )r$   r¥  rÃ  s      r   rd   z%BlockGraphs._prune.<locals>.<setcomp>   s(   € Ð[Ð[Ð[ %È%ÔJZÐ[Ð[ÀQ˜AÐ[Ð[Ð[Ð[r   c              3   ó    •K  — | ]}|‰vV — Œ	d S r"   r#   )r$   rÃ  rÞ   s     €r   r&   z%BlockGraphs._prune.<locals>.<genexpr>!  s'   øè è € Ð2Ð2 ˆq˜ˆ}Ð2Ð2Ð2Ð2Ð2Ð2r   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r#   r#   )r$   rÃ  r  rÞ   s      €r   rv  z&BlockGraphs._prune.<locals>.<dictcomp>"  s%   ø€ ÐWÐWÐW©¨¨FÈQÐRVÈYÈY˜1˜fÈYÈYÈYr   r   r   )rm  r”  rp   rÙ  rC  r  r—  r˜  Ú_index_bufferr™  Úintersection_updater;   ra   rb  rg  r  rU   rV   rš  )r   r  rÂ   r  Úrefsr¥  rÞ   s         @r   r£  zBlockGraphs._prune  sÎ  ø€ Ý�4‰yŒyÐ[Ð[¨4¬<×+>Ò+>Ñ+@Ô+@Ð[Ñ[Ô[Ñ[ˆÝÐ2Ð2Ð2Ð2 d¤kÐ2Ñ2Ô2Ñ2Ô2ð 	0ØWÐWÐWÐW°d´k×6GÒ6GÑ6IÔ6IÐWÑWÔWˆDŒKØ9;¸RÐ6ˆDÔ! 4Ô#6Ø#œ{×0Ò0Ñ2Ô2ð 0ð 0‘��VØ×"Ò" 3¨Ñ/Ô/Ð/Ð/ØŒ×)Ò)¨$Ñ/Ô/Ð/ØˆØ”k×(Ò(Ñ*Ô*ð 	;ð 	;ˆFØ#Ÿxšx­¨6©
¬
°AÑ6Ô6¸Ñ:ˆD•�F‘”ÑÐØ”\×(Ò(Ñ*Ô*ð 	Cð 	CˆEØN˜EœLÐN¨5Ô+=ÐNÀÄÐNÐNð Cð C�Ý˜f¥e¤lÑ3Ô3ð CØ'+§x¢xµ°6±
´
¸AÑ'>Ô'>ÀÑ'B�D�˜F™œÑ$øðCð !ˆÔÐÐr   c                 ó  — | j                              |d         |                     ¦   «         fg ¦  «                             |¦  «         | j                             |d d…         g ¦  «                             |¦  «         d S )Nr   r0  )r—  rÖ  r+  r¤   r˜  )r   rÂ   r  s      r   r  zBlockGraphs._index_buffer0  sr   € ØÔ×(Ò(¨#¨a¬&°&·/²/Ñ2CÔ2CÐ)DÀbÑIÔI×PÒPÐQTÑUÔUÐUØÔ×&Ò& s¨2¨A¨2¤w°Ñ3Ô3×:Ò:¸3Ñ?Ô?Ð?Ð?Ð?r   Fc           	      óì  ‡ ‡‡— |€i n|g g c}Š}t          ||¦  «        D �]Ñ\  }Š||                     |d¦  «        f}||xx         dz  cc<   ‰€d nIt          ˆ ˆfd„‰ j                             |‰                     ¦   «         fd¦  «        D ¦   «         d ¦  «        }|�|}	nCˆfd„‰ j                             |d¦  «        D ¦   «         }
t          ˆ fd„|
D ¦   «         d ¦  «        }	|	‰ j        v r(|€&ddlm	} | 
                    ‰ j        |	         ¦  «         |	�€¤g |¢dt          d„ |
D ¦   «         d	¬
¦  «        z   ‘R }	|\  }}}}|r6‰�4t          j        ‰¦  «        dk    rt          t!          ‰¦  «        ¦  «        ‚‰�Bt#          ‰‰ ¦  «        r2t%          ‰¦  «        ‰ j        |	<   ‰ j                             |	¦  «         nLt          j        d¦  «        5  t          j        ||||¬¦  «        ‰ j        |	<   d d d ¦  «         n# 1 swxY w Y   t-          j        ‰ ¦  «        ‰ j        |	         _        ‰ j        |	         t2          t5          ‰ j        |	         ¦  «        <   ‰                      |	‰ j        |	         ¦  «         t9          ‰ j        |	         ¦  «        }‰ j                             |d¦  «        dz   ‰ j        |<   ‰                     |	¦  «         |                     ‰ j        |	         ¦  «         �ŒÓ‰|fS )Nr   r   c              3   óR   •K  — | ]!}t          ‰j        |         ‰¦  «        ¯|V — Œ"d S r"   )r.  rC  )r$   rÃ  r   ru  s     €€r   r&   z'BlockGraphs._buffers.<locals>.<genexpr>>  sV   øè è € ð 9að 9a¸qÝ;GÈÌÐTUÌÐX^Ñ;_Ô;_ð9a¸ð 9að 9að 9að 9að 9að 9ar   r#   c                 ó   •— g | ]}|‰v¯|‘Œ	S r#   r#   )r$   rÃ  r•  s     €r   rò   z(BlockGraphs._buffers.<locals>.<listcomp>C  s   ø€ Ð\Ð\Ð\ AÈaÐW[ÈmÈm˜aÈmÈmÈmr   c              3   ób   •K  — | ])}|‰j         vst          ‰j        |         ¦  «        ¯%|V — Œ*d S r"   rÁ  rÂ  s     €r   r&   z'BlockGraphs._buffers.<locals>.<genexpr>D  sF   øè è € ÐiÐi !°Q¸d¼mÐ5KÐ5KÍyÐY]ÔYdÐefÔYgÑOhÔOhÐ5K˜AÐ5KÐ5KÐ5KÐ5KÐiÐir   rL   c              3   ó&   K  — | ]}|d          V — ŒdS )r0  Nr#   )r$   rÃ  s     r   r&   z'BlockGraphs._buffers.<locals>.<genexpr>I  s&   è è € Ð&@Ð&@° q¨¤tÐ&@Ð&@Ð&@Ð&@Ð&@Ð&@r   éÿÿÿÿ)ÚdefaultFr¶   )rn   rÖ  r+   r—  r;   r+  r˜  r™  rO   rM   rú  rC  ÚmaxrU   r=  r  rl   rD  rM  r/   r»   Úempty_stridedrx  ry  rB  r:  r,  r  ra   rš  r¤   )r   Ú
signaturesÚsourcesÚcountsr½  rì  r'  ÚbaseÚmatchingrÂ   Ú
candidatesrM   r!  r"  r·   r¸   Ú	buffer_idr•  ru  s   `                @@r   rÔ  zBlockGraphs._buffers4  s¶  øøø€ ð '- n  ¸&À"ÀbÐˆ��gÝ!$ Z°Ñ!9Ô!9ð  	-ñ  	-ÑˆI�vØ˜v×0Ò0°¸AÑ>Ô>Ð?ˆDØ�9ÐÐÔ Ñ"ÐÐÑð  &˜~�t�tµ4ð 9að 9að 9að 9að 9aÀDÔDY×D]ÒD]Ð_hÐjp×jyÒjyÑj{Ôj{Ð^|ð  Añ  EBô  EBð 9añ 9aô 9aØbfñ4hô 4hˆHàÐ#Ø��à\Ð\Ð\Ð\¨Ô)<×)@Ò)@ÀÀrÑ)JÔ)JÐ\Ñ\Ô\�
ÝÐiÐiÐiÐi zÐiÑiÔiÐkoÑpÔp�Ø�d”mÐ#Ð#¨Ð(8Ø'Ð'Ð'Ð'Ð'Ð'Ø×'Ò'¨¬°CÔ(8Ñ9Ô9Ð9Ø‰{ØN˜ÐN˜a¥#Ð&@Ð&@°ZÐ&@Ñ&@Ô&@È"Ð"MÑ"MÔ"MÑMÐNÐN�Ø/8Ñ,��v˜u fØð : Ð!3½Ô8YÐZ`Ñ8aÔ8aÐefÒ8fÐ8fÝ.­s°4©y¬yÑ9Ô9Ð9ØÐ%­*°V¸TÑ*BÔ*BÐ%Ý'4°VÑ'<Ô'<�D”K Ñ$Ø”M×%Ò% cÑ*Ô*Ð*Ð*åÔ-¨eÑ4Ô4ð jð jÝ+0Ô+>¸uÀfÐTYÐbhÐ+iÑ+iÔ+i˜œ CÑ(ðjð jð jñ jô jð jð jð jð jð jð jøøøð jð jð jð jå.5¬k¸$Ñ.?Ô.?�”˜CÔ Ô+Ø?C¼{È3Ô?OÕ ¥¨$¬+°cÔ*:Ñ!;Ô!;Ñ<Ø×"Ò" 3¨¬°CÔ(8Ñ9Ô9Ð9Ý˜tœ{¨3Ô/Ñ0Ô0�	Ø/3Ô/@×/DÒ/DÀYÐPQÑ/RÔ/RÐUVÑ/V�Ô! )Ñ,Ø�KŠK˜ÑÔÐØ�NŠN˜4œ; sÔ+Ñ,Ô,Ð,Ñ,Ø�Wˆ}Ðs   Ç!G>Ç>H	ÈH	c           	      ó’  ‡‡‡-‡.— ddl m} t          ¦   «         }|                      ||¦  «        }d„ t	          |¦  «        D ¦   «         |_        d„ |D ¦   «         }i }ˆfd„|j        D ¦   «         t          |¦  «        z   D ]}|                     |d¦  «        dz   ||<   Œˆfd„t          t          |¦  «        d         |¦  «        D ¦   «         }|  
                    |||¦  «        \  }}| j        }|�Mt          ||¦  «        D ]<\  }}|�5t          ||¦  «        r%t          || ¦  «        r|                     |¦  «         Œ=|	|z   |_        |
|z   }
t!          |j        ¦  «        }|
d |…         |
||t!          |¦  «        z   …         c|_        |_        t'          |
|t!          |¦  «        z   d …         ¦  «        }t          |¦  «        Š.t          |j        |j        ¦  «        D ]
\  }}|‰.|<   Œt)          j        ‰.|¦  «        \  }}d„ |j        D ¦   «         }t-          |¦  «        t/          |d	|¦  «        |j                             d
d¦  «        rd n‰f} | | j        v rt5          j        ¦   «         }!n•d„ |
D ¦   «         d„ t8          D ¦   «         z  }"|"                     d„ | j                             ¦   «         D ¦   «         ¦  «         |"                     d„ |                       |¦  «        D ¦   «         ¦  «         tC          |"¦  «        }!| j"        €#tF          j$         %                    ¦   «         | _"        tF          j$         &                    ¦   «         |_'        d| j(        › dtS          |¦  «        j*        › d�}#d„ |D ¦   «         }$t          ||j        ¦  «        D ]\  \  }%}}||%|<   ŒtV          stY          ¦   «          t[          tF          j$         .                    ¦   «         ¦  «        }&|rt_          |&¦  «         tF          j$         0                    |&¦  «        5  |j'         1                    | j"        d¬¦  «         da2|�| 3                    ¦   «          d}'	 |!5  | j4        rtk          ||¦  «        ni Š-tm          |||| j4        ‰.¦  «        \  }(|_7        tq          ˆ-ˆ.fd„|j7        D ¦   «         ¦  «        |_9        t          |(¦  «        \  })|_:        ~(g |_;        t          |)|¦  «        D ]»\  }*}(|(€|j;         <                    d ¦  «         Œ"|(d         dk    r9|j;         <                    |j         =                    |(d         ¦  «        ¦  «         Œgt}          |¦  «        }| ?                    |*|¦  «        s| @                    |*¦  «         |j;         <                    |¦  «         Œ¼d„ |)D ¦   «         |_A        ~)d }*d d d ¦  «         n# 1 swxY w Y   nY# t„          $ rL t5          jC        tˆ          ¦  «        5  |j'         E                    ¦   «          d d d ¦  «         n# 1 swxY w Y   ‚ w xY w|�| F                    ¦   «         }'da2t          ||$¦  «        D ]\  \  }%}}+|+|%|<   Œn;# |�| F                    ¦   «         }'da2t          ||$¦  «        D ]\  \  }%}}+|+|%|<   Œw xY w	 |j'         E                    ¦   «          n'# tˆ          $ r},t�          |#› d|,› �¦  «        |,‚d },~,ww xY w	 d d d ¦  «         n# 1 swxY w Y   |'sd S t‘          |!tB          ¦  «        ri|!jI        rHt�          d| j(        › dtS          |¦  «        j*        › d�d J                    |!jI        ¦  «        z   ¦  «        ‚| j         K                    | ¦  «         d„ t	          t          |j        |¦  «        ¦  «        D ¦   «         |_L        | jM        s$t�          jO        d| j(        › d�¦  «         d| _M        |S ) Nr   rL   c                 óL   — g | ]!\  }}t          |t          j        ¦  «        ¯|‘Œ"S r#   r¸  r¹  s      r   rò   z(BlockGraphs._capture.<locals>.<listcomp>a  s0   € ÐhÐhÐh¡[ U¨DÍÐTXÕZ_ÔZfÑIgÔIgÐh˜5ÐhÐhÐhr   c                 ó.   — g | ]}|®|d         dk    ¯|‘ŒS ©Nr   r  r#   )r$   Úoutputs     r   rò   z(BlockGraphs._capture.<locals>.<listcomp>b  s/   € ÐiÐiÐi V¸&Ð:LÐQWÐXYÔQZÐ^hÒQhÐQh˜&ÐQhÐQhÐQhr   c                 ó    •— g | ]
}‰|         ‘ŒS r#   r#   r»  s     €r   rò   z(BlockGraphs._capture.<locals>.<listcomp>d  s   ø€ ÐBÐBÐB¨�I˜eÔ$ÐBÐBÐBr   r   c                 ó>   •— g | ]\  }}|®|d         dk    ¯‰r|nd ‘ŒS r0  r#   )r$   r  r1  Úadopt_outputss      €r   rò   z(BlockGraphs._capture.<locals>.<listcomp>f  so   ø€ ð  eð  eð  e¹<¸4ÀÐu{ð  vHð  MSð  TUô  MVð  Zdò  Mdð  Md˜}Ð6�t�t°$ð  Mdð  Mdð  Mdr   c                 ó   — g | ]	}|j         ‘Œ
S r#   ©rz  )r$   rC  s     r   rò   z(BlockGraphs._capture.<locals>.<listcomp>v  s   € Ð?Ð?Ð?¨�F”OÐ?Ð?Ð?r   rŸ  rÄ  Fc                 ó,   — h | ]}t          |¦  «        ’ŒS r#   rt  rX   s     r   rd   z'BlockGraphs._capture.<locals>.<setcomp>}  s   € Ð4Ð4Ð4 q•x ‘{”{Ð4Ð4Ð4r   c                 ó,   — h | ]}t          |¦  «        ’ŒS r#   rt  rX   s     r   rd   z'BlockGraphs._capture.<locals>.<setcomp>}  s   € Ð7XÐ7XÐ7XÈ½À¹¼Ð7XÐ7XÐ7Xr   c              3   ó>   K  — | ]}|D ]}t          |¦  «        V — ŒŒd S r"   rt  )r$   rt   rY   s      r   r&   z'BlockGraphs._capture.<locals>.<genexpr>~  s6   è è € Ð[Ð[¨7ÐSZÐ[Ð[Èa�8 A™;œ;Ð[Ð[Ð[Ð[Ð[Ð[Ð[r   c              3   óB   K  — | ]}|j         ¯	t          |¦  «        V — Œd S r"   )rW   r,  rX   s     r   r&   z'BlockGraphs._capture.<locals>.<genexpr>  s/   è è € ÐYÐY¨1ÈqÌyÐY�8 A™;œ;ÐYÐYÐYÐYÐYÐYr   z"CUDA graph capture of a block of 'r¾  z) failedc                 ó$   — g | ]\  }}||         ‘ŒS r#   r#   rµ  s      r   rò   z(BlockGraphs._capture.<locals>.<listcomp>†  s    € Ð?Ð?Ð?¡} v¨u�V˜E”]Ð?Ð?Ð?r   Úthread_local)Úcapture_error_modeTc              3   óR   •K  — | ]!}‰t          ‰|         ¦  «                 °|V — Œ"d S r"   r`   )r$   r   ró  Ústatic_leavess     €€r   r&   z'BlockGraphs._capture.<locals>.<genexpr>™  s>   øè è € Ð)wÐ)w°EÐT\Õ]_Ð`mÐnsÔ`tÑ]uÔ]uÔTvÐ)w¨%Ð)wÐ)wÐ)wÐ)wÐ)wÐ)wr   r  c                 óJ   — g | ] }t          |t          j        ¦  «        rd n|‘Œ!S r"   r¸  r  s     r   rò   z(BlockGraphs._capture.<locals>.<listcomp>§  s/   € Ð'pÐ'pÐ'pÐ]aµ
¸4ÅÄÑ0NÔ0NÐ(X¨¨ÐTXÐ'pÐ'pÐ'pr   z: zp): it reads tensors that are neither its weights nor its arguments, whose addresses may change between replays:
rU  c                 ó4   — g | ]\  }\  }}|j         |k    ¯|‘ŒS r#   r6  )r$   r   rC  r‡  s       r   rò   z(BlockGraphs._capture.<locals>.<listcomp>¿  sR   € ð  Eð  Eð  EÑ#; 5Ñ*;¨6°7ÐioÔixð  }Dò  jDð  jD˜ð  jDð  jDð  jDr   z%[MMGP] CUDA graphs of the blocks of 'z' are being captured.)PrO   rM   r_  r  r€   ra  r•   r;   rn   r  rÔ  rÉ  r.  rD  Úbindrc  rl   rC  rb  rÛ  rý   r{  ra   r   r˜   r‘  Ú
contextlibÚnullcontextr­   Úupdaterc   rp   r�  rO  r–  rU   r¹   rÝ  Ú	CUDAGraphr`  rs   rT   r   r   r   rÈ   Úcurrent_devicerÄ   rº   Úcapture_beginr   ÚcapturerÈ  rq  rˆ  rh  rj   ri  rf  rg  r¤   r   r+   Úsame_graph_storagerÑ  re  ÚBaseExceptionÚsuppressÚ	ExceptionÚcapture_endÚfinishr   r  rR  rZ  r/   rd  r�  r   r0   )/r   r<   rF   r  r  r'  ré  rê  Úwarm_outputrc  rì  r4  r’  rM   r¥  rg  Úout_signaturesr(  ÚsigÚout_sourcesÚoutput_keysÚoutput_buffersrð  ru  r  ÚinputsÚout_buffersr   rC  r   r   ÚversionsÚchecked_keyÚcheckrQ  ÚfailedÚ	originalsr¶  rº   Ú
plan_validr1  re  r  ÚoriginalÚerrorró  r?  s/        `     `                                 @@r   rá  zBlockGraphs._capture\  s‡	  øøøø€ àÐÐÐÐÐÝ‘”ˆØ—-’- ¨Ñ4Ô4ˆØhÐhµI¸fÑ4EÔ4EÐhÑhÔhˆŒØiÐi¨wÐiÑiÔiˆØˆØBÐBÐBÐB°%´/ÐBÑBÔBÅTÈ/ÑEZÔEZÑZð 	1ð 	1ˆCØ Ÿ*š* S¨!Ñ,Ô,¨qÑ0ˆF�3‰KˆKð eð  eð  eð  eÍ3ÍxÐXcÑOdÔOdÐefÔOgÐipÑKqÔKqð  eñ  eô  eˆØ&*§m¢m°NÀKÐQWÑ&XÔ&XÑ#ˆ�^ØÔ(ˆØÐÝ"% k°>Ñ"BÔ"Bð &ð &‘�˜ØÐ%­,°v¸vÑ*FÔ*FÐ%Í:ÐV\Ð^bÑKcÔKcÐ%Ø—I’I˜fÑ%Ô%Ð%øØ%¨Ñ3ˆÔØ˜NÑ*ˆÝ�U”_Ñ%Ô%ˆØ+2°7°F°7Ô+;¸WÀVÈFÕUXÐY_ÑU`ÔU`ÑL`ÐE`Ô=aÐ(ˆŒ�eÔ(Ý˜7 6­C°©K¬KÑ#7Ð#8Ð#8Ô9Ñ:Ô:ˆÝ˜V™œˆÝ  ¤°%´,Ñ?Ô?ð 	*ð 	*‰MˆE�6Ø#)ˆM˜%Ñ Ð ÝÔ,¨]¸DÑAÔA‰ˆˆfØ?Ð?°%´,Ð?Ñ?Ô?ˆõ ˜&‘z”z¥7¨7°JÀÑ#HÔ#HÐRXÔRa×ReÒReÐf|ð  Dñ  SEô  SEð  KTÈ$È$ð  KTð  UˆØ˜$œ,Ð&Ð&ÝÔ*Ñ,Ô,ˆEˆEà4Ð4¨GÐ4Ñ4Ô4Ð7XÐ7XÍZÐ7XÑ7XÔ7XÑXˆGØ�NŠNÐ[Ð[°d´j×6GÒ6GÑ6IÔ6IÐ[Ñ[Ô[Ñ[Ô[Ð[Ø�NŠNÐYÐY°×0CÒ0CÀFÑ0KÔ0KÐYÑYÔYÑYÔYÐYÝ˜wÑ'Ô'ˆEØŒ9ÐÝœ
×4Ò4Ñ6Ô6ˆDŒIÝ”j×*Ò*Ñ,Ô,ˆŒØc°d´iÐcÐcÅDÈÁLÄLÔDYÐcÐcÐcˆà?Ð?¸Ð?Ñ?Ô?ˆ	Ý'*¨6°5Ô3EÑ'FÔ'Fð 	#ð 	#Ñ#‰OˆV�U˜VØ"ˆF�5‰MˆMÝ ð 	%Ý"Ñ$Ô$Ð$å ¥¤×!:Ò!:Ñ!<Ô!<Ñ=Ô=ˆØð 	)Ý  Ñ(Ô(Ð(ÝŒZ×Ò˜vÑ&Ô&ð (	Dð (	DØŒK×%Ò% d¤iÀNÐ%ÑSÔSÐSØˆJØÐØ—’‘”�ØˆJð-Øð  ð  Ø:>Ô:QÐY�y¨¨vÑ6Ô6Ð6ÐWY�HÝ.@ÀÈ$ÐPVÐX\ÔXoÐq~Ñ.Ô.Ñ+�F˜EœOÝ$)Ð)wÐ)wÐ)wÐ)wÐ)w¸U¼_Ð)wÑ)wÔ)wÑ$wÔ$w�E”MÝ19¸&Ñ1AÔ1AÑ.�J ¤ØØ$&�E”MÝ(+¨J¸Ñ(@Ô(@ð 	9ð 	9™˜˜fØ!˜>Ø!œM×0Ò0°Ñ6Ô6Ð6Ð6Ø# AœY¨*Ò4Ð4Ø!œM×0Ò0°´×1FÒ1FÀvÈaÄyÑ1QÔ1QÑRÔRÐRÐRå%)¨+Ñ%6Ô%6˜FØ#,×#?Ò#?ÀÀfÑ#MÔ#Mð 3Ø &§¢¨TÑ 2Ô 2Ð 2Ø!œM×0Ò0°Ñ8Ô8Ð8Ð8Ø'pÐ'pÐeoÐ'pÑ'pÔ'p�EÔ$Ø"Ø�Dð' ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  øøõ( !ð ð ð ÝÔ(­Ñ3Ô3ð .ð .Ø”K×+Ò+Ñ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .àðøøøð
 Ð#Ø!%§¢¡¤�JØ"�
Ý14°V¸YÑ1GÔ1Gð -ð -Ñ-‘O�V˜U XØ$,�F˜5‘M�Mð-øð Ð#Ø!%§¢¡¤�JØ"�
Ý14°V¸YÑ1GÔ1Gð -ð -Ñ-‘O�V˜U XØ$,�F˜5‘M�Mð-øøøðDØ”×'Ò'Ñ)Ô)Ð)Ð)øÝð Dð Dð DÝ" fÐ#7Ð#7°Ð#7Ð#7Ñ8Ô8¸eÐCøøøøðDøøøð *ðM(	Dð (	Dð (	Dñ (	Dô (	Dð (	Dð (	Dð (	Dð (	Dð (	Dð (	Døøøð (	Dð (	Dð (	Dð (	DðR ð 	Ø�4Ý�e�ZÑ(Ô(ð 	*ØŒ}ð OÝ"ð $sÈÌ	ð $sð $sÕVZÐ[aÑVbÔVbÔVkð $sð $sð $sØuy×u~Òu~ð  @Eô  @Mñ  vNô  vNñ$Nñ Oô Oð OàŒL×Ò˜[Ñ)Ô)Ð)ð Eð  E½yÍÈUÌ\Ð[cÑIdÔIdÑ?eÔ?eð  Eñ  Eô  EˆŒØŒ}ð 	!ÝŒJÐ_¸t¼yÐ_Ð_Ð_Ñ`Ô`Ð`Ø ˆDŒMØˆs©   Ð<[ÑWÑEV8Ö,WÖ8V<	Ö<WÖ?V<	× W×Y×#X×'XØXØXØXØXØXØYØ7[Ù8ZÚ[ÚZ*Ú)[Ú*
[Ú4[	Û	[Û[Û["Û%["c                 óš  ‡ ‡‡‡— ddl m} ‰j        t          ‰j        ¦  «        t          ‰j        ¦  «        z   d …         D ]+}|‰ j        v r |                     ‰ j        |         ¦  «         Œ,t          t          ‰j
        ‰j        ¦  «        ¦  «        D ]x\  }\  }}t          |‰|         ¦  «        rŒt          ‰|         |¦  «        r(‰                      ‰j        |         ‰|         ¦  «         Œ]|                     ‰|         ¦  «         Œy|r$t          j        ‰j        d„ |D ¦   «         ¦  «         ‰j                             ¦   «          t          j                             ¦   «         }	t+          ‰j        ¦  «        D ]+}|‰ j        v r ‰ j        |                              |	¦  «         Œ,‰j        D ]•}t          ‰‰j
        |                  ‰j        |         ¦  «        s2‰‰j
        |                                       ‰j        |         ¦  «         Œ`t          j        j                             ‰‰j
        |                  ¦  «         Œ–t5          ‰j        t          ‰j        ¦  «        t          ‰j        ¦  «        z   d …         ¦  «        Šˆˆˆˆ fd„t          ‰j        ‰j        ¦  «        D ¦   «         }
t;          j        |
‰j        ¦  «        S )Nr   rL   c                 ó$   — g | ]\  }}||         ‘ŒS r#   r#   rµ  s      r   rò   z'BlockGraphs._replay.<locals>.<listcomp>Ò  s!   € Ð5`Ð5`Ð5`ÉÈÐPU°f¸U´mÐ5`Ð5`Ð5`r   c                 óà   •— g | ]j\  }}|€|n`t          |t          ¦  «        r‰‰j        |                  n8t          ‰¦  «        ‰j        v rt          |¦  «        n|                     ¦   «         ‘ŒkS r"   )r  r  ra  r+   r™  rM  r¬   )r$   r  r1  r¥  r  rT  r   s      €€€€r   rò   z'BlockGraphs._replay.<locals>.<listcomp>Þ  s�   ø€ ð Ið Ið Iá�4˜ð �~ˆtˆtÍjÐY_ÕadÑNeÔNeð ,_¨6°%´/À&Ô2IÔ+JÐ+JÝ(,¨[Ñ(9Ô(9¸T¼]Ð(JÐ(J�}˜VÑ$Ô$Ð$ÐPV×P\ÒP\ÑP^ÔP^ðIð Ið Ir   ) rO   rM   rc  rl   rC  rb  r™  rú  r€   rn   ra  r.  rI  rÜ  rÑ  rU   Ú_foreach_copy_r`  rÒ  r¹   râ   rm  rÓ  rd  r}  r~  rÛ  re  rg  rý   r{  rf  )r   r¥  r  ré  rM   rÂ   rï  r   rC  rº   r]  rT  s   ```        @r   rã  zBlockGraphs._replayÅ  sÑ  øøøø€ ØÐÐÐÐÐØÔ#¥C¨¬Ñ$5Ô$5½¸EÔ<NÑ8OÔ8OÑ$OÐ$PÐ$PÔQð 	:ð 	:ˆCØ�d”mÐ#Ð#Ø×'Ò'¨¬°CÔ(8Ñ9Ô9Ð9øÝ(1µ#°e´oÀuÄ|Ñ2TÔ2TÑ(UÔ(Uð 	,ð 	,Ñ$ˆG‘_�e˜VÝ˜F F¨5¤MÑ2Ô2ð ØÝ˜˜uœ vÑ.Ô.ð ,Ø—
’
˜5Ô+¨GÔ4°f¸U´mÑDÔDÐDÐDà—’˜V Eœ]Ñ+Ô+Ð+Ð+Øð 	bÝÔ  Ô!3Ð5`Ð5`ÐY_Ð5`Ñ5`Ô5`ÑaÔaÐaØŒ×ÒÑÔÐÝ”×*Ò*Ñ,Ô,ˆÝ�uÔ'Ñ(Ô(ð 	7ð 	7ˆCØ�d”mÐ#Ð#Ø”˜CÔ ×.Ò.¨vÑ6Ô6Ð6øØ”]ð 	Wð 	WˆEÝ  u¤°uÔ'=Ô >ÀÄÈUÔ@SÑTÔTð WØ�u” uÔ-Ô.×4Ò4°U´\À%Ô5HÑIÔIÐIÐIå”Ô$×6Ò6°v¸e¼oÈeÔ>TÔ7UÑVÔVÐVÐVÝ˜5Ô+­C°´Ñ,=Ô,=ÅÀEÔDVÑ@WÔ@WÑ,WÐ,XÐ,XÔYÑZÔZˆðIð Ið Ið Ið Ið Ið Iå#& uÔ'7¸¼Ñ#GÔ#GðIñ Iô Iˆõ Ô$ S¨%¬.Ñ9Ô9Ð9r   r"   ©r#   rÝ   )F)r   r�   rž   rŸ   r’   ro   r‚   rª  rI   rÜ  rö  rQ   r×  r  rÚ  r¢  r£  r  rÔ  rá  rã  r#   r   r   rŠ  rŠ  þ  s@  € € € € € Ø7Ð7ðð ð ð ð"
ð 
ð 
ðð ð ð ð ð ðEð Eð EðNð ð ðð ð ð!ð !ð !ðFð ð ð2ð ð ðð ð ð ð$ð $ð $ð
!ð !ð !ð !ð"@ð @ð @ð&ð &ð &ð &ðPgð gð gð gðR:ð :ð :ð :ð :r   rŠ  )TTrd  r"   )UrŸ   rC  rü   r$  r5  r[  rx  rU   r   Útorch.utilsr   rý   Útorch.utils._python_dispatchr   rO   r   r¤  rF  r1   r  ÚfloatÚstrrT   r·   r¸   r#  r*   r6   r£   r,   r-   rm  r.   r±   r­   rÆ   r¾   rÿ   ré   r   r   ÚWeakValueDictionaryr:  r   Úcontextmanagerr4   r7   r@   rE   rJ   rQ   rw   r|   r�   r“   ÚModuler�   r¦   r¨   r¯   r³   rÄ   rÈ   rá   rÛ   rê   rî   r   rM  r  r  r  Ú	frozensetr(  r,  r.  r8  rD  rI  rM  rO  r_  rq  rˆ  rŠ  r#   r   r   ú<module>rm     sš  ððð ð> Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€à €€€Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð à€Ø€
Ø�#�u˜c 4 4¨¡:¤:¨u¬{¸E¼LÐI€Ø	
€Ø€
Ø€Ø	€Ø€ØˆC‰EŒE€	Ø€Ø€
ØÐ Ø�3‘5”5Ð Øˆc‰eŒe€Ø€	Ø€
ØÐ Ø.�7Ô.Ñ0Ô0Ð ð/ð /ð /ð, Ôð ð  ð  ñ Ôð ð ð ð ð-ð -ð -ðbð bð bð "¨)¸Tð fð fð fð fð fð"+ð +ð +ð Tð Tð Tð Tð0ð ð ð ð ð ð ð:ð ð ð ð ˆEŒHŒOñ ô ð ð(ð (ð (ðð ð ð
ð 
ð 
ð&ð &ð &ð	&ð 	&ð 	&ðð ð ðIð Ið 8gð Iñ Iô I€	ð-ð -ð -ð -ð -Ð ñ -ô -ð -ðð ð ð&ð &ð &ðð ð ðð ð ð ð ˜9ñ ô ð ð
Að Að Að%ð %ð %ð  )˜y™{œ{ð ð ð ð ð *ð *ð *ðnð nð nð^ð ^ð ^ð`ð `ð `ðFð Fð Fð_ð _ð _ðð ð ð ð Ð"ñ ô ð ð&Wð Wð Wð Wð Wñ Wô Wð Wðð ð ð(* ð * ð * ðZc:ð c:ð c:ð c:ð c:ñ c:ô c:ð c:ð c:ð c:r   