
    ie                        d dl Z d dl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	m
Z
mZ dededdfdZ	 	 dded	ed
ededededefdZdedee   fdZdedede
e   defdZ	 	 ddededeeee   f   dee   deddfdZy)    N)Iterable)OptionalUnionpath_inpath_outreturnc                    t        |       5 }|j                         }ddd       d}t              D ]i  \  }}|j                  d      r&|dd j	                  d      d   j                         }=|j                  d      sO|j                  dd| d	      }|||<   k t        |d
      5 }|j                  |       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zAdjust changelog headers to avoid duplication of short subtitles.

    Args:
        path_in: Input Markdown file path.
        path_out: Output Markdown file path.

    N z##    -r   z### z###z -w)open	readlines	enumerate
startswithsplitstripreplace
writelines)r   r   fpchlog_lines	chlog_verilns          x/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/lightning_utilities/docs/formatting.py_transform_changelogr      s     
g"lln 
 I;'2==12S)!,224I]]6"ET)B#78BKN ( 
h	
k" 
	 
 
	s   C*CCCdomaininfogithub_usergithub_repomain_branchstable_branchc                 r   dt         t        t        t        f   ffd}| dk7  sd   sy	 d |       z  }|j                  d      d
   }|dj                  ||      }dj                  |g|j                  d      dd        }d| d| d| S # t        $ r d   j	                  dd      d	z   }Y }w xY w)Nr   c                     t         j                  d      } d   j                  d      D ]  }t        | |      }  t	        t        j                  |             t        fddD              rit        j                  j                  t        j                  j                  ddd            }t	        t        j                  j                  |            nC dt        j                  j                  t        j                  j                  d             t        j                  |       \  }}||t        |      z   d	z
  fS )
Nmodulefullname.c              3   &   K   | ]  }|v  
 y w)N ).0sfnames     r   	<genexpr>z9_linkcode_resolve.<locals>.find_source.<locals>.<genexpr>5   s     H#GaqEz#Gs   )readthedocsrtfd	checkoutsz..)start/   )sysmodulesr   getattrstrinspectgetsourcefileanyospathabspathjoinrelpathgetsourcelineslen)objpartpath_topsource
line_startr,   r   r!   s        @r   find_sourcez&_linkcode_resolve.<locals>.find_source-   s    kk$x.)$**3/D#t$C 0G))#./H#GHH wwrww||D$'EFHX>?E #m1RWW__U"''//RVBW_%X$YZE$33C8
j*s6{":Q">>>    pyr%   r
   z
%s#L%d-L%dr'   r2   .pyr   )lateststabler3   zhttps://github.com/z/blob/)tupler7   int	Exceptionr   r   getr>   )	r   r   r   r    r!   r"   rG   filenamebranchs	    `  `    r   _linkcode_resolverS   %   s    ?sC}- ?& ~T(^<+-/ ^^C #F#}=AA&&QFxx:(.."5ab"9:;H Q{m6(LL  <>))#s3e;<s   
B !B65B6package_namec                     ddl }ddlm} d|  d}|j                  |d      j	                         }|d   j                         }|D ch c]  }t        j                  d	|      s| }}t        ||
      S c c}w )zLoad the versions of the package from PyPI.

    >>> _load_pypi_versions("numpy")  # doctest: +ELLIPSIS
    ['0.9.6', '0.9.8', '1.0', ...]
    >>> _load_pypi_versions("scikit-learn")  # doctest: +ELLIPSIS
    ['0.9', '0.10', '0.11', '0.12', ...]

    r   N)Versionzhttps://pypi.org/pypi/z/json
   )timeoutreleasesz^\d+(\.\d+)*$)key)	requestspackaging.versionrV   rP   jsonkeysrematchsorted)rT   r[   rV   urldataversionsks          r   _load_pypi_versionsrf   P   s{     )"<.
6C<<R<(--/DJ$$&H#E8arxx0@!'D8HE((( Fs   	A8%A8linkpkg_verversion_digitsc                 l   |j                  d      }	 t        |d         d   }|j                  d      d   }dj                  |j                  d      d|       }| j                  d| d|      S # t        $ r9 t        j                  dj                  |dd             }t        ||d         }Y w xY w)a  Resolve a ``{package.version}`` placeholder in a link using the latest available version.

    Args:
        link: The link template containing a ``{...}`` placeholder to replace.
        pkg_ver: A dotted path to resolve the version (e.g., ``"numpy.__version__"``).
        version_digits: Number of version components to keep (e.g., ``2`` -> ``"1.26"``). If ``None``, keep all.

    Returns:
        The link with the ``{...}`` placeholder replaced by a version string.

    r'   r   N+{})r   rf   rO   	importlibimport_moduler>   r6   r   )rg   rh   ri   pkg_attverr%   s         r   #_update_link_based_imported_packagers   d   s     mmC G*!'!*-b1 ))C.
C
((399S>/>2
3C<<"WIR(#..  *(('#2,)?@fgaj)	*s   A1 1?B32B3source_linktarget_linkbrowse_folderfile_extensionsc                 0   g }t        |t              r|g}|D ]E  }|D ]>  }|t        j                  t        j                  j                  |dd|       d      z  }@ G |st        j                  d| d| d       yt        j                  d	|      }|D ]  }	t        ||	|      } t        |      D ]  }
t        |
d
      5 }|j                         }ddd       d\  }}t              D ]C  \  }}t        j                    d|v rd}|s| |v r|j#                  | |      ||<   d}|s=d|v sBd}E |st        j$                  d|
 d|  d| d       t        |
dd
      5 }|j'                  |       ddd        y# 1 sw Y   xY w# 1 sw Y   xY w)a|  Adjust the linked external docs to be local.

    Args:
        source_link: the link to be replaced
        target_link: the link to be replaced, if ``{package.version}`` is included it will be replaced accordingly
        browse_folder: the location of the browsable folder
        file_extensions: what kind of files shall be scanned
        version_digits: for semantic versioning, how many digits to be considered

    Examples:
        >>> adjust_linked_external_docs(
        ...     "https://numpy.org/doc/stable/",
        ...     "https://numpy.org/doc/{numpy.__version__}/",
        ...     "docs/source",
        ... )

    z***T)	recursivez No files were listed in folder "z" and pattern ""Nz{(.+)}zUTF-8)encoding)FF()Fzlinks adjusting in z: "z" -> "r   )
isinstancer7   globr;   r<   r>   loggingwarningr_   findallrs   setr   r   r   adjust_linked_external_docs__name__r   debugr   )rt   ru   rv   rw   ri   
list_filesfolderextpkg_ver_allrh   fpathfopenlinesfoundskipr   r   fws                     r   r   r      s   0 J-%&"C$))BGGLL3%y$IUYZZJ #   :=/YhXiijkl **Y4K9+wP^_  Z%'*eOO%E +"tu%EAr-667q9R?K2-::k;?ar	 & +E7#k]&UVWX%w/2MM%  0/% !**" 0/s   F #F F		F	)masterzrelease/stable))z.rstrJ   r   )r   ro   r8   r   r;   r_   r4   collections.abcr   typingr   r   r7   r   dictrS   listrf   rN   rs   r   r)   rH   r   <module>r      s,       	 	 
 $ "## # # #6  )(M(M
(M (M 	(M
 (M (M 	(MV)c )d3i )(/c /C /QYZ]Q^ /cf /@ &5;!;!;! hsm+,;! c]	;!
 ;! 
;!rH   