
    5pjG                        % S r SSKJr  SSKJr  \" S5      rS\S'   SrS\S	'   S
r	S\S'   SS jr
SS jr    SS jrSS jrSS jrSS jrSS/rg)z2Glob pattern normalization and analysis utilities.    )annotations)Iterablez*?[zfrozenset[str]_WILDCARD_CHARS,str_PATTERN_SEPARATOR/_PATH_SEPARATORc                    U R                  [        5       Vs/ s H)  oR                  5       (       d  M  UR                  5       PM+     sn$ s  snf )zJSplit a single string by separator and strip whitespace, dropping empties.)splitr   strip)valueparts     Y/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/modelscope_hub/utils/patterns.py_split_inliner      s4    %*[[1C%DU%DT

LDJJL%DUUUs
   AAc                ~    / nU  H4  n[        U[        5      (       d  M  UR                  [        U5      5        M6     U$ )zAExpand each item via inline split and collect non-empty patterns.)
isinstancer   extendr   )itemsresultitems      r   _flattenr      s9    F$$$mD)*  M    c                    U c  g[        U [        5      (       a  [        U 5      nO"[        U [        5      (       a  [	        U 5      nOgU=(       d    S$ )a  Normalize glob pattern input into a clean list or None.

Accepts None, a single string (optionally comma-separated), or any iterable
of strings (list, tuple, etc.) whose elements may also be comma-separated.
Returns None when the input yields no usable patterns.
N)r   r   r   r   r   )	raw_inputpatternss     r   normalize_patternsr      sI     )S!! +	Ix	(	(I&tr   c                    [        S [        U 5       5       S5      nUS:X  a  U OU SU nUR                  [        5      nUS:  a  gUSU nU=(       d    S$ )zCReturn the directory portion preceding the first wildcard, or None.c              3  B   #    U  H  u  pU[         ;   d  M  Uv   M     g 7fN)r   ).0ichs      r   	<genexpr>&_pattern_dir_prefix.<locals>.<genexpr>5   s     D*uqbO.C*s   	Nr   )next	enumeraterfindr
   )patternwildcard_indexliteral	sep_indexprefixs        r   _pattern_dir_prefixr/   2   sa    D	'*D
N (2-g7?N3KGo.I1}Zi F>Tr   c                2  ^ U  Vs/ s H  oR                  [        5      PM     nn/ n[        U6  H8  nUS   m[        U4S jUSS  5       5      (       a    OUR	                  T5        M:     U(       d  g[        R                  U5      nU=(       d    S$ s  snf )zACompute the longest common path-segment prefix across all inputs.r   c              3  ,   >#    U  H	  oT:g  v   M     g 7fr     )r!   segfirsts     r   r$   #_common_segments.<locals>.<genexpr>F   s     4|e||s      N)r   r
   zipanyappendjoin)prefixespsegment_listscommonsegmentsjoinedr4   s         @r   _common_segmentsrA   @   s    7?@x!WW_-xM@F'4x|444e	 (
 !!&)F>T As   Bc                    U (       d  g/ nU  H$  n[        U5      nUc    gUR                  U5        M&     [        U5      $ )zExtract the longest common directory prefix shared by all patterns.

Returns None if the input is empty, any pattern lacks a directory prefix,
or the prefixes do not share a common leading segment.
N)r/   r9   rA   )r   r;   r*   r.   s       r   extract_common_prefixrC   O   sD     H$W->	 
 H%%r   r   rC   N)r   r   return	list[str])r   zIterable[str]rD   rE   )r   zstr | Iterable[str] | NonerD   list[str] | None)r*   r   rD   
str | None)r;   rE   rD   rG   )r   rF   rD   rG   )__doc__
__future__r   collections.abcr   	frozensetr   __annotations__r   r
   r   r   r   r/   rA   rC   __all__r2   r   r   <module>rN      sp    8 " $ #,E"2 2 C  V
)(&"  !8
9r   