_d?XdZddlZddlZddlZddlmZmZmZmZm Z m Z ddl m Z m Z mZmZgdZe e efZe ee eeffZe eeefZe ee e ee eefe eeffdffZe ee edfeeeefZeeegefZej4dgd Zd ed d fd ZGddeZGddZdZ e Z! Gdd eZ"dede ee#efd ee eeffdZ$ejJdZ&ded eefdZ'dede edfdee eefdee eefdee eefdee ed efdZ(y) zB .. testsetup:: from packaging.version import parse, Version N)AnyCallableOptional SupportsIntTupleUnion)Infinity InfinityTypeNegativeInfinityNegativeInfinityType)VERSION_PATTERNparseVersionInvalidVersion._Version)epochreleasedevprepostlocalversionreturnrct|S)zParse 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)rs F/usr/lib/python3/dist-packages/setuptools/_vendor/packaging/version.pyrr+s 7 ceZdZdZy)rzRaised when a version string is not a valid version. >>> Version("invalid") Traceback (most recent call last): ... packaging.version.InvalidVersion: Invalid version: 'invalid' N)__name__ __module__ __qualname____doc__rrrr7srrceZdZUeedfed<defdZdddefdZ dddefdZ de defdZ dddefd Z dddefd Zde defd Zy ) _BaseVersion._keyrc,t|jSN)hashr&selfs r__hash__z_BaseVersion.__hash__DsDIIrotherc`t|tstS|j|jkSr( isinstancer%NotImplementedr&r+r-s r__lt__z_BaseVersion.__lt__J%%.! !yy5::%%rc`t|tstS|j|jkSr(r/r2s r__le__z_BaseVersion.__le__P%%.! !yyEJJ&&rc`t|tstS|j|jk(Sr(r/r2s r__eq__z_BaseVersion.__eq__Vr7rc`t|tstS|j|jk\Sr(r/r2s r__ge__z_BaseVersion.__ge__\r7rc`t|tstS|j|jkDSr(r/r2s r__gt__z_BaseVersion.__gt__br4rc`t|tstS|j|jk7Sr(r/r2s r__ne__z_BaseVersion.__ne__hr7rN)rr r!rr__annotations__intr,boolr3r6objectr9r;r=r?r#rrr%r%As S/# &N&t& 'N't' 'F't' 'N't' &N&t& 'F't'rr%a v? (?: (?:(?P[0-9]+)!)? # epoch (?P[0-9]+(?:\.[0-9]+)*) # release segment (?P
                                          # pre-release
            [-_\.]?
            (?P(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?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
ceZdZUdZej
dezdzejejzZ	e
ed<deddfdZ
defd	Zdefd
ZedefdZedeedffd
ZedeeeeffdZedeefdZedeefdZedeefdZedefdZedefdZedefdZedefdZedefdZedefdZ edefdZ!edefdZ"y)raThis 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&rrNc|jj|}|std|dt|j	drt|j	dndt
d|j	djdDt|j	d|j	d	t|j	d
|j	dxs|j	dt|j	d
|j	dt|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: ''rrc32K|]}t|ywr()rA.0is  r	z#Version.__init__..sLQ#a&Lr.pre_lpre_npost_lpost_n1post_n2dev_ldev_nr)rrrrrrN)_regexsearchrrgrouprAtuplesplit_parse_letter_version_parse_local_version_version_cmpkeyrrrrrrr&)r+rmatchs   r__init__zVersion.__init__sR""7+ #5gYa!@AA!/4{{7/C#ekk'*+L%++i*@*F*Fs*KLL%ekk'&:EKK>> Version('1.0.0')
        
        z
r#r*s r__repr__zVersion.__repr__sD6%%rcZg}|jdk7r|j|jd|jdjd|jD|j1|jdjd|jD|j
|jd|j
|j|jd|j|j|jd	|jdj|S)
zA string representation of the version that can be rounded-tripped.

        >>> str(Version("1.0a5"))
        '1.0a5'
        r!rMc32K|]}t|ywr(strrIxs  rrKz"Version.__str__..;c!f;rLc32K|]}t|ywr(rergs  rrKz"Version.__str__..s :AQ :rLz.postz.dev+)rappendjoinrrrrrr+partss  r__str__zVersion.__str__s::?LLDJJ>> Version("2.0.0").epoch
        0
        >>> Version("1!2.0.0").epoch
        1
        )r\r)r+_epochs  rrz
Version.epochsmm))
r.c2|jj}|S)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\r)r+_releases  rrzVersion.releases%)MM$9$9rc2|jj}|S)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\r)r+_pres  rrzVersion.pre$s+/--*;*;rcd|jjr|jjdSdS)zThe post-release number of the version.

        >>> print(Version("1.2.3").post)
        None
        >>> Version("1.2.3.post1").post
        1
        r	N)r\rr*s rrzVersion.post4s*)-

(:(:t}}!!!$DDrcd|jjr|jjdSdS)zThe development number of the version.

        >>> print(Version("1.2.3").dev)
        None
        >>> Version("1.2.3.dev1").dev
        1
        r	N)r\rr*s rrzVersion.dev?s*(,}}'8'8t}}  #BdBrc|jjr,djd|jjDSy)zThe local version segment of the version.

        >>> print(Version("1.2.3").local)
        None
        >>> Version("1.2.3+abc").local
        'abc'
        rMc32K|]}t|ywr(rergs  rrKz Version.local..Ts@qCF@rLN)r\rrnr*s rrz
Version.localJs3==88@DMM,?,?@@@rc>t|jdddS)zThe 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'
        rlr	r)rfrYr*s rpubliczVersion.publicXs4ysA&q))rcg}|jdk7r|j|jd|jdjd|jDdj|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.
        rrcrMc32K|]}t|ywr(rergs  rrKz'Version.base_version..zrirLrj)rrmrnrros  rbase_versionzVersion.base_versiones\::?LLDJJ|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)rrr*s r
is_prereleasezVersion.is_prerelease~s!xxt#;txxt';;rc|jduS)zWhether this version is a post-release.

        >>> Version("1.2.3").is_postrelease
        False
        >>> Version("1.2.3.post1").is_postrelease
        True
        N)rr*s ris_postreleasezVersion.is_postreleasesyy$$rc|jduS)zWhether this version is a development release.

        >>> Version("1.2.3").is_devrelease
        False
        >>> Version("1.2.3.dev1").is_devrelease
        True
        N)rr*s r
is_devreleasezVersion.is_devreleasesxxt##rcTt|jdk\r|jdSdS)zqThe first item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").major
        1
        r	rlenrr*s rmajorz
Version.majors'#&dll"3q"8t||A?a?rcTt|jdk\r|jdSdS)zThe second item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").minor
        2
        >>> Version("1").minor
        0
        r	rrr*s rminorz
Version.minor'#&dll"3q"8t||A?a?rcTt|jdk\r|jdSdS)zThe third item of :attr:`release` or ``0`` if unavailable.

        >>> Version("1.2.3").micro
        3
        >>> Version("1").micro
        0
        rrrr*s rmicroz
Version.microrr)#rr r!r"recompilerVERBOSE
IGNORECASErUCmpKeyr@rfr_rarqpropertyrArrrrrrrrr}rrBrrrrrrr#rrrrs.RZZ/1G;RZZ"--=W
XF
L$
$
$
L&#&B	s		sCx 
XeCHo.

EhsmEECXc]CCx}
*
*
*c0|d}|j}|dk(rd}n|dk(rd}n
|dvrd}n|dvrd	}|t|fS|s|rd	}|t|fSy)
Nralphaabetab)crpreviewrc)revrr)lowerrA)rrs  rrZrZs>F
WF
v
F
.
.F
|
#Fs6{""fs6{""rz[\._-]rcR|%tdtj|DSy)zR
    Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
    Nc3rK|]/}|js|jn
t|1ywr()isdigitrrA)rIparts  rrKz'_parse_local_version..s/
!%DJJLCI=
s57)rX_local_version_separatorsrY)rs rr[r[s4

177>

	
rrrrrrcttttjdt|}||	|t
}n|t}n|}|t
}n|}|t}	n|}	|t
}
ntd|D}
|||||	|
fS)Nc|dk(S)Nrr#)rhs rz_cmpkey..s
AFrc3TK|] }t|tr|dfnt|f"yw)rjN)r0rArrHs  rrKz_cmpkey..0s-
IJz!S)QG0@!/DD
s&()rXreversedlist	itertools	dropwhilerr
)rrrrrrrurw_post_dev_locals           rr]r]si))*:HWrs1	EEWW
Cl$889
}eCHo56]C,-	
,#$&45
7	

		


	
sCx...)S
#FF#3T#9:!;!!C
	3	9	Z+'+'`>#	e@le@P	!!sE;67!
eCHo!H'BJJy1		(;	<6<6
38_<6
%S/	"<65c?
#	<6

%S/	"<6E,'(
<6<6r