
    R"f              	          d dl Z d dlmZmZmZmZmZ ddlmZm	Z	 ddl
mZmZ eed   eeef   f   Z ede      Z G d d	e      Z G d
 de      Z G d de      Z e j*                  de j,                        Z e j*                  d      Z e j*                  d      Z e j*                  d      ZdddededefdZdedefdZdddeeef   dedefdZdedeeeeee   f   fdZdedeeef   fd Z y)!    N)	FrozenSetNewTypeTupleUnioncast   )Tag	parse_tag)InvalidVersionVersion NormalizedNamec                       e Zd ZdZy)InvalidNamezW
    An invalid distribution name; users should refer to the packaging user guide.
    N__name__
__module____qualname____doc__r       1/usr/lib/python3/dist-packages/packaging/utils.pyr   r          r   r   c                       e Zd ZdZy)InvalidWheelFilenamezM
    An invalid wheel filename was found, users should refer to PEP 427.
    Nr   r   r   r   r   r      r   r   r   c                       e Zd ZdZy)InvalidSdistFilenamez^
    An invalid sdist filename was found, users should refer to the packaging user guide.
    Nr   r   r   r   r   r      r   r   r   z)^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$z[-_.]+z/^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$z	(\d+)(.*)F)validatenamer   returnc                    |r#t         j                  |       st        d|       t        j	                  d|       j                         }t        t        |      S )Nzname is invalid: -)_validate_regexmatchr   _canonicalize_regexsublowerr   r   )r   r   values      r   canonicalize_namer(   +   sM    --d3-dX677##C.446E&&r   c                 0    t         j                  |       d uS N)_normalized_regexr#   )r   s    r   is_normalized_namer,   3   s    ""4(44r   T)strip_trailing_zeroversionr-   c                   t        | t              r	 t        |       }n| }g }|j                  dk7  r|j                  |j                   d       dj                  d |j                  D              }|rt        j                  dd|      }|j                  |       |j                  1|j                  dj                  d |j                  D                     |j                  |j                  d|j                          |j                  |j                  d	|j                          |j                  |j                  d
|j                          dj                  |      S # t        $ r | cY S w xY w)z
    This is very similar to Version.__str__, but has one subtle difference
    with the way it handles the release segment.
    r   !.c              3   2   K   | ]  }t        |        y wr*   str.0xs     r   	<genexpr>z'canonicalize_version.<locals>.<genexpr>N   s     >!s1v>   z(\.0)+$ c              3   2   K   | ]  }t        |        y wr*   r3   r5   s     r   r8   z'canonicalize_version.<locals>.<genexpr>V   s     8SV8r9   z.postz.dev+)
isinstancer4   r   r   epochappendjoinreleaserer%   prepostdevlocal)r.   r-   parsedpartsrelease_segments        r   canonicalize_versionrJ   7   sB    '3	W%F
 E ||q~Q'( hh>v~~>>O&&RA	LL! zzRWW8VZZ889 {{uV[[M*+ zztFJJ<() ||q'(775>G  	N	s   E' 'E54E5filenamec                    | j                  d      st        d|        | d d } | j                  d      }|dvrt        d|        | j                  d|dz
        }|d   }d	|v s%t	        j
                  d
|t        j                        t        d|        t        |      }	 t        |d         }|dk(  rh|d   }t        j                  |      }|t        d| d|  d      t        t        t        |j                  d            |j                  d      f      }	nd}	t        |d         }
|||	|
fS # t        $ r}t        d|        |d }~ww xY w)Nz.whlz3Invalid wheel filename (extension must be '.whl'): r!   )      z0Invalid wheel filename (wrong number of parts):    r   __z^[\w\d._]*$zInvalid project name: r   z*Invalid wheel filename (invalid version): rO   zInvalid build number: z in ''r   )endswithr   countsplitrB   r#   UNICODEr(   r   r   _build_tag_regexr   BuildTagintgroupr
   )rK   dashesrH   	name_partr   r.   e
build_partbuild_matchbuildtagss              r   parse_wheel_filenamerc   g   s    V$"A(L
 	
 }H^^C FV">xjI
 	
 NN3
+EaIyBHH^Y

KS"%;H:#FGGY'D%(# {1X
&,,Z8&(E(1E  XK$5$5a$8 9;;L;LQ;OPQU2YD'5$''!  "8
C
	s   %D6 6	E?EEc                 b   | j                  d      r| d t        d        }n/| j                  d      r| d t        d        }nt        d|        |j                  d      \  }}}|st        d|        t	        |      }	 t        |      }||fS # t        $ r}t        d|        |d }~ww xY w)Nz.tar.gzz.zipz@Invalid sdist filename (extension must be '.tar.gz' or '.zip'): r!   zInvalid sdist filename: z*Invalid sdist filename (invalid version): )rT   lenr   
rpartitionr(   r   r   )rK   	file_stemr]   sepversion_partr   r.   r^   s           r   parse_sdist_filenamerj      s    #.I/				6	"^F|,	"z
 	
 $-#7#7#< IsL"%=hZ#HIIY'D,' '?  "8
C
	s   B 	B.B))B.)!rB   typingr   r   r   r   r   rb   r	   r
   r.   r   r   rZ   r4   rY   r   
ValueErrorr   r   r   compile
IGNORECASEr"   r$   r+   rX   boolr(   r,   rJ   rc   rj   r   r   r   <module>rp      sX  
 
 9 9   ,rE#s(O+,)3/* : :  "**0"-- !bjj+ BJJQR 2::l+  6; 'C 'd '~ '5S 5T 5
 BF-7C< -:>--`((((
>7Hin<=((V3 51H+I r   