File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/util/__pycache__/topological.cpython-310.pyc
o
���g�
� @ s� d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z dd lm
Z
dd
lmZ ddlmZ dd
l
mZ ddlmZ eded�Zg d�Zd+dd�Z d,d-dd�Zd.d#d$�Zd/d(d)�Zd*S )0zTopological sorting algorithms.� )�annotations)�Any)�
Collection)�DefaultDict)�Iterable)�Iterator)�Sequence)�Set)�Tuple)�TypeVar� )�util)�CircularDependencyError�_T)�bound)�sort�sort_as_subsets�find_cycles�tuples�Collection[Tuple[_T, _T]]�allitems�Collection[_T]�return�Iterator[Sequence[_T]]c # s� � t �t�}| D ]\}}|| �|� qt|�}t|�� � rSg }|D ]}� �|| �r0|�|� q"|s>tdt| |�t |���� �
|� � fdd�|D �}|V � sd S d S )NzCircular dependency detected.c s g | ]}|� v r|�qS � r )�.0�t��todo_setr �F/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/topological.py�
<listcomp>6 s z#sort_as_subsets.<locals>.<listcomp>)r
�defaultdict�set�add�list�
isdisjoint�appendr r �
_gen_edges�difference_update)r r �edges�parent�child�todo�output�noder r r r s, �
��
�r T�deterministic_order�bool�Iterator[_T]c c s � t | |�D ]}|E dH qdS )a, sort the given list of items by dependency.
'tuples' is a list of tuples representing a partial ordering.
deterministic_order is no longer used, the order is now always
deterministic given the order of "allitems". the flag is there
for backwards compatibility with Alembic.
N)r )r r r/ �set_r r r r : s ��r �Iterable[Tuple[_T, _T]]�Iterable[_T]�Set[_T]c C s� t �t�}| D ]\}}|| �|� qt|�}t� }|D ]D}|g}|�|�} |r`|d }
||
D ])}||v rI||�|�d � }| �|� |�|� || v rY|�|� | � |� nq0|�
� }|s(q|S )N���)r
r! r"