Ë
    #täi)  ã                  óÔ   — d dl mZ d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ  ej*                  d«      Z G d„ de«      Z G d„ de«      Zy)é    )ÚannotationsN)ÚdatetimeÚtimezone)Ú	ENOTEMPTY)ÚBytesIO)ÚPurePathÚPureWindowsPath)ÚAnyÚClassVar)ÚAbstractFileSystem)ÚLocalFileSystem)Ústringify_pathzfsspec.memoryfsc                  ó¨   — e Zd ZU dZi Zded<   dgZdZdZe	d„ «       Z
dd„Zdd	„Zdd
„Zdd„Zd„ Zd„ Z	 	 	 	 dd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdd„Zy)ÚMemoryFileSystemz A filesystem based on a dict of BytesIO objects

    This is a global filesystem so instances of this class all point to the same
    in memory filesystem.
    zClassVar[dict[str, Any]]ÚstoreÚ ÚmemoryÚ/c                ó(  — t        |t        «      r0t        |t        «      rt        j                  |«      S t        |«      }|j                  d«      }d|v sd|v r|j                  d«      S |j                  d«      j                  d«      }|rd|z   S dS )Nz	memory://z::z://r   r   )	Ú
isinstancer   r	   r   Ú_strip_protocolr   ÚremoveprefixÚrstripÚlstrip)ÚclsÚpaths     úl/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/fsspec/implementations/memory.pyr   z MemoryFileSystem._strip_protocol   s‡   € ä�dœHÔ%Ü˜$¤Ô0Ü&×6Ñ6°tÓ<Ð<ä% dÓ+�à× Ñ  Ó-ˆØ�4‰<˜5 D™=Ø—;‘;˜sÓ#Ð#Ø�{‰{˜3Ó×&Ñ& sÓ+ˆÙ!ˆs�T‰zÐ) rÐ)ó    c                óÌ  — | j                  |«      }|| j                  v rI|s|gS || j                  |   j                  d| j                  |   j                  j	                  «       dœgS t        «       }|dz   }g }t        | j                  «      D ]ä  }|j                  |«      sŒd|t        |«      d  vrS|j                  || j                  |   j                  d| j                  |   j                  j	                  «       dœ«       Œxt        |«      t        |«      kD  sŒ�||t        |«      d  j                  dd«      d   z   }||vsŒ¹|xs g }|j                  |dddœ«       |j                  |«       Œæ | j                  D ]Ÿ  }|j                  |«      sŒd|t        |«      d  vr,||vsŒ*|j                  |dddœ«       |j                  |«       ŒQ||t        |«      d  j                  dd«      d   z   }||vsŒz|j                  |dddœ«       |j                  |«       Œ¡ |s|| j                  v rg S t        |«      ‚|r|S t        |D �	cg c]  }	|	d   ‘Œ	 c}	«      S c c}	w )	NÚfile©ÚnameÚsizeÚtypeÚcreatedr   é   r   Ú	directory©r"   r#   r$   r"   )r   r   r#   r%   Ú	timestampÚsetÚtupleÚ
startswithÚlenÚappendÚsplitÚaddÚpseudo_dirsÚFileNotFoundErrorÚsorted)
Úselfr   ÚdetailÚkwargsÚpathsÚstarterÚoutÚp2ÚppathÚfs
             r   ÚlszMemoryFileSystem.ls+   s[  € Ø×#Ñ# DÓ)ˆØ�4—:‘:ÑáØ�v�ð !Ø ŸJ™J tÑ,×1Ñ1Ø"Ø#Ÿz™z¨$Ñ/×7Ñ7×AÑAÓCñ	ðð ô “ˆØ˜‘*ˆØˆÜ˜Ÿ
™
Ö#ˆBØ�}‰}˜WÕ%Ø˜b¤ W£ Ð0Ñ0à—J‘Jà$&Ø$(§J¡J¨r¡N×$7Ñ$7Ø$*Ø'+§z¡z°"¡~×'=Ñ'=×'GÑ'GÓ'Iñ	õô ˜“Wœs 7›|Ó+à# b¬¨W«¨Ð&8×&>Ñ&>¸sÀAÓ&FÀqÑ&IÑI�EØ EÒ)Ø!ši R˜ØŸ
™
à(-Ø()Ø(3ñôð Ÿ	™	 %Õ(ð1 $ð2 ×"Ô"ˆBØ�}‰}˜WÕ%Ø˜b¤ W£ Ð0Ñ0à ’ØŸ
™
¨B¸À;Ñ#OÔPØŸ	™	 "�ð $ b¬¨W«¨Ð&8×&>Ñ&>¸sÀAÓ&FÀqÑ&IÑI�EØ EÒ)ØŸ
™
¨E¸1ÀkÑ#RÔSØŸ	™	 %Õ(ð #ñ Ø�t×'Ñ'Ñ'à�	Ü# DÓ)Ð)ÙØˆJÜ©#Ó.©# Q�q˜“y¨#Ñ.Ó/Ð/ùÒ.s   ÉI!c                ó,  — | j                  |«      }|| j                  v s|| j                  v rt        |«      ‚| j	                  |«      j                  d«      r:| j                  | j	                  |«      «      rt        | j	                  |«      «      ‚|rD| j	                  |«      j                  d«      r$	  | j                  | j	                  |«      |fi |¤Ž |r+|| j                  vr| j                  j                  |«       y y y # t        $ r Y Œ9w xY w)Nr   )
r   r   r1   ÚFileExistsErrorÚ_parentÚstripÚisfileÚNotADirectoryErrorÚmkdirr.   )r4   r   Úcreate_parentsr6   s       r   rD   zMemoryFileSystem.mkdirk   sò   € Ø×#Ñ# DÓ)ˆØ�4—:‘:Ñ ¨×)9Ñ)9Ñ!9Ü! $Ó'Ð'Ø�<‰<˜Ó×#Ñ# CÔ(¨T¯[©[¸¿¹ÀdÓ9KÔ-LÜ$ T§\¡\°$Ó%7Ó8Ð8Ù˜dŸl™l¨4Ó0×6Ñ6°sÔ;ðØ�—
‘
˜4Ÿ<™<¨Ó-¨~ÑHÀÒHñ �D × 0Ñ 0Ñ0Ø×Ñ×#Ñ# DÕ)ð 1ˆ4øô #ò Ùðús   Â6#D Ä	DÄDc                óP   — 	 | j                  |d¬«       y # t        $ r |s‚ Y y w xY w)NT)rE   )rD   r?   )r4   r   Úexist_oks      r   ÚmakedirszMemoryFileSystem.makedirsy   s1   € ð	Ø�J‰J�t¨DˆJÕ1øÜò 	ÙØñ ð	ús   ‚ –%¤%c                ó>   — |dk(  rdnd}| j                  |||¬«       y)zSSet the bytes of given file

        Avoids copies of the data if possible
        ÚcreateÚxbÚwb)ÚmodeÚdataN)Úopen)r4   r   ÚvaluerM   r6   s        r   Ú	pipe_filezMemoryFileSystem.pipe_file€   s$   € ð
 ˜xÒ'‰t¨TˆØ�	‰	�$˜T¨ˆ	Õ.r   c                óÞ   — | j                  |«      }|dk(  ry || j                  v r>| j                  |«      s| j                  j                  |«       y t	        t
        d|«      ‚t        |«      ‚)Nr   zDirectory not empty)r   r1   r=   ÚremoveÚOSErrorr   r2   ©r4   r   s     r   ÚrmdirzMemoryFileSystem.rmdirˆ   sd   € Ø×#Ñ# DÓ)ˆØ�2Š:àØ�4×#Ñ#Ñ#Ø—7‘7˜4”=Ø× Ñ ×'Ñ'¨Õ-äœiÐ)>ÀÓEÐEä# DÓ)Ð)r   c                ój  ‡— t         j                  d‰«       | j                  ‰«      Š‰| j                  v s4t	        ˆfd„t        | j                  «      | j                  z   D «       «      r‰dddœS ‰| j                  v r+| j                  ‰   }‰|j                  dt        |dd «      dœS t        ‰«      ‚)	Nzinfo: %sc              3  óF   •K  — | ]  }|j                  ‰d z   «      –— Œ y­w)r   N)r,   )Ú.0Úpr   s     €r   Ú	<genexpr>z(MemoryFileSystem.info.<locals>.<genexpr>˜   s#   øè ø€ ð +
Ù.Q¨ˆA�L‰L˜ ™×$Ñ.Qùs   ƒ!r   r'   r(   r    r%   r!   )
ÚloggerÚdebugr   r1   ÚanyÚlistr   r#   Úgetattrr2   )r4   r   r6   Úfilelikes    `  r   ÚinfozMemoryFileSystem.info•   s¸   ø€ Ü�‰�Z Ô&Ø×#Ñ# DÓ)ˆØ�4×#Ñ#Ñ#¤só +
Ü.2°4·:±:Ó.>À×AQÑAQÒ.Qó+
ô (
ð ØØ#ñð ð
 �T—Z‘ZÑØ—z‘z $Ñ'ˆHàØ Ÿ™ØÜ" 8¨Y¸Ó=ñ	ð ô $ DÓ)Ð)r   Nc                óÒ  — | j                  |«      }d|v r| j                  |«      rt        ‚|| j                  v rt	        |«      ‚|}t        |«      dkD  r<| j                  |«      }| j                  |«      rt        |«      ‚t        |«      dkD  rŒ<|dv rS|| j                  v r:| j                  |   }d|v r|j                  dd«       |S |j                  d«       |S t        |«      ‚|dv rUd|v r| j                  |«      rt        ‚t        | ||j                  d«      «      }	| j                  s|	j                  «        |	S | j                  j                   }
t#        d	|
› d
|›�«      ‚)NÚxr&   )ÚrbÚabzr+bza+bÚar   é   >   úw+búx+brL   rK   rN   zunsupported file mode for z: )r   Úexistsr?   r1   ÚIsADirectoryErrorr-   r@   rB   r   Úseekr2   Ú
MemoryFileÚgetÚ_intransÚcommitÚ	__class__Ú__name__Ú
ValueError)r4   r   rM   Ú
block_sizeÚ
autocommitÚcache_optionsr6   Úparentr<   Úmr"   s              r   Ú_openzMemoryFileSystem._open«   sY  € ð ×#Ñ# DÓ)ˆØ�$‰;˜4Ÿ;™; tÔ,Ü!Ð!Ø�4×#Ñ#Ñ#Ü# DÓ)Ð)ØˆÜ�&‹k˜AŠoØ—\‘\ &Ó)ˆFØ�{‰{˜6Ô"Ü% fÓ-Ð-ô �&‹k˜A‹oð Ð-Ñ-Ø�t—z‘zÑ!Ø—J‘J˜tÑ$�Ø˜$‘;à—F‘F˜1˜a”Lð �ð —F‘F˜1”IØ�ä'¨Ó-Ð-ØÐ/Ñ/Ø�d‰{˜tŸ{™{¨4Ô0Ü%Ð%Ü˜4  v§z¡z°&Ó'9Ó:ˆAØ—=’=Ø—‘”
ØˆHà—>‘>×*Ñ*ˆDÜÐ9¸$¸¸rÀ$ÀÐJÓKÐKr   c                ób  — | j                  |«      }| j                  |«      }| j                  |«      r6t        | || j                  |   j	                  «       «      | j                  |<   y | j                  |«      r+|| j                  vr| j                  j                  |«       y y t        |«      ‚©N)	r   rB   rn   r   ÚgetvalueÚisdirr1   r.   r2   )r4   Úpath1Úpath2r6   s       r   Úcp_filezMemoryFileSystem.cp_fileÕ   sœ   € Ø×$Ñ$ UÓ+ˆØ×$Ñ$ UÓ+ˆØ�;‰;�uÔÜ *Ø�e˜TŸZ™Z¨Ñ.×7Ñ7Ó9ó!ˆD�J‰J�uÒð �Z‰Z˜ÔØ˜D×,Ñ,Ñ,Ø× Ñ ×'Ñ'¨Õ.ð -ô $ EÓ*Ð*r   c                óÞ   — t         j                  d|«       | j                  |«      }	 t        | j                  |   j                  «       || «      S # t        $ r}t        |«      |‚d }~ww xY w)Nzcat: %s)r\   r]   r   Úbytesr   Ú	getbufferÚKeyErrorr2   )r4   r   ÚstartÚendr6   Úes         r   Úcat_filezMemoryFileSystem.cat_fileâ   sf   € Ü�‰�Y Ô%Ø×#Ñ# DÓ)ˆð	1Ü˜Ÿ™ DÑ)×3Ñ3Ó5°e¸CÐ@ÓAÐAøÜò 	1Ü# DÓ)¨qÐ0ûð	1ús   ©(A Á	A,ÁA'Á'A,c                ó|   — | j                  |«      }	 | j                  |= y # t        $ r}t        |«      |‚d }~ww xY wr|   )r   r   r…   r2   ©r4   r   rˆ   s      r   Ú_rmzMemoryFileSystem._rmê   s@   € Ø×#Ñ# DÓ)ˆð	1Ø—
‘
˜4Ñ øÜò 	1Ü# DÓ)¨qÐ0ûð	1ús   “! ¡	;ª6¶;c                ó’   — | j                  |«      }	 | j                  |   j                  S # t        $ r}t	        |«      |‚d }~ww xY wr|   )r   r   Úmodifiedr…   r2   r‹   s      r   rŽ   zMemoryFileSystem.modifiedñ   sI   € Ø×#Ñ# DÓ)ˆð	1Ø—:‘:˜dÑ#×,Ñ,Ð,øÜò 	1Ü# DÓ)¨qÐ0ûð	1úó   “, ¬	AµAÁAc                ó’   — | j                  |«      }	 | j                  |   j                  S # t        $ r}t	        |«      |‚d }~ww xY wr|   )r   r   r%   r…   r2   r‹   s      r   r%   zMemoryFileSystem.createdø   sI   € Ø×#Ñ# DÓ)ˆð	1Ø—:‘:˜dÑ#×+Ñ+Ð+øÜò 	1Ü# DÓ)¨qÐ0ûð	1úr�   c                ó@   — | j                  |«      }|| j                  v S r|   )r   r   rU   s     r   rB   zMemoryFileSystem.isfileÿ   s!   € Ø×#Ñ# DÓ)ˆØ�t—z‘zÐ!Ð!r   c                ób  — t        |t        «      r| j                  |«      }n|D �cg c]  }| j                  |«      ‘Œ }}| j                  |||¬«      }t	        |«      D ]H  }| j                  |«      r| j                  |«       Œ&| j                  |«      sŒ8| j                  |«       ŒJ y c c}w )N)Ú	recursiveÚmaxdepth)	r   Ústrr   Úexpand_pathÚreversedrB   Úrm_filerk   rV   )r4   r   r“   r”   rZ   r7   s         r   ÚrmzMemoryFileSystem.rm  s–   € Ü�dœCÔ Ø×'Ñ'¨Ó-‰Dá59Ó:±T°�D×(Ñ(¨Õ+°TˆDÐ:Ø× Ñ  °ÀXÐ ÓNˆÜ˜%–ˆAØ�{‰{˜1Œ~Ø—‘˜Q•ð
 —[‘[ ”^Øà—
‘
˜1•ñ !ùò ;s   §B,)T)F)Ú	overwrite)re   NTN)NN)FN)rs   Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r1   ÚprotocolÚroot_markerÚclassmethodr   r=   rD   rH   rQ   rV   rb   rz   r�   r‰   rŒ   rŽ   r%   rB   r™   © r   r   r   r      sŽ   … ñð ')€EÐ#Ó(Ø�$€KØ€HØ€Kàñ*ó ð*ó>0ó@*óó/ò*ò*ð2 ØØØó(LòT+ó1ò1ò1ò1ò"ôr   r   c                  óL   ‡ — e Zd ZdZdˆ fd„	Zed„ «       Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	rn   zÐA BytesIO which can't close and works as a context manager

    Can initialise with data. Each path should only be active once at any moment.

    No need to provide fs, path if auto-committing (default)
    c                ó8  •— t         j                  d|«       || _        || _        t	        j
                  t        j                  ¬«      | _        t	        j
                  t        j                  ¬«      | _	        |r!t        ‰| �-  |«       | j                  d«       y y )Nzopen file %s©Útzr   )r\   r]   Úfsr   r   Únowr   Úutcr%   rŽ   ÚsuperÚ__init__rm   )r4   r§   r   rN   rr   s       €r   r«   zMemoryFile.__init__  sg   ø€ Ü�‰�^ TÔ*ØˆŒØˆŒ	Ü—|‘|¤x§|¡|Ô4ˆŒÜ Ÿ™¬¯©Ô5ˆŒÙÜ‰GÑ˜TÔ"Ø�I‰I�a�Lð r   c                ó6   — | j                  «       j                  S r|   )r„   Únbytes©r4   s    r   r#   zMemoryFile.size(  s   € à�~‰~Ó×&Ñ&Ð&r   c                ó   — | S r|   r¢   r®   s    r   Ú	__enter__zMemoryFile.__enter__,  s   € Øˆr   c                 ó   — y r|   r¢   r®   s    r   ÚclosezMemoryFile.close/  ó   € Ør   c                 ó   — y r|   r¢   r®   s    r   ÚdiscardzMemoryFile.discard2  r³   r   c                óœ   — | | j                   j                  | j                  <   t        j                  t
        j                  ¬«      | _        y )Nr¥   )r§   r   r   r   r¨   r   r©   rŽ   r®   s    r   rq   zMemoryFile.commit5  s,   € Ø#'ˆ�‰�‰�d—i‘iÑ Ü Ÿ™¬¯©Ô5ˆ�r   )NNN)rs   r›   rœ   r�   r«   Úpropertyr#   r°   r²   rµ   rq   Ú__classcell__)rr   s   @r   rn   rn     s5   ø„ ñõð ñ'ó ð'òòòö6r   rn   )Ú
__future__r   Úloggingr   r   Úerrnor   Úior   Úpathlibr   r	   Útypingr
   r   Úfsspecr   Úfsspec.implementations.localr   Úfsspec.utilsr   Ú	getLoggerr\   r   rn   r¢   r   r   Ú<module>rÃ      sR   ðÝ "ã ß 'Ý Ý ß -ß  å %Ý 8Ý 'à	ˆ×	Ñ	Ð,Ó	-€ôBÐ)ô BôJ!6�õ !6r   