+
    kGj-                     n  a  R! t30 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtH	t	H
t
 ^ RIHt ^ RIHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ]P>                  ! ] 4      t!R
R"RR#RR$/t"] ^ k R R lt#R R lt$ ! R R]4      t%]PL                   ! R R4      4       t']PL                   ! R R4      4       t(R%R R llt)R R lt*R R lt+R R lt,] R8X  dQ   ]PZ                  ^,          t.]! ].4      P_                  R 4       F   t0]1! ](Pe                  ]
! ]04      4      4       K"  	  R# R# )&zB
Convert Python `*.dist-info/METADATA` to conda `info/index.json`
N)DistributionPackageMetadataPathDistribution)Path)AnyCallableDictIterableListOptional)ArgumentError)	MatchSpec)Requirement)__version__)conda_to_pypi_namepypi_to_conda_namehomedev_urldoc_urlc                0    V ^8  d   QhR\         R\         /# )   textreturn)str)formats   "4lib/python3.14/site-packages/conda_pypi/translate.py__annotate__r       s     $ $C $C $    c                   V '       g   R# . pV P                  4        F  pVP                  4       pVP                  4       pV'       g    MeVP                  R4      '       d    MLV'       d0   \        P
                  ! RV4      '       d   VP                  4         MVP                  V4       K  	  RP                  V4      P                  4       # )z
Truncate a long Description to its first paragraph.

Stops at the first blank line or the first Markdown heading
(`#`, setext underline of `=` or `-`), so README+CHANGELOG dumps
don't end up in about.json.
 #z	[=\-]{3,}
)

splitlinesrstriplstrip
startswithre	fullmatchpopappendjoinstrip)r   linesrawlinestrippeds   &    r   short_descriptionr0       s      E zz|;;=s##R\\,99IIKX ! 99U!!##r   c                h    V ^8  d   QhR\         R\        \        ,          R\        \        ,          /# )r   metadatalabelsr   )r   r	   r   r   )r   s   "r   r   r   <   s*      O Xc] xX[} r   c                "   V Uu0 uF  q"P                  4       kK  	  ppV P                  R4      ;'       g    R FL  pVP                  R4      w  r%pVP                  4       P                  4       V9   g   K<  VP                  4       u # 	  R# u upi )zQReturn the first Project-URL value whose label (case-insensitive) is in `labels`.zproject-urlz, N )lowerget_all	partitionr+   )r2   r3   labelwantedentry_urls   &&     r   url_from_project_urlsr>   <   sy    )/0kkmF0!!-066B6-#;;= F*99; 7  1s   Bc                   B   a  ] tR t^Ft o RtR tV 3R lR ltR tRtV t	R# )FileDistributionz\
From a file e.g. a single `.metadata` fetched from pypi instead of a
`*.dist-info` folder.
c                    Wn         R # Nraw_text)selfrD   s   &&r   __init__FileDistribution.__init__L   s     r   c                6   < V ^8  d   QhRS[ RS[S[ ,          /# )r   filenamer   )r   r   )r   __classdict__s   "r   r   FileDistribution.__annotate__O   s      # (3- r   c                ,    VR 8X  d   V P                   # R# )METADATANrC   )rE   rI   s   &&r   	read_textFileDistribution.read_textO   s    z!== r   c                    R# )zC
Given a path to a file in this distribution, return a path
to it.
Nr5   )rE   paths   &&r   locate_fileFileDistribution.locate_fileU   s    
 r   rC   N)
__name__
__module____qualname____firstlineno____doc__rF   rN   rR   __static_attributes____classdictcell__rJ   s   @r   r@   r@   F   s#     
!  r   r@   c                   j   a  ] tR t^]t o ^ tRtRtRtRt^ t	R t
]R 4       t]R 4       tV 3R ltRtV tR# )	PackageRecordpypir   c                   R V P                   RV P                  RV P                  RV P                  RV P                  RV P
                  RV P                  RV P                  RV P                  R	V P                  R
V P                  /# build_numberbuilddependsextraslicense_familylicensenamenoarchsubdir	timestampversionr`   rE   s   &r   to_index_jsonPackageRecord.to_index_jsonl   ss    D--TZZt||dkkd11t||DIIdkkdkkt||
 	
r   c                8    V P                    R V P                   2# )r<   )
build_textra   rl   s   &r   rb   PackageRecord.build{   s    //"!D$5$5#677r   c                R    V P                    R V P                   R V P                   2# )-)rg   rk   rb   rl   s   &r   stemPackageRecord.stem   s%    ))Adll^1TZZL99r   c                   < V ^8  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[S[ ,          ;R&   S[S[ S[S[ ,          3,          ;R&   S[;R&   S[ ;R&   S[ ;R&   S[ ;R	&   S[ ;R
&   S[;R&   # )r   rg   rk   ri   rc   rd   ra   rp   re   rf   rh   rj   )r   r
   r   int)r   rJ   s   "r   r   PackageRecord.__annotate__]   s      I  L	 
 K  #Y  d3i               r   r5   N)rT   rU   rV   rW   ra   rp   re   rf   rh   rj   rm   propertyrb   rt   __annotate_func__rY   rZ   r[   s   @r   r]   r]   ]   sZ      LJNGFI
 8 8 : :G  r   r]   c                   ^   a  ] tR t^t o V 3R lR lt]RV 3R lR ll4       tV 3R ltRtV t	R# )	CondaMetadatac                0   < V ^8  d   QhRS[ S[,          /# )r   r   )r   dict)r   rJ   s   "r   r   CondaMetadata.__annotate__   s     

 

8D> 

r   c                *    RRV P                   RR/R^/# )z
info/link.json used for console scripts; None if empty.

Note the METADATA file aka PackageRecord does not list console scripts.
rh   entry_pointstypepythonpackage_metadata_version)console_scriptsrl   s   &r   	link_jsonCondaMetadata.link_json   s'     ~t';';VXN&
 	
r   Nc                J   < V ^8  d   QhRS[ RS[R,          RS[S[,          /# )r   distributionpypi_to_conda_name_mappingNchannels)r   r~   r	   r   )r   rJ   s   "r   r   r      s6     R
 R
"R
 %)4KR
 3-	R
r   c                   VP                   pVP                  R 4      pRpV'       d   RV 2p\        VP                  V4      w  rxV.V,           p	VP                   U
u. uF1  p
V
P
                  R8X  g   K  V
P                   RV
P                   2NK3  	  pp
RpRVP                  R4      ;'       g    RR\        VP                  R4      ;'       g    R4      RVP                  R	4      ;'       g    VP                  R
4      ;'       g    R/p\        P                  4        F  w  r\        WO4      pV'       g   K  VW&   K   	  \        V4      pV'       d   VVR&   \        \        VRR4      ;'       g    VP                   P                  R4      V4      p\        VRR4      ;'       g    VP                   P                  R4      p\        ^ T	TVR,          ;'       g    RRVVRV\         P"                  ! 4       R,          R7
      pRRVP                  RVP$                  RVP&                  /RRR\(        /VR&   V ! VVVVR7      # u up
i )zrequires-pythonr   zpython r   z = summaryr   descriptionrf   zLicense-ExpressionLicenser   rg   Nrk   rh   i@B )
ra   rc   rd   rf   re   rg   rk   ri   rh   rj   reciperb   	generatorz
conda-pypigenerator_versionextra)r2   package_recordr   about)r2   getrequires_to_condarequiresr   grouprg   valuer0   URL_LABEL_MAPitemsr>   listr   getattrr]   timetime_nsrk   rb   r   )clsr   r   r   r2   python_versionrequires_pythonrequirementsrd   rc   epr   rh   r   conda_fieldr3   r=   channels_listrg   rk   r   s   &&&&                 r   from_distributionCondaMetadata.from_distribution   sS     ((!&78" ''78O01F1FHbc ##l2 #//
/xx,, &rwwis288*%/ 	 
  x||I.44",X\\--H-N-NBOx||$89ZZX\\)=TZZXZ	!
 $1#6#6#8K'9Cs%(" $9
 X -E*!L&$/TT<3H3H3L3LV3T&
 ,	48``L<Q<Q<U<UV_<`&)$**lln/
 ++>11--
 
g )+	
 	
w
s   I5Ic                p   < V ^8  d   Qh/ S[ ;R&   S[S[,          ;R&   S[;R&   S[S[S[3,          ;R&   # )r   r2   r   r   r   )r   r
   r   r]   r   r   )r   rJ   s   "r   r   r      sC       #Y  "!	 
 S> r   r5   )Nr5   )
rT   rU   rV   rW   r   classmethodr   rz   rY   rZ   r[   s   @r   r|   r|      s2     

 

 R
 R
 R
)  r   r|   c                j    V ^8  d   QhR\         \        \        ,          ,          R\        R,          /# )r   r   r   N)r   r
   r   r~   )r   s   "r   r   r      s)     & &tCy!&?Cd{&r   c                 4   ^ RI Hp V! \        4      p. pT ;'       g    .  Uu. uF  p\        V4      NK  	  up F  p\	        VP
                  V4      Vn        VP
                  \        VP                  4      ,           pVP                  ;pef   VP                   FS  p	\        V	\        4      '       g   K  V	w  rp\        V
4      R8X  g   K2  V\        V4      ,          P                  V4       KU  	  K  VP                  V4       K  	  V\        V4      3# u upi )    )defaultdictr   )collectionsr   r   r   r   rg   r   	specifiermarker_markers
isinstancetupler)   r~   )r   r   r   rd   r   deprequirementas_condar   markvarr<   r   s   &&           r   r   r      s     (#.t#4FL4<NNNCNSC(NC-k.>.>@Z[ ##c+*?*?&@@
 "(((F5dE**$(MCE3x7*s5z*11(;	 ( )# D& f%%' Ds   Dc                >    V ^8  d   QhR\         R\        R,          /# )r   
match_specr   N)r   r   )r   s   "r   r   r     s      ) d0B r   c                 P   \        V \        4      p V P                  pVR 8X  d   R# V P                  pV'       dd   \	        V4      pVR 8X  d   \        V4      # VP                  R4      '       d   VRR pV'       d   V^ ,          R9  d   RV 2p\        V V 24      # \        V4      # )*Nz.*z<>=!~z==)remap_match_spec_namer   rg   rk   r   r   endswith)r   rg   rk   version_strs   &   r   conda_to_requiresr     s    &z3EFJ??Ds{  G'l#t$$%%%cr*K;q>8{m,KdVK=122tr   c                `    V ^8  d   QhR\         R\        \        .\        3,          R\         /# )r   r   name_mapr   )r   r   r   )r   s   "r   r   r   $  s-     	3 	3i 	38SE3J;O 	3T] 	3r   c                 d    V P                   pVR 8X  d   V # V! V4      pW28X  d   V # \        WR7      # )r   )rg   )rg   r   )r   r   rg   mapped_names   &&  r   r   r   $  s8    ??Ds{4.KZ22r   c                (    V ^8  d   QhR\         RR/# )r   mappingr   N)r~   )r   s   "r   r   r   0  s     + +$ +4 +r   c           
        \        V \        4      '       g"   \        R\        V 4      P                   24      h V P                  4       pT F  w  r#\        T\        4      '       g&   \        R\        T4      P                   RT: 24      h\        T\        4      '       g&   \        R\        T4      P                   RT: 24      hRT9  d   \        RT: R	24      h\        TR,          \        4      '       d   K  \        RT: R
\        TR,          4      P                   24      h	  R#   \         d#    \        R\        T 4      P                   24      hi ; i)aK  
Validate that the name mapping dict has the correct format.

Expected format:
- A dict where keys are PyPI package names (strings)
- Values are dicts with at least "conda_name" key (string)
- Optionally can have "pypi_name", "import_name", "mapping_source" keys
- Empty dict is allowed

Raises ArgumentError if format is invalid.
z'Name mapping must be a dictionary, got z<Name mapping must be a dictionary with .items() method, got z'Name mapping keys must be strings, got z
 for key: z.Name mapping values must be dictionaries, got z	 for key 
conda_namezName mapping entry for z% is missing required key 'conda_name'z2 has invalid 'conda_name' type: expected str, got N)r   r~   r   r   rT   r   AttributeErrorr   )r   r   	pypi_namer   s   &   r   validate_name_mapping_formatr   0  sy    gt$$Ed7mF\F\E]^__
 "	)S))9$y/:R:R9SS]^g]jk  %&&@eAUAU@VV_`i_lm  u$))6[\  %-s33))6himns  uA  oB  jC  jL  jL  iM  N # "  
J4PW=KaKaJbc
 	

s   D, ,-E__main__z*.dist-infoc                b    V ^8  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   # )r   r   )__conditional_annotations__r   r   r   )r   s   "r   r   r      s+      0 tCJ 1r   )homepager   z	home-page)source
repositoryzsource codedevelopmentgithub)documentationdocsrB   )4r   rX   dataclassesloggingr&   sysr   importlib.metadatar   r   r   pathlibr   typingr   r   r   r	   r
   r   conda.exceptionsr   conda.models.match_specr   packaging.requirementsr   
conda_pypir   conda_pypi.name_mappingr   r   	getLoggerrT   logr   r0   r>   r@   	dataclassr]   r|   r   r   r   r   argvbaseglobrQ   printr   r   )r   s   @r   <module>r      s%     	 
  N N  @ @ * - . " J!
 -O(# $8| . #: #: #:L e
 e
 e
P&F(	3+\ z88A;DT
.m--.>t.DEF / r   