
    ^jxh                    x   d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
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mZ ddlmZ dd	lmZ d
dlmZmZ d
dlmZ d
dlm Z  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* ejV                  jX                   dejV                  jZ                   Z. G d d      Z/d Z0 G d d      Z1 G d de1e      Z2 G d de(      Z' G d de      Z3d*d Z4d*d!Z5d*d"Z6e!jn                  Z7e!jp                  Z8d*d#Z9d*d$Z:d+d,d%Z;d*d&Z<d-d'Z= G d( d)e       Z>y).zUsetuptools.command.egg_info

Create a distribution's .egg-info directory and contents    )annotationsN)Callable)Command)	bdist_egg)sdistwalk_revctrl)edit_config)glob   )_entry_points_normalization)metadata)SetuptoolsDeprecationWarning   )_requirestxt)log)DistutilsInternalError)FileList)convert_path.c                  $    e Zd ZdZddZd Zd Zy)_NormalizedMatchera  
    Wrap a compiled pattern so that matching is insensitive to Unicode
    normalization form.

    File names walked from disk (NFD on macOS APFS/HFS+) and patterns from
    ``MANIFEST.in`` (typically NFC) can denote the same file while differing
    byte-for-byte. Normalizing both sides before matching keeps an exclusion
    (or inclusion) from silently failing. See GHSA-h35f-9h28-mq5c.
    c                    || _         y N)_pattern)selfpatterns     f/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/setuptools/command/egg_info.py__init__z_NormalizedMatcher.__init__3   s	        c                ^    | j                   j                  t        j                  |            S r   )r   matchunicode_utils	normalizer   paths     r   r"   z_NormalizedMatcher.match6   s"    }}""=#:#:4#@AAr    c                ^    | j                   j                  t        j                  |            S r   )r   searchr#   r$   r%   s     r   r(   z_NormalizedMatcher.search9   s"    }}##M$;$;D$ABBr    N)r   z
re.PatternreturnNone)__name__
__module____qualname____doc__r   r"   r(    r    r   r   r   (   s     BCr    r   c                   d}t        j                  |       }  | j                  t        j                  j
                        }t        j                  t        j
                        }d| d}t        |      D ]6  \  }}|t        |      dz
  k(  }|dk(  r|r|dz  }n|d| d| d	z  }2d
}t        |      }	||	k  r||   }
|
dk(  r	||dz   z  }n|
dk(  r||z  }n|
dk(  r|dz   }||	k  r||   dk(  r|dz   }||	k  r||   dk(  r|dz   }||	k  r||   dk7  r|dz   }||	k  r	||   dk7  r||	k\  r|t        j                  |
      z  }nU||dz   | }d}|d
   dk(  rd}|dd }|t        j                  |      z  }|d| dz  }|}n|t        j                  |
      z  }|dz  }||	k  r|r2||z  }9 |dz  }t        t        j                  |t        j                  t        j                  z              S )z
    Translate a file path glob like '*.txt' in to a regular expression.
    This differs from fnmatch.translate which allows wildcards to match
    directory separators. It also knows about '**/' which matches any number of
    directories.
     z[^]r   **z.*z(?:+z)*r   *?[!^Nz\Z)flags)r#   r$   splitosr&   sepreescape	enumeratelenr   compile	MULTILINEDOTALL)r
   patchunksr=   
valid_charcchunk
last_chunki	chunk_lencharinner_iinner
char_classs                 r   translate_patternrQ   =   sV    C
 ""4(D TZZ$F
))BFF
CcU!Jf% >5#f+/)
 D=t ZL#b11 J	)m8Ds{zC''z!a%Y&5>S+@%kGY&5>S+@%kG 	)eGn.C%kG 	)eGn.C i' 299T?*C "!a%'2E!#J Qx3%(
 %ab	"))E"22JQzl!,,C  Aryy&FAU )mZ 3JC}>@ 5LCbjjBLL2994LMNNr    c                  X    e Zd ZdZdZed        Zd Zd ZddZ	d	dZ
d	dZ ee      Zy)

InfoCommonNc                \    t        j                  | j                  j                               S r   )r   	safe_namedistributionget_namer   s    r   namezInfoCommon.name   s"    ''(9(9(B(B(DEEr    c                ~    | j                  | j                  j                               }t        j                  |      S r   )
_maybe_tagrV   get_versionr   safe_version)r   taggeds     r   tagged_versionzInfoCommon.tagged_version   s0    !2!2!>!>!@A**622r    c                ^    | j                   r| j                  |      r|S || j                   z   S )z
        egg_info may be called more than once for a distribution,
        in which case the version string already contains all tags.
        )vtags_already_taggedr   versions     r   r[   zInfoCommon._maybe_tag   s5     zzd227; 	
 4::%	
r    c                X    |j                  | j                  | j                         f      S r   )endswithra   
_safe_tagsrc   s     r   rb   zInfoCommon._already_tagged   s%     T__-> ?@@r    c                    	 t        j                  d| j                         dd  S # t        j                  j
                  $ r2 t        j                  | j                  j                  dd            cY S w xY w)N0r    r   )r   r]   ra   	packagingrd   InvalidVersionrU   replacerX   s    r   rg   zInfoCommon._safe_tags   sj    	J!..4::,/?@DD  // 	J!++DJJ,>,>sC,HII	Js   $' AA65A6c                    d}| j                   r|| j                   z  }| j                  r|t        j                  d      z  }|S )Nr1   z%Y%m%d)	tag_buildtag_datetimestrftimerc   s     r   tagszInfoCommon.tags   s;    >>t~~%G==t}}X..Gr    )rd   strr)   bool)r)   rt   )r+   r,   r-   ro   rp   propertyrY   r_   r[   rb   rg   rs   ra   r/   r    r   rS   rS      sF    IHF F3	
A
J TNEr    rS   c                      e Zd ZdZg dZdgZddiZd Zedd       Z	e	j                  dd       Z	ddZdd	Zed
fdZdddZddZddZddZddZy
)egg_infoz+create a distribution's .egg-info directory))z	egg-base=ezLdirectory containing .egg-info directories [default: top of the source tree])tag-datedz0Add date stamp (e.g. 20050528) to version number)z
tag-build=bz-Specify explicit tag to add to version number)no-dateDz"Don't include date stamp [default]rz   r}   c                J    d | _         d | _        d | _        d | _        d| _        y )NF)egg_baseegg_namerx   egg_versionignore_egg_info_in_manifestrX   s    r   initialize_optionszegg_info.initialize_options   s'    +0(r    c                     y r   r/   rX   s    r   tag_svn_revisionzegg_info.tag_svn_revision       r    c                     y r   r/   )r   values     r   r   zegg_info.tag_svn_revision   r   r    c                f    t        | j                         d      }t        |t        |             y)z
        Materialize the value of date into the
        build tag. Install build keys in a deterministic order
        to avoid arbitrary reordering on subsequent builds.
        r   )ro   rp   )rx   N)dictrs   r	   )r   filenamerx   s      r   save_version_infozegg_info.save_version_info   s%     $))+:HdH56r    c                   | j                   | _        | j                         | _        t        j
                  j                  | j                        }	 t        |t        j
                  j                        }|rdnd}t        j                  j                  || j                  | j                  fz         | j                  ?| j                  j                   }|xs i j#                  dt$        j&                        | _        | j)                  d       t+        j,                  | j                        dz   | _        | j                  t$        j&                  k7  r9t$        j0                  j3                  | j                  | j.                        | _        | j                  | j                  j4                  _        y # t        $ r?}t        j                  j                  d| j                   d| j                         |d }~ww xY w)Nz%s==%sz%s===%sz-Invalid distribution name or version syntax: -r1   r   	.egg-info)rY   r   r_   r   rk   rd   Version
isinstancerequirementsRequirement
ValueError	distutilserrorsDistutilsOptionErrorr   rV   package_dirgetr<   curdirensure_dirnamer   filename_componentrx   r&   joinr   )r   parsed_version
is_versionspecry   dirss         r   finalize_optionszegg_info.finalize_options   s   
 		..0"**2243C3CD	#NI4E4E4M4MNJ)8yD""..tt}}dFVFV6W/WX == $$00D!ZR,,R;DMJ'&99$--H;V==BII%GGLLFDM
 .2-=-=""*#  	""77?aPTP`P`Oab	s   A"F2 2	G:;:G55G:Nc                F    t        | j                  | j                  ||      S )0Compute filename of the output egg. Private API.)_egg_basenamer   r   )r   
py_versionplatforms      r   _get_egg_basenamezegg_info._get_egg_basename  s    T]]D,<,<j(SSr    c                    |r| j                  |||       yt        j                  j                  |      r.||st	        j
                  d||       y| j                  |       yy)a  Write `data` to `filename` or delete if empty

        If `data` is non-empty, this routine is the same as ``write_file()``.
        If `data` is empty but not ``None``, this is the same as calling
        ``delete_file(filename)`.  If `data` is ``None``, then this is a no-op
        unless `filename` exists, in which case a warning is issued about the
        orphaned file (if `force` is false), or deleted (if `force` is true).
        Nz$%s not set in setup(), but %s exists)
write_filer<   r&   existsr   warndelete_file)r   whatr   dataforces        r   write_or_delete_filezegg_info.write_or_delete_file  sU     OOD(D1WW^^H%|E?xP  * &r    c                    t        j                  d||       |j                  d      }t        |d      }|j	                  |       |j                          y)zWrite `data` to `filename` (if not a dry run) after announcing it

        `what` is used in a log message to identify what is being written
        to the file.
        zwriting %s to %sutf-8wbN)r   infoencodeopenwriteclose)r   r   r   r   fs        r   r   zegg_info.write_file-  sC     	#T84{{7#4 			r    c                Z    t        j                  d|       t        j                  |       y)z8Delete `filename` (if not a dry run) after announcing itzdeleting %sN)r   r   r<   unlink)r   r   s     r   r   zegg_info.delete_file9  s    )
		(r    c           	        t        t        j                  d            }| j                  | j                         	 t        j                  | j                  d        |D ]X  }|j                         } || |j                  t
        j                  j                  | j                  |j                               Z t
        j                  j                  | j                  d      }t
        j                  j                  |      r| j!                  |       | j#                          y # t        $ r5}d| j                   d}t        j                  j                  |      |d }~ww xY w)Nzegg_info.writers)groupz'Cannot update time stamp of directory ''znative_libs.txt)listr   entry_pointsmkpathrx   r<   utimeOSErrorr   r   DistutilsFileErrorloadrY   r&   r   r   r   find_sources)r   writersry   msgepwriternls          r   runzegg_info.run>  s    x,,3EFGDMM"	BHHT]]D)  	HBWWYF4"'',,t}}bgg"FG	H
 WW\\$--):;77>>"R   	B;DMM?!LC""55c:A	Bs    D$ $	E"-0EE"c                    t         j                  j                  | j                  d      }t	        | j
                        }| j                  |_        ||_        |j                          |j                  | _
        y)z"Generate SOURCES.txt manifest filezSOURCES.txtN)r<   r&   r   rx   manifest_makerrV   r   ignore_egg_info_dirmanifestr   filelist)r   manifest_filenamemms      r   r   zegg_info.find_sourcesT  sT    GGLLFD--.!%!A!A'
r    )r)   z
int | Noner)   r*   Fr   ru   r)   r*   )r+   r,   r-   descriptionuser_optionsboolean_optionsnegative_optr   rv   r   setterr   r   PY_MAJORr   r   r   r   r   r   r/   r    r   rx   rx      s    ?K
L "lO:L1    
	7>@ ,4d T+$

,$r    rx   c                       e Zd Z	 d	 	 	 d fdZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZd Zd Z xZS )r   c                4    t         |   ||       || _        y r   )superr   r   )r   r   debug_printr   	__class__s       r   r   zFileList.__init__a  s     	{+#6 r    c           	        | j                  |      \  }}}}| j                  | j                  | j                  | j                  t        j                  | j                  |      t        j                  | j                  |      | j                  | j                  d}dddddddd	d}	 ||   }|j                  d      }
|dv r|g}|
r|fnd}||   }| j                  dj                  |g|
r|gng z   |z                |D ]"  } ||      rt!        j"                  ||g|  $ y # t        $ r d
|d|}	t        |	      d w xY w)N)includeexcludezglobal-includezglobal-excludezrecursive-includezrecursive-excludegraftprunez%warning: no files found matching '%s'z9warning: no previously-included files found matching '%s'z>warning: no files found matching '%s' anywhere in distributionzRwarning: no previously-included files matching '%s' found anywhere in distributionz:warning: no files found matching '%s' under directory '%s'zNwarning: no previously-included files matching '%s' found under directory '%s'z+warning: no directories found matching '%s'z6no previously-included directories found matching '%s'z$Invalid MANIFEST.in: unknown action z in z
recursive->   r   r   r/   rj   )_parse_template_liner   r   global_includeglobal_exclude	functoolspartialrecursive_includerecursive_excluder   r   KeyErrorr   
startswithr   r   r   r   )r   lineactionpatternsdirdir_pattern
action_maplog_mapprocess_actionr   action_is_recursiveextra_log_argslog_tmplr   s                 r   process_template_linezFileList.process_template_lineg  s    04/H/H/N,3 ||||"11"11!*!2!2&&" "+!2!2&&" ZZZZ+

" ?SP6 M2 CM%
*	8'/N %//=''#}H#6#B6?HH%8SEbAHL	

   	=G!'*7<^<	='  	88
$thOC(-47	8s   &D# #Ec                    d}t        t        | j                        dz
  dd      D ]H  } || j                  |         s| j                  d| j                  |   z          | j                  |= d}J |S )z
        Remove all files from the file list that match the predicate.
        Return True if any matching files were removed
        Fr   z
 removing T)rangerA   filesr   )r   	predicatefoundrK   s       r   _remove_fileszFileList._remove_files  sp    
 s4::*B3 	AA'  

1!=>JJqM		
 r    c                    t        |      D cg c]$  }t        j                  j                  |      r#|& }}| j	                  |       t        |      S c c}w )z#Include files that match 'pattern'.)r
   r<   r&   isdirextendru   )r   r   r   r  s       r   r   zFileList.include  sD     MBqq1ABBEE{ Cs
   $AAc                N    t        |      }| j                  |j                        S )z#Exclude files that match 'pattern'.)rQ   r  r"   r   r   r"   s      r   r   zFileList.exclude  s!    !'*!!%++..r    c                    t         j                  j                  |d|      }t        |d      D cg c]$  }t         j                  j	                  |      r#|& }}| j                  |       t        |      S c c}w )zN
        Include all files anywhere in 'dir/' that match the pattern.
        r3   T)	recursive)r<   r&   r   r
   r  r  ru   )r   r   r   full_patternr   r  s         r   r   zFileList.recursive_include  s`     ww||Cw7 >WqbggmmTUFVWWEE{ Xs   $A8A8c                    t        t        j                  j                  |d|            }| j	                  |j
                        S )zM
        Exclude any file anywhere in 'dir/' that match the pattern.
        r3   rQ   r<   r&   r   r  r"   )r   r   r   r"   s       r   r   zFileList.recursive_exclude  s4     ""'',,sD'"BC!!%++..r    c                    t        |      D cg c](  }t        j                  j                  |      D ]  }| * }}}| j	                  |       t        |      S c c}}w )zInclude all files from 'dir/'.)r
   r   r   findallr  ru   )r   r   	match_diritemr  s        r   r   zFileList.graft  sh     "#Y
!**229=
  

 

 	EE{
s   -Ac                    t        t        j                  j                  |d            }| j	                  |j
                        S )zFilter out files from 'dir/'.r3   r  )r   r   r"   s      r   r   zFileList.prune  s0    !"'',,sD"9:!!%++..r    c                $   | j                   | j                          t        t        j                  j                  d|            }| j                   D cg c]  }|j                  |      s| }}| j                  |       t        |      S c c}w )z
        Include all files anywhere in the current directory that match the
        pattern. This is very inefficient on large file trees.
        r3   )	allfilesr  rQ   r<   r&   r   r"   r  ru   )r   r   r"   r   r  s        r   r   zFileList.global_include  sl    
 == LLN!"'',,tW"=> MM<qU[[^<<EE{ =s   B+Bc                    t        t        j                  j                  d|            }| j	                  |j
                        S )zD
        Exclude all files anywhere that match the pattern.
        r3   r  r	  s      r   r   zFileList.global_exclude  s2     ""'',,tW"=>!!%++..r    c                    |j                  d      }t        |      }| j                  |      r| j                  j	                  |       y y )N)removesuffixr   
_safe_pathr  append)r   r  r&   s      r   r  zFileList.append  s?      &D!??4 JJd# !r    c                b    | j                   j                  t        | j                  |             y r   )r  r  filterr  )r   pathss     r   r  zFileList.extend  s    

&%89r    c                `    t        t        | j                  | j                              | _        y)z
        Replace self.files with only safe paths

        Because some owners of FileList manipulate the underlying
        ``files`` attribute directly, this method must be called to
        repair those paths.
        N)r   r  r  r  rX   s    r   _repairzFileList._repair  s     &$**=>
r    c                   d}t        j                  |      }|t        j                  d| d       yt        j                  |d      }|t        j                  ||d       y	 d|v xs d|v }| j
                  r|ryt        j                  j                  |      st        j                  j                  |      ryy # t        $ r, t        j                  ||t        j                                Y y w xY w)	Nz!'%s' not %s encodable -- skippingr   z$' in unexpected encoding -- skippingFr   r   s	   .egg-infoT)r#   filesys_decoder   r   
try_encoder   r<   r&   r   UnicodeEncodeErrorsysgetfilesystemencoding)r   r&   enc_warnu_path	utf8_pathis_egg_infos         r   r  zFileList._safe_path  s    6 --d3>HHqBCD ",,VW=	HHXtW-
	B%/L<93LK''Kww~~f%	)B *C " 	BHHXtS%>%>%@A	Bs   %B> >>B> >2C32C3)NNF)r   ru   r)   r*   r   )r+   r,   r-   r   r   r  r   r   r   r   r   r   r   r   r  r  r   r  __classcell__)r   s   @r   r   r   ^  sh     HM7@D7	7D=L/
//

/$:?Br    r   c                  j    e Zd ZdZddZddZddZd ZddZddZ	e
d        Zdd	Zdd
Zd Zd Zy)r   zMANIFEST.inc                J    d| _         d| _        d| _        d| _        d| _        y )NTF)use_defaultsr   manifest_onlyforce_manifestr   rX   s    r   r   z!manifest_maker.initialize_options*  s)     
!"#( r    c                     y r   r/   rX   s    r   r   zmanifest_maker.finalize_options1  s    r    c                &   t        | j                        | _        t        j                  j                  | j                        s| j                          | j                          t        j                  j                  | j                        r| j                          | j                          | j                          | j                          | j                  j                          | j                  j                          | j                          y )N)r   )r   r   r   r<   r&   r   r   write_manifestadd_defaultstemplateread_templateadd_license_files_add_referenced_filesprune_file_listsortremove_duplicatesrX   s    r   r   zmanifest_maker.run4  s     T5M5MNww~~dmm,!77>>$--(  ""$'')r    c                l    t        j                  |      }|j                  t        j                  d      S )N/)r#   r"  rm   r<   r=   r%   s     r   _manifest_normalizez"manifest_maker._manifest_normalizeB  s'    ++D1||BFFC((r    c                   | j                   j                          | j                   j                  D cg c]  }| j                  |       }}d| j                   d}| j                  t        | j                  |f|       yc c}w )zo
        Write the file list in 'self.filelist' to the manifest file
        named by 'self.manifest'.
        zwriting manifest file 'r   N)r   r   r  r>  r   executer   )r   r   r  r   s       r   r3  zmanifest_maker.write_manifestF  so    
 	 7;mm6I6IJ))!,JJ'a8Z$--!7= Ks   Bc                T    | j                  |      st        j                  | |       y y r   )_should_suppress_warningr   r   )r   r   s     r   r   zmanifest_maker.warnR  s#    ,,S1JJtS! 2r    c                .    t        j                  d|       S )z;
        suppress missing-file warnings from sdist
        zstandard file .*not found)r>   r"   )r   s    r   rB  z'manifest_maker._should_suppress_warningV  s    
 xx4c::r    c                v   t        j                  |        | j                  j                  | j                         | j                  j                  | j
                         t        t                     }|r| j                  j                  |       n9t        j                  j                  | j
                        r| j                          t        j                  j                  d      r| j                  j                  d       | j                  d      }| j                  j                  |j                         y )Nzsetup.pyrx   )r   r4  r   r  r5  r   r   r   r  r<   r&   r   read_manifestget_finalized_commandr   rx   )r   rcfilesei_cmds      r   r4  zmanifest_maker.add_defaults]  s    4 T]]+T]]+|~&MM  )WW^^DMM* 77>>*% MM  ,++J7FOO,r    c                    | j                   j                  j                  xs g }|D ]  }t        j                  d|        | j
                  j                  |       y )Nzadding license file '%s')rV   r   license_filesr   r   r   r  )r   rJ  lfs      r   r7  z manifest_maker.add_license_fileso  sN    ))22@@FB 	5BHH/4	5]+r    c                    t        | j                  dg       }|D ]  }t        j                  d|        | j                  j                  |       y)zGAdd files referenced by the config (e.g. `file:` directive) to filelist_referenced_filesz%adding file referenced by config '%s'N)getattrrV   r   debugr   r  )r   
referencedrfs      r   r8  z$manifest_maker._add_referenced_filesu  sI    T..0CRH
 	CBII=rB	CZ(r    c                    t        |d      r|j                         S t        j                  ddd       |j	                         S )a0  
        The parent class implementation of this method
        (``sdist``) will try to include data files, which
        might cause recursion problems when
        ``include_package_data=True``.

        Therefore, avoid triggering any attempt of
        analyzing/building the manifest again.
        get_data_files_without_manifestz@`build_py` command does not inherit from setuptools' `build_py`.z
            Custom 'build_py' does not implement 'get_data_files_without_manifest'.
            Please extend command classes from setuptools instead of distutils.
            z!https://peps.python.org/pep-0632/)see_url)hasattrrS  r   emitget_data_files)r   build_pys     r   _safe_data_fileszmanifest_maker._safe_data_files}  sJ     8>?;;==$))N 8	
 &&((r    Nr   )r+   r,   r-   r5  r   r   r   r>  r3  r   staticmethodrB  r4  r7  r8  rY  r/   r    r   r   r   '  sM    H))
>" ; ;-$,))r    r   c                    dj                  |      }|j                  d      }t        | d      5 }|j                  |       ddd       y# 1 sw Y   yxY w)z{Create a file with the specified name and write 'contents' (a
    sequence of strings without line terminators) to it.
    
r   r   N)r   r   r   r   )r   contentsr   s      r   r   r     sO     yy"H w'H	h	 	  s   A

Ac                   t        j                  d|       | j                  j                  }| j                  |j
                  c|_        }| j                  |j                  c|_        }	  |j                  | j                         ||c|_        |_        t        | j                  dd       }t        j                  | j                  |       y # ||c|_        |_        w xY w)Nz
writing %szip_safe)r   r   rV   r   r   rd   r   rY   write_pkg_inforx   rN  r   write_safety_flag)cmdbasenamer   r   oldveroldnamesafes          r   r`  r`    s    HH\8$((H"0@0@Hf \\8==HM7:-*16'x'3##Z6Dd3	 +26'x's   *C Cc                     y)aj  
    Unused: left to avoid errors when updating (from source) from <= 67.8.
    Old installations have a .dist-info directory with the entry-point
    ``depends.txt = setuptools.command.egg_info:warn_depends_obsolete``.
    This may trigger errors when running the first egg_info in build_meta.
    TODO: Remove this function in a version sufficiently > 68.
    Nr/   rb  rc  r   s      r   warn_depends_obsoleteri    s    r    c           	        t         j                  | j                  j                         D cg c]  }|j	                  dd      d    c}      }| j                  d|dj                  t        |            dz          y c c}w )Nr   r   r   ztop-level namesr\  )r   fromkeysrV   iter_distribution_namesr;   r   r   sorted)rb  rc  r   kpkgss        r   write_toplevel_namesrp    sk    ==$'$4$4$L$L$N Q D NN$h		&,0G$0NOs   A>c                     t        | ||d       y )NT)	write_argrh  s      r   overwrite_argrs    s    c8Xt,r    c                    t         j                  j                  |      d   }t        | j                  |d       }|dj                  |      dz   }| j                  ||||       y )Nr   r\  )r<   r&   splitextrN  rV   r   r   )rb  rc  r   r   argnamer   s         r   rr  rr    s\    ggx(+GC$$gt4E		% 4'Whu=r    c                    t        j                  | j                  j                        }t        j                  |      }| j                  d||d       y )Nzentry pointsT)r   r   rV   r   renderr   )rb  rc  r   epsdefns        r   write_entriesr{    sB    


S--::
;C$D^XtTBr    c                    t        j                  |       }t        j                  |      }| d| d|xs t         }|r|d| z  }|S )r   r   z-py)r   r   r   )r   r   r   r   rY   rd   eggs          r   r   r     sV    ,,X6D//<GF!G9C
 6h7
8C8*~Jr    c                      e Zd ZdZy)EggInfoDeprecationWarningz?Deprecated behavior warning for EggInfo, bypassing suppression.N)r+   r,   r-   r.   r/   r    r   r  r    s    Ir    r  r   r   r   )NN)?r.   
__future__r   r   r<   r>   r%  rq   collections.abcr   rk   packaging.requirementspackaging.versionsetuptools.unicode_utilsr#   
setuptoolsr   setuptools.commandr   setuptools.command.sdistr   r   setuptools.command.setoptr	   setuptools.globr
   r1   r   r   
_importlibr   warningsr   r   distutils.errorsr   distutils.filelistr   r   r   	_FileListdistutils.utilr   version_infomajorminorr   r   rQ   rS   rx   r   r   r`  ri  write_requirementswrite_setup_requirementsrp  rs  rr  r{  r   r  r/   r    r   <module>r     s'  < #  	 	 
  $    0  ( 8 1   , ! 3     3 4 '$$%Qs'7'7'='=&>?C C*UOp, ,^W$z7 W$tFBy FBRl)U l)^
4  "44 '@@ P->CJ < Jr    