� c��j�%��^�ddlmZddgZdZdZGd�d�ZGd�de�ZGd �d�Zy ) �)� GenericAlias�TopologicalSorter� CycleError����������c��eZdZdZd�Zy)� _NodeInfo��node� npredecessors� successorsc�.�||_d|_g|_y�Nrr )�selfr s �!/usr/lib64/python3.12/graphlib.py�__init__z_NodeInfo.__init__ s���� � ������N)�__name__� __module__� __qualname__� __slots__r�rrr r s ��5�I� rr c��eZdZ y)rN)rrrrrrrrs �� � rc�\�eZdZ d d�Zd�Zd�Zd�Zd�Zd�Zd�Z d �Z d �Z d �Z e e�Zy) rNc��i|_d|_d|_d|_|�,|j �D]\}}|j |g|����yyr)� _node2info� _ready_nodes� _npassedout� _nfinished�items�add)r�graphr � predecessorss rrzTopologicalSorter.__init__,sS����� ��������� � �&+�k�k�m�"��l������-� �-�'4� rc�t�|jj|�x}�t|�x|j|<}|S�N)r�getr )rr �results r� _get_nodeinfozTopologicalSorter._get_nodeinfo6s8���o�o�)�)�$�/� /�F� 8�-6�t�_� <�D�O�O�D� !�F�� rc��� |j� td��|j|�}|xjt |�z c_|D].}|j|�}|j j |��0y)Nz/Nodes cannot be added after a call to prepare())r� ValueErrorr(r �lenr �append)rr r#�nodeinfo�pred� pred_infos rr!zTopologicalSorter.add;sy�� � � � � (��N�O� O��%�%�d�+�����#�l�"3�3��!�D��*�*�4�0�I� � � � '� '�� -�!rc�� |j� td��|jj�D�cgc]}|jdk(s�|j �� c}|_|j �}|r td|��ycc}w)Nzcannot prepare() more than oncerznodes are in a cycle)rr*r�valuesr r � _find_cycler)r�i�cycles r�preparezTopologicalSorter.prepareVs��� � � � � (��>�?� ?�!�O�O�2�2�4� �4�q����1�8L�A�F�F�4� ���� � �"�� ��3�e�<� <� �� s �A?� A?c�� |j� td��t|j�}|j}|D]}t||_�|jj �|xjt|�z c_|S�N�prepare() must be called first) rr*�tupler� _NODE_OUTr �clearrr+)rr'�n2ir s r� get_readyzTopologicalSorter.get_readyls��� � � � � $��=�>� >��t�(�(�)���o�o���D�&/�C��I� #�� �����!� ���C��K�'��� rc�� |j� td��|j|jkxst |j�Sr7)rr*rr�bool�rs r� is_activezTopologicalSorter.is_active�sF�� � � � � $��=�>� >�����!1�!1�1�L�T�$�:K�:K�5L�Lrc�"�|j�Sr%)rAr@s r�__bool__zTopologicalSorter.__bool__�s���~�~��rc� � |j� td��|j}|D]�}|j|�x}�td|�d���|j}|t k7r,|dk\rtd|�d���|t k(rtd|�d���t |_|jD]G}||}|xjdzc_|jdk(s�-|jj|��I|xjdz c_ ��y)Nr8znode z was not added using add()rz% was not passed out (still not ready)z was already marked done�) rr*rr&r r:� _NODE_DONEr r,r)r�nodesr<r r-�stat� successor�successor_infos r�donezTopologicalSorter.done�s�� � � � � $��=�>� >��o�o���D� �G�G�D�M�)��2� �5���0J�!K�L�L��)�)�D��y� ��1�9�$���x�'L�M����Z�'�$�u�T�H�4L�%M�N�N� &0�H� "�&�0�0� �!$�Y����,�,��1�,�!�/�/�1�4��%�%�,�,�Y�7� 1� �O�O�q� �O�9rc���|j}g}g}t�}i}|D]�}||vr� ||vr||vro|||d|gzcS|j|�|jt ||j �j �t|�||<|j|�|r |d�}n����y#t$r$||j�=|j�YnwxYw|r�C�8)Nr) r�setr!r,�iterr �__next__r+� StopIteration�pop)rr<�stack�itstack�seen� node2stackir s rr2zTopologicalSorter._find_cycle�s���o�o�������u��� ��D��t�|����4�<��{�*�$�[��%6�%8�9�T�F�B�B��H�H�T�N��N�N�4��D� �(<�(<�#=�#F�#F�G�(+�E� �K��%��L�L��&��&�*�w�r�{�}��� �/� �8�� )�&�'�� � � �4�� � � �&�� �s�" B1�1*C�Cc#��K� |j�|j�r;|j�}|Ed{���|j|�|j�r�:yy7�&�wr%)r5rAr=rK)r� node_groups r� static_orderzTopologicalSorter.static_order�sR���� � � � ���n�n�����)�J�!� !� !� �D�I�I�z� "��n�n�� !�s�7A"�A �#A"�A"r%)rrrrr(r!r5r=rArCrKr2rX� classmethodr�__class_getitem__rrrrr)sG��P�.�� .�6=�,�4 M� �-!�^#�J #�$�L�1�rN) �typesr�__all__r:rFr r*rrrrr�r]s>��� � � -�� � � � ���"  ��  �Q2�Q2r