Ë
    ˜V.jQ#  ã                   ó†   — d Z ddlmZ ddlmZ ddlmZmZ dZ G d„ d«      Z	 G d„ d	e
«      Z G d
„ d«      Z G d„ d«      Zy)z Dependency graph implementation.é    )ÚCounter)Údedent)Úbytes_to_strÚsafe_str)ÚDOTÚ
CycleErrorÚDependencyGraphÚGraphFormatterc                   ó>   — e Zd ZdZ ed«      ZdZdZdZdZ	ddd	œZ
d
Zy)r   z$Constants related to the dot format.z=
        {IN}{type} {id} {{
        {INp}graph [{attrs}]
    z{name}={value}z{INp}"{0}" [{attrs}]z {INp}"{0}" {dir} "{1}" [{attrs}]z, z--z->)ÚgraphÚdigraphz{IN}}}N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚHEADÚATTRÚNODEÚEDGEÚATTRSEPÚDIRSÚTAIL© ó    úTC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/utils/graph.pyr   r   
   s9   „ Ù.áð ó 	€Dð €DØ!€DØ-€DØ€GØ dÑ+€DØ�Dr   r   c                   ó   — e Zd ZdZy)r   z)A cycle was detected in an acyclic graph.N)r   r   r   r   r   r   r   r   r      s   „ Ú3r   r   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„ Zd„ Zd„ Zd„ Zd„ ZexZZd„ Zdd„Zy)r	   a6  A directed acyclic graph of objects and their dependencies.

    Supports a robust topological sort
    to detect the order in which they must be handled.

    Takes an optional iterator of ``(obj, dependencies)``
    tuples to build the graph from.

    Warning:
        Does not support cycle detection.
    Nc                 ó`   — |xs
 t        «       | _        i | _        |�| j                  |«       y y ©N)r
   Ú	formatterÚadjacentÚupdate)ÚselfÚitr    s      r   Ú__init__zDependencyGraph.__init__*   s-   € Ø"Ò6¤nÓ&6ˆŒØˆŒØˆ>Ø�K‰K˜�Oð r   c                 ó<   — | j                   j                  |g «       y)zAdd an object to the graph.N)r!   Ú
setdefault©r#   Úobjs     r   Úadd_arczDependencyGraph.add_arc0   s   € à�‰× Ñ   bÕ)r   c                 ó,   — | |   j                  |«       y)z]Add an edge from object ``A`` to object ``B``.

        I.e. ``A`` depends on ``B``.
        N)Úappend)r#   ÚAÚBs      r   Úadd_edgezDependencyGraph.add_edge4   s   € ð
 	ˆQ‰�‰�qÕr   c                 óN   — | j                   j                  |j                   «       y)zAdd nodes from another graph.N)r!   r"   )r#   r   s     r   ÚconnectzDependencyGraph.connect;   s   € à�‰×Ñ˜UŸ^™^Õ,r   c                 óV  — t        «       }| j                  «       }|D ��ci c]  }|D ]  }||“Œ Œ }}}|D ]  }|j                  |«       Œ | D ].  }||   }| |   D ]  }||   }||k7  sŒ|j                  ||«       Œ! Œ0 |j	                  «       D �	cg c]  }	|	d   ‘Œ	 c}	S c c}}w c c}	w )z�Sort the graph topologically.

        Returns:
            List: of objects in the order in which they must be handled.
        r   )r	   Ú	_tarjan72r*   r/   Ú_khan62)
r#   r   Ú
componentsÚ	componentÚnodeÚNCÚnode_cÚ	successorÚsuccessor_cÚts
             r   ÚtopsortzDependencyGraph.topsort?   sÅ   € ô  Ó!ˆØ—^‘^Ó%ˆ
ñ .8ô
Ù-7 	ÃI¸DˆD�)‰OÀIˆD¨Zð 	ñ 
ó $ˆIØ�M‰M˜)Õ$ð $ãˆDØ˜‘XˆFØ! $œZ�	Ø  ™m�Ø˜[Ó(Ø—N‘N 6¨;Õ7ñ (ð ð $Ÿm™mœoÓ.™o˜��!“˜oÑ.Ð.ùó
ùò /s    B ÂB&c                 óª   — 	 t        | |   «      g}| |   D ]"  }|j                  | j                  |«      «       Œ$ t	        |«      S # t        $ r Y yw xY w)z5Return the valency (degree) of a vertex in the graph.r   )ÚlenÚKeyErrorr,   Ú
valency_ofÚsum)r#   r)   Úlr7   s       r   rA   zDependencyGraph.valency_ofU   sY   € ð	Ü�T˜#‘Y“Ð ˆAð ˜”IˆDØ�H‰H�T—_‘_ TÓ*Õ+ð ä�1‹vˆøô	 ò 	Ùð	ús   ‚A Á	AÁAc                 ó–   — t        |«      }|D ]  \  }}| j                  |«       Œ |D ]  \  }}|D ]  }| j                  ||«       Œ Œ  y)z=Update graph with data from a list of ``(obj, deps)`` tuples.N)Úlistr*   r/   )r#   r$   Útupsr)   Ú_ÚdepsÚdeps          r   r"   zDependencyGraph.update_   sK   € ä�B‹xˆÛ‰FˆC�Ø�L‰L˜Õð ã‰IˆC�Û�Ø—‘˜c 3Õ'ñ ñ r   c                 ó0   — d„ | j                  «       D «       S )z8Return generator that yields for all edges in the graph.c              3   ó,   K  — | ]  \  }}|sŒ	|–— Œ y ­wr   r   )Ú.0r)   Úadjs      r   Ú	<genexpr>z(DependencyGraph.edges.<locals>.<genexpr>j   s   è ø€ Ð8¡L™˜˜S²C”¡Lùs   ‚
�)Úitems©r#   s    r   ÚedgeszDependencyGraph.edgesh   s   € á8 D§J¡J¤LÓ8Ð8r   c                 ó\  — t        «       }g }| D ]  }| |   D ]  }||xx   dz  cc<   Œ Œ | D �cg c]
  }||   rŒ	|‘Œ }}|rU|j                  «       }|j                  |«       | |   D ])  }||xx   dz  cc<   ||   dk(  sŒ|j                  |«       Œ+ |rŒU|j                  «        |S c c}w )z‚Perform Khan's simple topological sort algorithm from '62.

        See https://en.wikipedia.org/wiki/Topological_sorting
        é   r   )r   Úpopr,   Úreverse)r#   ÚcountÚresultr7   r:   Úreadys         r   r4   zDependencyGraph._khan62l   sÀ   € ô
 “	ˆØˆãˆDØ! $œZ�	Ø�iÓ  AÑ%Ô ñ (ð ñ #'Ó:¡$˜$¨e°D«k’ $ˆÐ:áØ—9‘9“;ˆDØ�M‰M˜$Ôà! $œZ�	Ø�iÓ  AÑ%Ó Ø˜Ñ# qÓ(Ø—L‘L Õ+ð (ò	 ð 	�‰ÔØˆùò ;s
   ¯
B)ºB)c                 óN   ‡ ‡‡‡‡— g g i cŠŠŠˆˆˆ ˆˆfd„Š‰ D ]
  } ‰|«       Œ ‰S )z©Perform Tarjan's algorithm to find strongly connected components.

        See Also:
            :wikipedia:`Tarjan%27s_strongly_connected_components_algorithm`
        c                 ó:  •— | ‰v ry t        ‰«      }|‰| <   t        ‰	«      }‰	j                  | «       ‰|    D ]  } ‰
|«       t        ‰|    ‰|   «      ‰| <   Œ! |‰|    k(  r:t        ‰	|d  «      }g ‰	|d  ‰j                  |«       |D ]  }t        ‰«      ‰|<   Œ y y r   )r?   r,   ÚminÚtuple)r7   ÚnumÚ	stack_posr:   r6   ÚitemÚlowrW   r#   ÚstackÚvisits         €€€€€r   rb   z(DependencyGraph._tarjan72.<locals>.visitŒ   sµ   ø€ Ø�s‰{ØÜ�c“(ˆCØˆC�‰IÜ˜E›
ˆIØ�L‰L˜Ôà! $œZ�	Ù�iÔ Ü  D¡	¨3¨y©>Ó:��D’	ð (ð �c˜$‘iÒÜ! %¨	¨
Ð"3Ó4�	Ø$&��i�jÐ!Ø—‘˜iÔ(Û%�DÜ # D£	�C˜’Iñ &ð	  r   r   )r#   r7   r`   rW   ra   rb   s   ` @@@@r   r3   zDependencyGraph._tarjan72„   s9   ü€ ð    RÐˆ��s÷	*ð 	*ó& ˆDÙ�$�Kð ð ˆr   c                 ón  ‡‡‡‡	— t        «       Š	|xs | j                  Šˆfd„Šˆˆˆ	fd„} ‰‰j                  «       «       | j                  «       D ]L  \  }}|s |‰j                  |«       |D ]-  } |‰j
                  |«        ‰‰j                  ||«      «       Œ/ ŒN  ‰‰j                  «       «       y)zñConvert the graph to DOT format.

        Arguments:
            fh (IO): A file, or a file-like object to write the graph to.
            formatter (celery.utils.graph.GraphFormatter): Custom graph
                formatter to use.
        c                 ó2   •— t        t        | «      ‰¬«       y )N)Úfile)Úprintr   )ÚsÚfhs    €r   ÚPz!DependencyGraph.to_dot.<locals>.P¯   s   ø€ Ü”,˜q“/¨Ö+r   c                 óŠ   •— ‰j                  |«      ‰vr/ ‰ | |«      «       ‰j                  ‰j                  |«      «       y y r   )ÚlabelÚadd)Úfunr)   ri   ÚdrawÚseens     €€€r   Úif_not_seenz+DependencyGraph.to_dot.<locals>.if_not_seen²   s7   ø€ Ø�z‰z˜#‹ dÑ*Ù‘#�c“(”Ø—‘˜Ÿ™ C›Õ)ð +r   N)Úsetr    ÚheadrO   Úterminal_noder7   ÚedgeÚtail)
r#   rh   r    rp   r)   r!   Úreqri   rn   ro   s
    `     @@@r   Úto_dotzDependencyGraph.to_dot¤   s”   û€ ô ‹uˆØÒ*˜DŸN™Nˆô	,ö	*ñ
 	
ˆ$�)‰)‹+ŒØ!ŸZ™Zž\‰MˆC�ÙÙ˜D×.Ñ.°Ô4Û�Ù˜DŸI™I sÔ+Ù�$—)‘)˜C Ó%Õ&ñ  ð *ñ 	
ˆ$�)‰)‹+�r   c                 ó@   — | j                   r| j                  |«      S |S r   )r    r(   s     r   ÚformatzDependencyGraph.formatÀ   s   € Ø&*§n¢nˆt�~‰~˜cÓ"Ð=¸#Ð=r   c                 ó,   — t        | j                  «      S r   )Úiterr!   rP   s    r   Ú__iter__zDependencyGraph.__iter__Ã   s   € Ü�D—M‘MÓ"Ð"r   c                 ó    — | j                   |   S r   ©r!   )r#   r7   s     r   Ú__getitem__zDependencyGraph.__getitem__Æ   s   € Ø�}‰}˜TÑ"Ð"r   c                 ó,   — t        | j                  «      S r   )r?   r!   rP   s    r   Ú__len__zDependencyGraph.__len__É   s   € Ü�4—=‘=Ó!Ð!r   c                 ó   — || j                   v S r   r~   r(   s     r   Ú__contains__zDependencyGraph.__contains__Ì   s   € Ø�d—m‘mÐ#Ð#r   c                 ó6   — | j                   j                  «       S r   )r!   rO   rP   s    r   Ú_iterate_itemszDependencyGraph._iterate_itemsÏ   s   € Ø�}‰}×"Ñ"Ó$Ð$r   c                 ó8   ‡ — dj                  ˆ fd„‰ D «       «      S )NÚ
c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr   )Ú	repr_node)rL   ÚNr#   s     €r   rN   z+DependencyGraph.__repr__.<locals>.<genexpr>Ô   s   øè ø€ Ð9±D¨q˜Ÿ™¨×*±Dùs   ƒ)ÚjoinrP   s   `r   Ú__repr__zDependencyGraph.__repr__Ó   s   ø€ Ø�y‰yÓ9±DÓ9Ó9Ð9r   c                 ó`  — |j                  || j                  |«      «      g}|| v rx| |   D ]p  }|j                  || j                  |«      «      }|j                  d|z  |z   «       |j                  | j	                  ||dz   «      j                  d«      dd  «       Œr dj                  |«      S )Nz     rS   r‡   )ry   rA   r,   Úextendr‰   Úsplitr‹   )r#   r)   ÚlevelÚfmtÚoutputÚotherÚds          r   r‰   zDependencyGraph.repr_nodeÖ   sŸ   € Ø—*‘*˜S $§/¡/°#Ó"6Ó7Ð8ˆØ�$‰;Ø˜cœ�Ø—J‘J˜u d§o¡o°eÓ&<Ó=�Ø—‘˜g¨™o°Ñ1Ô2Ø—‘˜dŸn™n¨U°E¸A±IÓ>×DÑDÀTÓJÈ1È2ÐNÕOð #ð �y‰y˜Ó Ð r   ©NNr   )rS   z{0}({1}))r   r   r   r   r%   r*   r/   r1   r=   rA   r"   rQ   r4   r3   rw   ry   r|   r   r�   rƒ   r…   rO   Ú	iteritemsrŒ   r‰   r   r   r   r	   r	      sq   „ ñ
óò*òò-ò/ò,ò(ò9òò0ó@ò8>ò#ò#ò"ò$ò%à&Ð&€EˆIò:ô!r   r	   c                   óà  — e Zd ZdZej
                  j                  «       Zej                  j                  «       Z	ej                  j                  «       Zej                  j                  «       Zej                  j                  «       Zej                   Z eej&                  «      ZdddddœZddd	d
œZdddœZdddœZddiZ	 	 d d„Zd„ Zd!d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d"d„Z%d"d„Z&y)#r
   zFormat dependency graphs.ÚboxÚveeÚfilledÚHelveticaNeue)ÚshapeÚ	arrowheadÚstyleÚfontnameÚdarkseagreen4Úblackgffffffæ?)ÚcolorÚ
arrowcolorÚ	arrowsizeÚ
palegreen3Ú
palegreen4)Ú	fillcolorr¢   Ú
palegreen1Ú
palegreen2ÚbgcolorÚ	mintcreamNc                 ó^  — |xs d| _         || _        |xs d| _        | j                  | j                     | _        ||xs dz  | _        | j
                  |z   | _        t        | j                  fi |¤Ž| _        t        | j                  | j                  | j                  «      ¬«      | _	        y )NÚdependenciesr   r   )Úroot)Úidr®   ÚtypeÚ_dirsÚ	directionÚINÚINpÚdictÚschemeÚgraph_schemerk   )r#   r®   r°   r¯   ÚindentÚinwr¶   s          r   r%   zGraphFormatter.__init__ú   s‹   € àÒ&˜ˆŒØˆŒ	ØÒ%˜IˆŒ	ØŸ™ D§I¡IÑ.ˆŒØ˜š 1Ñ%ˆŒØ—7‘7˜S‘=ˆŒÜ˜4Ÿ;™;Ñ1¨&Ñ1ˆŒÜ  ×!2Ñ!2¸¿¹ÀDÇIÁIÓ9NÔOˆÕr   c                 óJ   — d|› d�}| j                  | j                  ||¬«      S )NÚ")ÚnameÚvalue)ÚFMTÚ_attr)r#   r¼   r½   s      r   ÚattrzGraphFormatter.attr  s(   € Ø�E�7˜!�ˆØ�x‰x˜Ÿ
™
¨°UˆxÓ;Ð;r   c           
      ó¸   ‡ — t        ‰ j                  fi |rt        |fi |xs i ¤Žn|¤Ž}‰ j                  j                  ˆ fd„|j	                  «       D «       «      S )Nc              3   óZ   •K  — | ]"  \  }}t        ‰j                  ||«      «      –— Œ$ y ­wr   )r   rÀ   )rL   ÚkÚvr#   s      €r   rN   z'GraphFormatter.attrs.<locals>.<genexpr>  s(   øè ø€ ð "
Ù2;©$¨!¨QŒH�T—Y‘Y˜q !“_×%±)ùs   ƒ(+)rµ   r¶   Ú_attrsepr‹   rO   )r#   r”   r¶   s   `  r   ÚattrszGraphFormatter.attrs	  sR   ø€ Ü�—‘ÑI¹6¤ VÑ 7¨qªw°BÒ 7ÀqÑIˆØ�}‰}×!Ñ!ó "
Ø23·'±'´)ó"
ó 
ð 	
r   c           	      óœ   — | j                  | j                  | j                  | j                  | j	                  || j
                  «      ¬«      S )N)r¯   r°   rÆ   )r¾   Ú_headr¯   r°   rÆ   r·   )r#   rÆ   s     r   rr   zGraphFormatter.head  s?   € Ø�x‰xØ�J‰J˜4Ÿ7™7¨¯©Ø—*‘*˜U D×$5Ñ$5Ó6ð ó 
ð 	
r   c                 ó8   — | j                  | j                  «      S r   )r¾   Ú_tailrP   s    r   ru   zGraphFormatter.tail  s   € Ø�x‰x˜Ÿ
™
Ó#Ð#r   c                 ó   — |S r   r   r(   s     r   rk   zGraphFormatter.label  s   € Øˆ
r   c                 ó<   — | j                  || j                  |«      S r   )Ú	draw_nodeÚnode_scheme©r#   r)   rÆ   s      r   r7   zGraphFormatter.node  ó   € Ø�~‰~˜c 4×#3Ñ#3°UÓ;Ð;r   c                 ó<   — | j                  || j                  |«      S r   )rÍ   Úterm_schemerÏ   s      r   rs   zGraphFormatter.terminal_node  rÐ   r   c                 ó*   —  | j                   ||fi |¤ŽS r   )Ú	draw_edge)r#   ÚaÚbrÆ   s       r   rt   zGraphFormatter.edge!  s   € Øˆt�~‰~˜a Ñ, eÑ,Ð,r   c                 ó&   — |j                  dd«      S )Nzutf-8Úignore)Úencode)r#   rg   s     r   Ú_enczGraphFormatter._enc$  s   € Ø�x‰x˜ Ó*Ð*r   c                 ó„   — | j                   |j                  |i t        || j                  | j                  ¬«      ¤Ž«      S )N)r³   r´   )rÚ   ry   rµ   r³   r´   )r#   r‘   ÚargsÚkwargss       r   r¾   zGraphFormatter.FMT'  s<   € Ø�y‰y˜˜Ÿ™Øð
Ü˜& T§W¡W°$·(±(Ô;ñ
ó ð 	r   c           
      óÆ   — | j                  | j                  | j                  |«      | j                  |«      | j                  | j	                  || j
                  «      ¬«      S )N)ÚdirrÆ   )r¾   Ú_edgerk   r²   rÆ   Úedge_scheme)r#   rÕ   rÖ   r¶   rÆ   s        r   rÔ   zGraphFormatter.draw_edge,  sM   € Ø�x‰xØ�J‰J˜Ÿ
™
 1› t§z¡z°!£}Ø—‘ d§j¡j°¸×8HÑ8HÓ&Ið ó 
ð 	
r   c                 ó|   — | j                  | j                  | j                  |«      | j                  ||«      ¬«      S )N)rÆ   )r¾   Ú_noderk   rÆ   )r#   r)   r¶   rÆ   s       r   rÍ   zGraphFormatter.draw_node2  s6   € Ø�x‰xØ�J‰J˜Ÿ
™
 3›¨t¯z©z¸%ÀÓ/Hð ó 
ð 	
r   )NNNr   z    r   r•   )'r   r   r   r   r   r   Ústripr¿   r   rã   r   rà   r   rÈ   r   rÊ   r   rÅ   rµ   r   r±   r¶   rá   rÎ   rÒ   r·   r%   rÀ   rÆ   rr   ru   rk   r7   rs   rt   rÚ   r¾   rÔ   rÍ   r   r   r   r
   r
   à   sú   „ Ù#à�H‰H�N‰NÓ€EØ�H‰H�N‰NÓ€EØ�H‰H�N‰NÓ€EØ�H‰H�N‰NÓ€EØ�H‰H�N‰NÓ€EØ�{‰{€HÙ�—‘‹N€Eð ØØØ#ñ	€Fð !ØØñ€Kð
 !-°|ÑD€KØ ,°|ÑD€KØ˜{Ð+€Là04Ø&ó	Pò<ó
ò
ò$òò<ò<ò-ò+òó

ô
r   r
   N)r   Úcollectionsr   Útextwrapr   Úkombu.utils.encodingr   r   Ú__all__r   Ú	Exceptionr   r	   r
   r   r   r   Ú<module>rê      sE   ðÙ &Ý Ý ç 7à
D€÷ñ ô4�ô 4÷@!ñ @!÷FU
ò U
r   