o
    LK&hn                  	   @  s   d Z ddlmZ ddlmZ ddlZedZdddd	ddd	dd
Zddddddddd
Z	ddddZ
G dd dedg dZdddZeddddZe ZdS )zMeta related things.    )annotations)
namedtupleNz(?x)
    (?P<major>\d+)(?:\.(?P<minor>\d+))?(?:\.(?P<micro>\d+))?
    (?:(?P<type>a|b|rc)(?P<pre>\d+))?
    (?:\.post(?P<post>\d+))?
    (?:\.dev(?P<dev>\d+))?
     abrc).devz
.dev-alphaz	.dev-beta.dev-candidatealphabeta	candidatefinalz2 - Pre-Alphaz	3 - Alphaz4 - Betaz5 - Production/Stabler
   r   r   )r   r   r   c                      sZ   e Zd ZdZ		dd fddZdddZdddZdddZdddZdddZ	  Z
S )Versional  
    Get the version (PEP 440).

    A biased approach to the PEP 440 semantic version.

    Provides a tuple structure which is sorted for comparisons `v1 > v2` etc.
      (major, minor, micro, release type, pre-release build, post-release build, development release build)
    Release types are named in is such a way they are comparable with ease.
    Accessors to check if a development, pre-release, or post-release build. Also provides accessor to get
    development status for setup files.

    How it works (currently):

    - You must specify a release type as either `final`, `alpha`, `beta`, or `candidate`.
    - To define a development release, you can use either `.dev`, `.dev-alpha`, `.dev-beta`, or `.dev-candidate`.
      The dot is used to ensure all development specifiers are sorted before `alpha`.
      You can specify a `dev` number for development builds, but do not have to as implicit development releases
      are allowed.
    - You must specify a `pre` value greater than zero if using a prerelease as this project (not PEP 440) does not
      allow implicit prereleases.
    - You can optionally set `post` to a value greater than zero to make the build a post release. While post releases
      are technically allowed in prereleases, it is strongly discouraged, so we are rejecting them. It should be
      noted that we do not allow `post0` even though PEP 440 does not restrict this. This project specifically
      does not allow implicit post releases.
    - It should be noted that we do not support epochs `1!` or local versions `+some-custom.version-1`.

    Acceptable version releases:

    ```
    Version(1, 0, 0, "final")                    1.0
    Version(1, 2, 0, "final")                    1.2
    Version(1, 2, 3, "final")                    1.2.3
    Version(1, 2, 0, ".dev-alpha", pre=4)        1.2a4
    Version(1, 2, 0, ".dev-beta", pre=4)         1.2b4
    Version(1, 2, 0, ".dev-candidate", pre=4)    1.2rc4
    Version(1, 2, 0, "final", post=1)            1.2.post1
    Version(1, 2, 3, ".dev")                     1.2.3.dev0
    Version(1, 2, 3, ".dev", dev=1)              1.2.3.dev1
    ```

    r   r   majorintminormicroreleasestrprepostdevreturnc           	   
     s   |||||fD ]}t |tr|dkstdq|tvr#td| dd|  k r-dk rDn n|dkr7td|r=td|rCtd	n#|d
k r[|dkrT|dkrTtd|rZtd	n|ratd|rgtdt | |||||||S )zValidate version info.r   z6All version parts except 'release' should be integers.'z' is not a valid release type.r	   r   z"Implicit pre-releases not allowed.z%Version is not a development release.z0Post-releases are not allowed with pre-releases.r
   r   z!Implicit pre-release not allowed.zVersion is not a pre-release.)
isinstancer   
ValueErrorREL_MAPsuper__new__)	clsr   r   r   r   r   r   r   value	__class__ E/var/www/html/venv/lib/python3.10/site-packages/soupsieve/__meta__.pyr   S   s2   zVersion.__new__boolc                 C     t | jdkS )zIs prerelease.r   )r%   r   selfr#   r#   r$   _is_pre{      zVersion._is_prec                 C  s   t | jdk S )zIs development.r
   )r%   r   r'   r#   r#   r$   _is_dev   r*   zVersion._is_devc                 C  r&   )zIs post.r   )r%   r   r'   r#   r#   r$   _is_post   r*   zVersion._is_postc                 C  s
   t | j S )zGet development status string.)
DEV_STATUSr   r'   r#   r#   r$   _get_dev_status   s   
zVersion._get_dev_statusc                 C  s   | j dkr| j d| j }n| j d| j d| j  }|  r,|t| j  | j 7 }|  r8|d| j 7 }| 	 rD|d| j
 7 }|S )z Get the canonical output string.r   .z.postr   )r   r   r   r)   r   r   r   r,   r   r+   r   )r(   verr#   r#   r$   _get_canonical   s   
zVersion._get_canonical)r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r%   )r   r   )__name__
__module____qualname____doc__r   r)   r+   r,   r.   r1   __classcell__r#   r#   r!   r$   r   (   s    ,
(


r   )r   r   r   r   r   r   r   r0   r   r   c           	      C  s  t | }|du rtd|  dt|d}|dr$t|dnd}|dr2t|dnd}|drHt|d }t|d	}nd
}d}|drV|dnd}|drmt|d}|rjd| nd}nd}|dr{t|dnd}t|||||||S )z.Parse version into a comparable Version tuple.Nr   z' is not a valid versionr   r   r   r   typer   r   r   z.dev-r   r   )RE_VERmatchr   r   groupPRE_REL_MAPr   )	r0   mr   r   r   r   r   r   r   r#   r#   r$   parse_version   s$   


r=         r   )r0   r   r   r   )r5   
__future__r   collectionsr   recompiler8   r   r-   r;   r   r=   __version_info__r1   __version__r#   r#   r#   r$   <module>   s<    

y#