Ë Ÿîz…åT/ãóL—dZddlZddlZddlmZmZmZmZmZm Z m Z ddl m Z m Z mZmZgd¢Ze e eefdfZe e ee eeffZe ee e e eefe ee eefffdffZe ee edfeeeefZeeegefZGd„d e«Zd ed d fd „ZGd„de«ZGd„d«ZdZeZ Gd„d e«Z deede ee!edfd ee eeffd„Z"ejFd«Z$deed eefd„Z%dede edfdee eefdee eefdee eefdeed efd„Z&y) zB .. testsetup:: from packaging.version import parse, Version éN)ÚAnyÚCallableÚ NamedTupleÚOptionalÚ SupportsIntÚTupleÚUnioné)ÚInfinityÚ InfinityTypeÚNegativeInfinityÚNegativeInfinityType)ÚVERSION_PATTERNÚparseÚVersionÚInvalidVersion.cóŠ—eZdZUeed<eedfed<eeeefed<eeeefed<eeeefed<eeed<y) Ú_VersionÚepoch.ÚreleaseÚdevÚpreÚpostÚlocalN) Ú__name__Ú __module__Ú __qualname__ÚintÚ__annotations__rrÚstrÚ LocalType©óú6/usr/lib/python3.12/site-packages/packaging/version.pyrr$sY…Ø ƒJØ �3˜�8‰_ÓØ �%˜˜S˜‘/Ñ "Ó"Ø �%˜˜S˜‘/Ñ "Ó"Ø �5˜˜c˜‘?Ñ #Ó#Ø �IÑ Ôr#rÚversionÚreturnrcó—t|«S)z×Parse the given version string. >>> parse('1.0.dev1') :param version: The version string to parse. :raises InvalidVersion: When the version string is not a valid version. )r)r%s r$rr-s€ô �7Ó Ðr#có—eZdZdZy)rzÉRaised when a version string is not a valid version. >>> Version("invalid") Traceback (most recent call last): ... packaging.version.InvalidVersion: Invalid version: 'invalid' N)rrrÚ__doc__r"r#r$rr9s„òr#rcóŽ—eZdZUeedfed<defd„Zdddefd„Z dddefd„Z de defd„Z dddefd „Z dddefd „Zde defd „Zy ) Ú _BaseVersion.Ú_keyr&có,—t|j«S©N)Úhashr,©Úselfs r$Ú__hash__z_BaseVersion.__hash__Fs€Ü�D—I‘I‹Ðr#Úothercó`—t|t«stS|j|jkSr.©Ú isinstancer+ÚNotImplementedr,©r1r3s r$Ú__lt__z_BaseVersion.__lt__Ló%€Ü˜%¤Ô.Ü!Ð !à�y‰y˜5Ÿ:™:Ñ%Ð%r#có`—t|t«stS|j|jkSr.r5r8s r$Ú__le__z_BaseVersion.__le__Ró%€Ü˜%¤Ô.Ü!Ð !à�y‰y˜EŸJ™JÑ&Ð&r#có`—t|t«stS|j|jk(Sr.r5r8s r$Ú__eq__z_BaseVersion.__eq__Xr=r#có`—t|t«stS|j|jk\Sr.r5r8s r$Ú__ge__z_BaseVersion.__ge__^r=r#có`—t|t«stS|j|jkDSr.r5r8s r$Ú__gt__z_BaseVersion.__gt__dr:r#có`—t|t«stS|j|jk7Sr.r5r8s r$Ú__ne__z_BaseVersion.__ne__jr=r#N)rrrrrrrr2Úboolr9r<Úobjectr?rArCrEr"r#r$r+r+CsŽ…Ø ��S�‰/Óð˜#óð &˜Nð&¨tó&ð '˜Nð'¨tó'ð '˜Fð' tó'ð '˜Nð'¨tó'ð &˜Nð&¨tó&ð '˜Fð' tô'r#r+a• v? (?: (?:(?P[0-9]+)!)? # epoch (?P[0-9]+(?:\.[0-9]+)*) # release segment (?P
                                          # pre-release
            [-_\.]?
            (?Palpha|a|beta|b|preview|pre|c|rc)
            [-_\.]?
            (?P[0-9]+)?
        )?
        (?P                                         # post release
            (?:-(?P[0-9]+))
            |
            (?:
                [-_\.]?
                (?Ppost|rev|r)
                [-_\.]?
                (?P[0-9]+)?
            )
        )?
        (?P                                          # dev release
            [-_\.]?
            (?Pdev)
            [-_\.]?
            (?P[0-9]+)?
        )?
    )
    (?:\+(?P[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
có—eZdZUdZej
dezdzejejz«Z	e
ed<deddfd„Z
defd	„Zdefd
„Zedefd„«Zedeedffd
„«Zedeeeeffd„«Zedeefd„«Zedeefd„«Zedeefd„«Zedefd„«Zedefd„«Zedefd„«Zedefd„«Zedefd„«Zedefd„«Z edefd„«Z!edefd„«Z"y)ra¹This class abstracts handling of a project's versions.

    A :class:`Version` instance is comparison aware and can be compared and
    sorted using the standard Python interfaces.

    >>> v1 = Version("1.0a5")
    >>> v2 = Version("1.0")
    >>> v1
    
    >>> v2
    
    >>> v1 < v2
    True
    >>> v1 == v2
    False
    >>> v1 > v2
    False
    >>> v1 >= v2
    False
    >>> v1 <= v2
    True
    z^\s*z\s*$r,r%r&Ncóš—|jj|«}|std|›d�«‚t|j	d«rt|j	d««ndt
d„|j	d«jd«D««t|j	d«|j	d	««t|j	d
«|j	d«xs|j	d««t|j	d
«|j	d««t|j	d««¬«|_
t|jj|jj|jj|jj|jj |jj"«|_y)aCInitialize a Version object.

        :param version:
            The string representation of a version which will be parsed and normalized
            before use.
        :raises InvalidVersion:
            If the ``version`` does not conform to PEP 440 in any way then this
            exception will be raised.
        zInvalid version: 'Ú'rrc3ó2K—|]}t|«–—Œy­wr.)r©Ú.0Úis  r$Ú	z#Version.__init__..Ísèø€ÐLÑ*K Qœ#˜aŸ&Ñ*Kùó‚rÚ.Úpre_lÚpre_nÚpost_lÚpost_n1Úpost_n2Údev_lÚdev_nr)rrrrrrN)Ú_regexÚsearchrrÚgrouprÚtupleÚsplitÚ_parse_letter_versionÚ_parse_local_versionÚ_versionÚ_cmpkeyrrrrrrr,)r1r%Úmatchs   r$Ú__init__zVersion.__init__ºsR€ð—‘×"Ñ" 7Ó+ˆÙÜ Ð#5°g°Y¸aÐ!@ÓAÐAô!Ø/4¯{©{¸7Ô/C”#�e—k‘k 'Ó*Ô+ÈÜÑL¨%¯+©+°iÓ*@×*FÑ*FÀsÔ*KÓLÓLÜ% e§k¡k°'Ó&:¸E¿K¹KÈÓ>> Version('1.0.0')
        
        z
r"r0s r$Ú__repr__zVersion.__repr__às€ð˜D˜6 Ð%Ð%r#cóZ—g}|jdk7r|j|j›d�«|jdjd„|jD«««|j�1|jdjd„|jD«««|j
�|jd|j
›�«|j�|jd|j›�«|j�|jd	|j›�«dj|«S)
zA string representation of the version that can be rounded-tripped.

        >>> str(Version("1.0a5"))
        '1.0a5'
        rÚ!rQc3ó2K—|]}t|«–—Œy­wr.©r ©rMÚxs  r$rOz"Version.__str__..õóèø€Ð;©l¨œc !Ÿf©lùrPÚc3ó2K—|]}t|«–—Œy­wr.rirjs  r$rOz"Version.__str__..ùsèø€Ð :±¨A¤ Q§±ùrPz.postz.devÚ+)rÚappendÚjoinrrrrr©r1Úpartss  r$Ú__str__zVersion.__str__èsð€ðˆð�:‰:˜Š?Ø�L‰L˜DŸJ™J˜< qÐ)Ô*ð	�‰�S—X‘XÑ;¨d¯lªlÓ;Ó;Ô<ð�8‰8ÐØ�L‰L˜Ÿ™Ñ :°·²Ó :Ó:Ô;ð�9‰9Ð Ø�L‰L˜5 §¡ Ð,Ô-ð�8‰8ÐØ�L‰L˜4 §¡˜zÐ*Ô+ð�:‰:Ð!Ø�L‰L˜1˜TŸZ™Z˜LÐ)Ô*à�w‰w�u‹~Ðr#có.—|jjS)zThe epoch of the version.

        >>> Version("2.0.0").epoch
        0
        >>> Version("1!2.0.0").epoch
        1
        )r`rr0s r$rz
Version.epoch	s€ð�}‰}×"Ñ"Ð"r#.có.—|jjS)adThe components of the "release" segment of the version.

        >>> Version("1.2.3").release
        (1, 2, 3)
        >>> Version("2.0.0").release
        (2, 0, 0)
        >>> Version("1!2.0.0.post0").release
        (2, 0, 0)

        Includes trailing zeroes but not the epoch or any pre-release / development /
        post-release suffixes.
        )r`rr0s r$rzVersion.releases€ð�}‰}×$Ñ$Ð$r#có.—|jjS)aThe pre-release segment of the version.

        >>> print(Version("1.2.3").pre)
        None
        >>> Version("1.2.3a1").pre
        ('a', 1)
        >>> Version("1.2.3b1").pre
        ('b', 1)
        >>> Version("1.2.3rc1").pre
        ('rc', 1)
        )r`rr0s r$rzVersion.pre$s€ð�}‰}× Ñ Ð r#cód—|jjr|jjdSdS)z™The post-release number of the version.

        >>> print(Version("1.2.3").post)
        None
        >>> Version("1.2.3.post1").post
        1
        r
N)r`rr0s r$rzVersion.post3s*€ð)-¯
©
×(:Ò(:ˆt�}‰}×!Ñ! !Ñ$ÐDÀÐDr#cód—|jjr|jjdSdS)z•The development number of the version.

        >>> print(Version("1.2.3").dev)
        None
        >>> Version("1.2.3.dev1").dev
        1
        r
N)r`rr0s r$rzVersion.dev>s*€ð(,§}¡}×'8Ò'8ˆt�}‰}× Ñ  Ñ#ÐB¸dÐBr#cóˆ—|jjr,djd„|jjD««Sy)zŸThe local version segment of the version.

        >>> print(Version("1.2.3").local)
        None
        >>> Version("1.2.3+abc").local
        'abc'
        rQc3ó2K—|]}t|«–—Œy­wr.rirjs  r$rOz Version.local..Ssèø€Ð@Ñ,? qœC ŸFÑ,?ùrPN)r`rrqr0s r$rz
Version.localIs3€ð�=‰=×ÒØ—8‘8Ñ@¨D¯M©M×,?Ò,?Ó@Ó@Ð@àr#có>—t|«jdd«dS)zÕThe public portion of the version.

        >>> Version("1.2.3").public
        '1.2.3'
        >>> Version("1.2.3+abc").public
        '1.2.3'
        >>> Version("1.2.3+abc.dev1").public
        '1.2.3'
        ror
r)r r]r0s r$ÚpubliczVersion.publicWs€ô�4‹y�‰˜s AÓ& qÑ)Ð)r#cóä—g}|jdk7r|j|j›d�«|jdjd„|jD«««dj|«S)a]The "base version" of the version.

        >>> Version("1.2.3").base_version
        '1.2.3'
        >>> Version("1.2.3+abc").base_version
        '1.2.3'
        >>> Version("1!1.2.3+abc.dev1").base_version
        '1!1.2.3'

        The "base version" is the public version of the project without any pre or post
        release markers.
        rrgrQc3ó2K—|]}t|«–—Œy­wr.rirjs  r$rOz'Version.base_version..yrlrPrm)rrprqrrrs  r$Úbase_versionzVersion.base_versionds\€ðˆð�:‰:˜Š?Ø�L‰L˜DŸJ™J˜< qÐ)Ô*ð	�‰�S—X‘XÑ;¨d¯lªlÓ;Ó;Ô<à�w‰w�u‹~Ðr#có>—|jduxs|jduS)aTWhether this version is a pre-release.

        >>> Version("1.2.3").is_prerelease
        False
        >>> Version("1.2.3a1").is_prerelease
        True
        >>> Version("1.2.3b1").is_prerelease
        True
        >>> Version("1.2.3rc1").is_prerelease
        True
        >>> Version("1.2.3dev1").is_prerelease
        True
        N)rrr0s r$Ú
is_prereleasezVersion.is_prerelease}s!€ð�x‰x˜tÐ#Ò; t§x¡x°tÐ';Ð;r#có—|jduS)zªWhether this version is a post-release.

        >>> Version("1.2.3").is_postrelease
        False
        >>> Version("1.2.3.post1").is_postrelease
        True
        N)rr0s r$Úis_postreleasezVersion.is_postreleaseŽs€ð�y‰y Ð$Ð$r#có—|jduS)z®Whether this version is a development release.

        >>> Version("1.2.3").is_devrelease
        False
        >>> Version("1.2.3.dev1").is_devrelease
        True
        N)rr0s r$Ú
is_devreleasezVersion.is_devrelease™s€ð�x‰x˜tÐ#Ð#r#cóT—t|j«dk\r|jdSdS)zqThe first item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").major
        1
        r
r©Úlenrr0s r$Úmajorz
Version.major¤s'€ô#& d§l¡lÓ"3°qÒ"8ˆt�|‰|˜A‰Ð?¸aÐ?r#cóT—t|j«dk\r|jdSdS)z›The second item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").minor
        2
        >>> Version("1").minor
        0
        ér
rrˆr0s r$Úminorz
Version.minor­ó'€ô#& d§l¡lÓ"3°qÒ"8ˆt�|‰|˜A‰Ð?¸aÐ?r#cóT—t|j«dk\r|jdSdS)zšThe third item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").micro
        3
        >>> Version("1").micro
        0
        érŒrrˆr0s r$Úmicroz
Version.micro¸rŽr#)#rrrr)ÚreÚcompilerÚVERBOSEÚ
IGNORECASErYÚCmpKeyrr rcrertÚpropertyrrrrrrrrrr}r€rFr‚r„r†rŠr�r‘r"r#r$rrŸs…ñð.ˆR�Z‰Z˜ /Ñ1°GÑ;¸R¿Z¹ZÈ"Ï-É-Ñ=WÓ
X€FØ
ƒLð$
 ð$
¨ó$
ðL&˜#ó&ð˜óðBð#�sò#óð#ðð
%˜˜s C˜x™ò
%óð
%ðð!�X˜e C¨ H™oÑ.ò!óð!ððE�h˜s‘mòEóðEððC�X˜c‘]òCóðCðð�x ‘}òóððð
*˜ò
*óð
*ðð˜còóðð0ð<˜tò<óð<ð ð% ò%óð%ðð$˜tò$óð$ðð@�sò@óð@ðð@�sò@óð@ðð@�sò@óñ@r#ÚletterÚnumbercóª—|r>|€d}|j«}|dk(rd}n|dk(rd}n
|dvrd}n|dvrd	}|t|«fS|s|rd	}|t|«fSy)
NrÚalphaÚaÚbetaÚb)ÚcrÚpreviewÚrc)ÚrevÚrr)Úlowerr)r˜r™s  r$r^r^Äs„€ñðˆ>؈Fð—‘“ˆð
�WÒØ‰FØ
�vÒ
؉FØ
Ð.Ñ
.؉FØ
�|Ñ
#؈Fà”s˜6“{Ð"Ð"Ù‘fðˆà”s˜6“{Ð"Ð"àr#z[\._-]rcóR—|�%td„tj|«D««Sy)zR
    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
    Nc3órK—|]/}|j«s|j«n
t|«–—Œ1y­wr.)Úisdigitr¤r)rMÚparts  r$rOz'_parse_local_version..ðs/èø€ð
á>�ð!%§¡¤ˆD�J‰JŒL´C¸³IÓ=Ù>ùs‚57)r\Ú_local_version_separatorsr])rs r$r_r_ës4€ð
ÐÜñ
ä1×7Ñ7¸Ô>ó
ó
ð	
ðr#rrrrrcó—ttttjd„t|«««««}|€|€	|�t
}n|€t}n|}|€t
}n|}|€t}	n|}	|€t
}
ntd„|D««}
|||||	|
fS)Ncó—|dk(S)Nrr")rks r$Úz_cmpkey..s€°A¸²Fr#c3óTK—|] }t|t«r|dfnt|f–—Œ"y­w)rmN)r6rr
rLs  r$rOz_cmpkey../s,èø€ð
ÙNSÈ”z !¤SÔ)ˆQ�‰GÔ0@À!Ð/DÓDÉeùs‚&()r\ÚreversedÚlistÚ	itertoolsÚ	dropwhiler
r)rrrrrrÚ_releaseÚ_preÚ_postÚ_devÚ_locals           r$rara÷s±€ôÜ””i×)Ñ)Ñ*:¼HÀWÓrÀs"ðñóÛ	ßQ×QÑQçWÓWâ
C€à�%˜˜S˜‘/ 3Ð&Ñ'€	à˜,Ð(<¸eÀCÈÀH¹oÐMÑNÐØØØ	ˆ%��c˜3�h‘ Ð';¸UÀ3ÈÀ8¹_Ð'LÑ!MÐMÑ
NÐPSÐ
SÑTðVñ€ð
ØØ	ˆ#ˆsˆ(�OØØØØðñ
€ð# F¨FÐ#3°TÐ#9Ñ:Ðôˆzôð	�3ð	˜9ó	ô�Zô÷+'ñ+'ð`Ðð>#€ð	ôb@ˆlôb@ðJ	!Ø�S‰Mð!Ø#(¨¨e°[À$Ð)FÑ#Gð!à
ˆe�C˜�H‰oÑó!ðH'˜BŸJ™J yÓ1Ðð	 ¨¡
ð	°(¸9Ñ2Eó	ð<6Øð<6à
�3˜�8‰_ð<6ð
�%˜˜S˜‘/Ñ	"ð<6ð�5˜˜c˜‘?Ñ
#ð	<6ð

�%˜˜S˜‘/Ñ	"ð<6ð�IÑð
<6ðô<6r#