ó
    Cßj‡:  ã                  óP  • S r SSKJr  SSKJrJr  SSKJrJrJ	r	J
r
JrJr  SrSrSrSr\ " S	 S
5      5       rSS jrS S jrS!S jrS"S#S jjrS$S%S jjrS&S'S jjrS(S jrSSS\S.           S)S jjr\S.         S*S jjr\SS.       S+S jjrSr " S S5      rg),u  Bear/bull regime analysis â†’ size asymmetry before orders.

Denis 2026-10-26: when market is more bear + charts risk falling â†’ put
BIG lots on bids (catch bounce); vice versa for bull â†’ big asks.
Does NOT change half/skew/rest/kill â€” size bias only, within lot band.
é    )Úannotations)Ú	dataclassÚfield)ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleçš™™™™™É?Ú	buy_heavyÚ
sell_heavyÚneutralc                  ó’   • \ rS rSr% SrS\S'   \rS\S'   SrS\S'   Sr	S	\S
'   Sr
S	\S'   \" \S9rS\S'   \" \S9rS\S'   SS jrSrg)ÚRegimeSignalé   ç        ÚfloatÚscoreÚstrÚleanÚ	magnitudeNúOptional[float]Úlot_bid_usdÚlot_ask_usd)Údefault_factoryz	List[str]ÚreasonszDict[str, float]Ú
componentsc                ó  • [        [        U R                  5      S5      U R                  [        [        U R                  5      S5      U R
                  c  S O[        [        U R
                  5      S5      U R                  c  S O[        [        U R                  5      S5      [        U R                  5      S S U R                  R                  5        VVs0 s H  u  pU[        [        U5      S5      _M     snnS.$ s  snnf )Né   é   é   ©r   r   r   r   r   r   r   )Úroundr   r   r   r   r   r   Úlistr   r   Úitems)ÚselfÚkÚvs      Úsrc/regime.pyÚsnapshotÚRegimeSignal.snapshot   sÍ   € äœ5 §¡Ó,¨aÓ0Ø—I‘IÜœu T§^¡^Ó4°aÓ8à×(Ñ(Ñ0‘´e¼EÀ$×BRÑBRÓ<SÐUVÓ6Wð ×(Ñ(Ñ0‘´e¼EÀ$×BRÑBRÓ<SÐUVÓ6Wä˜DŸL™LÓ)¨"¨1Ð-Ø=A¿_¹_×=RÑ=RÔ=TÔUÒ=T±T°Q˜1œe¤E¨!£H¨aÓ0Ò0Ñ=TÒUñ
ð 	
ùó Vs   Ã"C>© )ÚreturnÚdict)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__annotations__ÚLEAN_NEUTRALr   r   r   r   r   r%   r   r/   r   r+   Ú__static_attributes__r-   ó    r*   r   r      sX   ‡ à€Eˆ5ÓØ€Dˆ#ÓØ€IˆuÓØ#'€K�Ó'Ø#'€K�Ó'Ù¨tÑ4€GˆYÓ4Ù#(¸Ñ#>€JÐ Ó>÷
r7   r   c                ó,   • [        U[        X 5      5      $ ©N)ÚmaxÚmin)ÚxÚloÚhis      r*   Ú_clampr?   -   s   € Üˆr”3�r“:ÓÐr7   c                óB  •  [        U R                  S5      b  U R                  S5      OU R                  S5      5      n[        U R                  S5      b  U R                  S5      OU R                  S5      5      n[        U R                  S5      b  U R                  S5      OU R                  S5      5      n[        U R                  S5      b  U R                  S5      OU R                  S5      5      n[	        XX45      S	::  a  g XX44$ ! [        [        4 a     g f = f)
NÚoÚopenÚhÚhighÚlÚlowÚcÚcloser   )r   ÚgetÚ	TypeErrorÚ
ValueErrorr;   )rG   rA   rC   rE   Úcls        r*   Ú_ohlcrM   1   sâ   € ðÜ §¡ c£
Ñ 6�!—%‘%˜”*¸A¿E¹EÀ&»MÓJˆÜ §¡ c£
Ñ 6�!—%‘%˜”*¸A¿E¹EÀ&»MÓJˆÜ §¡ c£
Ñ 6�!—%‘%˜”*¸A¿E¹EÀ%»LÓIˆÜ §¡ s£Ñ!7�1—5‘5˜”:¸Q¿U¹UÀ7»^ÓLˆô ˆ1�Ó˜1ÓØØ�ˆ;Ðøô	 ”zÐ"ó Ùðús   ‚C4D ÄDÄDc                óÔ   • [        U 5      US-   :  d  US:  a  g[        U S   5      n[        XS-   *    5      nUS::  d  US::  a  gX4-
  U-  S-  n[        U[        US5      -  SS5      $ )	u?   Return over last n_bars â†’ score in [-1,1]. Neg = down = bear.é   r   éÿÿÿÿr   ç      Y@g�íµ ÷Æ°>ç      ð¿ç      ð?)Úlenr   r?   r:   )ÚclosesÚn_barsÚ	scale_pctÚnowÚprevÚret_pcts         r*   Ú
_ret_scorer[   >   sx   € ä
ˆ6ƒ{�V˜a‘ZÓ 6¨A£:ØÜ
��r‘
Ó
€CÜ� 1™*˜Ñ&Ó'€DØˆqƒy�C˜1“HØØ‰z˜TÑ! EÑ)€Gä�'œC 	¨4Ó0Ñ0°$¸Ó<Ð<r7   c                óÖ  ^	^
^• [        U 5      [        SUS-  5      :  a  gX* S  Vs/ s H  n[        U5      PM     snm[        T5      nUS:  a  gUS-
  S-  m	[        T5      U-  m
[        U	U
U4S j[	        U5       5       5      n[        U	4S	 j[	        U5       5       5      =(       d    S
nXE-  nT
=(       d    TS   nUS:”  a  XcS-
  -  U-  S-  OSn[        US-  SS
5      $ s  snf )u>   Linear slope of recent closes, normalized by price â†’ [-1,1].r    r!   r   Né   rO   ç       @c              3  ó>   >#   • U  H  oT-
  TU   T-
  -  v •  M     g 7fr9   r-   )Ú.0ÚiÚmean_iÚmean_xÚxss     €€€r*   Ú	<genexpr>Ú_slope_score.<locals>.<genexpr>V   s    øé € Ð@²x°!�6‰z˜b ™e f™nÖ-²xùs   ƒc              3  ó2   >#   • U  H  oT-
  S -  v •  M     g7f)r!   Nr-   )r`   ra   rb   s     €r*   re   rf   W   s   øé € Ð2ª A�6‰z˜aÖªùs   ƒrS   rP   r   rQ   çš™™™™™é?rR   )rT   r:   r   ÚsumÚranger?   )rU   Únr<   ÚmÚnumÚdenÚslopeÚmidÚpctrb   rc   rd   s            @@@r*   Ú_slope_scorerr   K   sÞ   ú€ ä
ˆ6ƒ{”S˜˜A ™F“^Ó#ØØ" 2 3™KÓ	(šK�qŒ%�Ž(™KÑ	(€BÜˆB‹€AØˆ1ƒuØà�!‰e�s‰]€FÜ�‹W�q‰[€FÜ
Ö@´u¸Q´xÓ@Ó
@€CÜ
Ô2¬¨q¬Ó2Ó
2×
9°c€CØ‰I€EØ
×
�B�r‘F€Cà-0°1«Wˆ5˜‘E‰?˜SÑ  EÒ
)¸#€CÜ�#˜‘)˜T 3Ó'Ð'ùò 
)s   ¨C&c                ó`  • [        U 5      U* S n[        U5      S:  a  gSnSnSnU He  n[        U5      nU(       d  M  Uu  p‰p«Xš-
  nUS::  a  M(  U	[        X‹5      -
  n[	        X‹5      U
-
  nXMU-  -  nX>U-  -  nU[        X¸-
  5      U-  -  nMg     XC-   nUS::  a  gXC-
  U-  n[        USS5      $ )u>  Upper wick dominance â†’ bull exhaustion (+), lower wick â†’ bear bounce (âˆ’).

More lower-wick pressure (selling into lows that reject) is bearish pressure
but for our catch-side logic we want raw direction: heavy lower wicks after
downs = crash risk â†’ negative score (bear). Heavy upper wicks = spike risk â†’ +.
Nr!   r   r   ç•Ö&è.>rR   rS   )r%   rT   rM   r:   r;   Úabsr?   )Úcandlesrk   ÚrowsÚlowerÚupperÚbodyrG   ÚohlcrA   rC   rE   rL   ÚrngÚupr=   ÚtotÚnets                    r*   Ú_wick_pressurer€   _   sÛ   € ô �‹=˜!˜˜Ð€DÜ
ˆ4ƒy�1ƒ}ØØ€EØ€EØ€DÛˆÜ�Q‹xˆÞÙØ‰ˆˆaØ‰eˆØ�!‹8ÙØ”�Q“‰^ˆÜ�‹Z˜!‰^ˆØ�c‘ÑˆØ�c‘ÑˆØ”�B‘F“˜cÑ!Ñ!Šñ ð ‰-€CØ
ˆdƒ{Øà‰=˜CÑ
€CÜ�#�t˜SÓ!Ð!r7   c                óX  • [        U 5      S:  a  gSn[        [        U 5      S-
  SS5       Hc  nX   XS-
     -
  n[        U5      S:  a    OGUS:”  a  SOSnUS:X  a  UnOUS:”  a  US:”  d  US:  a  US:  a  X%-  nO  O[        U5      U:¼  d  Mc    O   [        U[	        U5      -  SS5      $ )	u(   Consecutive up/down closes â†’ Â± score.r]   r   r   rO   rP   gê-�™—q=rR   rS   )rT   rj   ru   r?   r   )rU   Úmax_nÚstreakra   ÚdÚsigns         r*   Ú_streak_scorer†   �   sµ   € ä
ˆ6ƒ{�QƒØØ€FÜ”3�v“; ‘? A rÖ*ˆØ‰I˜ 1™u™Ñ%ˆÜˆq‹6�E‹>ÙØ˜“E‰q˜rˆØ�Q‹;Ø‰FØ�Q‹h˜6 A›:¨4°!«8¸À»
Ø‰N‰FáÜˆv‹;˜%ÕÙñ +ô �&œ5 ›<Ñ'¨¨sÓ3Ð3r7   c                ó|   • U (       a  X::  d  US::  a  g[        U S   5      nX2-
  X-
  -  n[        SU-  S-
  SS5      $ )u?   Where is price in 24h range? Near high â†’ +, near low â†’ âˆ’.r   r   rP   r^   rS   rR   )r   r?   )rU   r>   r=   ÚpxÚposs        r*   Ú_range_pos_scorerŠ   –   sE   € æ�R“X  q£ØÜ	ˆv�b‰zÓ	€BØ‰7�r‘wÑ
€Cä�#˜‘)˜c‘/ 4¨Ó-Ð-r7   Nç     À’@ç     @Ÿ@)Úmids_1mÚlot_usd_minÚlot_usd_maxÚneutral_absc               óŽ  • U =(       d    /  Vs/ s H  n[        U5      (       d  M  UPM     nn/ n/ n/ n	U HO  n[        U5      n
U
(       d  M  U
u  p¼pÞUR                  U5        UR                  U5        U	R                  U5        MQ     U(       aÀ  / nU Hµ  n [        U[        5      (       a?  [	        UR                  S5      b  UR                  S5      OUR                  SS5      5      nOD[        U[        [        45      (       a  [        U5      S:¼  a  [	        US   5      nO[	        U5      nUS:”  a  UR                  U5        Mµ  M·     UnO/ n0 n/ n[        U5      S:  a<  [        U5      S:  a-  [        S	[        S
/S9n[        S	X#US9SS u  Ul        Ul        U$ [        U5      S:¼  a  [!        USSS9O
[!        USSS9n[        U5      S:¼  a  [!        USSS9O*[!        U[#        S[%        S[        U5      S-
  5      5      SS9nUUS'   UUS'   ['        [        U5      S:¼  a  UOUSS9nUUS'   [)        USS9nUUS'   [+        [        U5      S:¼  a  UOUSS9nUUS'   U(       aY  U	(       aR  [%        U[#        [        U5      S5      * S 5      n[#        U	[#        [        U	5      S5      * S 5      n[-        UUU5      nOS	nUUS'   S U-  S!U-  -   S"U-  -   S#U-  -   S$U-  -   S$U-  -   n[/        US%S&5      nUS'::  d  US'::  a  UR                  S(5        US):¼  d  US):¼  a  UR                  S*5        US'::  a  UR                  S+5        US):¼  a  UR                  S,5        US-::  a  UR                  S.5        US/:¼  a  UR                  S05        US1::  a  UR                  S25        US3:¼  a  UR                  S45        [        UX#US9u  nn n!n"U![0        :X  a  UR3                  SS55        O/U![4        :X  a  UR3                  SS65        OUR3                  SS75        [        UU!U"UU UUS89$ s  snf ! [        [        4 a     GM¯  f = f)9u­   Score market lean from 5m OHLC (+ optional 1m closes).

score < 0 â†’ bear / crash risk â†’ buy_heavy (big bids)
score > 0 â†’ bull / melt-up risk â†’ sell_heavy (big asks)
rG   Nrp   r   r!   rO   r    r"   r   Úinsufficient_data)r   r   r   ©r�   é   é   gffffffÖ?)rW   r]   é   é   rh   é   gš™™™™™á?Úret_15mÚret_60m)rk   ro   Úwick)r‚   rƒ   i   Ú	range_posg333333Ó?g      Ð?r   g333333Ã?çš™™™™™©?rR   rS   g      à¿Údown_returnç      à?Ú	up_returnÚdown_streakÚ	up_streakg333333ã¿Únear_24h_lowg333333ã?Únear_24h_highgš™™™™™Ù¿Úlower_wick_pressuregš™™™™™Ù?Úupper_wick_pressureÚbear_buy_heavyÚbull_sell_heavyr   r#   )rM   ÚappendÚ
isinstancer/   r   rI   r%   ÚtuplerT   rJ   rK   r   r5   Úlot_targetsr   r   r[   r;   r:   rr   r€   r†   rŠ   r?   ÚLEAN_BUYÚinsertÚ	LEAN_SELL)#Ú
candles_5mr�   rŽ   r�   r�   rG   rv   rU   ÚhighsÚlowsr{   Ú_orC   rE   rL   Úextrarl   r)   Ú	closes_1mr   r   ÚsigÚr15Úr60ro   r›   rƒ   Úhi24Úlo24Úrng_posr   Úlot_bidÚlot_askr   Úmags#                                      r*   Úanalyze_regimer¿       s\  € ð &×+¨Ð+Ó9Ò+�Q´°a·�qÑ+€GÐ9Ø€FØ€EØ€DÛˆÜ�Q‹xˆÞÙØ‰ˆˆqØ�‰�bÔØ�‰�QŒØ�‰�AŽñ ö ØˆÛˆAð
Ü˜a¤×&Ñ&Ü¨A¯E©E°#«JÑ,B˜aŸe™e CœjÈÏÉÈeÐUVËÓX‘AÜ ¤D¬% =×1Ñ1´c¸!³fÀ³kÜ˜a ™d›‘Aä˜a›�AØ�q“5Ø—L‘L –Oñ ñ ð ‰	àˆ	à#%€JØ€Gä
ˆ6ƒ{�Qƒœ3˜y›>¨AÓ-Ü ¬<ÐBUÐAVÑWˆÜ+6Ø�°{ñ,
à
ˆ1ð,Ñ(ˆŒ˜œð ˆ
ô 8;¸9³~ÈÓ7KŒ*�Y ¨dÒ
3ÔQ[Ø�˜TñR€Cô 47°v³;À"Ó3DŒ*�V˜R¨3Ò
/Ì*Ø”�A”s˜1œc &›k¨A™oÓ.Ó/¸4ñK€Cð  €JˆyÑØ€JˆyÑä¤3 v£;°!Ó#3™¸ÀbÑI€EØ€JˆwÑä˜' QÑ'€DØ€JˆvÑä¤S¨£[°AÓ%5™6¸9ÈAÑN€FØ!€JˆxÑæ–Ü�5œ#œc %›j¨#Ó.Ð.Ð0Ð1Ó2ˆÜ�4œœS ›Y¨Ó,Ð,Ð.Ð/Ó0ˆÜ" 6¨4°Ó6‰àˆØ%€Jˆ{Ñð
 	ˆs‰
Ø
�‰*ñ	à
�‰,ñ	ð �‰-ñ	ð �‰+ñ		ð
 �‰.ñ	ð 
ô �5˜$ Ó$€Eà
ˆdƒ{�c˜T“kØ�‰�}Ô%Ø
ˆcƒz�S˜C“ZØ�‰�{Ô#Ø�ƒ~Ø�‰�}Ô%Ø�ƒ}Ø�‰�{Ô#Ø�$ƒØ�‰�~Ô&Ø�#ƒ~Ø�‰�Ô'Øˆtƒ|Ø�‰Ð,Ô-Øˆsƒ{Ø�‰Ð,Ô-ä"-Øˆ{°[ñ#Ñ€GˆW�d˜Cð ŒxÓØ�‰�qÐ*Õ+Ø	”Ó	Ø�‰�qÐ+Õ,à�‰�q˜)Ô$äØØØØØØØñð ùò] :øô4 œzÐ*ó Ûðús   ŽP*¦P*ÂB/P/Ð/QÑQr“   c               óè  • [        [        X5      5      n[        [        X5      5      nSXE-   -  nSXT-
  -  n[        [        U 5      SS5      n[	        U5      [        U5      :  d  US::  a	  Xf[
        S4$ [	        U5      [        U5      -
  [        SS[        U5      -
  5      -  n	[        U	SS5      n	US:”  a  U	OU	* n
[        XjU-  -
  XE5      n[        XjU-  -   XE5      nU
S:  a  [        O[        nX¼XÙ4$ )u¹   Map score â†’ (lot_bid_usd, lot_ask_usd, lean, magnitude).

Bear (score=-1): bid=max, ask=min (catch bounce with size).
Bull (score=+1): bid=min, ask=max.
Neutral: both at mid of band.
rŸ   rR   rS   r   r   rt   )r   r;   r:   r?   ru   r5   r­   r¯   )r   Úlot_minÚlot_maxr�   r=   r>   rp   ÚhalfÚsr¾   Úsignedr¼   r½   r   s                 r*   r¬   r¬   &  sô   € ô 
Œs�7Ó$Ó	%€BÜ	Œs�7Ó$Ó	%€BØ
�‘‰/€CØ�"‘'‰?€DÜŒu�U‹|˜T 3Ó'€AÜ
ˆ1ƒv”�kÓ"Ó" d¨a£iØœ sÐ*Ð*äˆq‹6”E˜+Ó&Ñ&¬#¨d°C¼%ÀÓ:LÑ4LÓ*MÑ
M€CÜ
��c˜3Ó
€CØ˜“E‰S ˜t€Fô �S D™=Ñ(¨"Ó1€GÜ�S D™=Ñ(¨"Ó1€GØ “z�8¤y€DØ˜TÐ&Ð&r7   g«ªªªªªú?)r�   Ú	max_ratioc               óx  • [        [        U 5      SS5      n[        U5      [        U5      :  a
  SS[        S4$ [        U5      [        U5      -
  [	        SS[        U5      -
  5      -  n[        USS5      nSU[        U5      S-
  -  -   nSSKnUR                  U5      nSU-  nUS:  a	  Xx[        U4$ X‡[        U4$ )uÿ   Optional mult form relative to a common base (bid_mult, ask_mult, lean, mag).

At full bear: bid_mult = sqrt(max_ratio)â‰ˆ1.291, ask_mult = 1/that
so bid/ask â‰ˆ max_ratio when base is geometric mid â€” kept for tests.
Prefer lot_targets for live wiring.
rR   rS   r   rt   r   N)	r?   r   ru   r5   r:   ÚmathÚsqrtr­   r¯   )	r   r�   rÆ   rÄ   r¾   ÚratiorÈ   ÚheavyÚlights	            r*   Úsize_mults_for_scorerÍ   F  sÁ   € ô 	Œu�U‹|˜T 3Ó'€AÜ
ˆ1ƒv”�kÓ"Ó"Ø�Cœ sÐ*Ð*Üˆq‹6”E˜+Ó&Ñ&¬#¨d°C¼%ÀÓ:LÑ4LÓ*MÑ
M€CÜ
��c˜3Ó
€Cà�#œ˜yÓ)¨CÑ/Ñ0Ñ0€EÛà�I‰I�eÓ€EØ�%‰K€EØˆ1ƒuØœX sÐ*Ð*Øœ CÐ'Ð'r7   g     Àb@c                  óV   • \ rS rSrSr\4S
S jjrSSS\S.           SS jjrS	r	g)ÚRegimeLeanHoldig  a+  Sticky lean: keep last accepted lean for hold_s before allowing a change.

Raw score/components still update every call; only lean + lot targets are
sticky. When held, lots are recomputed from the held lean's sign using the
current |magnitude| so size still tracks conviction without flipping side.
c                óz   • [        U5      U l        [        U l        SU l        SU l        SU l        [        U l        g )Nr   r‹   rŒ   )	r   Úhold_sr5   Ú_leanÚ_sinceÚ_lot_minÚ_lot_maxÚNEUTRAL_ABSÚ_neutral_abs)r'   rÑ   s     r*   Ú__init__ÚRegimeLeanHold.__init__o  s1   € Ü˜F“mˆŒÜ&ˆŒ
Ø ˆŒØ%ˆŒØ%ˆŒÜ#.ˆÕr7   Nr‹   rŒ   )rX   rŽ   r�   r�   c               óH  • SS K n[        Ub  UOUR                  5       5      n[        U5      U l        [        U5      U l        [        U5      U l        UR
                  =(       d    [        nU R                  S::  a  X€l        Xpl        U$ X€R                  :X  a  Xpl        U$ XpR                  -
  U R                  :¼  a  X€l        Xpl        U$ U R                  n	[        UR                  =(       d    S5      n
[        UR                  =(       d    S5      nU	[        :X  a7  [        SU R                  U R                  U R                  S9u  pÍ  n[        nSnOoU R                  nUU
SU-
  -  -   nU	[        :X  a  U* nU
S:  a  U	[        :X  a  U* S-
  OUS-   n[        UU R                  U R                  U R                  S9u  pÍnnU	n[        UR                  =(       d    / 5      nUR!                  SSU	 35        [#        UUUUUUS S [%        UR&                  =(       d    0 5      S	9$ )
Nr   r   r“   rS   rt   r�   z
lean_hold:r"   r#   )Útimer   rÔ   rÕ   r×   r   r5   rÓ   rÒ   rÑ   r   r   r¬   r­   r%   r   r®   r   r/   r   )r'   r¶   rX   rŽ   r�   r�   Ú_timeÚtÚraw_leanÚheldr¾   r   ÚbidÚaskÚ_Úout_leanÚout_magÚnaÚsynthr   s                       r*   ÚapplyÚRegimeLeanHold.applyw  sé  € ó 	ä˜™‘#¨e¯j©j«lÓ;ˆÜ˜kÓ*ˆŒÜ˜kÓ*ˆŒÜ! +Ó.ˆÔØ—8‘8×+œ|ˆà�;‰;˜#Óà!ŒJØŒKØˆJà—z‘zÓ!ØŒKØˆJð —‘‰O §¡Ó+Ø!ŒJØŒKØˆJð �z‰zˆÜ�C—M‘M×( SÓ)ˆÜ�c—i‘i×& 3Ó'ˆØ”<ÓÜ(Ø�T—]‘] D§M¡M¸t×?PÑ?Pñ‰NˆC�a˜ô $ˆHØ‰Gð
 ×"Ñ"ˆBØ˜  b¡Ñ)Ñ)ˆEØ”xÓØ˜�à�T‹zØ&*¬hÓ&6˜˜˜dš
¸BÀ¹I�Ü*5Ø�t—}‘} d§m¡mÀ×ARÑARñ+Ñ'ˆC�h ð ˆHä�s—{‘{×( bÓ)ˆØ�‰�q˜J t fÐ-Ô.ÜØØØØØØ˜B˜Q�KÜ˜CŸN™N×0¨bÓ1ñ
ð 	
r7   )rÒ   rÕ   rÔ   r×   rÓ   rÑ   )rÑ   r   r.   ÚNone)r¶   r   rX   r   rŽ   r   r�   r   r�   r   r.   r   )
r0   r1   r2   r3   Ú__doc__ÚLEAN_HOLD_SrØ   rÖ   rç   r6   r-   r7   r*   rÏ   rÏ   g  sk   † ñð (3ö /ð  $Ø#Ø#Ø(ñE
àðE
ð ð	E
ð
 ðE
ð ðE
ð ðE
ð 
÷E
ð E
r7   rÏ   )r<   r   r=   r   r>   r   r.   r   )rG   r/   r.   z+Optional[Tuple[float, float, float, float]])rU   úSequence[float]rV   ÚintrW   r   r.   r   )r—   )rU   rì   rk   rí   r.   r   )r˜   )rv   zSequence[dict]rk   rí   r.   r   )r"   )rU   rì   r‚   rí   r.   r   )rU   rì   r>   r   r=   r   r.   r   )r°   zSequence[dict] | Noner�   zSequence[Any] | NonerŽ   r   r�   r   r�   r   r.   r   )
r   r   rÁ   r   rÂ   r   r�   r   r.   úTuple[float, float, str, float])r   r   r�   r   rÆ   r   r.   rî   )rê   Ú
__future__r   Údataclassesr   r   Útypingr   r   r   r	   r
   r   rÖ   r­   r¯   r5   r   r?   rM   r[   rr   r€   r†   rŠ   r¿   r¬   rÍ   rë   rÏ   r-   r7   r*   Ú<module>rò      s?  ðñõ #ç (ß =× =ð €Ø€Ø€	Ø€ð ÷
ð 
ó ð
ô2ô
ô
=ö(ö("öD4ô*.ð %)ØØØ$ñCØ%ðCð "ðCð ð	Cð
 ðCð ðCð õCðV %ñ'Øð'àð'ð ð'ð
 ð'ð %õ'ðF %Ø&ñ	(Øð(ð ð(ð ð	(ð
 %õ(ð< €÷U
ò U
r7   