§
    ZøÁibó  ã                  ó  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ erd dlmZ eeee         eedf         f         Zeeeee                  ee         f         Z eeeedf         df         Z!edef         Z"ed         Z#e
edf         Z$e
edeed         f         ed         f         Z% ed¦  «        Z& edee"         ¬ ¦  «        Z' ej(        d!¦  «        Z)g d"¢Z* G d#„ d$e¦  «        Z+ G d%„ d&e,¦  «        Z- G d'„ d(e-¦  «        Z. G d)„ d*e-¦  «        Z/ G d+„ d,e-¦  «        Z0 G d-„ d.e-¦  «        Z1 G d/„ d0e1¦  «        Z2 G d1„ d2e1¦  «        Z3 G d3„ d4e2e3¦  «        Z4 G d5„ d6¦  «        Z5 G d7„ d¦  «        Z6edDd;„¦   «         Z7edEd>„¦   «         Z7dFdA„Z7dGdC„Z8dS )Hé    )ÚannotationsN)ÚAny)ÚCallable)Úcast)Ú
Collection)ÚDeque)ÚDict)Ú	FrozenSet)ÚIterable)ÚIterator)ÚList)ÚOptional)Úoverload)ÚProtocol)ÚSequence)ÚSet)ÚTuple)ÚTYPE_CHECKING)ÚTypeVar)ÚUnion)Úutilé   )Únot_none)ÚLiteral.ÚRevision)r   zLiteral['base']© Ú_TÚ_TR)Úboundz(?:(.+?)@)?(\w+)?((?:\+|-)\d+))ú@ú-ú+c                  ó   — e Zd Zdd
„ZdS )Ú_CollectRevisionsProtocolÚupperÚ_RevisionIdentifierTypeÚlowerÚ	inclusiveÚboolÚimplicit_baseÚassert_relative_lengthÚreturnú;Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase], ...]]c                ó   — d S ©Nr   )Úselfr%   r'   r(   r*   r+   s         úa/var/www/html/jarvis.com/web/backend/venv/lib/python3.11/site-packages/alembic/script/revision.pyÚ__call__z"_CollectRevisionsProtocol.__call__4   s   € ð GJÀcó    N©r%   r&   r'   r&   r(   r)   r*   r)   r+   r)   r,   r-   )Ú__name__Ú
__module__Ú__qualname__r2   r   r3   r1   r$   r$   3   s.   € € € € € ðJð Jð Jð Jð Jð Jr3   r$   c                  ó   — e Zd ZdS )ÚRevisionErrorN)r5   r6   r7   r   r3   r1   r9   r9   >   s   € € € € € Ø€Dr3   r9   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚRangeNotAncestorErrorr'   r&   r%   r,   ÚNonec                óz   •— || _         || _        t          ¦   «                              d|pd›d|pd›�¦  «         d S )Nú	Revision Úbasez  is not an ancestor of revision )r'   r%   ÚsuperÚ__init__)r0   r'   r%   Ú	__class__s      €r1   rA   zRangeNotAncestorError.__init__C   sT   ø€ ð ˆŒ
ØˆŒ
Ý‰Œ×ÒÐàˆ˜ˆˆ  ¨ ð1ñ	
ô 	
ð 	
ð 	
ð 	
r3   )r'   r&   r%   r&   r,   r<   ©r5   r6   r7   rA   Ú__classcell__©rB   s   @r1   r;   r;   B   s=   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   r;   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )	ÚMultipleHeadsÚheadsúSequence[str]ÚargumentúOptional[str]r,   r<   c                ó˜   •— || _         || _        t          ¦   «                              d|›dd                     |¦  «        ›�¦  «         d S )Nz/Multiple heads are present for given argument 'z'; ú, )rH   rJ   r@   rA   Újoin)r0   rH   rJ   rB   s      €r1   rA   zMultipleHeads.__init__O   sW   ø€ ØˆŒ
Ø ˆŒÝ‰Œ×ÒÐà�H�H˜dŸiši¨Ñ.Ô.Ð.ð0ñ	
ô 	
ð 	
ð 	
ð 	
r3   )rH   rI   rJ   rK   r,   r<   rC   rE   s   @r1   rG   rG   N   s=   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   rG   c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚResolutionErrorÚmessageÚstrrJ   r,   r<   c                óX   •— t          ¦   «                              |¦  «         || _        d S r/   )r@   rA   rJ   )r0   rQ   rJ   rB   s      €r1   rA   zResolutionError.__init__Y   s&   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!Ø ˆŒˆˆr3   )rQ   rR   rJ   rR   r,   r<   rC   rE   s   @r1   rP   rP   X   s=   ø€ € € € € ð!ð !ð !ð !ð !ð !ð !ð !ð !ð !r3   rP   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚCycleDetectedÚCycleÚ	revisionsrI   r,   r<   c                ó”   •— || _         t          ¦   «                              | j        ›dd                     |¦  «        ›d�¦  «         d S )Nz is detected in revisions (rM   ú))rW   r@   rA   ÚkindrN   ©r0   rW   rB   s     €r1   rA   zCycleDetected.__init__a   sR   ø€ Ø"ˆŒÝ‰Œ×ÒàŒyˆyˆy˜$Ÿ)š) IÑ.Ô.Ð.Ð.ð0ñ	
ô 	
ð 	
ð 	
ð 	
r3   ©rW   rI   r,   r<   ©r5   r6   r7   rZ   rA   rD   rE   s   @r1   rU   rU   ^   sB   ø€ € € € € Ø€Dð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r3   rU   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚDependencyCycleDetectedzDependency cyclerW   rI   r,   r<   c                óJ   •— t          ¦   «                              |¦  «         d S r/   ©r@   rA   r[   s     €r1   rA   z DependencyCycleDetected.__init__l   s!   ø€ Ý‰Œ×Ò˜Ñ#Ô#Ð#Ð#Ð#r3   r\   r]   rE   s   @r1   r_   r_   i   sB   ø€ € € € € Ø€Dð$ð $ð $ð $ð $ð $ð $ð $ð $ð $r3   r_   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚLoopDetectedz	Self-loopÚrevisionrR   r,   r<   c                óL   •— t          ¦   «                              |g¦  «         d S r/   ra   ©r0   rd   rB   s     €r1   rA   zLoopDetected.__init__s   s#   ø€ Ý‰Œ×Ò˜(˜Ñ$Ô$Ð$Ð$Ð$r3   ©rd   rR   r,   r<   r]   rE   s   @r1   rc   rc   p   sB   ø€ € € € € Ø€Dð%ð %ð %ð %ð %ð %ð %ð %ð %ð %r3   rc   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚDependencyLoopDetectedzDependency self-looprd   rI   r,   r<   c                óJ   •— t          ¦   «                              |¦  «         d S r/   ra   rf   s     €r1   rA   zDependencyLoopDetected.__init__z   s!   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ð"Ð"r3   )rd   rI   r,   r<   r]   rE   s   @r1   ri   ri   w   sB   ø€ € € € € Ø!€Dð#ð #ð #ð #ð #ð #ð #ð #ð #ð #r3   ri   c                  óÔ  — e Zd ZdZdmd„Zej        dnd„¦   «         Zej        dnd	„¦   «         Zej        dnd
„¦   «         Z	ej        dnd„¦   «         Z
ej        dod„¦   «         Zdpd„Zdqd„Zdqd„Zdqd„Zdqd„Zdrdsd#„Z	 dtdud'„Zdvd*„Zdwd.„Zdxd0„Zdyd1„Z	 dtdzd5„Zd{d9„Z	 drd|d>„Z	 drd}dC„Zd~dE„Z	 	 	 	 dd€dO„Z	 	 	 	 d�d‚dU„Z	 	 	 dƒd„dV„Z	 drd…dY„Zd†d\„Z 	 	 d‡dˆdc„Z!d‰df„Z"dŠdg„Z#d‹di„Z$dŒdk„Z%d�dl„Z&d$S )ŽÚRevisionMapz÷Maintains a map of :class:`.Revision` objects.

    :class:`.RevisionMap` is used by :class:`.ScriptDirectory` to maintain
    and traverse the collection of :class:`.Script` objects, which are
    themselves instances of :class:`.Revision`.

    Ú	generatorú Callable[[], Iterable[Revision]]r,   r<   c                ó   — || _         dS )a
  Construct a new :class:`.RevisionMap`.

        :param generator: a zero-arg callable that will generate an iterable
         of :class:`.Revision` instances to be used.   These are typically
         :class:`.Script` subclasses within regular Alembic use.

        N)Ú
_generator)r0   rm   s     r1   rA   zRevisionMap.__init__‡   s   € ð $ˆŒˆˆr3   úTuple[str, ...]c                ó   — | j          | j        S )z¿All "head" revisions as strings.

        This is normally a tuple of length one,
        unless unmerged branches are present.

        :return: a tuple of string revision numbers.

        )Ú_revision_maprH   ©r0   s    r1   rH   zRevisionMap.heads‘   ó   € ð 	ÔÐØŒzÐr3   c                ó   — | j          | j        S )z¼All "base" revisions as strings.

        These are revisions that have a ``down_revision`` of None,
        or empty tuple.

        :return: a tuple of string revision numbers.

        )rs   Úbasesrt   s    r1   rw   zRevisionMap.basesž   ru   r3   c                ó   — | j          | j        S )zeAll "real" head revisions as strings.

        :return: a tuple of string revision numbers.

        )rs   Ú_real_headsrt   s    r1   ry   zRevisionMap._real_heads«   ó   € ð 	ÔÐØÔÐr3   c                ó   — | j          | j        S )zeAll "real" base revisions as strings.

        :return: a tuple of string revision numbers.

        )rs   Ú_real_basesrt   s    r1   r|   zRevisionMap._real_basesµ   rz   r3   Ú_RevisionMapTypec           	     ó  — t          j        ¦   «         }t          j        ¦   «         }t          j        ¦   «         }d}d}t          ¦   «         }t          ¦   «         }|                      ¦   «         D ]¦}|                     |¦  «         |j        |v rt          j        d|j        z  ¦  «         |||j        <   |j	        r|                     |¦  «         |                     |¦  «         |                     |¦  «         |j
        r||fz  }|j        r||fz  }Œ§|                     ¦   «         }	|                      |t          t          |¦  «        ¦  «         |                      |t          t          |¦  «        ¦  «         |                     ¦   «         D ]{}
|
j        D ]q}||vrt          j        d|›d|
›d�¦  «         ||         }|                     |
¦  «         ||
j        v r|                     |¦  «         |                     |¦  «         ŒrŒ||                      |t          t          |¦  «        ¦  «         |                      |	||||¦  «         t1          |                     ¦   «         ¦  «        }dx|d<   |d<   t5          d„ |D ¦   «         ¦  «        | _        t5          d„ |D ¦   «         ¦  «        | _        t5          d	„ |D ¦   «         ¦  «        | _        t5          d
„ |D ¦   «         ¦  «        | _        |                      ||¦  «         |S )z_memoized attribute, initializes the revision map from the
        initial collection.

        r   ú%Revision %s is present more than oncer>   ú referenced from ú is not presentNc              3  ó$   K  — | ]}|j         V — Œd S r/   ©rd   ©Ú.0Úrevs     r1   ú	<genexpr>z,RevisionMap._revision_map.<locals>.<genexpr>  ó$   è è € Ð9Ð9¨C˜3œ<Ð9Ð9Ð9Ð9Ð9Ð9r3   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r„   s     r1   r‡   z,RevisionMap._revision_map.<locals>.<genexpr>  ó$   è è € Ð EÐ E°# ¤Ð EÐ EÐ EÐ EÐ EÐ Er3   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r„   s     r1   r‡   z,RevisionMap._revision_map.<locals>.<genexpr>  rˆ   r3   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r„   s     r1   r‡   z,RevisionMap._revision_map.<locals>.<genexpr>  rŠ   r3   ) ÚsqlautilÚOrderedDictÚ
OrderedSetÚsetrp   Úaddrd   r   ÚwarnÚbranch_labelsÚis_baseÚ_is_real_baseÚcopyÚ_map_branch_labelsr   r}   Ú_add_depends_onÚvaluesÚ_all_down_revisionsÚadd_nextrevÚ_versioned_down_revisionsÚdiscardÚ_normalize_depends_onÚ_detect_cyclesÚdictÚitemsÚtuplerH   ry   rw   r|   Ú_add_branches)r0   Úmap_rH   ry   rw   r|   Úhas_branch_labelsÚall_revisionsrd   Úrev_mapr†   ÚdownrevÚdown_revisionÚrevision_maps                 r1   rs   zRevisionMap._revision_map¿   s6  € õ )1Ô(<Ñ(>Ô(>ˆå'Ô2Ñ4Ô4ˆÝ%-Ô%8Ñ%:Ô%:ˆØ&(ˆØ,.ˆå™EœEÐÝ™œˆàŸšÑ)Ô)ð 	+ð 	+ˆHØ×Ò˜hÑ'Ô'Ð'àÔ  DÐ(Ð(Ý”	Ø;¸hÔ>OÑOñô ð ð '/ˆD�Ô"Ñ#ØÔ%ð 0Ø!×%Ò% hÑ/Ô/Ð/à�IŠI�hÑÔÐØ�OŠO˜HÑ%Ô%Ð%ØÔð %Ø˜(˜Ñ$�ØÔ%ð +Ø ˜{Ñ*�øð —)’)‘+”+ˆØ×ÒØ�tÕ$4°dÑ;Ô;ñ	
ô 	
ð 	
ð 	×Ò˜]­DÕ1AÀ4Ñ,HÔ,HÑIÔIÐIà—;’;‘=”=ð 	3ð 	3ˆCØÔ2ð 
3ð 
3�Ø $Ð&Ð&Ý”I�Ià"˜7˜7 C C Cð)ñô ð ð !% W¤�Ø×)Ò)¨#Ñ.Ô.Ð.Ø˜cÔ;Ð;Ð;Ø—M’M -Ñ0Ô0Ð0Ø×#Ò# MÑ2Ô2Ð2Ð2ð
3ð 	×"Ò" =µ$Õ7GÈÑ2NÔ2NÑOÔOÐOØ×Ò˜G U¨E°;ÀÑLÔLÐLå)-¨d¯jªj©l¬lÑ);Ô);ˆØ04Ð4ˆ�TÑ˜\¨"Ñ-ÝÐ9Ð9°5Ð9Ñ9Ô9Ñ9Ô9ˆŒ
Ý Ð EÐ E¸Ð EÑ EÔ EÑEÔEˆÔÝÐ9Ð9°5Ð9Ñ9Ô9Ñ9Ô9ˆŒ
Ý Ð EÐ E¸Ð EÑ EÔ EÑEÔEˆÔà×ÒÐ,¨lÑ;Ô;Ð;ØÐr3   r§   Ú_InterimRevisionMapTyperH   úSet[Revision]rw   úTuple[Revision, ...]ry   r|   c                óŠ  — |sd S |r|st          t          |¦  «        ¦  «        ‚d„ |                      d„ |t          t          |¦  «        ¬¦  «        D ¦   «                              d„ |                      d„ |t          t          |¦  «        ¬¦  «        D ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        |z
  }|rt          t          |¦  «        ¦  «        ‚|r|st          t          |¦  «        ¦  «        ‚d„ |                      d„ |t          t          |¦  «        ¬¦  «        D ¦   «                              d„ |                      d	„ |t          t          |¦  «        ¬¦  «        D ¦   «         ¦  «        }t          |                     ¦   «         ¦  «        |z
  }|rt          t          |¦  «        ¦  «        ‚d S )
Nc                ó   — h | ]	}|j         ’Œ
S r   rƒ   r„   s     r1   ú	<setcomp>z-RevisionMap._detect_cycles.<locals>.<setcomp>  ó*   € ð 
ð 
ð 
àð ŒLð
ð 
ð 
r3   c                ó   — | j         S r/   ©rœ   ©Úrs    r1   ú<lambda>z,RevisionMap._detect_cycles.<locals>.<lambda>  s	   € ˜!Ô5€ r3   )r¤   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r„   s     r1   r‡   z-RevisionMap._detect_cycles.<locals>.<genexpr>  ó8   è è € ð 
ð 
àð ŒLð
ð 
ð 
ð 
ð 
ð 
r3   c                ó   — | j         S r/   ©Únextrevr´   s    r1   r¶   z,RevisionMap._detect_cycles.<locals>.<lambda>!  s   € ˜!œ)€ r3   c                ó   — h | ]	}|j         ’Œ
S r   rƒ   r„   s     r1   r°   z-RevisionMap._detect_cycles.<locals>.<setcomp>,  r±   r3   c                ó   — | j         S r/   )rš   r´   s    r1   r¶   z,RevisionMap._detect_cycles.<locals>.<lambda>/  s	   € ˜!Ô/€ r3   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r„   s     r1   r‡   z-RevisionMap._detect_cycles.<locals>.<genexpr>3  r¸   r3   c                ó   — | j         S r/   ©Ú_all_nextrevr´   s    r1   r¶   z,RevisionMap._detect_cycles.<locals>.<lambda>6  s   € ˜!œ.€ r3   )
rU   ÚlistÚ_iterate_related_revisionsr   r}   Úintersectionr�   ÚkeysÚsortedr_   )r0   r§   rH   rw   ry   r|   Útotal_spaceÚdeleted_revss           r1   rŸ   zRevisionMap._detect_cycles  s$  € ð ð 	ØˆFØð 	/˜Eð 	/Ý¥ W¡¤Ñ.Ô.Ð.ð
ð 
à×6Ò6Ø5Ð5ØÝÕ*¨GÑ4Ô4ð 7ñ ô ð
ñ 
ô 
÷ Š,ð 
ð 
à×6Ò6Ø#Ð#ØÝÕ*¨GÑ4Ô4ð 7ñ ô ð
ñ 
ô 
ñ 
ô 
ð 	õ ˜7Ÿ<š<™>œ>Ñ*Ô*¨[Ñ8ˆØð 	6Ý¥ |Ñ 4Ô 4Ñ5Ô5Ð5àð 	9 +ð 	9Ý)­$¨w©-¬-Ñ8Ô8Ð8ð
ð 
à×6Ò6Ø/Ð/ØÝÕ*¨GÑ4Ô4ð 7ñ ô ð
ñ 
ô 
÷ Š,ð 
ð 
à×6Ò6Ø(Ð(ØÝÕ*¨GÑ4Ô4ð 7ñ ô ð
ñ 
ô 
ñ 
ô 
ð 	õ ˜7Ÿ<š<™>œ>Ñ*Ô*¨[Ñ8ˆØð 	@Ý)­&°Ñ*>Ô*>Ñ?Ô?Ð?ð	@ð 	@r3   rW   úCollection[Revision]r¤   c           
     ó²   — |D ]S}|j         rJ|j        €J ‚|j        D ]9}||v r.||         }|€J ‚t          d|›d|j        ›d|j        ›�¦  «        ‚|||<   Œ:ŒTd S )NzBranch name 'z' in revision z already used by revision )r“   Ú_orig_branch_labelsr9   rd   )r0   rW   r¤   rd   Úbranch_labelÚmap_revs         r1   r—   zRevisionMap._map_branch_labels?  s±   € ð "ð 	2ð 	2ˆHØÔ%ð 2ØÔ3Ð?Ð?Ð?Ø$,Ô$@ð 2ð 2�LØ# tÐ+Ð+Ø"& |Ô"4˜Ø&Ð2Ð2Ð2Ý+˜mð !-  Ø (Ô 1Ð 1Ð 1Ø 'Ô 0Ð 0ðñô ð ð *2�D˜Ñ&Ð&øð!	2ð 	2r3   c                ó€  — |D ]º}|j         r±|j                              |j         ¦  «         |                      |g|d¬¦  «        D ]!}|j                              |j         ¦  «         Œ"|}|rS|j        sL|j        sE|j                              |j         ¦  «         |j        r||j                 }nn|r|j        s|j        ¯EŒ»d S ©NF©Úinclude_dependencies)r“   ÚupdateÚ_get_descendant_nodesÚ_is_real_branch_pointÚis_merge_pointr©   )r0   rW   r¤   rd   ÚnodeÚparents         r1   r£   zRevisionMap._add_branchesT  s  € ð "ð 	ð 	ˆHØÔ%ð ØÔ&×-Ò-¨hÔ.DÑEÔEÐEØ ×6Ò6Ø�J ¸5ð 7ñ ô ð Fð F�Dð Ô&×-Ò-¨hÔ.DÑEÔEÐEÐEà�àð	à"Ô8ð	ð #Ô1ð	ð
 Ô(×/Ò/°Ô0FÑGÔGÐGØÔ+ð Ø!% fÔ&:Ô!;˜˜àð ð	à"Ô8ð	ð #Ô1ð	øð	ð 	r3   c                ó¶   ‡— |D ]T}|j         rDˆfd„t          j        |j         ¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        |_        ŒMd|_        ŒUdS )a  Resolve the 'dependencies' for each revision in a collection
        in terms of actual revision ids, as opposed to branch labels or other
        symbolic names.

        The collection is then assigned to the _resolved_dependencies
        attribute on each revision object.

        c                ó    •— g | ]
}‰|         ‘ŒS r   r   )r…   Údepr¤   s     €r1   ú
<listcomp>z/RevisionMap._add_depends_on.<locals>.<listcomp>y  s*   ø€ ð ð ð Ø"%�D˜”Iðð ð r3   c                ó    — g | ]}|®|j         ‘ŒS r/   rƒ   ©r…   Úds     r1   rÛ   z/RevisionMap._add_depends_on.<locals>.<listcomp>}  s   € Ð?Ð?Ð? A°°�Q”Z°°°r3   r   N)Údependenciesr   Úto_tupler¢   Ú_resolved_dependencies)r0   rW   r¤   rd   Údepss     `  r1   r˜   zRevisionMap._add_depends_onk  s“   ø€ ð "ð 		5ð 		5ˆHØÔ$ð 5ðð ð ð Ý)-¬°xÔ7LÑ)MÔ)Mðñ ô �õ 38Ø?Ð?¨Ð?Ñ?Ô?ñ3ô 3�Ô/Ð/ð 35�Ô/Ð/ð		5ð 		5r3   c                ó  — |D ]{}|j         rkt          |j         ¦  «        }|                      |gd|¬¦  «        D ](}||u rŒ|j         r|                     |j         ¦  «         Œ)t	          |¦  «        |_        Œtd|_        Œ|dS )a³  Create a collection of "dependencies" that omits dependencies
        that are already ancestor nodes for each revision in a given
        collection.

        This builds upon the _resolved_dependencies collection created in the
        _add_depends_on() method, looking in the fully populated revision map
        for ancestors, and omitting them as the _resolved_dependencies
        collection as it is copied to a new collection. The new collection is
        then assigned to the _normalized_resolved_dependencies attribute on
        each revision object.

        The collection is then used to determine the immediate "down revision"
        identifiers for this revision.

        F)rÑ   r¤   r   N)rá   r�   Ú_get_ancestor_nodesÚdifference_updater¢   Ú!_normalized_resolved_dependencies)r0   rW   r¤   rd   Únormalized_resolvedr†   s         r1   rž   z!RevisionMap._normalize_depends_on‚  sÎ   € ð& "ð 	@ð 	@ˆHØÔ.ð @Ý&)¨(Ô*IÑ&JÔ&JÐ#Ø×3Ò3Ø�JØ).Øð 4ñ ô ð 
ð 
�Cð
 ˜h��Ø ØÔ3ð Ø+×=Ò=ØÔ6ñô ð øõ >CØ'ñ>ô >�Ô:Ð:ð >@�Ô:Ð:ð'	@ð 	@r3   Frd   r   Ú_replacer)   c                ób  ‡— | j         }|s&‰j        |v rt          j        d‰j        z  ¦  «         n"|r ‰j        |vrt	          d‰j        z  ¦  «        ‚‰|‰j        <   ‰g}|                      ||¦  «         |                      ||¦  «         |                      ||¦  «         ‰j        r| xj	        ‰j        fz  c_	        ‰j
        r| xj        ‰j        fz  c_        ‰j        D ]I}||vrt          j        d|›d‰›d�¦  «         t          ||         ¦  «                             ‰¦  «         ŒJ|                      ||¦  «         ‰j        r.t#          ˆfd„| j        D ¦   «         ¦  «        ‰j        fz   | _        ‰j        r0t#          ˆfd„| j        D ¦   «         ¦  «        ‰j        fz   | _        dS dS )	z´add a single revision to an existing map.

        This method is for single-revision use cases, it's not
        appropriate for fully populating an entire revision map.

        r   zrevision %s not in mapr>   r€   r�   c              3  óz   •K  — | ]5}|t          ‰j        ¦  «                             ‰j        g¦  «        v¯1|V — Œ6d S r/   )r�   rš   Úunionrd   ©r…   Úheadrd   s     €r1   r‡   z+RevisionMap.add_revision.<locals>.<genexpr>Ð  sk   øè è € ð %ð %àØÝ˜8Ô7Ñ8Ô8×>Ò>ØÔ&Ð'ñô ðð ð ðð ð ð ð%ð %r3   c              3  óz   •K  — | ]5}|t          ‰j        ¦  «                             ‰j        g¦  «        v¯1|V — Œ6d S r/   )r�   rœ   rë   rd   rì   s     €r1   r‡   z+RevisionMap.add_revision.<locals>.<genexpr>Ù  sk   øè è € ð ð àØÝ˜8Ô=Ñ>Ô>×DÒDØÔ&Ð'ñô ðð ð ðð ð ð ðð r3   N)rs   rd   r   r’   Ú	Exceptionr£   r—   r˜   r”   rw   r•   r|   rš   r   r›   rž   Ú_is_real_headr¢   ry   Úis_headrH   )r0   rd   rè   r¤   rW   r¨   s    `    r1   Úadd_revisionzRevisionMap.add_revisionª  sL  ø€ ð Ô!ˆØð 	J˜HÔ-°Ð5Ð5ÝŒIØ7¸(Ô:KÑKñô ð ð ð ð 	J˜(Ô+°4Ð7Ð7ÝÐ4°xÔ7HÑHÑIÔIÐIà"*ˆˆXÔÑà�Jˆ	Ø×Ò˜9 dÑ+Ô+Ð+Ø×Ò 	¨4Ñ0Ô0Ð0Ø×Ò˜Y¨Ñ-Ô-Ð-àÔð 	/ØˆJŒJ˜8Ô,Ð.Ñ.ˆJŒJØÔ!ð 	5ØÐÔ Ô!2Ð 4Ñ4ÐÔàÔ3ð 	:ð 	:ˆGØ˜dÐ"Ð"Ý”	�	à�w�w   ð*ñô ð õ �T˜'”]Ñ#Ô#×/Ò/°Ñ9Ô9Ð9Ð9à×"Ò" 9¨dÑ3Ô3Ð3àÔ!ð 	%Ý$ð %ð %ð %ð %à Ô,ð%ñ %ô %ñ  ô  ð Ô"Ð$ñ %ˆDÔð Ôð 	%Ýð ð ð ð à œJðñ ô ñ ô ð Ô"Ð$ñ%ˆDŒJˆJˆJð	%ð 	%r3   NrÌ   rK   c                ó¬   — | j         }|r|                      ||¦  «        }t          |¦  «        dk    rt          ||rd|z  nd¦  «        ‚|r|d         S dS )aÓ  Return the current head revision.

        If the script directory has multiple heads
        due to branching, an error is raised;
        :meth:`.ScriptDirectory.get_heads` should be
        preferred.

        :param branch_label: optional branch name which will limit the
         heads considered to those which include that branch_label.

        :return: a string revision number.

        .. seealso::

            :meth:`.ScriptDirectory.get_heads`

        é   z%s@headrí   r   N)rH   Úfilter_for_lineageÚlenrG   )r0   rÌ   Úcurrent_headss      r1   Úget_current_headzRevisionMap.get_current_headâ  sƒ   € ð( (,¤zˆØð 	Ø ×3Ò3Ø˜|ñô ˆMõ ˆ}ÑÔ Ò!Ð!ÝØØ,8ÐD�	˜LÑ(Ð(¸fñô ð ð
 ð 	Ø  Ô#Ð#à�4r3   Ú
identifierrR   c                ó8   — |                       | j        |¦  «        S r/   )rõ   rw   )r0   rù   s     r1   Ú_get_base_revisionszRevisionMap._get_base_revisions  s   € Ø×&Ò& t¤z°:Ñ>Ô>Ð>r3   Úid_úOptional[_GetRevArg]ú%Tuple[Optional[_RevisionOrBase], ...]c                ó  ‡ ‡‡— t          |t          t          t          t          f¦  «        rt          ˆ fd„|D ¦   «         d¦  «        S ‰                      |¦  «        \  }Št          |¦  «        dk    r{	 t          |d         ¦  «        Š‰dk     rN‰  	                    d¦  «        }‰�t          ˆfd„|D ¦   «         ¦  «        }t          ˆˆ fd„|D ¦   «         ¦  «        S n# t          $ r Y nw xY wt          ˆˆ fd	„|D ¦   «         ¦  «        S )
a—  Return the :class:`.Revision` instances with the given rev id
        or identifiers.

        May be given a single identifier, a sequence of identifiers, or the
        special symbols "head" or "base".  The result is a tuple of one
        or more identifiers, or an empty tuple in the case of "base".

        In the cases where 'head', 'heads' is requested and the
        revision map is empty, returns an empty tuple.

        Supports partial identifiers, where the given identifier
        is matched against all identifiers that start with the given
        characters; if there is exactly one match, that determines the
        full revision.

        c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r   )Úget_revisions)r…   Úid_elemr0   s     €r1   rÛ   z-RevisionMap.get_revisions.<locals>.<listcomp>  s'   ø€ ÐGÐGÐG¸˜×*Ò*¨7Ñ3Ô3ÐGÐGÐGr3   r   rô   r   rH   Nc              3  óH   •K  — | ]}‰t          |¦  «        j        v ¯|V — Œd S r/   )Úis_revisionr“   )r…   rí   rÌ   s     €r1   r‡   z,RevisionMap.get_revisions.<locals>.<genexpr>(  sX   øè è € ð 1ð 1à$(Ø#/Ý#.¨tÑ#4Ô#4Ô#Bð$Cð $Cð !%ð$Cð $Cð $Cð $Cð1ð 1r3   c              3  óF   •K  — | ]}‰                      |‰¬ ¦  «        V — ŒdS ))ÚstepsN)Ú_walk)r…   rí   Úrintr0   s     €€r1   r‡   z,RevisionMap.get_revisions.<locals>.<genexpr>.  sG   øè è € ð %ð %à $ð !ŸJšJ t°4˜JÑ8Ô8ð%ð %ð %ð %ð %ð %r3   c              3  óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r/   )Ú_revision_for_ident)r…   Úrev_idrÌ   r0   s     €€r1   r‡   z,RevisionMap.get_revisions.<locals>.<genexpr>5  sG   øè è € ð ð àð ×(Ò(¨°Ñ>Ô>ðð ð ð ð ð r3   )Ú
isinstancerÂ   r¢   r�   Ú	frozensetÚsumÚ_resolve_revision_numberrö   Úintr  Ú
ValueError)r0   rü   Úresolved_idÚselect_headsrÌ   r  s   `   @@r1   r  zRevisionMap.get_revisions	  s„  øøø€ õ( �c�D¥%­­iÐ8Ñ9Ô9ð 	ÝÐGÐGÐGÐGÀ3ÐGÑGÔGÈÑLÔLÐLà(,×(EÒ(EÀcÑ(JÔ(JÑ%ˆK˜Ý�;ÑÔ 1Ò$Ð$ðÝ˜{¨1œ~Ñ.Ô.�DØ˜a’x�xà'+×'9Ò'9¸'Ñ'BÔ'B˜Ø'Ð3Ý+0ð 1ð 1ð 1ð 1à,8ð1ñ 1ô 1ñ ,ô ,˜Lõ  %ð %ð %ð %ð %ð %à(4ð%ñ %ô %ñ  ô  ð ð  øõ "ð ð ð à�Dðøøøõ ð ð ð ð ð à)ðñ ô ñ ô ð s   Á4A(C Ã
C+Ã*C+úOptional[Revision]c                ó¼   — |                       |¦  «        \  }}t          |¦  «        dk    rt          ||¦  «        ‚|r|d         nd}|                      ||¦  «        S )a	  Return the :class:`.Revision` instance with the given rev id.

        If a symbolic name such as "head" or "base" is given, resolves
        the identifier into the current head or base revision.  If the symbolic
        name refers to multiples, :class:`.MultipleHeads` is raised.

        Supports partial identifiers, where the given identifier
        is matched against all identifiers that start with the given
        characters; if there is exactly one match, that determines the
        full revision.

        rô   r   r   )r  rö   rG   r
  )r0   rü   r  rÌ   Úresolveds        r1   Úget_revisionzRevisionMap.get_revision:  sg   € ð %)×$AÒ$AÀ#Ñ$FÔ$FÑ!ˆ�\Ýˆ{ÑÔ˜aÒÐÝ ¨SÑ1Ô1Ð1à<GÐ*O¨+°a¬.¨.ÈRˆØ×'Ò'¨°,Ñ?Ô?Ð?r3   c                ó¾   — 	 | j         |         }|S # t          $ rA 	 |                      |¦  «        }|cY S # t          $ r}t          d|z  |¦  «        |‚d }~ww xY ww xY w)NzNo such branch: '%s')rs   ÚKeyErrorr
  rP   )r0   rÌ   Ú
branch_revÚnonbranch_revÚres        r1   Ú_resolve_branchzRevisionMap._resolve_branchO  sŸ   € ð	ØÔ+¨LÔ9ˆJð Ðøõ ð 		%ð 		%ð 		%ð%Ø $× 8Ò 8¸Ñ FÔ F�ð %Ð$Ð$Ð$øõ #ð ð ð Ý%Ø*¨\Ñ9¸<ñô àðøøøøðøøøð		%øøøs(   ‚ ‘
Aœ5±Aµ
A¿AÁAÁAr  úUnion[str, Tuple[()], None]Úcheck_branchc                ó’  ‡— |r|                       |¦  «        }nd }	 | j        ‰         }n# t          $ r d}Y nw xY w|du r¾‰sJ ‚ˆfd„| j        D ¦   «         }|r|                      ||¦  «        }|s+t	          d‰›dt          ‰¦  «        dk     rdnd›�‰¦  «        ‚t          |¦  «        dk    r<t	          d	‰›d
d                     d„ |dd…         D ¦   «         ¦  «        ›d�‰¦  «        ‚| j        |d                  }|rF|�D|€J ‚‰sJ ‚|                      |j        |j        ¦  «        st	          d|j        ›d|›d�‰¦  «        ‚|S )NFc                óh   •— g | ].}|r*t          |¦  «        d k    ¯|                     ‰¦  «        ¯,|‘Œ/S )é   )rö   Ú
startswith)r…   Úxr  s     €r1   rÛ   z3RevisionMap._revision_for_ident.<locals>.<listcomp>t  sJ   ø€ ð ð ð àØðõ ˜Q™œ !š˜¨¯ª°[Ñ(AÔ(A˜ð à#˜˜r3   zNo such revision or branch 'ú'é   z\; please ensure at least four characters are present for partial revision identifier matchesÚ rô   zMultiple revisions start with 'z': rM   c              3  ó    K  — | ]	}d |z  V — Œ
dS )z'%s'Nr   ©r…   rµ   s     r1   r‡   z2RevisionMap._revision_for_ident.<locals>.<genexpr>Ž  s&   è è € Ð-LÐ-L¸Q¨f°q©jÐ-LÐ-LÐ-LÐ-LÐ-LÐ-Lr3   r   r"  z...r>   z is not a member of branch ')	r  rs   r  rõ   rP   rö   rN   Ú_shares_lineagerd   )r0   r  r  r  rd   Úrevss    `    r1   r
  zRevisionMap._revision_for_ident_  s  ø€ ð ð 	Ø×-Ò-¨lÑ;Ô;ˆJˆJàˆJð	ØÔ)¨+Ô6ˆHˆHøÝð 	ð 	ð 	àˆHˆHˆHð	øøøð �uÐÐØÐÐ�;ðð ð ð àÔ+ðñ ô ˆDð ð CØ×.Ò.¨t°\ÑBÔB�Øð 7Ý%�oð $˜˜õ  # ;Ñ/Ô/°!Ò3Ð3ðNð Nð "$ð$ð		ð  ñô ð õ �T‘”˜Q’�Ý%�oð #�{�{ D§I¢IÐ-LÐ-LÀ$ÀqÈÀsÄ)Ð-LÑ-LÔ-LÑ$LÔ$LÐ$LÐ$LðNð  ñ	ô ð ð  Ô-¨d°1¬gÔ6�àð 
	˜HÐ0ØÐ)Ð)Ð)ØÐÐ�;Ø×'Ò'ØÔ! :Ô#6ñô ð õ &�oàÔ(Ð(Ð(¨,¨,¨,ð8àñô ð ð
 ˆs   �+ «:¹:Útargetsú#Iterable[Optional[_RevisionOrBase]]úSet[Optional[_RevisionOrBase]]c                óø   — t          |¦  «        }t          |¦  «        D ]Z}|sJ ‚|                     |                      |gd¬¦  «        ¦  «                             |g¦  «        r|                     |¦  «         Œ[|S rÏ   )r�   rÂ   rÄ   rÓ   Ú
differencer�   )r0   r,  r†   s      r1   Ú_filter_into_branch_headsz%RevisionMap._filter_into_branch_heads¡  s†   € õ �g‘,”,ˆå˜‘=”=ð 	%ð 	%ˆCØˆJˆJ�3Ø×#Ò#Ø×*Ò*¨C¨5ÀuÐ*ÑMÔMñô çŠj˜#˜ÑÔð%ð —’ Ñ$Ô$Ð$øØˆr3   úIterable[_TR]Úcheck_againstrÑ   úTuple[_TR, ...]c                óÒ   ‡ ‡‡— ‰                       |¦  «        \  }}g Š|r‰                     |¦  «         |r‰                     |¦  «         t          ˆˆ ˆfd„|D ¦   «         ¦  «        S )Nc              3  óL   •K  — | ]}‰                      |‰‰¬ ¦  «        ¯|V — ŒdS )rÐ   N)r*  )r…   ÚtgrÑ   r0   Úsharess     €€€r1   r‡   z1RevisionMap.filter_for_lineage.<locals>.<genexpr>¼  sZ   øè è € ð 
ð 
àØ×#Ò#Ø�FÐ1Eð $ñ ô ð
Øð
ð 
ð 
ð 
ð 
ð 
r3   )r  ÚappendÚextendr¢   )r0   r,  r3  rÑ   rü   rÌ   r8  s   `  `  @r1   rõ   zRevisionMap.filter_for_lineage®  sš   øøø€ ð !×9Ò9¸-ÑHÔHÑˆˆ\àˆØð 	(Ø�MŠM˜,Ñ'Ô'Ð'Øð 	Ø�MŠM˜#ÑÔÐåð 
ð 
ð 
ð 
ð 
ð 
àð
ñ 
ô 
ñ 
ô 
ð 	
r3   ÚtargetúOptional[_RevisionOrStr]Útest_against_revsúSequence[_RevisionOrStr]c                ó   ‡ — |sdS t          |t          ¦  «        s#t          ‰                      |¦  «        ¦  «        }n|}ˆ fd„t	          j        |d¬¦  «        D ¦   «         }t          t          ‰                      |g|¬¦  «        ¦  «         	                    ‰  
                    |g|¬¦  «        ¦  «                             |¦  «        ¦  «        S )NTc                óh   •— g | ].}t          |t          ¦  «        s‰                     |¦  «        n|‘Œ/S r   )r  r   r
  )r…   Útest_against_revr0   s     €r1   rÛ   z/RevisionMap._shares_lineage.<locals>.<listcomp>Ñ  sR   ø€ ð 	&
ð 	&
ð 	&
ð !õ "Ð"2µHÑ=Ô=ð&�×(Ò(Ð)9Ñ:Ô:Ð:à%ð		&
ð 	&
ð 	&
r3   r   ©ÚdefaultrÐ   )r  r   r   r
  r   rà   r)   r�   rÓ   rë   rä   rÄ   )r0   r;  r=  rÑ   Úresolved_targetÚresolved_test_against_revss   `     r1   r*  zRevisionMap._shares_lineageÄ  s  ø€ ð !ð 	Ø�4Ý˜&¥(Ñ+Ô+ð 	%Ý& t×'?Ò'?ÀÑ'GÔ'GÑHÔHˆOˆOà$ˆOð	&
ð 	&
ð 	&
ð 	&
õ %)¤MØ!¨2ð%ñ %ô %ð	&
ñ 	&
ô 	&
Ð"õ ÝØ×*Ò*Ø$Ð%Ø)=ð +ñ ô ñô ÷ ŠUØ×(Ò(Ø$Ð%Ø)=ð )ñ ô ñô ÷ Š\Ð4Ñ5Ô5ñ
ô 
ð 	
r3   ú%Tuple[Tuple[str, ...], Optional[str]]c                ó0  — t          |t          ¦  «        rd|v r|                     dd¦  «        \  }}ne|�at          |t          ¦  «        r|rt          |d         t          ¦  «        rt          |t          t          f¦  «        st	          d|›d�¦  «        ‚d }| j         |dk    r(|r|                      | j        |¦  «        |fS | j        |fS |dk    r |  	                    |¦  «        }|r|f|fS d|fS |d	k    s|€d|fS t          j        |d ¬
¦  «        |fS )Nr    rô   r   zrevision identifier z= is not a string; ensure database driver settings are correctrH   rí   r   r?   rB  )r  rR   Úsplitr¢   r9   rs   rõ   rH   ry   rø   r   rà   )r0   rü   rÌ   Úcurrent_heads       r1   r  z$RevisionMap._resolve_revision_numberì  sh  € õ �c�3ÑÔð 	  C¨3 J JØ #§	¢	¨#¨qÑ 1Ô 1ÑˆL˜#˜#àˆ_Ý˜�UÑ#Ô#ð Ø(+ð Ý4>¸sÀ1¼vÅsÑ4KÔ4Kð å˜c¥C­ <Ñ0Ô0ð õ  �-à14°°ð7ñô ð ð  ˆLð 	ÔÐØ�'Š>ˆ>Øð 6à×+Ò+¨D¬J¸ÑEÔEØ ðð ð
 Ô'¨Ð5Ð5Ø�FŠ]ˆ]Ø×0Ò0°Ñ>Ô>ˆLØð (Ø$�¨Ð4Ð4à˜<Ð'Ð'Ø�FŠ]ˆ]˜c˜kØ�|Ð#Ð#å”= ¨dÐ3Ñ3Ô3°\ÐAÐAr3   Tr%   r&   r'   r*   r(   r+   Úselect_for_downgradeúIterator[Revision]c              #  óÌ   K  — |r| j         }n| j        } ||||||¬¦  «        \  }}	|                      ||	¦  «        D ]&}
t          |                      |
¦  «        ¦  «        V — Œ'dS )au  Iterate through script revisions, starting at the given
        upper revision identifier and ending at the lower.

        The traversal uses strictly the `down_revision`
        marker inside each migration script, so
        it is a requirement that upper >= lower,
        else you'll get nothing back.

        The iterator yields :class:`.Revision` objects.

        )r(   r*   r+   N)Ú_collect_downgrade_revisionsÚ_collect_upgrade_revisionsÚ_topological_sortr   r  )r0   r%   r'   r*   r(   r+   rJ  ÚfnrW   rH   rÖ   s              r1   Úiterate_revisionszRevisionMap.iterate_revisions  sœ   è è € ð*  ð 	1ØÔ2ˆBˆBàÔ0ˆBà˜2ØØØØ'Ø#9ð
ñ 
ô 
Ñˆ	�5ð ×*Ò*¨9°eÑ<Ô<ð 	4ð 	4ˆDÝ˜4×,Ò,¨TÑ2Ô2Ñ3Ô3Ð3Ð3Ð3Ð3ð	4ð 	4r3   ú%Collection[Optional[_RevisionOrBase]]úOptional[_RevisionMapType]ÚcheckÚomit_immediate_dependenciesúIterator[Any]c                ó^   ‡— |rd	ˆfd„}n|rd	d„}nd	d„}|                       |‰||¬¦  «        S )
Nr†   r   r,   úIterable[str]c                ó(   •— | ‰vr| j         S | j        S r/   )rÁ   r»   )r†   r,  s    €r1   rP  z-RevisionMap._get_descendant_nodes.<locals>.fnC  s   ø€ Ø˜gÐ%Ð%ØÔ+Ð+àœ;Ð&r3   c                ó   — | j         S r/   rÀ   ©r†   s    r1   rP  z-RevisionMap._get_descendant_nodes.<locals>.fnK  s   € ØÔ'Ð'r3   c                ó   — | j         S r/   rº   r[  s    r1   rP  z-RevisionMap._get_descendant_nodes.<locals>.fnP  s
   € Ø”{Ð"r3   ©r¤   rT  ©r†   r   r,   rX  ©rÃ   )r0   r,  r¤   rT  rU  rÑ   rP  s    `     r1   rÓ   z!RevisionMap._get_descendant_nodes9  s�   ø€ ð 'ð 	#ð'ð 'ð 'ð 'ð 'ð 'ð 'ð "ð 	#ð(ð (ð (ð (ð (ð
#ð #ð #ð #ð ×.Ò.Ø�˜d¨%ð /ñ 
ô 
ð 	
r3   c                óJ   — |rdd„}ndd„}|                       ||||¬¦  «        S )	Nr†   r   r,   rX  c                ó   — | j         S r/   ©Ú_normalized_down_revisionsr[  s    r1   rP  z+RevisionMap._get_ancestor_nodes.<locals>.fn`  s   € ØÔ5Ð5r3   c                ó   — | j         S r/   r³   r[  s    r1   rP  z+RevisionMap._get_ancestor_nodes.<locals>.fne  s   € ØÔ4Ð4r3   r]  r^  r_  )r0   r,  r¤   rT  rÑ   rP  s         r1   rä   zRevisionMap._get_ancestor_nodesW  sa   € ð  ð 	5ð6ð 6ð 6ð 6ð 6ð
5ð 5ð 5ð 5ð ×.Ò.Ø�˜d¨%ð /ñ 
ô 
ð 	
r3   rP  ú#Callable[[Revision], Iterable[str]]c           
   #  óÈ  K  — |€| j         }t          ¦   «         }t          j        ¦   «         }|D �]1}t	          |¦  «        }|                     |¦  «         |rt          ¦   «         }	|r”|                     ¦   «         }
|r|	                     |
¦  «         |
|v rŒ2|                     |
¦  «          ||
¦  «        D ]=}||         }|€J ‚|j        |k    rt          d¦  «        ‚|                     |¦  «         Œ>|
V — |°”|rb|	 
                    |¦  «                             |g¦  «        }|r7t          d|j        ›dd                     d„ |D ¦   «         ¦  «        ›�¦  «        ‚�Œ3d S )Nz(Dependency resolution failed; broken mapzRequested revision z) overlaps with other requested revisions rM   c              3  ó$   K  — | ]}|j         V — Œd S r/   rƒ   r)  s     r1   r‡   z9RevisionMap._iterate_related_revisions.<locals>.<genexpr>š  s$   è è € Ð%CÐ%C°Q a¤jÐ%CÐ%CÐ%CÐ%CÐ%CÐ%Cr3   )rs   r�   ÚcollectionsÚdequer  r9  Úpopr‘   rd   r9   rÄ   r0  rN   )r0   rP  r,  r¤   rT  ÚseenÚtodoÚ
target_forr;  Ú
per_targetr†   r  Únext_revÚoverlapss                 r1   rÃ   z&RevisionMap._iterate_related_revisionsl  sº  è è € ð ˆ<ØÔ%ˆDå‰uŒuˆÝ +Ô 1Ñ 3Ô 3ˆØ!ð $	ñ $	ˆJÝ  Ñ,Ô,ˆFØ�KŠK˜ÑÔÐØð #Ý ™UœU�
àð Ø—h’h‘j”j�Øð (Ø—N’N 3Ñ'Ô'Ð'à˜$�;�;ØØ—’˜‘”�à ˜b ™gœgð *ð *�FØ# Fœ|�HØ#Ð/Ð/Ð/ØÔ(¨FÒ2Ð2Ý+ØFñô ð ð —K’K Ñ)Ô)Ð)Ð)Ø�	�	�	ð# ð ð$ ð Ø%×2Ò2°7Ñ;Ô;×FÒFØ�Hñô �ð ð Ý'˜-ð #œO˜O˜OØ ŸIšIÐ%CÐ%C¸(Ð%CÑ%CÔ%CÑCÔCÐCð	ñô ð ùð;$	ð $	r3   r   ú	List[str]c                ó„  ‡ ‡‡‡‡— ‰ j         Šdˆˆ fd„Šd„ |D ¦   «         Št          ‰ j         ¦  «        }t          t          ˆfd„|D ¦   «         |j        ¬¦  «        ¦  «        Šˆfd	„‰D ¦   «         }g }d
}‰�rD‰|         }t	          |¦  «        D ]\  }}	||k    r	||	v r|} �nŒ|‰v r*|                     |¦  «         ‰                     |¦  «         ‰|         }
|
€J ‚ˆˆfd„|
j        D ¦   «         }|s‰|= ||= t          |dz
  d
¦  «        }n«|
j	        s?t          |
j        ¦  «        dk    r'|d
         ‰|<   ||                              |¦  «         ne|d
         ‰|<   ‰                     |dd…         ¦  «          ‰|d
         ¦  «        ||<   |                     ˆfd„|dd…         D ¦   «         ¦  «         ‰�°D‰rJ ‚|S )zïYield revision ids of a collection of Revision objects in
        topological sorted order (i.e. revisions always come after their
        down_revisions and dependencies). Uses the order of keys in
        _revision_map to sort.

        r  rR   r,   úSet[str]c                óP   •— d„ ‰                      ‰|          g¦  «        D ¦   «         S )Nc                ó   — h | ]	}|j         ’Œ
S r   rƒ   r)  s     r1   r°   zGRevisionMap._topological_sort.<locals>.get_ancestors.<locals>.<setcomp>­  s*   € ð ð ð àð ”
ðð ð r3   )rä   )r  Ú	id_to_revr0   s    €€r1   Úget_ancestorsz4RevisionMap._topological_sort.<locals>.get_ancestors¬  s:   ø€ ðð à×1Ò1°9¸VÔ3DÐ2EÑFÔFðñ ô ð r3   c                ó   — h | ]	}|j         ’Œ
S r   rƒ   rÝ   s     r1   r°   z0RevisionMap._topological_sort.<locals>.<setcomp>²  s   € Ð.Ð.Ð.˜q�”
Ð.Ð.Ð.r3   c                ó0   •— h | ]}|j         ‰v ¯|j         ’ŒS r   rƒ   )r…   rÞ   rl  s     €r1   r°   z0RevisionMap._topological_sort.<locals>.<setcomp>¹  s'   ø€ ÐAÐAÐA ¨a¬j¸DÐ.@Ð.@�”Ð.@Ð.@Ð.@r3   )Úkeyc                ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   )r…   r  rw  s     €r1   rÛ   z1RevisionMap._topological_sort.<locals>.<listcomp>½  s#   ø€ ÐNÐNÐN°f˜M˜M¨&Ñ1Ô1ÐNÐNÐNr3   r   Nc                ó$   •— g | ]}|‰v ¯|‰v¯
|‘ŒS r   r   )r…   rµ   r÷   rl  s     €€r1   rÛ   z1RevisionMap._topological_sort.<locals>.<listcomp>Û  s6   ø€ ð  ð  ð  àØ˜D�y�y Q¨mÐ%;Ð%;ð à%;Ð%;Ð%;r3   rô   c              3  ó.   •K  — | ]} ‰|¦  «        V — Œd S r/   r   )r…   rí   rw  s     €r1   r‡   z0RevisionMap._topological_sort.<locals>.<genexpr>ÿ  s>   øè è € ð 0ð 0Ø48˜M˜M¨$Ñ/Ô/ð0ð 0ð 0ð 0ð 0ð 0r3   )r  rR   r,   rs  )rs   rÂ   rÆ   ÚindexÚ	enumerater9  Úremoverc  Úmaxræ   rö   rœ   r�   r:  )r0   rW   rH   Úinserted_orderÚancestors_by_idxÚoutputÚcurrent_candidate_idxÚ	candidateÚcheck_head_indexÚ	ancestorsÚcandidate_revÚheads_to_addr÷   rw  rv  rl  s   `           @@@@r1   rO  zRevisionMap._topological_sortž  sÒ  øøøøø€ ð Ô&ˆ	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð /Ð. IÐ.Ñ.Ô.ˆõ ˜dÔ0Ñ1Ô1ˆåÝØAÐAÐAÐA UÐAÑAÔAØ"Ô(ðñ ô ñ
ô 
ˆð OÐNÐNÐNÀÐNÑNÔNÐàˆà !ÐØñ ?	Ø%Ð&;Ô<ˆIå/8Ð9IÑ/JÔ/Jð <ð <Ñ+Ð  )ð %Ð(=Ò=Ð=Ø! YÐ.Ð.à,<Ð)ð ‘Eøð  Ð$Ð$Ø—M’M )Ñ,Ô,Ð,Ø—K’K 	Ñ*Ô*Ð*ð !*¨)Ô 4�Ø$Ð0Ð0Ð0ð ð  ð  ð  ð  à*ÔEð ñ  ô  �ð $ð  à%Ð&;Ð<Ø(Ð)>Ð?Ý,/Ð0EÈÑ0IÈ1Ñ,MÔ,MÐ)Ð)ð *ÔKðå Ô GÑHÔHÈAÒMÐMà?KÈA¼˜Ð&;Ñ<ð )Ð)>Ô?×GÒGØ%ñô ð ð ð @LÈA¼˜Ð&;Ñ<Ø%×,Ò,¨\¸!¸"¸"Ô-=Ñ>Ô>Ð>à)˜M¨,°q¬/Ñ:Ô:ð )Ð)>Ñ?ð )×/Ò/ð 0ð 0ð 0ð 0Ø<HÈÈÈÔ<Lð0ñ 0ô 0ñ ô ð ð{ ñ ?	ðB ˆˆˆxØˆr3   ÚstartúOptional[Union[str, Revision]]r  r  Úno_overwalkúOptional[_RevisionOrBase]c                ó  — t          |t          ¦  «        r|                      |¦  «        }n|}t          t	          |¦  «        ¦  «        D ]¿}|dk    rQ|dk    sJ ‚d„ |                      |€| j        n|j        ¦  «        D ¦   «         }|r|                      ||¦  «        }n3|}n0|dk    rd}n'|                      |€| j	        n|j
        ¦  «        }|sd}|s
|rdn|}	|	c S t          |¦  «        dk    rt          d¦  «        ‚|d         }ŒÀ|S )	a©  
        Walk the requested number of :steps up (steps > 0) or down (steps < 0)
        the revision tree.

        :branch_label is used to select branches only when walking up.

        If the walk goes past the boundaries of the tree and :no_overwalk is
        True, None is returned, otherwise the walk terminates early.

        A RevisionError is raised if there is no unambiguous revision to
        walk to.
        r   r?   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r  r„   s     r1   rÛ   z%RevisionMap._walk.<locals>.<listcomp>$  s0   € ð ð ð àõ   Ñ$Ô$ðð ð r3   Nr   )r?   rô   zAmbiguous walk)r  rR   r  ÚrangeÚabsr  rw   r»   rõ   rH   r©   rö   r9   )
r0   r‹  r  rÌ   r�  ÚinitialÚ_Úwalk_upÚchildrenÚrets
             r1   r  zRevisionMap._walk  sk  € õ( �e�SÑ!Ô!ð 	Ø×'Ò'¨Ñ.Ô.ˆGˆGàˆGõ •s˜5‘z”zÑ"Ô"ð !	"ð !	"ˆAØ�qŠyˆyØ &Ò(Ð(Ð(Ð(ðð à#×1Ò1Ø&- o˜œ
˜
¸7¼?ñ ô  ðñ ô �ð  ð 'Ø#×6Ò6°wÀÑMÔM�H�Hà&�H�Hð ˜fÒ$Ð$Ø!�H�Hà#×1Ò1à"˜?ð œ
˜
à$Ô2ñ ô  �Hð
 $ð -Ø#,˜Øð 6ð *Ð6�d�d¨w�Ø�
�
�
Ý�X‘” Ò"Ð"Ý#Ð$4Ñ5Ô5Ð5Ø˜q”kˆGˆGàˆr3   Úcurrent_revisionsú/Tuple[Optional[str], Optional[_RevisionOrBase]]c                ó  — |€dS t          |t          ¦  «        s
J d¦   «         ‚t                               |¦  «        }|�r|                     ¦   «         \  }}}t          |¦  «        }|dk    rQ|€!t          d|t          |¦  «        fz  ¦  «        ‚|                      ||||¬¦  «        }	|	€t          d¦  «        ‚||	fS |du }
|
�r|rŸt          j
        |¦  «        }|                      ||¦  «        }|sUt          t          t                   |                      |¦  «        ¦  «        }|                      ||¦  «        }d„ |D ¦   «         }t!          |¦  «        d	k    sJ ‚|d         }nut          j
        |¦  «        }|s!t          d|t          |¦  «        fz  ¦  «        ‚t!          t#          |¦  «        ¦  «        d	k    rt          j        d
¦  «         |d         }|}|                      |€|                      |¦  «        n|                      |›d|›�¦  «        ||¬¦  «        }	|	€2|
r!t          d|t          |¦  «        fz  ¦  «        ‚t          d¦  «        ‚||	fS |                     d¦  «        \  }}}|sd}||                      |¦  «        fS )aX  
        Parse downgrade command syntax :target to retrieve the target revision
        and branch label (if any) given the :current_revisions stamp of the
        database.

        Returns a tuple (branch_label, target_revision) where branch_label
        is a string from the command specifying the branch to consider (or
        None if no branch given), and target_revision is a Revision object
        which the command refers to. target_revisions is None if the command
        refers to 'base'. The target may be specified in absolute form, or
        relative to :current_revisions.
        N©NNz(Expected downgrade target in string formr   ú1Relative revision %s didn't produce %d migrations)r�  zWalked too farc                ó$   — g | ]}|r|j         n|‘ŒS r   rƒ   r)  s     r1   rÛ   z7RevisionMap._parse_downgrade_target.<locals>.<listcomp>†  s3   € ð +ð +ð +à$%ð /0Ð 6 ¤
 
°Qð+ð +ð +r3   rô   zadowngrade -1 from multiple heads is ambiguous; this usage will be disallowed in a future release.r    ©r‹  r  r�  )r  rR   Ú_relative_destinationÚmatchÚgroupsr  r9   r“  r  r   rà   rõ   r   r   r   Ú_get_all_currentrö   r�   r’   r  Ú
rpartition)r0   r™  r;  r+   r¡  rÌ   ÚsymbolÚrelativeÚrel_intr†   Úrelative_revisionÚcr_tupleÚsymbol_listÚall_currentÚsl_all_currentr•  s                   r1   Ú_parse_downgrade_targetz#RevisionMap._parse_downgrade_targetE  sS  € ð$ ˆ>Ø�:ÝØ•Cñ
ô 
ð 	6ð 	6à5ñ	6ô 	6ð 
õ &×+Ò+¨FÑ3Ô3ˆØñ X	)Ø-2¯\ª\©^¬^Ñ*ˆL˜& (Ý˜(‘m”mˆGØ˜!Š|ˆ|Ø�>å'ð0Ø3;½SÀ¹\¼\Ð2JñKñô ð ð
 —j’jØØØ Ø 6ð	 !ñ ô �ð �;Ý'Ð(8Ñ9Ô9Ð9Ø# SÐ(Ð(à$*¨d NÐ!Ø$ñ -.à#ð +.Ý#'¤=Ð1BÑ#CÔ#C˜à&*×&=Ò&=Ø$ lñ'ô '˜ð  +ð õ
 +/Ý #¥H¤¨t×/DÒ/DÀXÑ/NÔ/Nñ+ô +˜Kð .2×-DÒ-DØ +¨\ñ.ô .˜Nð+ð +à)7ð+ñ +ô +˜Kõ
  # ;Ñ/Ô/°1Ò4Ð4Ð4Ð4Ø!,¨Q¤˜˜å,0¬MÐ:KÑ,LÔ,LÐ)Ø0ð Ý"/ð!8à#+­S°©\¬\Ð":ñ!;ñ#ô #ð õ �sÐ#4Ñ5Ô5Ñ6Ô6¸Ò:Ð:Ý œIð!+ñô ð ð "3°1Ô!5˜ð (.˜à—j’jð (Ð/ð ×)Ò)¨&Ñ1Ô1Ð1à!×.Ò.Ø'3 | |°V°VÐ<ñô ð "Ø 6ð !ñ 
ô 
�ð �;Ø(ð >Ý+ð4Ø7?ÅÀWÁÄÐ6NñOñô ð õ
 ,Ð,<Ñ=Ô=Ð=Ø# SÐ(Ð(ð #)×"3Ò"3°CÑ"8Ô"8Ñˆ�a˜Øð 	 ØˆLØ˜T×.Ò.¨vÑ6Ô6Ð6Ð6r3   c                óN  — t          |t          ¦  «        rt                               |¦  «        }nd}|s|                      |¦  «        S t          j        |¦  «        }|                     ¦   «         \  }}}t          |¦  «        }	|	dk    �r0|�€ |sd}|}
|r‘|  	                    |                      |¦  «        |¦  «        }
|
sf|  	                    |  
                    |                      |¦  «        ¦  «        |¦  «        }t          d„ |D ¦   «         d„ |D ¦   «         z
  ¦  «        }
|
sd}
t          |
¦  «        dk    rt          d¦  «        ‚|                      |
d         |	||¬¦  «        }|€!t          d	|t          |	¦  «        fz  ¦  «        ‚|fS |                      |                      |¦  «        |	||¬¦  «        fS |€!t          d	|	t          |	¦  «        fz  ¦  «        ‚|                      |€|                      |¦  «        n|                      |›d
|›�¦  «        |	|¬¦  «        fS )aJ  
        Parse upgrade command syntax :target to retrieve the target revision
        and given the :current_revisions stamp of the database.

        Returns a tuple of Revision objects which should be iterated/upgraded
        to. The target may be specified in absolute form, or relative to
        :current_revisions.
        Nr   r/   c                ó   — h | ]	}|j         ’Œ
S r   rƒ   r„   s     r1   r°   z4RevisionMap._parse_upgrade_target.<locals>.<setcomp>ð  s   € ÐFÐFÐF¨c˜Sœ\ÐFÐFÐFr3   c                ó&   — h | ]}|j         D ]}|’ŒŒS r   rb  )r…   r†   Údowns      r1   r°   z4RevisionMap._parse_upgrade_target.<locals>.<setcomp>ñ  sB   € ð ð ð à$'Ø,/Ô,Jðð ð %)ð !%ðð ð ð r3   rô   z1Ambiguous upgrade from multiple current revisions)r‹  r  rÌ   r�  r�  r    rŸ  )r  rR   r   r¡  r  r   rà   r¢  r  rõ   rä   r¢   rö   r9   r  r“  r  )r0   r™  r;  r+   r¡  Úcurrent_revisions_tuprÌ   r¥  Úrelative_strr¦  Ú
start_revsÚactive_on_branchr†   s                r1   Ú_parse_upgrade_targetz!RevisionMap._parse_upgrade_target½  sÖ  € õ �f�cÑ"Ô"ð 	Ý)×/Ò/°Ñ7Ô7ˆEˆEàˆEàð 	.à×%Ò% fÑ-Ô-Ð-õ !%¤Ð.?Ñ @Ô @Ðà-2¯\ª\©^¬^Ñ*ˆ�f˜lÝ�|Ñ$Ô$ˆØ�aŠ<‰<Ø‰~Ø,ð 4Ø,3Ð)à2�
Øð 1Ø!%×!8Ò!8Ø×*Ò*Ð+@ÑAÔAØ$ñ"ô "�Jð &ð 1ð ,0×+BÒ+BØ ×4Ò4Ø $× 2Ò 2Ð3HÑ IÔ Iñô ð )ñ	,ô ,Ð(õ &+ØFÐFÐ5EÐFÑFÔFðð à+;ðñ ô ññ&ô &˜
ð  *ð 1ð *1˜JÝ�z‘?”? QÒ&Ð&Ý'ØKñô ð ð —j’jØ$ Qœ-Ø"Ø!-Ø 6ð	 !ñ ô �ð �;Ý'ð0Ø3?ÅÀXÁÄÐ2OñPñô ð ð �v�ð —J’JØ"×/Ò/°Ñ7Ô7Ø&Ø%1Ø$:ð	 ñ ô ðð ð ˆ~å#ð,Ø/7½¸X¹¼Ð.GñHñô ð ð
 —
’
ð (Ð/ð ×)Ò)¨&Ñ1Ô1Ð1à!×.Ò.Ø'3 | |°V°VÐ<ñô ð #Ø 6ð ñ 
ô 
ðð r3   r-   c                ó  — |                       |||¬¦  «        \  }}|dk    rd}|�t          |t          ¦  «        sJ ‚|€$d„ | j                             ¦   «         D ¦   «         }n*|r|g}n$d„ |                      |j        ¦  «        D ¦   «         }|r¦t          |¦  «        dk    r“d„ |                      |  	                    |¦  «        gd¬	¦  «        D ¦   «         }	d
„ |                      d„ |D ¦   «          
                    |	¦  «        ¦  «        D ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚|                      |¦  «        }
t          |                      |dd¬¦  «        ¦  «        }t          |                      |
d¬	¦  «        ¦  «        }|                     |¦  «         |r;|                     |                     |                      |¦  «        ¦  «        ¦  «         |�|s||
vrt#          d|¦  «        ‚||
fS )a  
        Compute the set of current revisions specified by :upper, and the
        downgrade target specified by :target. Return all dependents of target
        which are currently active.

        :inclusive=True includes the target revision in the set
        ©r™  r;  r+   r?   Nc                ó$   — g | ]}|®|j         ­|‘ŒS r/   ©r©   r„   s     r1   rÛ   z<RevisionMap._collect_downgrade_revisions.<locals>.<listcomp>H  s/   € ð ð ð àØ�? sÔ'8Ð'@ð à'@Ð'@Ð'@r3   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r‘  r„   s     r1   rÛ   z<RevisionMap._collect_downgrade_revisions.<locals>.<listcomp>R  s0   € ð ð ð àõ ˜CÑ Ô ðð ð r3   rô   c                ó   — h | ]	}|j         ’Œ
S r   rƒ   r„   s     r1   r°   z;RevisionMap._collect_downgrade_revisions.<locals>.<setcomp>Y  s*   € ð ð ð àð ”ðð ð r3   FrÐ   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r‘  r„   s     r1   rÛ   z<RevisionMap._collect_downgrade_revisions.<locals>.<listcomp>b  s0   € ð ð ð àõ ˜CÑ Ô ðð ð r3   c                ó   — h | ]	}|j         ’Œ
S r   rƒ   r„   s     r1   r°   z;RevisionMap._collect_downgrade_revisions.<locals>.<setcomp>e  s   € Ð3Ð3Ð3 c�S”\Ð3Ð3Ð3r3   r   z/Not a valid downgrade target from current headsT)rÑ   rU  zNothing to drop)r­  r  r   rs   r™   r  r»   rö   rä   r  rÄ   r9   r�   rÓ   Úintersection_updaterÒ   r0  r;   )r0   r%   r'   r(   r*   r+   rÌ   Útarget_revisionÚrootsrˆ  rH   Údowngrade_revisionsÚactive_revisionss                r1   rM  z(RevisionMap._collect_downgrade_revisions+  s¨  € ð  )-×(DÒ(DØ#ØØ#9ð )Eñ )
ô )
Ñ%ˆ�oð
 ˜fÒ$Ð$Ø"ˆOØÐ&­*°_ÅhÑ*OÔ*OÐ&Ð&ÐOð Ð"ðð àÔ-×4Ò4Ñ6Ô6ðñ ô ˆEˆEð
 ð 	à$Ð%ˆEˆEðð à×-Ò-¨oÔ.EÑFÔFðñ ô ˆEð
 ð 	�C ™JœJ¨šN˜Nðð à×3Ò3Ø×)Ò)¨,Ñ7Ô7Ð8Ø).ð 4ñ ô ðñ ô ˆIðð à×-Ò-Ø3Ð3¨UÐ3Ñ3Ô3×@Ò@ÀÑKÔKñô ðñ ô ˆEõ �5‰zŒz˜QŠˆÝ#ØEñô ð ð ×"Ò" 5Ñ)Ô)ˆõ "Ø×&Ò&ØØ%)Ø,1ð 'ñ ô ñ
ô 
Ðõ Ø×$Ò$ UÀÐ$ÑFÔFñ
ô 
Ðð
 	×/Ò/Ð0@ÑAÔAÐAàð 	à×&Ò&Ø ×+Ò+¨D×,DÒ,DÀUÑ,KÔ,KÑLÔLñô ð ð
 Ð'Ø'ð (à uÐ,Ð,õ (Ð(9¸5ÑAÔAÐAà" EÐ)Ð)r3   ú*Tuple[Set[Revision], Tuple[Revision, ...]]c                óæ  ‡‡— d„ |                       |||¬¦  «        D ¦   «         }t          |t          ¦  «        rˆd|v r„|                     d¦  «        \  Š}}|                      ‰¦  «        }|�F|j        ‰k    r;t          |j        ¦  «        dk    sJ ‚t          t          |j        ¦  «        ¦  «        Šˆfd„|D ¦   «         }t          |                      |dd¬¦  «        ¦  «                             |¦  «        Š|                      |¦  «        }	|s+t          ˆfd	„|	D ¦   «         ¦  «        rt          ||¦  «        ‚t!          |	¦  «        t"          u s
J d
¦   «         ‚|	rH|	d         €@|                      |||¬¦  «        \  }}
|
sJ ‚|
dk    rt#          ¦   «         }	d}n
|
f}	|
j        }t          |                      |	dd¬¦  «        ¦  «                             |	¦  «        }‰                     |¦  «        }|r2|                     d„ |                      |¦  «        D ¦   «         ¦  «         |	r9|s7|                      d„ |	D ¦   «         dd¬¦  «        }|                     |¦  «         |t#          |¦  «        fS )aè  
        Compute the set of required revisions specified by :upper, and the
        current set of active revisions specified by :lower. Find the
        difference between the two to compute the required upgrades.

        :inclusive=True includes the current/lower revisions in the set

        :implicit_base=False only returns revisions which are downstream
        of the current/lower revisions. Dependencies from branches with
        different bases will not be included.
        c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r‘  r„   s     r1   rÛ   z:RevisionMap._collect_upgrade_revisions.<locals>.<listcomp>¥  s0   € ð )
ð )
ð )
àõ ˜ÑÔð)
ð )
ð )
r3   r¸  r    Nrô   c                ó&   •— h | ]}‰|j         v ¯|’ŒS r   )r“   )r…   ÚneedÚbranchs     €r1   r°   z9RevisionMap._collect_upgrade_revisions.<locals>.<setcomp>¹  s-   ø€ ð ð ð Ø¨F°dÔ6HÐ,HÐ,H�Ð,HÐ,HÐ,Hr3   T)rT  rÑ   c              3  ó$   •K  — | ]
}|®|‰vV — Œd S r/   r   )r…   r†   Úrequired_node_sets     €r1   r‡   z9RevisionMap._collect_upgrade_revisions.<locals>.<genexpr>Ä  s7   øè è € ð %
ð %
àØˆð Ð(Ð(àˆˆˆð%
ð %
r3   z#current_revisions should be a tupler   r?   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r/   r‘  r„   s     r1   r‡   z9RevisionMap._collect_upgrade_revisions.<locals>.<genexpr>è  s*   è è € ÐOÐO¨c� SÑ)Ô)ÐOÐOÐOÐOÐOÐOr3   c                ó,   — g | ]}t          |¦  «        ‘ŒS r   r‘  r„   s     r1   rÛ   z:RevisionMap._collect_upgrade_revisions.<locals>.<listcomp>ï  s    € Ð?Ð?Ð? c•˜SÑ!Ô!Ð?Ð?Ð?r3   F)r¶  r  rR   Ú	partitionr  rd   rö   r“   ÚnextÚiterr�   rä   rë   r  Úanyr;   Útyper¢   r­  r0  rÒ   rÓ   r¿  )r0   r%   r'   r(   r*   r+   r,  r•  r  r™  r†   Úcurrent_node_setÚneedsÚlower_descendentsrÉ  rË  s                 @@r1   rN  z&RevisionMap._collect_upgrade_revisions’  s.  øø€ ð&)
ð )
à×1Ò1Ø"'ØØ'=ð 2ñ ô ð)
ñ )
ô )
ˆõ �e�SÑ!Ô!ð 		 c¨U l lØ Ÿ?š?¨3Ñ/Ô/‰LˆF�A�qØ×*Ò*¨6Ñ2Ô2ˆJØÐ%¨*Ô*=ÀÒ*GÐ*Gå˜:Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9Ý�d :Ô#;Ñ<Ô<Ñ=Ô=�ðð ð ð Ø!(ðñ ô ˆGõ  Ø×$Ò$Ø˜t¸$ð %ñ ô ñ
ô 
÷ Š%�‰.Œ.ð	 	ð !×.Ò.¨uÑ5Ô5ÐØð 	6¥ð %
ð %
ð %
ð %
à(ð%
ñ %
ô %
ñ "
ô "
ð 	6õ
 (¨¨uÑ5Ô5Ð5åÐ"Ñ#Ô#¥uÐ,Ð,Ð,Ø0ñ -Ô,Ð,ð
 ð 	%Ð!2°1Ô!5Ð!=Ø×1Ò1Ø"'ØØ'=ð 2ñ ô ‰FˆAˆsð
 ˆJˆJ�3Ø�fŠ}ˆ}Ý$)¡G¤GÐ!Ø��à%( FÐ!Øœ�åØ×$Ò$Ø!¨ÀDð %ñ ô ñ
ô 
÷ Š%Ð!Ñ
"Ô
"ð	 	ð "×,Ò,Ð-=Ñ>Ô>ˆð ð 	PØ�LŠLÐOÐO°T×5GÒ5GÈÑ5NÔ5NÐOÑOÔOÑOÔOÐOð
 ð 	9 ]ð 	9Ø $× :Ò :Ø?Ð?Ð->Ð?Ñ?Ô?ØØ%*ð !;ñ !ô !Ðð
 ×%Ò%Ð&7Ñ8Ô8Ð8à•e˜G‘n”nÐ$Ð$r3   c                óÞ   — t          |                      |¦  «        ¦  «        }|                     |                      t	          |¦  «        d¬¦  «        ¦  «         |                      |¦  «        S )NTrÐ   )r�   r  rÒ   rä   rÂ   r1  )r0   rü   Útop_revss      r1   r£  zRevisionMap._get_all_current÷  sg   € õ �t×)Ò)¨#Ñ.Ô.Ñ/Ô/ˆØ�ŠØ×$Ò$¥T¨(¡^¤^È$Ð$ÑOÔOñ	
ô 	
ð 	
ð ×-Ò-¨hÑ7Ô7Ð7r3   )rm   rn   r,   r<   ©r,   rq   )r,   r}   )r§   r«   rH   r¬   rw   r­   ry   r¬   r|   r­   r,   r<   )rW   rÉ   r¤   r}   r,   r<   )F)rd   r   rè   r)   r,   r<   r/   )rÌ   rK   r,   rK   )rù   rR   r,   rq   )rü   rý   r,   rþ   )rü   rK   r,   r  )rÌ   rR   r,   r  )r  r  r  rK   r,   r  )r,  r-  r,   r.  )r,  r2  r3  rK   rÑ   r)   r,   r4  )r;  r<  r=  r>  rÑ   r)   r,   r)   )rü   rý   r,   rF  )FFTF)r%   r&   r'   r&   r*   r)   r(   r)   r+   r)   rJ  r)   r,   rK  )NFFT)r,  rR  r¤   rS  rT  r)   rU  r)   rÑ   r)   r,   rV  )NFT)
r,  rR  r¤   rS  rT  r)   rÑ   r)   r,   rK  )
rP  re  r,  rR  r¤   rS  rT  r)   r,   rK  )rW   rÉ   rH   r   r,   rq  )NT)
r‹  rŒ  r  r  rÌ   rK   r�  r)   r,   rŽ  )r™  r&   r;  r&   r+   r)   r,   rš  )r™  r&   r;  r&   r+   r)   r,   rþ   r4   )r%   r&   r'   r&   r(   r)   r*   r)   r+   r)   r,   rÄ  )rü   rq   r,   r.  )'r5   r6   r7   Ú__doc__rA   r   Úmemoized_propertyrH   rw   ry   r|   rs   rŸ   r—   r£   r˜   rž   rò   rø   rû   r  r  r  r
  r1  rõ   r*  r  rQ  rÓ   rä   rÃ   rO  r  r­  r¶  rM  rN  r£  r   r3   r1   rl   rl   ~   s»  € € € € € ðð ð$ð $ð $ð $ð 
Ôð
ð 
ð 
ñ Ôð
ð 
Ôð
ð 
ð 
ñ Ôð
ð 
Ôð ð  ð  ñ Ôð ð 
Ôð ð  ð  ñ Ôð ð 
ÔðIð Ið Iñ ÔðIðV2@ð 2@ð 2@ð 2@ðh2ð 2ð 2ð 2ð*ð ð ð ð.5ð 5ð 5ð 5ð.&@ð &@ð &@ð &@ðP6%ð 6%ð 6%ð 6%ð 6%ðr -1ð"ð "ð "ð "ð "ðH?ð ?ð ?ð ?ð/ð /ð /ð /ðb@ð @ð @ð @ð*ð ð ð ð& '+ð@ð @ð @ð @ð @ðDð ð ð ð" &+ð	
ð 
ð 
ð 
ð 
ð4 &+ð	&
ð &
ð &
ð &
ð &
ðP&Bð &Bð &Bð &BðX $ØØ'+Ø%*ð#4ð #4ð #4ð #4ð #4ðP ,0ØØ,1Ø%)ð
ð 
ð 
ð 
ð 
ðB ,0ØØ%)ð
ð 
ð 
ð 
ð 
ð4 ð0ð 0ð 0ð 0ð 0ðdfð fð fð fðX '+Ø ð=ð =ð =ð =ð =ð~v7ð v7ð v7ð v7ðplð lð lð lð\e*ð e*ð e*ð e*ðNc%ð c%ð c%ð c%ðJ8ð 8ð 8ð 8ð 8ð 8r3   rl   c                  óÌ  — e Zd ZU dZ e¦   «         Zded<   	  e¦   «         Zded<   dZded<   	 dZ	ded	<   	 dZ
ded
<   	 dZded<   	 ded<   ded<   ed"d„¦   «         Z	 	 d#d$d„Zd%d„Zd&d„Zed'd„¦   «         Zed'd„¦   «         Zed'd„¦   «         Zed(d„¦   «         Zed(d„¦   «         Zed(d„¦   «         Zed(d„¦   «         Zed(d„¦   «         Zed(d „¦   «         Zed(d!„¦   «         ZdS ))r   ao  Base class for revisioned objects.

    The :class:`.Revision` class is the base of the more public-facing
    :class:`.Script` object, which represents a migration script.
    The mechanics of revision management and traversal are encapsulated
    within :class:`.Revision`, while :class:`.Script` applies this logic
    to Python files in a version directory.

    zFrozenSet[str]r»   rÁ   NrR   rd   zOptional[_RevIdType]r©   rß   rs  r“   rq   rá   ræ   r,   r<   c                óÄ   — t          |¦  «                             t          ¦  «        }|r6t          dd                     t          |¦  «        ¦  «        ›d|›d�¦  «        ‚d S )NzCharacter(s) 'rM   z&' not allowed in revision identifier 'r%  )r�   rÄ   Ú_revision_illegal_charsr9   rN   rÆ   )Úclsrd   Úillegal_charss      r1   Úverify_rev_idzRevision.verify_rev_id.  sj   € å˜H™œ×2Ò2Õ3JÑKÔKˆØð 	Ý�-à—9’9�V MÑ2Ô2Ñ3Ô3Ð3Ð3°X°X°Xð?ñô ð ð	ð 	r3   ú%Optional[Union[str, Tuple[str, ...]]]c                óÚ  — |r%|t          j        |¦  «        v rt          |¦  «        ‚|�%|t          j        |¦  «        v rt          |¦  «        ‚|                      |¦  «         || _        t          t          j        |¦  «        ¦  «        | _        t          t          j        |¦  «        ¦  «        | _        t          j        |d¬¦  «        | _	        t          | j	        ¦  «        | _        d S ©Nr   rB  )r   rà   rc   ri   rà  rd   Útuple_rev_as_scalarr©   rß   rË   r�   r“   )r0   rd   r©   rß   r“   s        r1   rA   zRevision.__init__7  sà   € ð ð 	3˜X­¬°}Ñ)EÔ)EÐEÐEÝ˜xÑ(Ô(Ð(ØÐ%¨(µd´mØñ7
ô 7
ð +
ð +
õ )¨Ñ2Ô2Ð2à×Ò˜8Ñ$Ô$Ð$Ø ˆŒÝ0µ´¸}Ñ1MÔ1MÑNÔNˆÔÝ/µ´¸lÑ0KÔ0KÑLÔLˆÔÝ#'¤=°ÈÐ#KÑ#KÔ#KˆÔ Ý  Ô!9Ñ:Ô:ˆÔÐÐr3   c                ó,  — t          | j        ¦  «        t          | j        ¦  «        g}| j        r|                     d| j        ›�¦  «         | j        r|                     d| j        ›�¦  «         | j        j        ›dd                     |¦  «        ›d�S )Nzdependencies=zbranch_labels=ú(rM   rY   )	Úreprrd   r©   rß   r9  r“   rB   r5   rN   )r0   Úargss     r1   Ú__repr__zRevision.__repr__L  s—   € Ý�T”]Ñ#Ô#¥T¨$Ô*<Ñ%=Ô%=Ð>ˆØÔð 	BØ�KŠKˆK¨TÔ->Ð->Ð@ÑAÔAÐAØÔð 	DØ�KŠKˆK¨dÔ.@Ð.@ÐBÑCÔCÐCØœ>Ô2Ð2Ð2°D·I²I¸d±O´O°O°OÐDÐDr3   c                óº   — | j                              |j        g¦  «        | _         | j        |j        v r'| j                             |j        g¦  «        | _        d S d S r/   )rÁ   rë   rd   rœ   r»   )r0   rd   s     r1   r›   zRevision.add_nextrevT  sZ   € Ø Ô-×3Ò3°XÔ5FÐ4GÑHÔHˆÔØŒ=˜HÔ>Ð>Ð>Øœ<×-Ò-¨xÔ/@Ð.AÑBÔBˆDŒLˆLˆLð ?Ð>r3   c                ól   — t          j        t          j        | j        d¬¦  «        | j        z   ¦  «        S rã  )r   Údedupe_tuplerà   r©   rá   rt   s    r1   rš   zRevision._all_down_revisionsY  s7   € åÔ ÝŒM˜$Ô,°bÐ9Ñ9Ô9ØÔ)ñ*ñ
ô 
ð 	
r3   c                ól   — t          j        t          j        | j        d¬¦  «        | j        z   ¦  «        S )z|return immediate down revisions for a rev, omitting dependencies
        that are still dependencies of ancestors.

        r   rB  )r   rì  rà   r©   ræ   rt   s    r1   rc  z#Revision._normalized_down_revisions`  s9   € õ Ô ÝŒM˜$Ô,°bÐ9Ñ9Ô9ØÔ4ñ5ñ
ô 
ð 	
r3   c                ó8   — t          j        | j        d¬¦  «        S rã  )r   rà   r©   rt   s    r1   rœ   z"Revision._versioned_down_revisionsk  s   € åŒ}˜TÔ/¸Ð<Ñ<Ô<Ð<r3   r)   c                ó,   — t          | j        ¦  «         S )a  Return True if this :class:`.Revision` is a 'head' revision.

        This is determined based on whether any other :class:`.Script`
        within the :class:`.ScriptDirectory` refers to this
        :class:`.Script`.   Multiple heads can be present.

        )r)   r»   rt   s    r1   rñ   zRevision.is_heado  s   € õ ˜œÑ%Ô%Ð%Ð%r3   c                ó,   — t          | j        ¦  «         S r/   )r)   rÁ   rt   s    r1   rð   zRevision._is_real_headz  s   € å˜Ô)Ñ*Ô*Ð*Ð*r3   c                ó   — | j         du S )z<Return True if this :class:`.Revision` is a 'base' revision.Nrº  rt   s    r1   r”   zRevision.is_base~  s   € ð Ô! TÐ)Ð)r3   c                ó&   — | j         du o| j        du S )zrReturn True if this :class:`.Revision` is a "real" base revision,
        e.g. that it has no dependencies either.N)r©   rß   rt   s    r1   r•   zRevision._is_real_base„  s   € ð Ô! TÐ)ÐG¨dÔ.?À4Ð.GÐGr3   c                ó2   — t          | j        ¦  «        dk    S )a+  Return True if this :class:`.Script` is a branch point.

        A branchpoint is defined as a :class:`.Script` which is referred
        to by more than one succeeding :class:`.Script`, that is more
        than one :class:`.Script` has a `down_revision` identifier pointing
        here.

        rô   )rö   r»   rt   s    r1   Úis_branch_pointzRevision.is_branch_pointŽ  s   € õ �4”<Ñ Ô  1Ò$Ð$r3   c                ó2   — t          | j        ¦  «        dk    S )zzReturn True if this :class:`.Script` is a 'real' branch point,
        taking into account dependencies as well.

        rô   )rö   rÁ   rt   s    r1   rÔ   zRevision._is_real_branch_pointš  s   € õ �4Ô$Ñ%Ô%¨Ò)Ð)r3   c                ó2   — t          | j        ¦  «        dk    S )z6Return True if this :class:`.Script` is a merge point.rô   )rö   rœ   rt   s    r1   rÕ   zRevision.is_merge_point¢  s   € õ �4Ô1Ñ2Ô2°QÒ6Ð6r3   rg   rœ  )
rd   rR   r©   rá  rß   rá  r“   rá  r,   r<   )r,   rR   )rd   r   r,   r<   rØ  )r,   r)   )r5   r6   r7   rÙ  r  r»   Ú__annotations__rÁ   rd   r©   rß   r“   Úclassmethodrà  rA   ré  r›   Úpropertyrš   rc  rœ   rñ   rð   r”   r•   rô  rÔ   rÕ   r   r3   r1   r   r     s{  € € € € € € ðð ð (˜i™kœk€GÐ)Ð)Ð)Ñ)Ø;à#, 9¡;¤;€LÐ.Ð.Ð.Ñ.à€HÐÐÐÑØ%à*.€MÐ.Ð.Ð.Ñ.ðð *.€LÐ-Ð-Ð-Ñ-ðð #€MÐ"Ð"Ð"Ñ"ðð ,Ð+Ð+Ñ+Ø6Ð6Ð6Ñ6àðð ð ñ „[ðð ?CØ?Cð;ð ;ð ;ð ;ð ;ð*Eð Eð Eð EðCð Cð Cð Cð
 ð
ð 
ð 
ñ „Xð
ð ð
ð 
ð 
ñ „Xð
ð ð=ð =ð =ñ „Xð=ð ð&ð &ð &ñ „Xð&ð ð+ð +ð +ñ „Xð+ð ð*ð *ð *ñ „Xð*ð
 ðHð Hð Hñ „XðHð ð	%ð 	%ð 	%ñ „Xð	%ð ð*ð *ð *ñ „Xð*ð ð7ð 7ð 7ñ „Xð7ð 7ð 7r3   r†   r<   r,   c                ó   — d S r/   r   r[  s    r1   rä  rä  ©  s   € Ø,/¨Cr3   úUnion[Tuple[_T, ...], List[_T]]ú#Union[_T, Tuple[_T, ...], List[_T]]c                ó   — d S r/   r   r[  s    r1   rä  rä  ­  s	   € ð +.¨#r3   úOptional[Sequence[_T]]úUnion[_T, Sequence[_T], None]c                óD   — | sd S t          | ¦  «        dk    r| d         S | S )Nrô   r   )rö   r[  s    r1   rä  rä  ³  s.   € ð ð ØˆtÝ	ˆS‰Œ�QŠˆØ�1Œvˆàˆ
r3   r   c                ó4   — t          | t          ¦  «        sJ ‚| S r/   )r  r   r[  s    r1   r  r  ¾  s   € Ý�c�8Ñ$Ô$Ð$Ð$Ð$Ø€Jr3   )r†   r<   r,   r<   )r†   rû  r,   rü  )r†   rþ  r,   rÿ  )r†   r   r,   r   )9Ú
__future__r   rh  r  Útypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Ú
sqlalchemyr   r�   r'  r   r   rR   Ú
_RevIdTypeÚ
_GetRevArgr&   Ú_RevisionOrStrÚ_RevisionOrBaser«   r}   r   r   Úcompiler   rÝ  r$   rï   r9   r;   rG   rP   rU   r_   rc   ri   rl   r   rä  r  r   r3   r1   ú<module>r
     s  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àð ØÐÐÐÐÐà�3˜˜Sœ	 5¨¨c¨¤?Ð2Ô3€
ØØØˆX�cŒ]ÔØˆS„Mðô€
ð
    U¨3°¨8¤_°dÐ :Ô;Ð Ø�z 3�Ô'€ØÐ5Ô6€Ø˜s J˜Ô/Ð Ø˜˜d C¨¨r¬Ð2Ô3°X¸jÔ5IÐIÔJÐ Ø€WˆT�]„]€Ø€gˆe˜8 NÔ3Ð4Ñ4Ô4€à"˜œ
Ð#DÑEÔEÐ Ø)˜/˜/Ð ðJð Jð Jð Jð J ñ Jô Jð Jð	ð 	ð 	ð 	ð 	�Iñ 	ô 	ð 	ð	
ð 	
ð 	
ð 	
ð 	
˜Mñ 	
ô 	
ð 	
ð
ð 
ð 
ð 
ð 
�Mñ 
ô 
ð 
ð!ð !ð !ð !ð !�mñ !ô !ð !ð
ð 
ð 
ð 
ð 
�Mñ 
ô 
ð 
ð$ð $ð $ð $ð $˜mñ $ô $ð $ð%ð %ð %ð %ð %�=ñ %ô %ð %ð#ð #ð #ð #ð #Ð4°lñ #ô #ð #ðA8ð A8ð A8ð A8ð A8ñ A8ô A8ð A8ðH,d7ð d7ð d7ð d7ð d7ñ d7ô d7ð d7ðN 
Ø /Ð /Ð /ñ 
„Ø /ð 
ð.ð .ð .ñ 
„ð.ð
ð ð ð ðð ð ð ð ð r3   