
    Ƒi#                     R   S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
JrJrJr  S SKJr  S rS rS\4S	 jrS\4S
 jrS\4S jrS\S\4S jrS\S\4S jrS rSS\SS4S jrS\\\\\4   S\4S jr   SS\\\\\4   S\\   S\\   S\\   S\4
S jjrS\S\4S jr g)    N)Path)Errorcopy2copystat)BinaryIOOptionalUnion)urlparsec                 $   [         R                  " U 5      nUR                  nUR                  nUc  Ub  gUR                  (       d  / OUR                  nU(       a  US   S;   a  UR                  S5      OU  [        U5      S:X  a
  US   S;   a  gg)zto decide if a func could receive dict inputs or not

Args:
    func (class): the target function to be inspected

Returns:
    bool: if func only has one arg ``input`` or ``inputs``, return True, else return False
Fr   )selfcls   )inputinputsT)inspectgetfullargspecvarargsvarkwargspoplen)funcfull_args_specr   r   r   s        [/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/modelscope/utils/file_utils.pyfunc_receive_dict_inputsr      s     ++D1N$$G  EO#((2n.A.ADT!W7DHHQKd
4yA~$q'%88    c                      [         R                  R                  [        R                  " 5       R                  SSS5      5      n U $ )z)
default base dir: '~/.cache/modelscope'
z.cache
modelscopehub)ospath
expanduserr   homejoinpath)default_cache_dirs    r    get_default_modelscope_cache_dirr&   %   s9     **499;+?+?,,' (r   returnc                  z    [         R                  R                  [         R                  " S[	        5       5      5      $ )z}Get modelscope cache dir, default location or
   setting with MODELSCOPE_CACHE

Returns:
    str: the modelscope cache root.
MODELSCOPE_CACHE)r    r!   r"   getenvr&    r   r   get_modelscope_cache_dirr,   .   s0     77
		$&F&HIK Kr   c                  R    [         R                  R                  [        5       S5      $ )zOGet model cache root path.

Returns:
    str: the modelscope model cache root.
modelsr    r!   joinr,   r+   r   r   get_model_cache_rootr1   9   s     77<<02H==r   c                  R    [         R                  R                  [        5       S5      $ )zGet dataset raw file cache root path.
if `MODELSCOPE_CACHE` is set, return `MODELSCOPE_CACHE/datasets`,
else return `~/.cache/modelscope/hub/datasets`

Returns:
    str: the modelscope dataset raw file cache root.
datasetsr/   r+   r   r   get_dataset_cache_rootr4   B   s     77<<02J??r   
dataset_idc                 d    [        5       nU c  U$ [        R                  R                  XS-   5      $ )zGet the dataset_id's path.
   dataset_cache_root/dataset_id.

Args:
    dataset_id (str): The dataset id.

Returns:
    str: The dataset_id's cache root path.
/)r4   r    r!   r0   )r5   dataset_roots     r   get_dataset_cache_dirr9   M   s5     *+L%-< (277<<3&4( (r   model_idc                 d    [        5       nU c  U$ [        R                  R                  XS-   5      $ )zcache dir precedence:
    function parameter > environment > ~/.cache/modelscope/hub/model_id

Args:
    model_id (str, optional): The model id.

Returns:
    str: the model_id dir if model_id not None, otherwise cache root dir.
r7   )r1   r    r!   r0   )r:   	root_paths     r   get_model_cache_dirr=   \   s4     %&I (9 #bggllc>/# #r   c                 t    [        U S5       nUR                  5       nS S S 5        U$ ! , (       d  f       W$ = f)Nr)openread)r!   ftexts      r   	read_filerD   k   s/    	dCAvvx 
K 
Ks   (
7Fc           
         [         R                  " U 5      nUb	  U" X5      nO
[        5       n[         R                  " XS9  / n	U GH\  n
X;   a  M  [         R                  R                  X
5      n[         R                  R                  X5      n [         R                  R                  U5      (       a  [         R                  " U5      nU(       a'  [         R                  " X5        [        XU(       + S9  M  [         R                  R                  U5      (       d	  U(       a  M  [         R                  R                  U5      (       a  [        UUUUUUS9  GM  U" X5        GM  [         R                  R                  U5      (       a  [        UUUUUUS9  GMT  U" X5        GM_      [        X5        U	(       a  [        U	5      eU$ ! [         a*  nU	R                  UR                  S   5         SnAGM  SnAf[          a(  nU	R#                  X[%        U5      45         SnAGM  SnAff = f! [          a4  n['        USS5      c  U	R#                  X[%        U5      45         SnANSnAff = f)z7copy from py37 shutil. add the parameter dirs_exist_ok.N)exist_ok)follow_symlinks)dirs_exist_okr   winerror)r    listdirsetmakedirsr!   r0   islinkreadlinksymlinkr   existsisdircopytree_py37r   extendr   OSErrorappendstrgetattr)srcdstsymlinksignorecopy_functionignore_dangling_symlinksrH   namesignored_nameserrorsnamesrcnamedstnamelinktoerrwhys                   r   rR   rR   r   s    JJsOEs*KK,F '',,s)'',,s)(	8ww~~g&&W- JJv/W8|L 77>>&116N ww}}W--%##$")*79 &g7w''!"/1 g/O \0
 FmJ  	'MM#((1+&& 	8MM7SX677	8  03
D)1MM3SX./0s[   A&G7+G$2GG$2GG'H- 
H*G55H*H%%H*-
I+7*I&&I+file_path_or_objc                    [        U [        [        45      (       a%  [        U 5      nUR                  5       R                  $ [        U [
        5      (       a  [        U 5      $ [        U [        R                  5      (       aS  U R                  5       nU R                  S[        R                  5        U R                  5       nU R                  U5        U$ [        S5      e)Nr   zCUnsupported type: must be string, Path, bytes, or io.BufferedIOBase)
isinstancerV   r   statst_sizebytesr   ioBufferedIOBasetellseekr    SEEK_END	TypeError)rg   	file_pathcurrent_positionsizes       r   get_file_sizerv      s    "S$K00)*	~~'''	$e	,	,#$$	$b&7&7	8	8+002a-$$&./Q
 	
r   buffer_size_mb	tqdm_descdisable_tqdmc           
      @   SSK Jn  [        U 5      nUS:  aS  SnSn[        U [        [
        45      (       a.  [        U [
        5      (       a  U O
[        U 5      nUR                  nSU S3nUS-  S-  n[        R                  " 5       n	/ n
U" USS	S	S
UUS9n[        U [        [
        45      (       a  [        U S5       nUR                  U5      =n(       ax  U
R                  [        R                  " U5      R                  5       5        U	R                  U5        UR                  [        U5      5        UR                  U5      =n(       a  Mx  S S S 5        U	R                  5       n	UnGO[        U [        5      (       aP  U	R                  U 5        U	R                  5       n	U
R                  U	5        [        U 5      nUR                  U5        GO[        U [         R"                  5      (       a  U R%                  S[&        R(                  5        U R                  U5      =n(       ax  U
R                  [        R                  " U5      R                  5       5        U	R                  U5        UR                  [        U5      5        U R                  U5      =n(       a  Mx  U	R                  5       n	UnU R%                  S[&        R(                  5        OUR+                  5         [-        S5      eUR+                  5         U U	UU[        U
5      U
S.$ ! , (       d  f       GN= f)Nr   )tqdmi   @Fz
Large Filez[Validating Hash for ]i   TB)totalinitial
unit_scaledynamic_ncolsunitdescdisablerbz5Input must be str, Path, bytes or a io.BufferedIOBase)rg   	file_hash	file_size
chunk_size
chunk_numschunk_hash_list)	tqdm.autor{   rv   ri   rV   r   ra   hashlibsha256r@   rA   rU   	hexdigestupdater   rl   rm   rn   rp   r    SEEK_SETclose
ValueError)rg   rw   rx   ry   r{   r   ra   r!   buffer_sizer   r   progressrB   
byte_chunkfinal_chunk_sizes                  r   get_file_hashr      s    ./I%%&d44'1 $(( ((#-12B-C 99D+D63	 4'$.K IOH "S$K00"D)Q !{ 33*3&&w~~j'A'K'K'MN  ,J0 !"{ 33*3 *
 '')	&	$e	,	,)*'')	y)/0()	$b&7&7	8	8a-,11+>>j>""7>>*#=#G#G#IJZ(OOC
O, -11+>>j> '')	&a- 	CE 	E NN -&/** A *)s   =BL
Lurl_or_filenamec                     [        U 5      R                  S:H  =(       a$    [        R                  R	                  U 5      (       + $ )z-
Check if a given string is a relative path.
 )r
   schemer    r!   isabs)r   s    r   is_relative_pathr     s:     2& M.0ggmmO.L*LMr   )r   z[Calculating]T)!r   r   rm   r    pathlibr   shutilr   r   r   typingr   r   r	   urllib.parser
   r   r&   rV   r,   r1   r4   r9   r=   rD   rR   rl   intrv   booldictr   r   r+   r   r   <module>r      s.     	 	  ) ) , , !0K# K>c >@ @(c (c (## ## # ! %+0 %FR
E#tUH*D$E 
# 
( %&.#'	HCuh67HSMH }H 4.	H
 
HVMc Md Mr   