§
    ÎÐjX7  ã                  ón  — d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	Z	 ej
        d¦  «        Z ej
        d¦  «        Z ej
        dej        ¦  «        Zg d¢Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Z ed	¬
¦  «         G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdEd„Z	 	 dFdGd+„Z	 	 dFdHd3„ZdId6„ZdJd9„ZdKd;„ZdLd<„ZdMd=„ZdNd?„ZdOd@„ZdPdD„Z dS )Qé    )ÚannotationsN)Ú	dataclass)ÚAnyÚCallablez\[([^\]]+)\]z^\d+(?:\.\d+)?$z.^(\d+(?:\.\d+)?)(?:s|sec|secs|second|seconds)$)ÚPromptRelayBoundÚPromptRelayConditioningÚPromptRelayMaskBuilderÚPromptRelayPlanÚPromptRelaySegmentÚencode_prompt_relayÚparse_prompt_relayT)Úfrozenc                  ó.   — e Zd ZU ded<   ded<   ddd„ZdS )r   ÚfloatÚvalueÚstrÚunitFÚtotal_secondsÚtotal_framesÚintÚinclusive_endÚboolÚreturnc                óˆ  — | j         dk    r#t          dt          d| j        ¦  «        ¦  «        S | j         dk    r\|dk    rdS |r| j        n	| j        dz
  }t          |d¦  «        }t          dt          d|t	          |dz
  ¦  «        z  ¦  «        ¦  «        S |dk    rdS t          dt          d| j        |z  ¦  «        ¦  «        S )NÚpercentç        ç      ð?Úframeé   r   )r   ÚmaxÚminr   r   )Úselfr   r   r   Úframe_indexs        ú;C:\Users\johnn\OneDrive\Documents\AI\shared\prompt_relay.pyÚresolvezPromptRelayBound.resolve   sË   € ØŒ9˜	Ò!Ð!Ý�s�C  T¤ZÑ0Ô0Ñ1Ô1Ð1ØŒ9˜ÒÐØ˜qÒ Ð Ø�sØ(5ÐK˜$œ*˜*¸4¼:ÈÑ;KˆKÝ˜k¨3Ñ/Ô/ˆKÝ�s�C  [µ5¸ÈÑ9IÑ3JÔ3JÑ%JÑKÔKÑLÔLÐLØ˜AÒÐØ�3Ý�3�˜C ¤¨mÑ!;Ñ<Ô<Ñ=Ô=Ð=ó    N)F)r   r   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r%   © r&   r$   r   r      sA   € € € € € € à€L€L�LØ€I€I�Ið>ð >ð >ð >ð >ð >ð >r&   r   c                  óJ   — e Zd ZU ded<   ded<   ded<   dZded	<   dZded
<   dS )r   r   ÚstartúPromptRelayBound | NoneÚendr   Úpromptr   r   Ú	key_startÚkey_endN)r'   r(   r)   r*   r1   r2   r+   r&   r$   r   r   -   sU   € € € € € € àÐÐÑØ Ð Ð Ñ Ø€K€K�KØ€IÐÐÐÑØ€GÐÐÐÑÐÐr&   r   c                  ó$   — e Zd ZU ded<   ded<   dS )r
   r   Úglobal_promptztuple[PromptRelaySegment, ...]ÚsegmentsN©r'   r(   r)   r*   r+   r&   r$   r
   r
   6   s*   € € € € € € àÐÐÑØ,Ð,Ð,Ñ,Ð,Ð,r&   r
   c                  ó8   — e Zd ZU ded<   ded<   ded<   ded<   dS )Ú_RuntimeSegmentr   r-   r/   r   r1   r2   Nr6   r+   r&   r$   r8   r8   <   s4   € € € € € € à€L€L�LØ€J€J�JØ€N€N�NØ€L€L�L€L€Lr&   r8   c                  óP   — e Zd ZU ded<   ded<   ded<   ded<   edd	„¦   «         Zd
S )r   útorch.TensorÚvideo_contextútorch.Tensor | NoneÚaudio_contextúPromptRelayMaskBuilder | NoneÚvideo_mask_builderÚaudio_mask_builderr   c                ó   — | j         S ©N)r?   )r"   s    r$   Úmask_builderz$PromptRelayConditioning.mask_builderK   s   € àÔ&Ð&r&   N)r   r>   )r'   r(   r)   r*   ÚpropertyrC   r+   r&   r$   r   r   D   sd   € € € € € € àÐÐÑØ&Ð&Ð&Ñ&Ø5Ð5Ð5Ñ5Ø5Ð5Ð5Ñ5àð'ð 'ð 'ñ „Xð'ð 'ð 'r&   r   c                  ó&   — e Zd Z	 	 	 ddd„Zdd„ZdS )r	   r   çü©ñÒMbP?ç      YÀÚ	key_validr:   r5   úlist[_RuntimeSegment]Úpositive_key_countr   Úvisible_start_ratior   ÚepsilonÚpadding_biasr   ÚNonec           	     óÊ  — |                      ¦   «                              dt          j        ¬¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          dt          dt          |¦  «        ¦  «        ¦  «        | _        d|cxk     rdk     r*n n't          dt          j        d|z  ¦  «        z  ¦  «        nd| _        t          |¦  «        | _        d S )NÚcpu©Údtyper   r   r   r   gû:pÎˆÂ?)ÚdetachÚtoÚtorchr   rH   Útupler5   r   rJ   r    r!   r   rK   ÚmathÚlogÚsigmarM   )r"   rH   r5   rJ   rK   rL   rM   s          r$   Ú__init__zPromptRelayMaskBuilder.__init__Q   sÅ   € ð #×)Ò)Ñ+Ô+×.Ò.¨u½E¼JÐ.ÑGÔGˆŒÝ˜h™œˆŒÝ"%Ð&8Ñ"9Ô"9ˆÔÝ#& s­C°µUÐ;NÑ5OÔ5OÑ,PÔ,PÑ#QÔ#QˆÔ Ø=>À¸_¸_º_¸_È1º_¸_¸_¸_¸_•U˜3¥¤¨#°©-Ñ!8Ô!8Ñ8Ñ9Ô9Ð9ÐRXˆŒ
Ý! ,Ñ/Ô/ˆÔÐÐr&   Ústater   Úframe_indicesr<   Úcontextc                ó@  — | j         sd S t          |¦  «        }|dk    rd S |j        j        }t	          j        |j        ¦  «        r|j        j        nt          j        }t          ||¦  «         	                    |¬¦  «        }|j
        \  }}| j         	                    |¬¦  «        }	|	                     ¦   «         | j        k     rOt	          j        |	t	          j        | j        |	                     ¦   «         z
  |t          j        ¬¦  «        g¦  «        }	|	d | j        …         }	|| j        k    r>t	          j        |	t	          j        || j        z
  |t          j        ¬¦  «        g¦  «        }	n
|	d |…         }	t#          | j        |¦  «        }
t	          j        |||f|t          j        ¬¦  «        }| 	                    t          j        ¦  «        }|                     dd¬¦  «                             d¦  «        }|| j        z  }||z
  }||z
                       d¦  «        }d| j        z  | j        z  }| j         D �]B}t#          |j        |
¦  «        }t#          |j        |
¦  «        }||k    rŒ4t	          j        |j        |t          j        ¬¦  «        |z  }t	          j        |j        |t          j        ¬¦  «        |z  }||z
                       d¦  «        }||z   d	z  }|d	z  dz
                       d
¦  «        }||z
                       ¦   «         }t	          j        ||z
  ¦  «        }|                     ¦   «         |z  }||                     dd¬¦  «        z
  }|                      d¦  «         |d d …d d …||…f<   �ŒD|	                     ¦   «         |k     rJt	          j        |	t	          j        ||	                     ¦   «         z
  |t          j        ¬¦  «        g¦  «        }	| j!        |d d …d d …|	d |…          f<   | 	                    |¬¦  «                              d¦  «        S )Nr   )Údevice©r_   rR   r   T)ÚdimÚkeepdimr   g       @g      à?r   éÿÿÿÿrQ   é   )"r5   Ú_context_seq_lenÚlatentr_   rU   Úis_floating_pointrR   Úfloat32Ú_resolve_frame_indicesrT   ÚshaperH   ÚnumelrJ   ÚcatÚonesr   r!   ÚzerosÚamaxÚ	clamp_minrK   rY   r1   r2   Útensorr-   r/   ÚabsÚreluÚsquareÚaminÚ	unsqueezerM   )r"   r[   r\   r]   Úcontext_lenr_   rR   Ú
batch_sizeÚ	query_lenrH   Úpositive_lenÚmaskÚraw_query_framesÚraw_max_frameÚvisible_startÚquery_framesÚ	max_frameÚsigma_sqÚsegmentÚ	start_keyÚend_keyr-   r/   ÚlengthÚmidpointÚwindowÚdistanceÚcosts                               r$   Ú__call__zPromptRelayMaskBuilder.__call__a   s   € ØŒ}ð 	Ø�4Ý& wÑ/Ô/ˆØ˜!ÒÐØ�4Ø”Ô$ˆÝ&+Ô&=¸e¼lÑ&KÔ&KÐ^�”Ô"Ð"ÕQVÔQ^ˆÝ.¨u°mÑDÔD×GÒGÈvÐGÑVÔVˆØ -Ô 3Ñˆ
�IØ”N×%Ò%¨VÐ%Ñ4Ô4ˆ	Ø�?Š?ÑÔ˜tÔ6Ò6Ð6Ýœ	 9­e¬j¸Ô9PÐS\×SbÒSbÑSdÔSdÑ9dÐmsõ  |Aô  |Fð  /Gñ  /Gô  /Gð  #Hñ  Iô  IˆIØÐ7 Ô 7Ð7Ô8ˆ	Ø˜Ô0Ò0Ð0Ýœ	 9­e¬j¸ÀtÔG^Ñ9^ÐgmÕuzÔuð  /Añ  /Aô  /Að  #Bñ  Cô  CˆIˆIà! , ; ,Ô/ˆIå˜4Ô2°KÑ@Ô@ˆÝŒ{˜J¨	°;Ð?ÈÕV[ÔVcÐdÑdÔdˆà(×+Ò+­E¬MÑ:Ô:ÐØ(×-Ò-°!¸TÐ-ÑBÔB×LÒLÈSÑQÔQˆØ%¨Ô(@Ñ@ˆØ'¨-Ñ7ˆØ" ]Ñ2×=Ò=¸cÑBÔBˆ	Ø˜œÑ# d¤jÑ0ˆØ”}ð 	@ñ 	@ˆGÝ˜GÔ-¨|Ñ<Ô<ˆIÝ˜'œ/¨<Ñ8Ô8ˆGØ˜GÒ#Ð#ØÝ”L ¤°vÅUÄ]ÐSÑSÔSÐV_Ñ_ˆEÝ”,˜wœ{°6ÅÄÐOÑOÔOÐR[Ñ[ˆCØ˜E‘k×,Ò,¨SÑ1Ô1ˆFØ ™ sÑ*ˆHØ˜s‘l SÑ(×3Ò3°CÑ8Ô8ˆFØ$ xÑ/×4Ò4Ñ6Ô6ˆHÝ”z (¨VÑ"3Ñ4Ô4ˆHð
 —?’?Ñ$Ô$ xÑ/ˆDØ˜$Ÿ)š)¨°4˜)Ñ8Ô8Ñ8ˆDØ-1¯^ª^¸BÑ-?Ô-?Ð,?ˆD����A�A�A�y Ð(Ð(Ñ)Ñ)à�?Š?ÑÔ˜{Ò*Ð*Ýœ	 9­e¬k¸+È	ÏÊÑHYÔHYÑ:YÐbhÕpuÔpzÐ.{Ñ.{Ô.{Ð"|Ñ}Ô}ˆIØ/3Ô/@ˆˆQˆQˆQ����I˜l˜{˜lÔ+Ð+Ð+Ñ,Ø�wŠw˜UˆwÑ#Ô#×-Ò-¨aÑ0Ô0Ð0r&   N)r   rF   rG   )rH   r:   r5   rI   rJ   r   rK   r   rL   r   rM   r   r   rN   )r[   r   r\   r<   r]   r   r   r<   )r'   r(   r)   rZ   rŠ   r+   r&   r$   r	   r	   P   sL   € € € € € ð &)ØØ$ð0ð 0ð 0ð 0ð 0ð 31ð 31ð 31ð 31ð 31ð 31r&   r	   r0   r   r   úPromptRelayPlan | Nonec                ó  — d }d}g }g }t                                | ¦  «        D ]Ï}t          |                     d¦  «        ¦  «        }|€Œ'|€0|                     | ||                     ¦   «         …         ¦  «         n`| ||                     ¦   «         …                              ¦   «         }|r0|                     t          |d         |d         |¦  «        ¦  «         |}|                     ¦   «         }ŒÐ|€d S | |d …                              ¦   «         }|r0|                     t          |d         |d         |¦  «        ¦  «         |sd S t          d 
                    |¦  «                             ¦   «         t          |¦  «        ¦  «        S )Nr   r   Ú )Ú_RELAY_MARKER_REÚfinditerÚ_parse_markerÚgroupÚappendr-   Ústripr   r/   r
   ÚjoinrV   )r0   Úcurrent_boundsÚlast_valid_endÚglobal_partsr5   ÚmatchÚboundsÚsegment_prompts           r$   r   r   —   s  € ØNR€NØ€NØ €LØ)+€HÝ!×*Ò*¨6Ñ2Ô2ð %ð %ˆÝ˜uŸ{š{¨1™~œ~Ñ.Ô.ˆØˆ>ØØÐ!Ø×Ò  ~¸¿º¹¼Ð'EÔ FÑGÔGÐGÐGà# N°U·[²[±]´]Ð$BÔC×IÒIÑKÔKˆNØð jØ—’Õ 2°>À!Ô3DÀnÐUVÔFWÐYgÑ hÔ hÑiÔiÐiØˆØŸš™œˆˆØÐØˆtØ˜N˜O˜OÔ,×2Ò2Ñ4Ô4€NØð bØ�ŠÕ*¨>¸!Ô+<¸nÈQÔ>OÐQ_Ñ`Ô`ÑaÔaÐaØð ØˆtÝ˜2Ÿ7š7 <Ñ0Ô0×6Ò6Ñ8Ô8½%À¹/¼/ÑJÔJÐJr&   rF   Ú	encode_fnúaCallable[[list[str]], list[tuple[torch.Tensor, torch.Tensor | None, torch.Tensor, torch.Tensor]]]Útext_encoder_cacher   r_   útorch.device | strÚ
num_framesr   Ú
frame_rater   Ú	tokenizerÚvisible_frame_offsetrL   úPromptRelayConditioning | Nonec	                ó"  — t          | ¦  «        }	|	€d S t          |	|¦  «        \  }
}|                     ||
g|dd|
fg¬¦  «        d         }|\  }}}}t          ||t	          |	|||||||¦  «        |€d nt	          |	|||||||¦  «        ¬¦  «        S )NTÚprompt_relay_full)r_   ÚparallelÚ
cache_keysr   )r;   r=   r?   r@   )r   Ú#_build_full_prompt_and_token_rangesÚencoder   Ú_build_mask_builder)r0   r›   r�   r_   rŸ   r    r¡   r¢   rL   ÚplanÚfull_promptÚtoken_rangesÚencodedr;   r=   Ú
video_maskÚ
audio_masks                    r$   r   r   ²   s  € õ ˜fÑ%Ô%€DØ€|ØˆtÝ CÀDÈ)Ñ TÔ TÑ€K�Ø ×'Ò'ØØ	ˆØØØ(¨+Ð6Ð7ð (ñ ô ð ô	€Gð <CÑ8€M�= *¨jÝ"Ø#Ø#Ý.¨t°]ÀJÐP\Ð^hÐjtð  wKð  MTñ  Uô  UØ#0Ð#8˜4˜4Õ>QÐRVÐXeÐgqÐsð  BLð  NXð  Znð  pwñ  ?xô  ?xð	ñ ô ð r&   r«   r]   r:   r{   r­   úlist[tuple[int, int]]r>   c           	     ó  — g }t          t          |¦  «        d¦  «        }t          t          t          |¦  «        d¦  «        t          |dz
  d¦  «        ¦  «        }t          ||z
  d¦  «        }	|dk    r"t          |¦  «        t          |dz
  ¦  «        z  nd}
t          |	dz
  t          t          |¦  «        d¦  «        z  d¦  «        }t	          |¦  «        }t          | j        |d¬¦  «        D ]Û\  }\  }}t          t          t          |¦  «        d¦  «        |¦  «        }t          t          t          |¦  «        |¦  «        |¦  «        }||k    rŒe|j                             ||	¦  «        }|j	        €dn|j	                             ||	d¬¦  «        }t          ||¦  «        }| 
                    t          ||||¦  «        ¦  «         ŒÜt          d	„ |D ¦   «         ¦  «        sd S t          t          ||¦  «        |||
|¬
¦  «        S )Nr   r   r   g�íµ ÷Æ°>T)Ústrictr   )r   c              3  óB   K  — | ]}|j         d k    p
|j        dk     V — ŒdS )r   r   N)r-   r/   )Ú.0r‚   s     r$   ú	<genexpr>z&_build_mask_builder.<locals>.<genexpr>ë   s5   è è € ÐXÐX¸GˆwŒ}˜sÒ"Ð7 g¤k°CÒ&7ÐXÐXÐXÐXÐXÐXr&   )rK   rL   )r    r   r!   r   Ú_seq_lenÚzipr5   r-   r%   r/   r’   r8   Úanyr	   Ú_normalize_key_mask)r«   r]   r{   r­   rŸ   r    r¢   rL   Úruntime_segmentsÚvisible_num_framesrK   r   Úseq_lenr‚   rƒ   r„   r-   r/   s                     r$   rª   rª   Ñ   s   € ð ÐÝ•S˜‘_”_ aÑ(Ô(€JÝ�s¥3Ð';Ñ#<Ô#<¸aÑ@Ô@Å#ÀjÐSTÁnÐVWÑBXÔBXÑYÔYÐÝ˜ZÐ*>Ñ>ÀÑBÔBÐØQ[Ð^_ÒQ_ÐQ_�%Ð 4Ñ5Ô5½¸jÈ1¹nÑ8MÔ8MÑMÐMÐehÐÝÐ+¨aÑ/µ3µu¸ZÑ7HÔ7HÈ$Ñ3OÔ3OÑOÐQTÑUÔU€MÝ�wÑÔ€GÝ),¨T¬]¸LÐQUÐ)VÑ)VÔ)Vð Qð QÑ%ˆÑ%�)˜WÝ��C 	™NœN¨AÑ.Ô.°Ñ8Ô8ˆ	Ý•c�#˜g™,œ,¨	Ñ2Ô2°GÑ<Ô<ˆØ˜ÒÐØØ”×%Ò% mÐ5GÑHÔHˆØ”[Ð(ˆcˆc¨g¬k×.AÒ.AÀ-ÐQcÐswÐ.AÑ.xÔ.xˆÝ�%˜‰oŒoˆØ×Ò¥°°s¸IÀwÑ OÔ OÑPÔPÐPÐPÝÐXÐXÐGWÐXÑXÔXÑXÔXð ØˆtÝ!Õ"5°d¸GÑ"DÔ"DÐFVÐX_ð  vIð  SZð  [ñ  [ô  [ð  [r&   Úmarkerú7tuple[PromptRelayBound, PromptRelayBound | None] | Nonec                ó\  — d }t          | ¦  «        D ]™\  }}|dk    rŒt          | d |…                              ¦   «         ¦  «        }|€Œ8| |dz   d …                              ¦   «         }|sd nt          |¦  «        }|r|€Œo|�|j        |j        k    rŒ‚|�|j        |j        k     rŒ•||f}Œš|S )Nú:r   )Ú	enumerateÚ_parse_boundr“   r   r   )r¾   Ú	candidateÚindexÚcharr-   Úend_textr/   s          r$   r�   r�   ð   s×   € Ø€IÝ  Ñ(Ô(ð !ð !‰ˆˆtØ�3Š;ˆ;ØÝ˜V F U Fœ^×1Ò1Ñ3Ô3Ñ4Ô4ˆØˆ=ØØ˜% !™)˜+˜+Ô&×,Ò,Ñ.Ô.ˆØ"Ð>ˆdˆd­°XÑ(>Ô(>ˆØð 	˜˜ØØˆ?˜sœx¨5¬:Ò5Ð5ØØˆ?˜sœy¨5¬;Ò6Ð6ØØ˜C�Lˆ	ˆ	ØÐr&   Útextr.   c                ó®  — | sd S |                       d¦  «        rX| d d…                              ¦   «         }t                               |¦  «        r t	          t          |¦  «        dz  d¦  «        nd S t                               | ¦  «        }|r0t	          t          |                     d¦  «        ¦  «        d¦  «        S d| v r\|                      d¦  «        }t          d„ |D ¦   «         ¦  «        sd S d	}|D ]}|d
z  t          |¦  «        z   }Œt	          |d¦  «        S t                               | ¦  «        rt	          t          | ¦  «        d¦  «        S d S )Nú%rc   g      Y@r   r   ÚsecondsrÁ   c              3  óJ   K  — | ]}t                                |¦  «        V — Œd S rB   )Ú_NUMERIC_REr˜   )rµ   Úparts     r$   r¶   z_parse_bound.<locals>.<genexpr>  s0   è è € Ð=Ð=¨t•;×$Ò$ TÑ*Ô*Ð=Ð=Ð=Ð=Ð=Ð=r&   r   g      N@r   )
Úendswithr“   rÍ   r˜   r   r   Ú_SECONDS_REr‘   ÚsplitÚall)rÈ   r   Úseconds_matchÚpartsÚtotalrÎ   s         r$   rÃ   rÃ     sZ  € Øð ØˆtØ‡}‚}�SÑÔð gØ�S�b�S”	—’Ñ!Ô!ˆÝDO×DUÒDUÐV[ÑD\ÔD\ÐfÕ¥ e¡¤¨uÑ 4°iÑ@Ô@Ð@ÐbfÐfÝ×%Ò% dÑ+Ô+€MØð JÝ¥ m×&9Ò&9¸!Ñ&<Ô&<Ñ =Ô =¸yÑIÔIÐIØ
ˆd€{€{Ø—
’
˜3‘”ˆÝÐ=Ð=°uÐ=Ñ=Ô=Ñ=Ô=ð 	Ø�4ØˆØð 	/ð 	/ˆDØ˜D‘L¥5¨¡;¤;Ñ.ˆEˆEÝ  yÑ1Ô1Ð1Ý×Ò˜ÑÔð 6Ý¥ d¡¤¨WÑ5Ô5Ð5Øˆ4r&   ú!tuple[str, list[tuple[int, int]]]c                ó  — | j                              ¦   «         }g }| j        D ]\}|rdnd}||z   }||j                             ¦   «         z   }|                     t          ||¦  «        t          ||¦  «        f¦  «         Œ]||fS )Nú
r�   )r4   r“   r5   r0   r’   Ú_content_token_count)r«   r¡   r¬   r­   r‚   Ú	separatorÚprefixs          r$   r¨   r¨     s�   € ØÔ$×*Ò*Ñ,Ô,€KØ*,€LØ”=ð uð uˆØ'Ð/�D�D¨Rˆ	Ø˜yÑ(ˆØ˜wœ~×3Ò3Ñ5Ô5Ñ5ˆØ×ÒÕ1°)¸VÑDÔDÕFZÐ[dÐfqÑFrÔFrÐsÑtÔtÐtÐtØ˜Ð$Ð$r&   c                ó�  — t          | d| ¦  «        }t          t          | dt          |dd¦  «        ¦  «        ¦  «        } ||                     ¦   «         d|dd ¬¦  «        }|d         }|r#t          |d	         t          ¦  «        r|d	         }t          |d
d ¦  «        }|�|r|d         |k    r
|d d…         }t          |¦  «        S )Nr¡   Ú
max_lengthÚmodel_max_lengthi   FT)ÚpaddingrÝ   Ú
truncationÚreturn_tensorsÚ	input_idsr   Úeos_token_idrc   )Úgetattrr   r“   Ú
isinstanceÚlistÚlen)r¡   rÈ   Úraw_tokenizerrÝ   r®   râ   rã   s          r$   rÙ   rÙ   %  sÜ   € Ý˜I {°IÑ>Ô>€MÝ•W˜Y¨µg¸mÐM_ÐaeÑ6fÔ6fÑgÔgÑhÔh€JØˆmØ�
Š
‰ŒØØØØðñ ô €Gð ˜Ô$€IØð !•Z 	¨!¤­dÑ3Ô3ð !Ø˜a”Lˆ	Ý˜=¨.¸$Ñ?Ô?€LØÐ IÐ°)¸B´-À<Ò2OÐ2OØ˜c˜r˜c”Nˆ	Ýˆy‰>Œ>Ðr&   c                ó€   — t          |                      ¦   «         dk    r| j        d         n| j        d         ¦  «        S )Nrd   r   r   )r   ra   rj   )r]   s    r$   r·   r·   8  s5   € Ý 7§;¢;¡=¤=°AÒ#5Ð#5ˆwŒ}˜QÔÐ¸7¼=ÈÔ;KÑLÔLÐLr&   r½   c                óN  — |                       ¦   «                              dt          j        ¬¦  «                             d¦  «        } |                      ¦   «         |k     r>t          j        | |                      ||                      ¦   «         z
  ¦  «        g¦  «        } | d |…         S )NrP   rQ   rc   )rS   rT   rU   r   Úreshaperk   rl   Únew_ones)r{   r½   s     r$   rº   rº   <  s€   € Ø�;Š;‰=Œ=×Ò˜E­¬ÐÑ4Ô4×<Ò<¸RÑ@Ô@€DØ‡z‚z�|„|�gÒÐÝŒy˜$ §¢¨g¸¿
º
¹¼Ñ.DÑ EÔ EÐFÑGÔGˆØ���Œ>Ðr&   c                óp   — t          | dd ¦  «        }|€t          | d| ¦  «        }|€dS t          |¦  «        S )NÚprojected_contextr]   r   )rä   r·   )r]   rq   s     r$   re   re   C  sB   € Ý�WÐ1°4Ñ8Ô8€FØ€~Ý˜ )¨WÑ5Ô5ˆØ€~ØˆqÝ�FÑÔÐr&   r[   r\   r<   c                ó>  — |�|S | j         }|�Ä|j        dk    r¹|j        d         dk    r¨|d d …dd d …df         }t          j        t          j        |j        d         df|j        t          j        ¬¦  «        |d d …dd …f         |d d …d d…f         k                         t          j        ¦  «        gd¬¦  «        }t          j	        |d¬¦  «        S t          j        | j
        j        d         | j
        j        d         f| j
        j        t          j        ¬¦  «        S )Né   r   r   r`   rc   )ra   )Ú	positionsÚndimrj   rU   rl   rn   r_   ÚlongrT   Úcumsumrf   )r[   r\   rñ   Úframe_timesÚchangess        r$   ri   ri   L  st  € ØÐ ØÐØ”€IØÐ ¤°1Ò!4Ð!4¸¼ÈÔ9KÈaÒ9OÐ9OØ    1 a a a¨ 
Ô+ˆÝ”)ÝŒ[˜+Ô+¨AÔ.°Ð2¸;Ô;MÕUZÔU_Ð`Ñ`Ô`ÐcnÐopÐopÐopÐrsÐrtÐrtÐotÔcuð  zEð  FGð  FGð  FGð  ILð  JLð  ILð  FLô  zMò  dM÷  cQò  cQõ  RWô  R\ñ  c]ô  c]ð  ^Øð
ñ 
ô 
ˆõ Œ|˜G¨Ð+Ñ+Ô+Ð+ÝŒ;˜œÔ*¨1Ô-¨u¬|Ô/AÀ!Ô/DÐEÈeÌlÔNaÕinÔisÐtÑtÔtÐtr&   )r0   r   r   r‹   )r   rF   )r0   r   r›   rœ   r�   r   r_   rž   rŸ   r   r    r   r¡   r   r¢   r   rL   r   r   r£   )r«   r
   r]   r:   r{   r:   r­   r±   rŸ   r   r    r   r¢   r   rL   r   r   r>   )r¾   r   r   r¿   )rÈ   r   r   r.   )r«   r
   r¡   r   r   rÖ   )r¡   r   rÈ   r   r   r   )r]   r:   r   r   )r{   r:   r½   r   r   r:   )r]   r   r   r   )r[   r   r\   r<   r   r:   )!Ú
__future__r   rW   ÚreÚdataclassesr   Útypingr   r   rU   ÚcompilerŽ   rÍ   Ú
IGNORECASErÐ   Ú__all__r   r   r
   r8   r   r	   r   r   rª   r�   rÃ   r¨   rÙ   r·   rº   re   ri   r+   r&   r$   ú<module>rþ      s7  ðà "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à €€€à�2”:˜oÑ.Ô.Ð ØˆbŒjÐ+Ñ,Ô,€ØˆbŒjÐJÈBÌMÑZÔZ€ðð ð €ð €�$ÐÑÔð>ð >ð >ð >ð >ñ >ô >ñ Ôð>ð$ €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔð-ð -ð -ð -ð -ñ -ô -ñ Ôð-ð
 €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ Ôð'ðD1ð D1ð D1ð D1ð D1ñ D1ô D1ð D1ðNKð Kð Kð KðF !"Øðð ð ð ð ðL !"Øð[ð [ð [ð [ð [ð>ð ð ð ð(ð ð ð ð,%ð %ð %ð %ðð ð ð ð&Mð Mð Mð Mðð ð ð ðð ð ð ðuð uð uð uð uð ur&   