
    Fg;                         S SK r S SKrS SKrS SKrS SKJr  S SKrS SKrS SK	r	S SK
Jr  S SKJr  S SKJr  S SKJrJr  \R&                  " S5      r " S S\5      rS	 rS
 r " S S\R0                  5      rg)    N)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localc                   $  ^  \ rS rSrSrSrSrSrS$U 4S jjr\	S 5       r
S%S jrS$S	 jrS
 rS$S jrS rS rS rS rS rS&S jrS&S jrS rS rS rS\4S jrS rS'S jrS rS(S jrS%S jrS r S r!\"S 5       r#\"S  5       r$S! r%S" r&S#r'U =r($ ))LocalFileSystem   zInterface to files on local storage

Parameters
----------
auto_mkdir: bool
    Whether, when opening a file, the directory containing it should
    be created (if it doesn't already exist). This is assumed by pyarrow
    code.
/)filelocalTc                 2   > [         TU ]  " S0 UD6  Xl        g )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      m/Users/admin/workspace/ai/PDFMathTranslate/myenv/lib/python3.13/site-packages/fsspec/implementations/local.pyr   LocalFileSystem.__init__!   s    "6"$    c                     g)Nr   r   r   s    r   fsidLocalFileSystem.fsid%   s    r   c                     U R                  U5      nU R                  U5      (       a  [        U5      eU(       a  U R                  USS9  g [        R
                  " U40 UD6  g NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   s       r   r&   LocalFileSystem.mkdir)   sP    ##D);;t!$''MM$M.HHT$V$r   c                 N    U R                  U5      n[        R                  " XS9  g )Nr   )r!   r%   r$   )r   r'   r    s      r   r$   LocalFileSystem.makedirs2   s    ##D)
D,r   c                 R    U R                  U5      n[        R                  " U5        g N)r!   r%   rmdirr   r'   s     r   r.   LocalFileSystem.rmdir6   s    ##D)
r   c                    U R                  U5      nU R                  U5      nUS   S:X  aL  [        R                  " U5       n/ nU H$  n UR	                  U R                  U5      5        M&     S S S 5        OU/nU(       d  W Vs/ s H  oS   PM	     sn$ W$ ! [
         a     M_  f = f! , (       d  f       N== fs  snf )Ntype	directoryname)r!   infor%   scandirappendFileNotFoundError)	r   r'   detailr   r5   itinfosfis	            r   lsLocalFileSystem.ls:   s    ##D)yy<;&D!RATYYq\2  "! FE',-u!fIu-- -  "! .s6   B* B+B*B;
B'#B*&B''B**
B8c                    [        U[        R                  5      (       a  UR                  SS9nUR	                  5       nUR                  SS9(       a  SnOUR                  SS9(       a  SnOSnUR                  nU(       a   UR                  SS9nUR                  nU R                  UR                  5      nOU R                  U5      n[        R                  " USS9n[        R                  " UR                  5      nU(       a  [        R                  " USS9nUR                  n[        R                  " UR                  5      (       a  SnO*[        R                  " UR                  5      (       a  SnOSnUUUUR                  US.nS	 H  n	[!        US
U	 35      X'   M     U(       a  [        R"                  " U5      US'   U$ ! [         a    Sn GN9f = f)NF)follow_symlinksr3   r   otherTr   )r4   sizer2   createdislink)modeuidgidmtimeinonlinkst_destination)
isinstancer%   DirEntrystat
is_symlinkis_diris_filest_sizeOSErrorr!   r'   S_ISLNKst_modeS_ISDIRS_ISREGst_ctimegetattrreadlink)
r   r'   r   outlinktrC   out2resultfields
             r   r5   LocalFileSystem.infoL   s   dBKK(())E)2C??$D{{5{1e4;;D99T9:D<<D ''		2D ''-D''$6C<<,DggdD9;;D||CKK((ckk**||
 EE#C3ug7FM E$&KK$5F=!9  Ds   G GGc                 .    [         R                  " U5      $ r-   )osplexists)r   r'   r   s      r   rf   LocalFileSystem.lexists{   s    {{4  r   c                 d   U R                  U5      nU R                  U5      nU R                  (       a  U R                  U R                  U5      SS9  U R	                  U5      (       a  [
        R                  " X5        g U R                  U5      (       a  U R                  USS9  g [        U5      er   )
r!   r   r$   _parentisfileshutilcopyfileisdirmkdirsr8   r   path1path2r   s       r   cp_fileLocalFileSystem.cp_file~   s    $$U+$$U+??MM$,,u-M=;;uOOE)ZZKKK-#E**r   c                 b    U R                  U5      n[        R                  R                  U5      $ r-   )r!   r%   r'   rj   r/   s     r   rj   LocalFileSystem.isfile   s%    ##D)ww~~d##r   c                 b    U R                  U5      n[        R                  R                  U5      $ r-   )r!   r%   r'   rm   r/   s     r   rm   LocalFileSystem.isdir   s%    ##D)ww}}T""r   c                     [        U5      (       a,  [        US5       n[        R                  " XR5        S S S 5        g U R                  " X40 UD6$ ! , (       d  f       g = f)Nrb)r   openrk   copyfileobjrr   )r   rp   rq   callbackr   r<   s         r   get_fileLocalFileSystem.get_file   sN    eeT"a""1, #" <<777 #"s   A
Ac                 (    U R                   " X40 UD6$ r-   )rr   )r   rp   rq   r|   r   s        r   put_fileLocalFileSystem.put_file   s    ||E3F33r   c                 t    U R                  U5      nU R                  U5      n[        R                  " X5        g r-   )r!   rk   movero   s       r   mvLocalFileSystem.mv   s.    $$U+$$U+E!r   c                 v    U R                  U5      nU R                  U5      n[        R                  " X40 UD6  g r-   )r!   r%   r^   r   srcdstr   s       r   r^   LocalFileSystem.link   s3    ""3'""3'
#F#r   c                 v    U R                  U5      nU R                  U5      n[        R                  " X40 UD6  g r-   )r!   r%   symlinkr   s       r   r   LocalFileSystem.symlink   s3    ""3'""3'


3&v&r   returnc                 ^    [         R                  R                  U R                  U5      5      $ r-   )r%   r'   rE   r!   r/   s     r   rE   LocalFileSystem.islink   s     ww~~d224899r   c                 N    [         R                  " U R                  U5      5        g r-   )r%   remover!   r/   s     r   rm_fileLocalFileSystem.rm_file   s    
		$&&t,-r   c                    [        U[        5      (       d  U/nU H  nU R                  U5      nU R                  U5      (       ab  U(       d  [	        S5      e[
        R                  " U5      [        R                  " 5       :X  a  [	        S5      e[        R                  " U5        M  [        R                  " U5        M     g )Nz+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rN   listr!   rm   
ValueErrorre   abspathr%   getcwdrk   rmtreer   )r   r'   	recursivemaxdepthps        r   rmLocalFileSystem.rm   s    $%%6DA$$Q'Azz!}} $%RSS;;q>RYY[0$%NOOa 		! r   c                 .    U R                  U5      nSU 3$ )Nfile://)r!   )r   r4   s     r   unstrip_protocol LocalFileSystem.unstrip_protocol   s    ##D)r   c                     U R                  U5      nU R                  (       a%  SU;   a  U R                  U R                  U5      SS9  [	        X4SU 0UD6$ )NwTr   fs)r!   r   r$   ri   LocalFileOpener)r   r'   rF   
block_sizer   s        r   _openLocalFileSystem._open   sM    ##D)??sd{MM$,,t,tM<t=d=f==r   c                 T   U R                  U5      nU R                  (       a  U R                  U R                  U5      SS9  U R	                  U5      (       a  [
        R                  " US 5        O[        US5      R                  5         U(       a  [
        R                  " US5        g g )NTr   ar   )
r!   r   r$   ri   r"   r%   utimerz   closetruncate)r   r'   r   r   s       r   touchLocalFileSystem.touch   sw    ##D)??MM$,,t,tM<;;tHHT4 sO!!#KKa  r   c                     U R                  US9n[        R                  R                  US   [        R                  R                  S9$ )Nr'   rD   tzr5   datetimefromtimestamptimezoneutcr   r'   r5   s      r   rD   LocalFileSystem.created   sE    yydy#  ..O 1 1 5 5 / 
 	
r   c                     U R                  US9n[        R                  R                  US   [        R                  R                  S9$ )Nr   rI   r   r   r   s      r   modifiedLocalFileSystem.modified   s>    yydy#  ..tG}ARARAVAV.WWr   c                     U R                  U5      n[        R                  S:X  a  UR                  SS5      S   =(       d    S$ UR                  SS5      S   n[	        U5      S::  a  USS S:X  a  US   S-   $ U$ )Nr      r         ::/)r!   r%   seprsplitlen)clsr'   path_s      r   ri   LocalFileSystem._parent   s{    ""4(66S=;;sA&q)0S0 KKQ'*E5zQ1:$ 8d?*Lr   c                    [        U5      nUR                  S5      (       a  USS  nOSUR                  S5      (       a  USS  nO7UR                  S5      (       a  USS  nOUR                  S5      (       a  USS  n[        U5      n[        R                  S	:w  a  US
S S:X  a
  US S USS  pOKUS S S:X  a@  UR                  S	S5      =nS:X  d  UR                  S	US
-   5      =nS:X  a  USpOUS U XS  pOSnUR                  S	5      =(       d    U R                  nX!-   $ UR                  S	5      =(       d    U R                  $ )Nr      zfile:   zlocal://   zlocal:   r   r   r   r   // )r   
startswithmake_path_posixr%   r   findrstriproot_marker)r   r'   driveindex1index2s        r   r!   LocalFileSystem._strip_protocol   sO   d#??9%%8D__W%%8D__Z((8D__X&&8Dt$66S= AayC #2AhQRtbqT! #iiQ//FB6"iiVaZ88F; #'4"&w-g4 ;;s#6sD< ;;s#6s6r   c                     gNTr   r   s    r   _isfilestoreLocalFileSystem._isfilestore  s     r   c                 D    [        U5      n[        R                  " X5      $ r-   )r   r%   chmod)r   r'   rF   s      r   r   LocalFileSystem.chmod  s    d#xx##r   )r   )F)Tr-   )FN)ry   N))__name__
__module____qualname____firstlineno____doc__r   protocol
local_filer   propertyr   r&   r$   r.   r>   r5   rf   rr   rj   rm   r}   r   r   r^   r   boolrE   r   r   r   r   r   rD   r   classmethodri   r!   r   r   __static_attributes____classcell__)r   s   @r   r	   r	      s     KHJ%  %-$-^!
+$#84"
$
'
:d :. >	!
X   $7 $7L$ $r   r	   c                    [        U [        5      (       dh  [        U [        [        [        45      (       a  [        U 5      " S U  5       5      $ [        U 5      n [        U [        5      (       d  [        SU < S35      e[        R                  S:X  a  U R                  S5      (       a  U $ U R                  S5      (       a  [        R                  " U 5      $ U R                  S5      (       a  U SS n OU S	:X  a  S
n [        R                  " 5        SU  3$ U SS S:X  a  U SS S:X  a  U SS n U SS S:X  a+  [        U 5      S::  a  U S   S-   $ U R                  SS5      n U $ U SS S:X  a  [!        [        R                  " U 5      5      $ U R                  S5      (       a  SU SS R                  SS5      -   $ U R                  S5      (       aB  U R                  SS5      n [        R"                  " [        R                  " 5       5      S    U  3$ U R                  SS5      n U R                  S5      (       a  U SS n OU S	:X  a  S
n [!        [        R                  " 5       5       SU  3$ )z-Make path generic and absolute for current OSc              3   8   #    U  H  n[        U5      v   M     g 7fr-   )r   ).0r   s     r   	<genexpr>"make_path_posix.<locals>.<genexpr>%  s     ?$Qoa00$s   zcould not convert z
 to stringr   ~z./r   N.r   r   r   r   r   r   \)z\\r   r   )r   r   )rN   strr   settupler2   r   	TypeErrorr%   r   r   re   
expanduserr   r   replacer   
splitdriver   s    r   r   r   !  s'   dC  dT3.//:?$???!$'DdC(("4THJ GHH	vv}??3K__S!!>>$''__T""8DS[D))+av&& !9Qq	S 08D!94yA~Aw~%<<c*DK!AY#"3>>$#788__^,,$qr(**4555__[))<<c*DnnRYY[1!45dV<<<<c*Dt$$ABx%biik231TF;;r   c                     U R                  [        R                  5      =(       d8    [        R                  SL=(       a    U R                  [        R                  5      $ )zReturn True if the path ends with a path separator.

A forward slash is always considered a path separator, even on Operating
Systems that normally use a backslash.
N)endswithr%   r   altsepr   s    r   trailing_sepr  T  s7     == XRYYd%:%Wt}}RYY?WXr   c                       \ rS rSr SS jrS rS rS rS rS r	S	 r
S
\4S jrS
\4S jrS rS rS rS rS rS rS rS rSS
\4S jjr\S 5       rS rS S jrS rS rS rS rSr g)!r   i`  Nc                     [         R                  SU5        Xl        X l        X@l        S U l        X0l        [        X5      U l        [        R                  U l        U R                  5         g )Nzopen file: %s)loggerdebugr'   rF   r   r<   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r'   rF   r  r   r  r   s          r   r   LocalFileOpener.__init__a  sP     	_d+		$*4=//

r   c                    U R                   b  U R                   R                  (       Ga=  U R                  (       d  SU R                  ;  ah  [	        U R
                  U R                  S9U l         U R                  (       a3  [        U R                     nU" U R                   U R                  S9U l         OK[        R                  " 5       u  p#[        R                  " U5        X0l        [	        X0R                  S9U l         SU R                  ;  aX  U R                   R                  SS5      U l        U R                   R                  S5        U R                  U R                   l        g g g )Nr   rF   r   r   )r<   closedr  rF   rz   r'   r  r   tempfilemkstempr%   r   tempseekrC   )r   compressr=   r4   s       r   r   LocalFileOpener._openn  s    66>TVV]]]#TYY"6diidii8##$T%5%56H%dff499=DF #**, 	d3$))# FFKK1-	A"ii $ +r   c                     SU R                   ;  a  [        eU R                  5         U R                  R	                  U5        U R                  R                  X!-
  5      $ Nr)rF   r   r   r<   r  read)r   startends      r   _fetch_rangeLocalFileOpener._fetch_range  sB    dii

Evv{{3;''r   c                     S U l         UR                  SS 5      nU R                  R                  U5        SUS   ;   a3  S U l         U R	                  5         U R                   R                  U5        g g )Nlocr  rF   )r<   pop__dict__updater   r  )r   stater  s      r   __setstate__LocalFileOpener.__setstate__  s\    iit$U#%-DFJJLFFKK  r   c                    U R                   R                  5       nUR                  S5        SU R                  ;   a  U R                  R                  5       US'   U$ U R                  R                  (       d  [        S5      eU$ )Nr<   r  r  z+Cannot serialise open write-mode local file)r!  copyr   rF   r<   tellr  r   )r   ds     r   __getstate__LocalFileOpener.__getstate__  sc    MM 	c
$))vv{{}AeH  66== !NOOr   c                     U R                   (       a  [        S5      e[        R                  " U R                  U R
                  5        g )Nz0Can only commit if not already set to autocommit)r  RuntimeErrorrk   r   r  r'   r   s    r   commitLocalFileOpener.commit  s+    ??QRRDIItyy)r   c                 |    U R                   (       a  [        S5      e[        R                  " U R                  5        g )Nz#Cannot discard if set to autocommit)r  r-  r%   r   r  r   s    r   discardLocalFileOpener.discard  s%    ??DEE
		$))r   r   c                     gr   r   r   s    r   readableLocalFileOpener.readable  s    r   c                      SU R                   ;  $ r  r  r   s    r   writableLocalFileOpener.writable  s    $))##r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   r  r   argsr   s      r   r  LocalFileOpener.read      vv{{D+F++r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   writer:  s      r   r?  LocalFileOpener.write  s    vv||T,V,,r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   r(  r:  s      r   r(  LocalFileOpener.tell  r=  r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   r  r:  s      r   r  LocalFileOpener.seek  r=  r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   seekabler:  s      r   rF  LocalFileOpener.seekable      vv///r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   readliner:  s      r   rJ  LocalFileOpener.readline  rH  r   c                 :    U R                   R                  " U0 UD6$ r-   )r<   	readlinesr:  s      r   rM  LocalFileOpener.readlines  s    vv000r   c                 6    U R                   R                  5       $ r-   )r<   r   r   s    r   r   LocalFileOpener.close  s    vv||~r   c                 8    U R                   R                  U5      $ r-   )r<   r   )r   rC   s     r   r   LocalFileOpener.truncate  s    vvt$$r   c                 .    U R                   R                  $ r-   )r<   r  r   s    r   r  LocalFileOpener.closed  s    vv}}r   c                 6    U R                   R                  5       $ r-   )rawfilenor   s    r   rW  LocalFileOpener.fileno  s    xx  r   c                 8    U R                   R                  5         g r-   )r<   flushr   s    r   rZ  LocalFileOpener.flush  s    r   c                 6    U R                   R                  5       $ r-   )r<   __iter__r   s    r   r]  LocalFileOpener.__iter__  s    vv  r   c                 .    [        U R                  U5      $ r-   )r[   r<   )r   items     r   __getattr__LocalFileOpener.__getattr__  s    tvvt$$r   c                     SU l         U $ r   )
_incontextr   s    r   	__enter__LocalFileOpener.__enter__  s    r   c                 J    SU l         U R                  R                  XU5        g )NF)rd  r<   __exit__)r   exc_type	exc_value	tracebacks       r   rh  LocalFileOpener.__exit__  s    Y7r   )
rd  r  r  r  r<   r   rF   r'   rC   r  )TNNr-   )r   N)!r   r   r   r   r   r   r  r$  r*  r.  r1  r   r4  r7  r  r?  r(  r  rF  rJ  rM  r   intr   r   r  rW  rZ  r]  ra  re  rh  r   r   r   r   r   r   `  s    @D($(*

$ $$ $,-,,001%S %  !!%8r   r   )r   r	  loggingr%   os.pathr'   re   rk   rP   r  fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr  r	   r   r  IOBaser   r   r   r   <module>rv     sg     	  	     % $ ' 3			>	*L$( L$^0<f	Y|8bii |8r   