Ë
    #täi.À  ã                   ó(  — 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	 d dl
mZmZ d dlZd dlmZ 	 d dlZd dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZmZm Z   ejB                  d«      Z" G d„ de#«      Z$d„ Z%d„ Z&d„ Z' G d„ dejP                  jR                  «      Z* G d„ dejP                  jV                  «      Z,d„ Z- G d„ dejP                  j\                  «      Z/ G d„ de«      Z0 G d„ de«      Z1y# e$ r	 esd dlZY ŒÐw xY w)é    N)Ú	lru_cache)Úchain)ÚTYPE_CHECKINGÚLiteral)ÚAbstractBufferedFile)ÚAsyncFileSystem)ÚDEFAULT_CALLBACK)Ú
filesystemÚopenÚsplit_protocol)ÚAsyncFileSystemWrapper)Ú
isfilelikeÚmerge_offset_rangesÚother_pathszfsspec.referencec                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚReferenceNotReachablec                 ó:   •— t        ‰| �  |Ž  || _        || _        y ©N)ÚsuperÚ__init__Ú	referenceÚtarget)Úselfr   r   ÚargsÚ	__class__s       €úo/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/fsspec/implementations/reference.pyr   zReferenceNotReachable.__init__#   s   ø€ Ü‰Ñ˜$ÑØ"ˆŒØˆ�ó    c                 ó:   — d| j                   › d| j                  › �S )NzReference "z" failed to fetch target )r   r   ©r   s    r   Ú__str__zReferenceNotReachable.__str__(   s   € Ø˜TŸ^™^Ð,Ð,EÀdÇkÁkÀ]ÐSÐSr   )Ú__name__Ú
__module__Ú__qualname__r   r    Ú__classcell__©r   s   @r   r   r   "   s   ø„ ôö
Tr   r   c                 óF   — t        t        | j                  «       «      «      S r   )ÚnextÚiterÚvalues)Úds    r   Ú_firstr+   ,   s   € Ü”�Q—X‘X“ZÓ Ó!Ð!r   c                 ó°   — |j                  | «      }t        |t        t        f«      r/t        |d   t        «      r|d   rt        |d   «      d   S |d   S y y ©Nr   )ÚgetÚ
isinstanceÚlistÚtupleÚstrr   )ÚpathÚ
referencesÚrefs      r   Ú_prot_in_referencesr6   0   sW   € Ø
�.‰.˜Ó
€CÜ�#œœe�}Ô%¬*°S¸±V¼SÔ*AØ,/°ªFŒ~˜c !™fÓ% aÑ(Ð>¸¸A¹Ð>ð +BÐ%r   c                 ó°   — t        | t        «      rt        | |«      | giS i }| D ]/  }t        ||«      }|j                  |g «      j	                  |«       Œ1 |S r   )r/   r2   r6   Ú
setdefaultÚappend)Úpathsr4   Úoutr3   Úprotocols        r   Ú_protocol_groupsr=   6   s[   € Ü�%œÔÜ# E¨:Ó6¸¸Ð@Ð@Ø
€CÛˆÜ& t¨ZÓ8ˆØ�‰�x Ó$×+Ñ+¨DÕ1ð ð €Jr   c                   ó   — e Zd Zd„ Zy)ÚRefsValuesViewc              #   ó  K  — | j                   j                  j                  «       D ]'  }t        j                  |«      j                  «       –— Œ) | j                   j                  j                  «       E d {  –—†  | j                   j                  «       D ]c  }| j                   j                  |«      }t        |«      dk(  r| j                   |dz      –— ŒA| j                   j                  |«      E d {  –—†  Œe y 7 Œ…7 Œ	­w)Nr   ú/0)Ú_mappingÚ	zmetadatar)   ÚjsonÚdumpsÚencodeÚ_itemsÚlistdirÚ_get_chunk_sizesÚlenÚ_generate_all_records)r   ÚvalÚfieldÚchunk_sizess       r   Ú__iter__zRefsValuesView.__iter__A   sÈ   è ø€ Ø—=‘=×*Ñ*×1Ñ1Ö3ˆCÜ—*‘*˜S“/×(Ñ(Ó*Ó*ð 4à—=‘=×'Ñ'×.Ñ.Ó0×0Ð0Ø—]‘]×*Ñ*Ö,ˆEØŸ-™-×8Ñ8¸Ó?ˆKÜ�;Ó 1Ò$Ø—m‘m E¨D¡LÑ1Ò1ØØ—}‘}×:Ñ:¸5ÓA×AÑAñ -ð 	1øð Bús%   ‚A6DÁ8C>Á9A=DÃ6D Ã7DÄ DN©r!   r"   r#   rO   © r   r   r?   r?   @   s   „ ó	Br   r?   c                   ó   — e Zd Zd„ Zy)ÚRefsItemsViewc                 óz   — t        | j                  j                  «       | j                  j                  «       «      S r   )ÚziprB   Úkeysr)   r   s    r   rO   zRefsItemsView.__iter__N   s)   € Ü�4—=‘=×%Ñ%Ó'¨¯©×)=Ñ)=Ó)?Ó@Ð@r   NrP   rQ   r   r   rS   rS   M   s   „ óAr   rS   c                 óh   — d}d}t        | d d d…   |d d d…   «      D ]  \  }}|||z  z  }||z  }Œ |S )Nr   é   éÿÿÿÿ)rU   )ÚidxÚsizesrL   ÚmultÚiÚss         r   Úravel_multi_indexr_   R   sN   € Ø
€CØ€DÜ�C™˜"˜‘I˜u¡T r T™{Ö+‰ˆˆ1Øˆq�4‰x‰ˆØ�‰	‰ð ,ð €Jr   c                   óô   — e Zd ZdZed„ «       Zed„ «       Z	 	 	 	 	 dded   fd„Zd„ Z	d	„ Z
ed d
„«       Zd„ Zd!d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zd„ Zd"d„Zd"d„Zd„ Zd„ Zd„ Zd„ Z y)#ÚLazyReferenceMapperao  This interface can be used to read/write references from Parquet stores.
    It is not intended for other types of references.
    It can be used with Kerchunk's MultiZarrToZarr method to combine
    references into a parquet store.
    Examples of this use-case can be found here:
    https://fsspec.github.io/kerchunk/advanced.html?highlight=parquet#parquet-storagec                 ó   — dd l }|S r-   )Únumpy)r   Únps     r   rd   zLazyReferenceMapper.npd   s
   € ãàˆ	r   c                 ó   — dd l }|S r-   )Úpandas)r   Úpds     r   rg   zLazyReferenceMapper.pdj   s
   € ãàˆ	r   NÚengine)ÚfastparquetÚpyarrowc                 óÚ  — || _         i | _        || _        || _        || _        | j                   dz   | _        |€t        j                  d«      n|| _        | j                  j                  |xs | j                   «      | _
        ddlm} | j                  dk(  r |d«      €t        d«      ‚ t        «       | j                  «      | _         t        d¬	«      | j                   «      | _        y)
aà  

        This instance will be writable, storing changes in memory until full partitions
        are accumulated or .flush() is called.

        To create an empty lazy store, use .create()

        Parameters
        ----------
        root : str
            Root of parquet store
        fs : fsspec.AbstractFileSystem
            fsspec filesystem object, default is local filesystem.
        cache_size : int, default=128
            Maximum size of LRU cache, where cache_size*record_size denotes
            the total number of references that can be loaded in memory at once.
        categorical_threshold : int
            Encode urls as pandas.Categorical to reduce memory footprint if the ratio
            of the number of unique urls to total number of refs for each variable
            is greater than or equal to this number. (default 10)
        engine: Literal["fastparquet","pyarrow"]
            Engine choice for reading parquet files. (default is "fastparquet")
        z/{field}/refs.{record}.parqNÚfiler   )Ú	find_specrj   z)engine choice `pyarrow` is not installed.i   ©Úmaxsize)ÚrootrN   Ú
cat_threshrh   Ú
cache_sizeÚurlÚfsspecr
   ÚfsÚunstrip_protocolÚout_rootÚimportlib.utilrm   ÚImportErrorr   rH   Ú_key_to_record)r   rp   ru   rw   rr   Úcategorical_thresholdrh   rm   s           r   r   zLazyReferenceMapper.__init__p   sÆ   € ðB ˆŒ	ØˆÔØ/ˆŒØˆŒØ$ˆŒØ—9‘9Ð<Ñ<ˆŒà/1¨z”&×#Ñ# FÔ+¸rˆŒØŸ™×0Ñ0°Ò1F¸T¿Y¹YÓGˆŒå,à�;‰;˜)Ò#©	°)Ó(<Ð(DÜÐIÓJÐJð #”y“{ 4§<¡<Ó0ˆŒØ5œi°Ô5°d×6IÑ6IÓJˆÕr   c                 ó^   — |dv r| j                  «        | j                  |   S t        |«      ‚)N)rG   Úrecord_sizerC   )ÚsetupÚ__dict__ÚAttributeError©r   Úitems     r   Ú__getattr__zLazyReferenceMapper.__getattr__§   s.   € ØÐ9Ñ9Ø�J‰JŒLà—=‘= Ñ&Ð&Ü˜TÓ"Ð"r   c                 óP  ‡ — i ‰ _         ‰ j                  j                  dj                  ‰ j                  dg«      «      ‰ j                   d<   t        j                  ‰ j                   d   «      }|d   ‰ _        |d   ‰ _        t        ‰ j                  ¬«      ˆ fd„«       }|‰ _        y )NÚ/ú
.zmetadatar}   Úmetadatarn   c                 ór  •— ‰j                   j                  | |¬«      }t        j                  ‰j                  j                  |«      «      }	 ‰j                  j                  |‰j                  ¬«      }|j                  D �ci c]  }|||   j                  «       “Œ }}|S c c}w # t        $ r d}Y |S w xY w)zcached parquet file loader)rM   Úrecord)rh   N)rs   ÚformatÚioÚBytesIOru   Úcat_filerg   Úread_parquetrh   ÚcolumnsÚto_numpyÚOSError)rM   r‰   r3   ÚdataÚdfÚcÚrefsr   s          €r   Ú	open_refsz,LazyReferenceMapper.setup.<locals>.open_refs¸   s¨   ø€ ð —8‘8—?‘?¨°v�?Ó>ˆDÜ—:‘:˜dŸg™g×.Ñ.¨tÓ4Ó5ˆDðØ—W‘W×)Ñ)¨$°t·{±{Ð)ÓC�Ø57·Z²ZÓ@±Z°˜˜2˜a™5Ÿ>™>Ó+Ñ+°Z�Ð@ð ˆKùò AøÜò Ø‘ØˆKðús$   Á5B' ÂB"ÂB' Â"B' Â'B6Â5B6)rG   ru   r�   Újoinrp   rD   Úloadsr}   rC   r   rr   r–   )r   Úmetr–   s   `  r   r~   zLazyReferenceMapper.setup®   s“   ø€ ØˆŒØ$(§G¡G×$4Ñ$4Ø�H‰H�d—i‘i Ð.Ó/ó%
ˆ�‰�LÑ!ô �j‰j˜Ÿ™ \Ñ2Ó3ˆØ˜}Ñ-ˆÔØ˜Z™ˆŒô 
˜4Ÿ?™?Ô	+ó		ó 
,ð		ð #ˆ�r   c                 ón  — i |dœ}|€'t        j                  j                  | fi |xs i ¤Ž\  }} |j                  | «      r|j	                  | d¬«       |j                  | d¬«       |j                  dj                  | dg«      t        j                  |«      j                  «       «       t        | |fi |¤ŽS )aJ  Make empty parquet reference set

        First deletes the contents of the given directory, if it exists.

        Parameters
        ----------
        root: str
            Directory to contain the output; will be created
        storage_options: dict | None
            For making the filesystem to use for writing is fs is None
        fs: FileSystem | None
            Filesystem for writing
        record_size: int
            Number of references per parquet file
        kwargs: passed to __init__

        Returns
        -------
        LazyReferenceMapper instance
        ©r‡   r}   T©Ú	recursive©Úexist_okr…   r†   )rt   ÚcoreÚ	url_to_fsÚexistsÚrmÚmakedirsÚpiper—   rD   rE   rF   ra   )rp   Ústorage_optionsru   r}   Úkwargsr™   s         r   ÚcreatezLazyReferenceMapper.createÆ   sŸ   € ð, ¨kÑ:ˆØˆ:Ü—{‘{×,Ñ,¨TÑM°oÒ6KÈÑM‰HˆB�Ø�9‰9�TŒ?Ø�E‰E�$ $ˆEÔ'Ø
�‰�D 4ˆÔ(Ø
�‰�—‘˜$ Ð-Ó.´·
±
¸3³×0FÑ0FÓ0HÔIÜ" 4¨Ñ6¨vÑ6Ð6r   c                 ó>   — d„ | j                   D «       }t        |«      S )zList top-level directoriesc              3   ój   K  — | ]+  }|j                  d «      rŒ|j                  dd«      d   –— Œ- y­w)ú.zr…   rX   r   N)Ú
startswithÚrsplit©Ú.0Úps     r   Ú	<genexpr>z.LazyReferenceMapper.listdir.<locals>.<genexpr>ç   s-   è ø€ ÐV©^¨À1Ç<Á<ÐPTÕCU�—‘˜˜aÓ  Õ#©^ùs   ‚3™3)rC   Úset)r   Údirss     r   rH   zLazyReferenceMapper.listdirå   s   € áV¨T¯^ª^ÓVˆÜ�4‹yÐr   c                 ól  — |j                  d«      }|r|dz   nd}| j                  «       }|D �cg c](  }|j                  |«      rd|j                  |«      vr|‘Œ* }}|rþt	        dgd„ | j
                  D «       d„ | j                  D «       «      D �ch c](  }|j                  |«      rd|j                  |«      vr|’Œ* }}|du r|j                  |«       t        |«      S |D �	cg c]  }	|	ddd	œ‘Œ
 }
}	|D �	cg c]N  }	|	d
t        |	| j
                  v r"t        j                  | j
                  |	   «      n| j                  |	   «      d	œ‘ŒP }}	t        |
|z   d„ ¬«      S |}t        | j
                  D �	cg c]  }	|	j                  |› d�«      sŒ|	‘Œ c}	| j                  D �	cg c]  }	|	j                  |› d�«      sŒ|	‘Œ c}	z   «      }|D �	cg c]N  }	|	d
t        |	| j
                  v r"t        j                  | j
                  |	   «      n| j                  |	   «      d	œ‘ŒP }}	| j                  |«      }|du rt        |«      t        |«      z   S | j                  |«      }t!        ||«      D �	�cg c]  \  }	}|d   r	|	d
|d   d	œ‘Œ }}	}||z   S c c}w c c}w c c}	w c c}	w c c}	w c c}	w c c}	w c c}}	w )zShortcut file listingsr…   Ú r†   c              3   ó    K  — | ]  }|–— Œ y ­wr   rQ   ©r¯   Únames     r   r±   z)LazyReferenceMapper.ls.<locals>.<genexpr>ù   s   è ø€ Ð5¡n˜d”T¡nùó   ‚c              3   ó    K  — | ]  }|–— Œ y ­wr   rQ   r·   s     r   r±   z)LazyReferenceMapper.ls.<locals>.<genexpr>ú   s   è ø€ Ð2¡k˜d”T¡kùr¹   FÚ	directoryr   ©r¸   ÚtypeÚsizerl   c                 ó   — | d   S )Nr¸   rQ   )r^   s    r   Ú<lambda>z(LazyReferenceMapper.ls.<locals>.<lambda>  s   € ¸A¸fºIr   ©ÚkeyrY   )ÚrstriprH   r¬   Úlstripr   rC   rG   ÚupdateÚsortedrJ   rD   rE   r²   Ú_keys_in_fieldr0   rK   rU   )r   r3   ÚdetailÚpathdashÚdirnamesr*   r³   ÚfÚothersr¸   ÚdirinfoÚfileinforM   rV   ÚrecsÚrecÚrecinfos                    r   ÚlszLazyReferenceMapper.lsê   sÿ  € à�{‰{˜3ÓˆÙ!%�4˜#’:¨2ˆØ—<‘<“>ˆñ ó
á�Ø�|‰|˜HÔ%¨#°Q·X±X¸hÓ5GÑ*Gò Øð 	ð 
ñ
 ô Ø!�NÙ5 d§n¢nÓ5Ù2 d§k¢kÓ2ôóñ�Að
 —<‘< Ô)¨c¸¿¹À(Ó9KÑ.Kò ðð ð ð ˜‰Ø—‘˜dÔ#Ü˜f“~Ð%ÙRVÓWÑRVÈ$ ¨kÀ1ÓEÐRVˆGÐWñ #óñ #�Dð !Ø"Üà 4§>¡>Ñ1ô Ÿ
™
 4§>¡>°$Ñ#7Ô8à!Ÿ[™[¨Ñ.óóð #ð ð ô ˜' HÑ,Ñ2EÔFÐFØˆÜØ"ŸnšnÓL™n�d°·±À4À&ÈÀ
Õ0KŠT˜nÑLØ $§¢ÓK¡˜¨t¯©À$ÀÀq¸zÕ/JŠt ÑKñLó
ˆñ ó
ñ �ð ØÜà˜tŸ~™~Ñ-ô —J‘J˜tŸ~™~¨dÑ3Ô4àŸ™ TÑ*óóð ð 	ð 
ð ×"Ñ" 5Ó)ˆà�U‰?Ü˜“<¤$ t£*Ñ,Ð,Ø×)Ñ)¨%Ó0ˆô !  tœ_ô
á,‘	��cØ�1Švð  6°3°r±7Ó;Ø,ð 	ñ 
ð
 ˜'Ñ!Ð!ùòw
ùòùò Xùòùò MùÚKùò
ùó"
s=   ¯-JÂ-JÃ%JÃ8AJÅ3J!ÆJ!Æ!J&
Æ;J&
ÇAJ+É-J0c                 óä  — || j                   v r| j                   |   S || j                  v r0t        j                  | j                  |   «      j	                  «       S d|vs| j                  |«      rt        |«      ‚|j                  dd«      \  }}| j                  |«      \  }}}| j                   j                  ||fi «      j                  |d«      }|€t        ‚|r|S |dk(  ry	 | j                  ||«      }g d¢}
|
D �cg c]  }||v r||   |   nd‘Œ }}|d   }|�|S |d   €t        d	«      ‚|dd
 ddgk(  r|dd S |dd
 S # t        t        t        f$ r}	t        |«      |	‚d}	~	ww xY wc c}w )zfGet the reference for one key

        Returns bytes, one-element list or three-element list.
        r…   rX   FNr   r   ©r3   Úoffsetr¾   ÚrawrY   z1This reference does not exist or has been deletedé   )rG   rC   rD   rE   rF   Ú_is_metaÚKeyErrorr­   rz   r.   r–   Ú
ValueErrorÚ	TypeErrorÚFileNotFoundError)r   rÂ   rM   Ú_r‰   ÚriÚ
chunk_sizeÚmayber•   Úexcr�   r”   Ú	selectionrÖ   s                 r   Ú_load_one_keyz!LazyReferenceMapper._load_one_key,  s•  € ð
 �$—+‘+ÑØ—;‘;˜sÑ#Ð#Ø�D—N‘NÑ"Ü—:‘:˜dŸn™n¨SÑ1Ó2×9Ñ9Ó;Ð;Ø˜‰^˜tŸ}™}¨SÔ1Ü˜3“-ÐØ—:‘:˜c 1Ó%‰ˆˆqØ!%×!4Ñ!4°SÓ!9Ñˆ��JØ—‘—‘ ¨ °Ó4×8Ñ8¸¸UÓCˆØˆ=äˆNÙØˆLØ˜1Š_Øð	)Ø—>‘> %¨Ó0ˆDò 4ˆÙAHÓIÁ¸A A¨¡I�T˜!‘W˜R’[°4Ñ7Àˆ	ÐIØ˜‰mˆØˆ?ØˆJØ�Q‰<ÐÜÐNÓOÐOØ�Q�qˆ>˜a ˜VÒ#à˜R˜a�=Ð à˜˜!ˆ}Ðøô œIÔ'8Ð9ò 	)Ü˜3“- SÐ(ûð	)üò Js   Ã'E ÄE-ÅE*ÅE%Å%E*c                 ó4  — |j                  dd«      \  }}| j                  |«      }t        |«      dk(  ry|j                  d«      D �cg c]  }t	        |«      ‘Œ }}t        ||«      }|| j                  z  }|| j                  z  }	||	t        |«      fS c c}w )z3Details needed to construct a reference for one keyr…   rX   r   )r   r   r   Ú.)r­   rI   rJ   ÚsplitÚintr_   r}   )
r   rÂ   rM   ÚchunkrN   r”   Ú	chunk_idxÚchunk_numberr‰   rÞ   s
             r   rz   z"LazyReferenceMapper._key_to_recordT  sœ   € à—z‘z # qÓ)‰ˆˆuØ×+Ñ+¨EÓ2ˆÜˆ{Ó˜qÒ ØØ%*§[¡[°Ô%5Ó6Ñ%5 ”S˜•VÐ%5ˆ	Ð6Ü(¨°KÓ@ˆØ ×!1Ñ!1Ñ1ˆØ˜D×,Ñ,Ñ,ˆØ�rœ3˜{Ó+Ð+Ð+ùò	 7s   Á	Bc                 ó  — || j                   vr`| j                  |› d�   }t        |d   |d   «      D ��cg c]  \  }}t        j                  ||z  «      ‘Œ }}}|xs dg| j                   |<   | j                   |   S c c}}w )z6The number of chunks along each axis for a given fieldz/.zarrayÚshapeÚchunksrX   )rN   rC   rU   ÚmathÚceil)r   rM   Úzarrayr^   r”   Ú
size_ratios         r   rI   z$LazyReferenceMapper._get_chunk_sizes`  s’   € à˜×(Ñ(Ñ(Ø—^‘^ u g¨XÐ$6Ñ7ˆFä-0°¸±À&ÈÑBRÔ-SôÙ-S¡T Q¨”—	‘	˜!˜a™%Õ Ð-Sð ñ ð '1Ò&7°Q°CˆD×Ñ˜UÑ#Ø×Ñ Ñ&Ð&ùó	s   ¶"A>c                 óÊ   — | j                  ||«      }t        t        |j                  «       Ž «      }t	        |«      dk(  r	d„ |D «       S t	        |«      dk(  r|d   S d„ |D «       S )z8The references for a given parquet file of a given fieldr×   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   ©r0   ©r¯   Úts     r   r±   z7LazyReferenceMapper._generate_record.<locals>.<genexpr>p  s   è ø€ Ð(¡R ”D˜—G¡Rùó   ‚rX   rÖ   c              3   óL   K  — | ]  }|d    st        |dd  «      n|d    –— Œ y­w)r×   Nrô   rõ   s     r   r±   z7LazyReferenceMapper._generate_record.<locals>.<genexpr>v  s*   è ø€ ÐB¹r¸! q¨¢t”D˜˜2˜A˜”K°°1±Ó5¹rùs   ‚"$)r–   r(   rU   r)   rJ   )r   rM   r‰   r•   Úits        r   Ú_generate_recordz$LazyReferenceMapper._generate_recordj  s`   € à�~‰~˜e VÓ,ˆÜ”#�t—{‘{“}Ð%Ó&ˆÜˆt‹9˜Š>á(¡RÓ(Ð(Ü�‹Y˜!Š^à˜‘;Ðñ C¹rÓBÐBr   c              #   óâ   K  — d}| j                  |«      D ]  }||z  }Œ	 t        j                  || j                  z  «      }t	        |«      D ]  }| j                  ||«      E d{  –—†  Œ y7 Œ­w)zJLoad all the references within a field by iterating over the parquet filesrX   N)rI   rî   rï   r}   Úrangerú   )r   rM   ÚnrecÚchr‰   s        r   rK   z)LazyReferenceMapper._generate_all_recordsx  si   è ø€ àˆØ×'Ñ'¨Ö.ˆBØ�B‰J‰Dð /ä�y‰y˜ × 0Ñ 0Ñ0Ó1ˆÜ˜D–kˆFØ×,Ñ,¨U°FÓ;×;Ñ;ñ "Ø;ús   ‚A#A/Á%A-Á&A/c                 ó   — t        | «      S r   )r?   r   s    r   r)   zLazyReferenceMapper.values�  s   € Ü˜dÓ#Ð#r   c                 ó   — t        | «      S r   )rS   r   s    r   ÚitemszLazyReferenceMapper.items„  s   € Ü˜TÓ"Ð"r   c                 ó   — t        | «      S r   )Úidr   s    r   Ú__hash__zLazyReferenceMapper.__hash__‡  s   € Ü�$‹xˆr   c                 ó$   — | j                  |«      S r   )rã   )r   rÂ   s     r   Ú__getitem__zLazyReferenceMapper.__getitem__Š  s   € Ø×!Ñ! #Ó&Ð&r   c                 ó^  — d|v rŠ| j                  |«      sy|j                  dd«      \  }}| j                  |«      \  }}}| j                  j	                  ||fi «      }|||<   t        |«      | j                  k(  r| j                  ||«       y y t        |d«      r|j                  «       j                  «       }	n#t        |t        «      r|j                  «       }	n|}	|	| j                  |<   t        j                  |	«      }
i | j                  j!                  |i «      ¥|
¥| j                  |<   y )Nr…   rX   Úto_bytes)rØ   r­   rz   rG   r8   rJ   r}   ÚwriteÚhasattrr  Údecoder/   ÚbytesrD   r˜   rC   r.   )r   rÂ   ÚvaluerM   rè   r‰   r]   rÝ   ÚsubdictrL   Ú	new_values              r   Ú__setitem__zLazyReferenceMapper.__setitem__�  s  € Ø�#‰:˜dŸm™m¨CÔ0ØŸ:™: c¨1Ó-‰LˆE�5Ø×.Ñ.¨sÓ3‰LˆF�A�qØ—k‘k×,Ñ,¨e°V¨_¸bÓAˆGØˆG�A‰JÜ�7‹|˜t×/Ñ/Ò/Ø—
‘
˜5 &Õ)ð 0ô �u˜jÔ)Ø—n‘nÓ&×-Ñ-Ó/‘Ü˜E¤5Ô)Ø—l‘l“n‘à�Ø"ˆD�K‰K˜ÑÜŸ
™
 3›ˆIØ"N T§^¡^×%7Ñ%7¸¸RÓ%@Ð"NÀIÐ"NˆD�N‰N˜3Òr   c                 ó0   — | j                  d«      xs d| v S )Nr«   z/.z©r¬   rÁ   s    r   rØ   zLazyReferenceMapper._is_meta¡  s   € à�~‰~˜dÓ#Ò3 u° |Ð3r   c                 ó®  — || j                   v r| j                   |= y || j                  v r| j                  |= y d|v rŠ| j                  |«      sy|j                  dd«      \  }}| j	                  |«      \  }}}| j                   j                  ||fi «      }d ||<   t        |«      | j                  k(  r| j                  ||«       y y d | j                   |<   y )Nr…   rX   )	rG   rC   rØ   r­   rz   r8   rJ   r}   r	  )r   rÂ   rM   rÝ   r‰   r]   r  s          r   Ú__delitem__zLazyReferenceMapper.__delitem__¥  sÆ   € Ø�$—+‘+ÑØ—‘˜CÑ Ø�D—N‘NÑ"Ø—‘˜sÑ#à�c‰z $§-¡-°Ô"4ØŸ:™: c¨1Ó-‘��qØ#×2Ñ2°3Ó7‘�˜˜1ØŸ+™+×0Ñ0°%¸°À"ÓE�Ø!�˜‘
Ü�w“< 4×#3Ñ#3Ò3Ø—J‘J˜u fÕ-ð 4ð $(�—‘˜CÒ r   c           	      ót  — dd l }dd l}dd l}| j                  ||f   }d}	t	        |«      | j
                  k  r	 | j                  ||«      }	|	r|	d   }
|	d   }|	d   }|	d   }nŠ|j                  | j
                  |j                  d¬«      }
|j                  | j
                  d	¬«      }|j                  | j
                  d	¬«      }|j                  | j
                  |j                  d¬«      }|j                  «       D ]¹  \  }}t        |t        «      rot        |
j                  «      d
k(  r/|d   |
j                  j                   vr|
j#                  |d   «      }
|d   |
|<   t	        |«      dkD  sŒt|d   ||<   |d   ||<   Œ…|€d |
|<   d||<   d||<   d ||<   Œœ|j$                  j'                  |«      ||<   Œ» |j)                  |
|||dœd¬«      }|j*                  j-                  «       |j*                  j/                  «       xs dz  | j0                  kD  r|d   j3                  d
«      |d<   dddœ}ddg}|xs | j4                  › d|› d|› d�}| j6                  j9                  |xs | j4                  › d|› �d¬«       | j:                  dk(  rddi}n.| j:                  dk(  rd||dœ}nt=        | j:                  › d�«      ‚ |j>                  |f| j:                  |xs tA        | j6                  dd «      dddœ|¤Ž |jC                  «        | j                  jE                  ||f«       y # t        $ r Y �Œëw xY w)Nr   Fr3   rÕ   r¾   rÖ   ÚO)ÚdtypeÚint64ÚcategoryrX   é   rÔ   )Úcopyr  Úutf8)rÖ   r3   r…   z/refs.z.parqTrž   rj   Úwrite_statisticsri   )ÚstatsÚobject_encodingÚ	has_nullsz not supportedr¦   Úzstd)rh   r¦   ÚcompressionÚindex)#Úkerchunk.dfrc   rf   rG   rJ   r}   r–   r‘   ÚfullÚnanÚzerosr  r/   r0   r2   r  Ú
categoriesÚadd_categoriesr“   Ú	_proc_rawÚ	DataFramer3   ÚcountÚnuniquerq   Úastyperw   ru   Úmkdirsrh   ÚNotImplementedErrorÚ
to_parquetÚgetattrÚclearÚpop)r   rM   r‰   Úbase_urlr¦   Úkerchunkrd   rg   Ú	partitionÚoriginalr:   Úoffsetsr[   ÚrawsÚjr’   r“   r  r   ÚfnÚdf_backend_kwargss                        r   r	  zLazyReferenceMapper.write¶  sE  € ãÛÛà—K‘K ¨ Ñ0ˆ	ØˆÜˆy‹>˜D×,Ñ,Ò,ðØŸ>™>¨%°Ó8�ñ Ø˜VÑ$ˆEØ˜xÑ(ˆGØ˜VÑ$ˆEØ˜E‘?‰Dà—G‘G˜D×,Ñ,¨b¯f©f¸C�GÓ@ˆEØ—h‘h˜t×/Ñ/°w�hÓ?ˆGØ—H‘H˜T×-Ñ-°W�HÓ=ˆEØ—7‘7˜4×+Ñ+¨R¯V©V¸3�7Ó?ˆDØ —‘Ö(‰GˆAˆtÜ˜$¤Ô%ä˜Ÿ™Ó$¨
Ò2Ø˜Q™ u§{¡{×'=Ñ'=Ñ=à!×0Ñ0°°a±Ó9�EØ ™7��a‘Ü�t“9˜q“=Ø!% a¡�G˜A‘JØ# A™w�E˜!’HØ�à��a‘Ø�˜‘
Ø��a‘Ø��Q’ð #Ÿ+™+×/Ñ/°Ó5��Q’ð' )ð* �\‰\àØ!ØØñ	ð ð ó 
ˆð �7‰7�=‰=‹?˜bŸg™gŸo™oÓ/Ò4°1Ñ5¸¿¹ÒGØ˜F™×*Ñ*¨:Ó6ˆBˆv‰JØ")°6Ñ:ˆØ˜U�Oˆ	àÒ)˜DŸM™MÐ*¨!¨E¨7°&¸¸ÀÐFˆØ�‰�‰˜(Ò3 d§m¡mÐ4°A°e°WÐ=ÈˆÔMà�;‰;˜)Ò#Ø!3°UÐ ;ÑØ�[‰[˜MÒ)àØ#2Ø&ñ!Ñô &¨¯©¨°^Ð&DÓEÐEØˆ�‰Øð	
à—;‘;Ø+ò 9Ü�t—w‘wÐ 1°4Ó8ØØñ	
ð  ò	
ð 	�‰ÔØ�‰�‰˜ ˜Õ(øôQ ò Úðús   ¹L* Ì*	L7Ì6L7c                 óØ  — t        | j                  «      D ]-  }t        |t        «      sŒ|\  }}| j	                  ||||¬«       Œ/ t        | j                  «      D ]H  }|dk7  sŒ	d|v sŒt        j                  | j                  j                  |«      «      | j                  |<   ŒJ | j                  | j                  dœ}| j                  j                  «        t        j                  |«      j                  «       | j                  d<   | j                  j                  dj                  |xs | j                   dg«      | j                  d   «       | j"                  j%                  «        y)zŒOutput any modified or deleted keys

        Parameters
        ----------
        base_url: str
            Location of the output
        )r5  r¦   r†   r«   r›   r…   N)r0   rG   r/   r1   r	  rD   r˜   r4  rC   r}   r3  rE   rF   ru   r¥   r—   rw   r–   Úcache_clear)r   r5  r¦   ÚthingrM   r‰   Úkr™   s           r   ÚflushzLazyReferenceMapper.flush  s  € ô ˜$Ÿ+™+Ö&ˆEÜ˜%¤Õ'Ø %‘��vØ—
‘
ØØØ%Ø$3ð	 õ ð 'ô �d—k‘kÖ"ˆAØ�LÓ  T¨Q¢YÜ$(§J¡J¨t¯{©{¯©¸qÓ/AÓ$B�—‘˜qÒ!ð #ð  Ÿ>™>¸$×:JÑ:JÑKˆØ�‰×ÑÔÜ$(§J¡J¨s£O×$:Ñ$:Ó$<ˆ�‰�LÑ!Ø�‰�‰Ø�H‰H�hÒ/ $§-¡-°Ð>Ó?Ø�K‰K˜Ñ%ô	
ð 	�‰×"Ñ"Õ$r   c                 ó  — d}| j                  «       D ]@  }|j                  d«      r|dz  }Œ|t        j                  | j	                  |«      «      z  }ŒB |t        | j                  «      z  }|t        d„ | j                  D «       «      z  }|S )Nr   rå   rX   c              3   óB   K  — | ]  }t        |t        «      rŒd –— Œ y­w)rX   N)r/   r1   )r¯   rÝ   s     r   r±   z.LazyReferenceMapper.__len__.<locals>.<genexpr>8  s   è ø€ ÐH¡˜1´:¸aÄÕ3G”Q¡ùs   ‚˜)	rH   r¬   rî   ÚprodrI   rJ   rC   ÚsumrG   )r   r,  rM   s      r   Ú__len__zLazyReferenceMapper.__len__.  s   € àˆØ—\‘\–^ˆEØ×Ñ Ô$Ø˜‘
‘àœŸ™ 4×#8Ñ#8¸Ó#?Ó@Ñ@‘ð	 $ð
 	”�T—^‘^Ó$Ñ$ˆà”ÑH §¢ÓHÓHÑHˆØˆr   c              #   ó  K  — t        | j                  «      }|j                  | j                  «       |D ]  }t	        |t
        «      sŒ|–— Œ | j                  «       D ]!  }| j                  |«      D ]  }|| v sŒ|–— Œ Œ# y ­wr   )r²   rC   rÅ   rG   r/   r2   rH   rÇ   )r   ÚmetasÚbitrM   rA  s        r   rO   zLazyReferenceMapper.__iter__;  sr   è ø€ ô �D—N‘NÓ#ˆØ�‰�T—[‘[Ô!ÛˆCÜ˜#œsÕ#Ø“	ð ð —\‘\–^ˆEØ×(Ñ(¨Ö/�Ø˜’9Ø“Gñ 0ñ $ùs   ‚ABÁ	1BÁ;	Bc                 óF   — 	 | j                  |«       y# t        $ r Y yw xY w)NTF)rã   rÙ   r�   s     r   Ú__contains__z LazyReferenceMapper.__contains__H  s*   € ð	Ø×Ñ˜tÔ$ØøÜò 	Ùð	ús   ‚ ”	 Ÿ c           
   #   ó  K  — | j                  |«      }t        |«      dk(  r|dz   –— yt        j                  d„ |D «       Ž }|D ]2  }|dz   dj	                  |D �cg c]  }t        |«      ‘Œ c}«      z   –— Œ4 yc c}w ­w)z|List key names in given field

        Produces strings like "field/x.y" appropriate from the chunking of the array
        r   rA   Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )rü   )r¯   r]   s     r   r±   z5LazyReferenceMapper._keys_in_field.<locals>.<genexpr>X  s   è ø€ Ð"A±[°¤5¨§8±[ùr÷   r…   rå   )rI   rJ   Ú	itertoolsÚproductr—   r2   )r   rM   rN   ÚindsÚindr”   s         r   rÇ   z"LazyReferenceMapper._keys_in_fieldO  s€   è ø€ ð
 ×+Ñ+¨EÓ2ˆÜˆ{Ó˜qÒ Ø˜$‘,ÒØÜ× Ñ Ñ"A±[Ó"AÐBˆÛˆCØ˜#‘+ §¡¹#Ó)>¹#°Q¬#¨a­&¸#Ñ)>Ó ?Ñ?Ó?ñ ùÚ)>ùs   ‚AB ÁA;Á-B )NNé€   é
   ri   )NNi'  )rµ   T©NN)!r!   r"   r#   Ú__doc__Úpropertyrd   rg   r   r   rƒ   r~   Ústaticmethodr¨   rH   rÒ   rã   rz   rI   rú   rK   r)   r  r  r  r  rØ   r  r	  rB  rG  rO   rL  rÇ   rQ   r   r   ra   ra   [   só   „ ñYð ñó ðð
 ñó ðð ØØØ Ø4Añ5Kð Ð0Ñ1ó5Kòn#ò#ð0 ò7ó ð7ò<ó
@"òD&òP
,ò'òCò<ò$ò#òò'òOð( ñ4ó ð4ò(ó"S)ój!%òFòòó@r   ra   c                   ó  ‡ — e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 d ˆ fd„	Zd!d„Zd!d„Zd!d„Z	d„ Z
d	„ Zefd
„Zd"d„Zd#d„Zd$d„Zd„ Zd$d„Zd„ Zd„ Zd„ Zd%d„Zd&d„Zd„ Zd„ Zd„ Zd&d„Zd'ˆ fd„	Zd„ Zd„ Zd„ Zd(d„Z d(d„Z!d„ Z"ˆ xZ#S ))ÚReferenceFileSystema×  View byte ranges of some other file as a file system
    Initial version: single file system target, which must support
    async, and must allow start and end args in _cat_file. Later versions
    may allow multiple arbitrary URLs for the targets.
    This FileSystem is read-only. It is designed to be used with async
    targets (for now). We do not get original file details from the target FS.
    Configuration is by passing a dict of references at init, or a URL to
    a JSON file containing the same; this dict
    can also contain concrete data for some set of paths.
    Reference dict format:
    {path0: bytes_data, path1: (target_url, offset, size)}
    https://github.com/fsspec/kerchunk/blob/main/README.md
    r   Fc                 óX  •— t        ‰| �  di |¤Ž || _        |	| _        |
| _        i | _        i | _        i | _        || _        || _	        t        |t        «      rèt        di |xs |xs i ¤d|i¤Ž}t        j                  j                  |fi |¤Ž\  }}d|vrL|j!                  d«      s|j#                  |«      r*t$        j'                  d|«       t)        |||¬«      | _        npt        j,                  |dfi |¤Ž5 }t$        j'                  d|«       t/        j0                  |«      }ddd«       | j3                  |	«       n| j3                  ||	«       t        |t        «      r‰|j5                  «       D ��ci c]A  \  }}|t        |t        «      r)t        j6                  |j9                  d	d
«      d   fi |¤Žn|“ŒC c}}| _        d| j                  vrt7        d«      | j                  d<   y|�Dt        |j:                  t<        «      r|j:                  d   n|j:                  }|| j                  |<   |€„| j
                  j?                  «       D ]g  }tA        |«      r |«       }t        j                  jC                  |«      \  }}|sŒ:|| j                  vsŒIt7        |fi |xs i ¤Ž}|| j                  |<   Œi |€œ| j*                  j?                  «       D ]  }tA        |«      r |«       }t        |tD        «      sŒ&|d   sŒ,t        j                  jC                  |d   «      \  }}|| j                  vsŒ`t7        |fi |xs i ¤Ž}|| j                  |<    n |r-|| j                  vrt7        |fi |xs i ¤Ž}|| j                  |<   |xs t7        d«      | j                  d<   | j                  j5                  «       D ]Z  \  }}|jF                  s%tI        || jJ                  ¬«      | j                  |<   Œ7| jJ                  |jJ                  z  sŒQtM        d«      ‚ y# 1 sw Y   �ŒõxY wc c}}w )a  
        Parameters
        ----------
        fo : dict or str
            The set of references to use for this instance, with a structure as above.
            If str referencing a JSON file, will use fsspec.open, in conjunction
            with target_options and target_protocol to open and parse JSON at this
            location. If a directory, then assume references are a set of parquet
            files to be loaded lazily.
        target : str
            For any references having target_url as None, this is the default file
            target to use
        ref_storage_args : dict
            If references is a str, use these kwargs for loading the JSON file.
            Deprecated: use target_options instead.
        target_protocol : str
            Used for loading the reference file, if it is a path. If None, protocol
            will be derived from the given path
        target_options : dict
            Extra FS options for loading the reference file ``fo``, if given as a path
        remote_protocol : str
            The protocol of the filesystem on which the references will be evaluated
            (unless fs is provided). If not given, will be derived from the first
            URL that has a protocol in the templates or in the references, in that
            order.
        remote_options : dict
            kwargs to go with remote_protocol
        fs : AbstractFileSystem | dict(str, (AbstractFileSystem | dict))
            Directly provide a file system(s):
                - a single filesystem instance
                - a dict of protocol:filesystem, where each value is either a filesystem
                  instance, or a dict of kwargs that can be used to create in
                  instance for the given protocol

            If this is given, remote_options and remote_protocol are ignored.
        template_overrides : dict
            Swap out any templates in the references file with these - useful for
            testing.
        simple_templates: bool
            Whether templates can be processed with simple replace (True) or if
            jinja  is needed (False, much slower). All reference sets produced by
            ``kerchunk`` are simple in this sense, but the spec allows for complex.
        max_gap, max_block: int
            For merging multiple concurrent requests to the same remote file.
            Neighboring byte ranges will only be merged when their
            inter-range gap is <= ``max_gap``. Default is 64KB. Set to 0
            to only merge when it requires no extra bytes. Pass a negative
            number to disable merging, appropriate for local target files.
            Neighboring byte ranges will only be merged when the size of
            the aggregated range is <= ``max_block``. Default is 256MB.
        cache_size : int
            Maximum size of LRU cache, where cache_size*record_size denotes
            the total number of references that can be loaded in memory at once.
            Only used for lazily loaded references.
        kwargs : passed to parent class
        r<   z.json)ÚparqÚparquetr…   z$Open lazy reference dict from URL %s)ru   rr   ÚrbzRead reference from URL %sNÚ:rX   r   rl   )ÚasynchronouszEReference-FS's target filesystem must have same value of asynchronousrQ   )'r   r   r   Útemplate_overridesÚsimple_templatesÚ	templatesÚfssÚ	_dircacheÚmax_gapÚ	max_blockr/   r2   Údictrt   r    r¡   ÚendswithÚisdirÚloggerÚinfora   r4   r   rD   ÚloadÚ_process_referencesr  r
   ræ   r<   r1   r)   Úcallabler   r0   Ú
async_implr   r`  rÚ   )r   Úfor   Úref_storage_argsÚtarget_protocolÚtarget_optionsÚremote_protocolÚremote_optionsru   ra  rb  rf  rg  rr   r§   ÚdicÚref_fsÚfo2rË   ÚtextrA  Úoptsr5   r<   rÝ   r   s                            €r   r   zReferenceFileSystem.__init__o  sÁ  ø€ ôR 	‰ÑÑ"˜6Ò"ØˆŒØ"4ˆÔØ 0ˆÔØˆŒØˆŒØˆŒØˆŒØ"ˆŒÜ�bœ#ÔÜñ Ø#Ò; ~Ò;¸ñØGVòˆCô !Ÿ+™+×/Ñ/°Ñ:°cÑ:‰KˆF�CØ˜cÑ!Ø—‘Ð4Ô5¸¿¹ÀcÔ9Jô —‘ÐBÀBÔGÜ"5ØØØ)ô#�•ô —[‘[  TÑ1¨SÒ1°QÜ—K‘KÐ <¸bÔAÜŸ9™9 Q›<�D÷ 2ð ×(Ñ(¨Ð/AÕBð ×$Ñ$ RÐ);Ô<Ü�bœ$Ôð  "Ÿx™xœzôñ  *‘G�A�tð ä! $¬Ô-ô ×%Ñ% a§g¡g¨c°1£o°aÑ&8ÑA¸DÒAàñð
  *òˆDŒHð ˜4Ÿ8™8Ñ#Ü!+¨FÓ!3�—‘˜‘ØØˆ>ô #-¨R¯[©[¼%Ô"@�—‘˜A’ÀbÇkÁkð ð )+ˆD�H‰H�_Ñ%àÐ"à—~‘~×,Ñ,Ö.�Ü˜C”=Ù›%�CÜ$Ÿk™k×8Ñ8¸Ó=‘�˜!Ú °·±Ò 8Ü# HÑG°Ò1EÀ2ÑG�BØ)+�D—H‘H˜XÒ&ð /ð Ð"ð —‘×-Ñ-Ö/�Ü˜C”=Ù›%�CÜ˜c¤4Õ(¨S°«VÜ"(§+¡+×"<Ñ"<¸SÀ¹VÓ"D‘K�H˜aØ t§x¡xÒ/Ü'¨ÑK°^Ò5IÀrÑK˜Ø-/˜Ÿ™ Ñ*áð 0ñ ˜°d·h±hÑ>Ü˜OÑF°Ò0DÀ"ÑFˆBØ(*ˆD�H‰H�_Ñ%àÒ1œz¨&Ó1ˆ�‰�‰à—H‘H—N‘NÖ$‰DˆAˆqØ—<’<Ü4°QÀT×EVÑEVÔW�—‘˜’Ø×"Ñ" Q§^¡^Ó3Ü ð&óð ñ	 %÷o 2Ñ1üós   Ã:,PÅ6AP&ÐP#c           
      ó  — | j                  |«      }t        j                  d|› �«       	 | j                  |   }t        |t        «      r|j                  «       }t        |d«      r|j                  «       }t        |t        «      rGt        j                  d|› d�«       |j                  d«      rt        j                  |dd  «      }|d d fS t        |«      dk(  r%t        j                  d|› d|› �«       |d	   }||}}nV|\  }}	}
t        j                  d|› d
|› d|	› d|
› �«       |	|
z   }|�|d	k\  r|	|z   }n||z   }n|	}|�|d	k\  r|	|z   }n||z   }n|}|€| j                   }|||fS # t        $ r}t        |«      |‚d }~ww xY w)Nzcat: r  zReference: z, type bytesó   base64:é   rX   z, whole file => r   z => z	, offset z, size )Ú_strip_protocolrk  Údebugr4   rÙ   rÜ   r/   r2   rF   r
  r  r  r¬   Úbase64Ú	b64decoderJ   r   )r   r3   ÚstartÚendÚpartrá   rs   Ústart1Úend1Ústart0r¾   Úend0s               r   Ú_cat_commonzReferenceFileSystem._cat_common  s¤  € Ø×#Ñ# DÓ)ˆÜ�‰�u˜T˜F�^Ô$ð	3Ø—?‘? 4Ñ(ˆDô �dœCÔ Ø—;‘;“=ˆDÜ�4˜Ô$Ø—=‘=“?ˆDÜ�dœEÔ"Ü�L‰L˜; t f¨LÐ9Ô:Ø�‰˜zÔ*Ü×'Ñ'¨¨Q¨R¨Ó1�Ø˜˜tÐ#Ð#äˆt‹9˜Š>Ü�L‰L˜; t fÐ,<¸T¸FÐCÔDØ�q‘'ˆCØ  #�D‰Fà $ÑˆC�˜Ü�L‰L˜; t f¨D°°°Y¸v¸hÀgÈdÈVÐTÔUØ˜D‘=ˆDàÐ Ø˜A’:Ø# e™^‘Fà! E™\‘Fà�ØˆØ˜!’8Ø! C™<‘Dà #™:‘Dà�Øˆ;Ø—+‘+ˆCØ�F˜DÐ Ð øôK ò 	3Ü# DÓ)¨sÐ2ûð	3ús   «E) Å)	FÅ2E>Å>Fc              ‹   ó  K  — | j                  |||¬«      \  }}}t        |t        «      r||| S t        |«      \  }}		 | j                  |   j                  |||¬«      ƒ d {  –—† S 7 Œ# t        $ r}
t        ||«      |
‚d }
~
ww xY w­w©N)rƒ  r„  )rŠ  r/   r  r   rd  Ú	_cat_fileÚ	Exceptionr   ©r   r3   rƒ  r„  r§   Úpart_or_urlrˆ  r‰  r<   rÝ   Úes              r   r�  zReferenceFileSystem._cat_file>  s£   è ø€ Ø$(×$4Ñ$4°TÀÈCÐ$4Ó$PÑ!ˆ�V˜TÜ�k¤5Ô)Ø˜u SÐ)Ð)Ü$ [Ó1‰ˆ�!ð	BØŸ™ (Ñ+×5Ñ5Ø 6¨tð 6ó ÷ ð ð ùô ò 	BÜ'¨¨kÓ:ÀÐAûð	Büs:   ‚<B¿$A* Á#A(Á$A* Á'BÁ(A* Á*	BÁ3B Â BÂBc                 óø   — | j                  |||¬«      \  }}}t        |t        «      r||| S t        |«      \  }}		 | j                  |   j                  |||¬«      S # t        $ r}
t        ||«      |
‚d }
~
ww xY wrŒ  )rŠ  r/   r  r   rd  r�   rŽ  r   r�  s              r   r�   zReferenceFileSystem.cat_fileJ  s�   € Ø$(×$4Ñ$4°TÀÈCÐ$4Ó$PÑ!ˆ�V˜TÜ�k¤5Ô)Ø˜u SÐ)Ð)Ü$ [Ó1‰ˆ�!ð	BØ—8‘8˜HÑ%×.Ñ.¨{À&ÈdÐ.ÓSÐSøÜò 	BÜ'¨¨kÓ:ÀÐAûð	Bús   ½ A Á	A9Á'A4Á4A9c                 ó"   — || j                   |<   y)z2Temporarily add binary data or reference as a fileN©r4   )r   r3   r  rÝ   s       r   Ú	pipe_filezReferenceFileSystem.pipe_fileT  s   € à %ˆ�‰˜Òr   c              ‹   óö   K  — | j                  |«      rt        j                  |d¬«      S | j                  |«      ƒ d {  –—† }t	        |d«      5 }|j                  |«       d d d «       y 7 Œ+# 1 sw Y   y xY w­w©NTrž   Úwb)rj  Úosr¤   r�  r   r	  )r   ÚrpathÚlpathr§   r’   rË   s         r   Ú	_get_filezReferenceFileSystem._get_fileX  s_   è ø€ Ø�:‰:�eÔÜ—;‘;˜u¨tÔ4Ð4Ø—^‘^ EÓ*×*ˆÜ�%˜Ô !Ø�G‰G�DŒM÷ Ðð +øßÐüs(   ‚=A9¿A+Á A9ÁA-Á"
A9Á-A6Á2A9c                 ó€  — | j                  |«      rt        j                  |d¬«      S  | j                  |fi |¤Ž}|j	                  t        |«      «       t        |«      r|j                  |«       n&t        |d«      5 }|j                  |«       d d d «       |j                  t        |«      «       y # 1 sw Y   Œ$xY wr—  )
rj  r™  r¤   r�   Úset_sizerJ   r   r	  r   Úabsolute_update)r   rš  r›  Úcallbackr§   r’   rË   s          r   Úget_filezReferenceFileSystem.get_file_  s‘   € Ø�:‰:�eÔÜ—;‘;˜u¨tÔ4Ð4Øˆt�}‰}˜UÑ- fÑ-ˆØ×Ñœ#˜d›)Ô$Ü�eÔØ�K‰K˜Õä�e˜TÔ" aØ—‘˜”÷ #à× Ñ ¤ T£Õ+÷ #Ð"ús   Á?B4Â4B=c                 ó†  — |r| j                  d«       | j                  ||¬«      }t        j                  dd¬«      }t	        ||«      }|r2| j                  |D �cg c]  }| j                  |«      rŒ|‘Œ c}«      }n| j                  |«      }t        ||«      D ]  \  }	}
|	|v sŒ|j                  |
||	   «       Œ! y c c}w )Nrµ   rœ   rl   T)Ú
auto_mkdir)	rÒ   Úexpand_pathrt   r
   r   Úcatrj  rU   r•  )r   rš  r›  r�   r§   ru   ÚtargetsÚrr’   ÚremoteÚlocals              r   r.   zReferenceFileSystem.getk  s®   € Ùà�G‰G�BŒKØ× Ñ  °)Ð Ó<ˆÜ×Ñ˜v°$Ô7ˆÜ˜e UÓ+ˆÙØ—8‘8©ÓC© 1°T·Z±ZÀµ]šQ¨ÑCÓD‰Dà—8‘8˜E“?ˆDÜ  ¨Ö0‰MˆF�EØ˜Š~Ø—‘˜U D¨¡LÕ1ñ 1ùò Ds   ÁB>Á2B>c           	      óŠ  — t        |t        «      r|rt        ‚t        |t        «      r|st	        d„ |D «       «      rt        ‚t        || j                  «      }i }|j                  «       D �]ƒ  \  }}| j                  |   }	g g g g f\  }
}}}|D ]t  }	 | j                  |«      \  }}}t        |t        t        f«      sŒ0	 |
j                  |«       |j                  |«       |j                  |«       |j                  |«       Œv g }g }g }g }t        «       }t        |
|||«      D ]u  \  }}}}t        |t        «      r|||<   Œ|�Œ!|j                  |«       |j                  |«       |j                  |«       |j                  |«       |j                  |«       Œw t        |
|||«      D ]S  \  }}}}|€Œ||vsŒ|j                  |«       |j                  |«       |j                  |«       |j                  |«       ŒU t!        t        |«      t        |«      t        |«      d| j"                  | j$                  ¬«      \  }}}|	j'                  |||«      }t        |
|||«      D ]†  \  }}}}||v rŒt        ||||«      D ]i  \  }}}}||k(  r#|�|€t        |t(        «      r|||<   Œ'||| ||<   Œ0||k(  sŒ6||k\  sŒ<||k  sŒBt        |t(        «      r|||<   ŒX|||z
  ||z
  xs d  ||<   Œk Œˆ �Œ† |j+                  «       j                  «       D ]\  \  } }!t        |!t(        «      sŒ| | j                  v sŒ&||    }"t-        | | j                  |    «      }#|"|#_        |dk(  r|#‚|dk7  sŒX|#|| <   Œ^ t1        |«      dk(  rt        |t        «      rd|vrt3        |«      S |S # t        $ r}|dk(  r‚ |dk7  r|||<   Y d }~�Œ/d }~ww xY w)Nc              3   ó$   K  — | ]  }d |v –— Œ
 y­w)Ú*NrQ   r®   s     r   r±   z*ReferenceFileSystem.cat.<locals>.<genexpr>}  s   è ø€ Ð7OÉ$ÀQ¸¸q¼É$ùs   ‚ÚraiseÚomitT)Úsortrf  rg  rX   r¬  )r/   r2   r0  r0   Úanyr=   r4   r  rd  rŠ  r  r9   rÜ   r²   rU   Úaddr   rf  rg  Ú
cat_rangesrŽ  r  r   Ú	__cause__rJ   r+   )$r   r3   r�   Úon_errorr§   Ú
proto_dictr;   Úprotor:   ru   ÚurlsÚstartsÚendsÚvalid_pathsr°   Úur^   r‘  ÚerrÚurls2Ústarts2Úends2Úpaths2Úwhole_filesÚ	new_pathsÚ
new_startsÚnew_endsÚ	bytes_outrd   ÚnsÚneÚbrA  ÚvÚexÚnew_exs$                                       r   r¥  zReferenceFileSystem.catz  s·  € Ü�dœCÔ ¡YÜ%Ð%Ü�dœDÔ!¡y´CÑ7OÉ$Ó7OÔ4OÜ%Ð%ä% d¨D¯O©OÓ<ˆ
ØˆØ&×,Ñ,×.‰LˆE�5Ø—‘˜%‘ˆBØ.0°"°b¸"¨nÑ+ˆD�&˜$ Û�ð*Ø"×.Ñ.¨qÓ1‘G�A�q˜!Ü% a¬%´¨Ô6à ð 7ð —K‘K ”NØ—M‘M !Ô$Ø—K‘K ”NØ×&Ñ& qÕ)ð# ð( ˆEØˆGØˆEØˆFÜ›%ˆKÜ! $¨°°kÖB‘
��1�a˜Ü˜a¤Ô'à�C˜’FØ‘Yð  —O‘O AÔ&Ø—L‘L ”OØ—N‘N 1Ô%Ø—L‘L ”OØ—M‘M !Õ$ð Cô " $¨°°kÖB‘
��1�a˜à‘= Q¨kÒ%9Ø—L‘L ”OØ—N‘N 1Ô%Ø—L‘L ”OØ—M‘M !Õ$ð Cô /BÜ�U“Ü�W“Ü�U“ØØŸ™ØŸ.™.ô/Ñ+ˆI�z 8ð Ÿ™ i°¸XÓFˆIô " $¨°°kÖB‘
��1�a˜Ø˜‘8ØÜ%(¨°JÀÈ)Ö%T‘M�B˜˜B Ø˜Q’w B J°"°*Ü% a¬Ô3Ø%&˜C šFà%& q¨ V˜C šFØ˜q› Q¨"£W°°b³Ü% a¬Ô3Ø%&˜C šFà%& q¨2¡v°°R±Ò0@¸DÐ%A˜C šFñ &Uò Cðy /ðV —H‘H“J×$Ñ$Ö&‰DˆAˆqä˜!œYÕ'¨A°·±Ò,@Ø˜‘V�Ü.¨q°$·/±/À!Ñ2DÓE�Ø#%�Ô Ø˜wÒ&Ø �LØ Ó'Ø#�C˜’Fð 'ô ˆs‹8�qŠ=œZ¨¬cÔ2°sÀ$±Ü˜#“;ÐØˆ
øô[ )ò %Ø 7Ò*ØØ 6Ò)Ø!$˜˜A™ÿùð	%ús   Â+NÎ	OÎ'N=Î=Oc                 óœ   — |j                  dd «      }|€| j                  |«       y |dk(  r| j                  ||¬«       y t        d|› �«      ‚)NÚversionrX   )ra  z Unknown reference spec version: )r.   Ú_process_references0Ú_process_references1rÚ   )r   r4   ra  Úverss       r   rn  z'ReferenceFileSystem._process_referencesÜ  sS   € Ø�~‰~˜i¨Ó.ˆØˆ<Ø×%Ñ% jÕ1Ø�QŠYØ×%Ñ% jÐEWÐ%ÕXäÐ?À¸vÐFÓGÐGr   c           	      óÎ   — t        |t        «      rH|j                  «       D ��ci c]-  \  }}|t        |t        «      rt        j                  |«      n|“Œ/ }}}|| _        yc c}}w )z&Make reference dict for Spec Version 0N)r/   rh  r  rD   rE   r4   )r   r4   rÂ   rL   s       r   rÎ  z(ReferenceFileSystem._process_references0ç  sa   € ä�j¤$Ô'ð
 !+× 0Ñ 0Ô 2ôá 2‘H�C˜ð ¬
°3¼Ô(=”T—Z‘Z ”_À3ÑFØ 2ð ñ ð %ˆ�ùó	s   ¤2A!c                 óÒ  ‡ ‡— ‰ j                   r‰ j                  rdd lŠi ‰ _        ‰ j	                  |j                  di «      «       t        d«      ˆˆ fd„«       }|j                  di «      j                  «       D �]/  \  }}t        |t        «      rF|j                  d«      r%t        j                  |dd  «      ‰ j                  |<   |‰ j                  |<   Œ]t        |t        «      r#t        j                  |«      ‰ j                  |<   Œ�‰ j                  r…|d   }d|v rQ‰ j                   r= |j!                  dd	«      j!                  d
d«      j"                  di ‰ j                  ¤Ž}n ||«      }t%        |«      dk(  r|gn
||d   |d   g‰ j                  |<   �Œ!|‰ j                  |<   �Œ2 ‰ j                  j'                  ‰ j)                  |j                  dg «      «      «       y )Nr   rc  iè  c                 óZ   •—  ‰j                  | «      j                  di ‰j                  ¤ŽS ©NrQ   )ÚTemplateÚrenderrc  )r»  Újinja2r   s    €€r   Ú_render_jinjaz?ReferenceFileSystem._process_references1.<locals>._render_jinjaø  s&   ø€ à,�6—?‘? 1Ó%×,Ñ,Ñ>¨t¯~©~Ñ>Ð>r   r•   zbase64:r~  ú{{Ú{z}}Ú}rX   r  ÚgenrQ   )rb  rc  r×  r4   Ú_process_templatesr.   r   r  r/   r2   r¬   r�  r‚  rh  rD   rE   ÚreplacerŠ   rJ   rÅ   Ú_process_gen)r   r4   ra  rØ  rA  rÉ  r»  r×  s   `      @r   rÏ  z(ReferenceFileSystem._process_references1ò  s™  ù€ Ø×$Ò$¨¯ªÛØˆŒØ×Ñ 
§¡¨{¸BÓ ?Ô@ä	�4‹ô	?ó 
ð	?ð —N‘N 6¨2Ó.×4Ñ4×6‰DˆAˆqÜ˜!œSÔ!Ø—<‘< 	Ô*Ü)/×)9Ñ)9¸!¸A¸B¸%Ó)@�D—O‘O AÑ&Ø%&�—‘ Ò"Ü˜AœtÔ$Ü%)§Z¡Z°£]�—‘ Ò"Ø—’Ø�a‘D�Ø˜1‘9Ø×,Ò,ð$˜AŸI™I d¨CÓ0ß$™W T¨3Ó/ß#™Vñ6à&*§n¡nñ6ñ ñ *¨!Ó,˜Ü,/°«F°aªK a¡S¸aÀÀ1ÁÀqÈÁt¸_�—‘ Ó"à%&�—‘ Ó"ð) 7ð* 	�‰×Ñ˜t×0Ñ0°·±ÀÀrÓ1JÓKÕLr   c                 óê   ‡— i | _         | j                  �|j                  | j                  «       |j                  «       D ]1  \  }}d|v rdd lŠ|fˆfd„	| j                   |<   Œ#|| j                   |<   Œ3 y )NrÙ  r   c                 óF   •—  ‰j                  | «      j                  di |¤ŽS rÔ  )rÕ  rÖ  )Útempr§   r×  s     €r   rÀ   z8ReferenceFileSystem._process_templates.<locals>.<lambda>  s(   ø€ ð >¸V¿_¹_Øó>ç‘&ñ>#à!ò>#r   )rc  ra  rÅ   r  r×  )r   ÚtmprA  rÉ  r×  s       @r   rÝ  z&ReferenceFileSystem._process_templates  si   ø€ ØˆŒØ×"Ñ"Ð.Ø�J‰J�t×.Ñ.Ô/Ø—I‘I–K‰DˆAˆqØ�q‰yÛà01ô %#�—‘˜qÒ!ð %&�—‘˜qÒ!ñ  r   c                 ó^  ‡— i }|D �]�  }|d   j                  «       D ��ci c]H  \  }}|t        |t        «      r|n/t        |j	                  dd«      |d   |j	                  dd«      «      “ŒJ c}}Šˆfd„t        j                  ‰j                  «       Ž D «       }|D �]  }dd l} |j                  |d   «      j                  di |¤| j                  ¤Ž}	 |j                  |d	   «      j                  di |¤| j                  ¤Ž}
d
|v rd|v r{t         |j                  |d
   «      j                  di |¤| j                  ¤Ž«      }t         |j                  |d   «      j                  di |¤| j                  ¤Ž«      }|
||g||	<   Œëd
|v d|v z  rt        d«      ‚|
g||	<   �Œ �Œ  |S c c}}w )NÚ
dimensionsrƒ  r   ÚstopÚsteprX   c              3   ód   •K  — | ]'  }t        t        ‰j                  «       |«      «      –— Œ) y ­wr   )rh  rU   rV   )r¯   r)   Ú	dimensions     €r   r±   z3ReferenceFileSystem._process_gen.<locals>.<genexpr>,  s,   øè ø€ ð áD�Fô ”S˜Ÿ™Ó)¨6Ó2×3ÙDùs   ƒ-0rÂ   rs   rÕ   Úlengthz^Both 'offset' and 'length' are required for a reference generator entry if either is provided.rQ   )r  r/   r0   rü   r.   rO  rP  r)   r×  rÕ  rÖ  rc  rç   rÚ   )r   Úgensr;   rÜ  rA  rÉ  ÚproductsÚprr×  rÂ   rs   rÕ   rê  ré  s                @r   rß  z ReferenceFileSystem._process_gen!  sÏ  ø€ ØˆÜˆCð   Ñ-×3Ñ3Ô5ôñ 6‘D�A�qð ä! !¤TÔ*ñ ä˜qŸu™u W¨aÓ0°!°F±)¸Q¿U¹UÀ6È1Ó=MÓNñOð
 6òˆIóä'×/Ñ/°×1AÑ1AÓ1CÑDóˆHô �Ûà8�f—o‘o c¨%¡jÓ1×8Ñ8ÑP¸2ÐPÀÇÁÑP�Ø8�f—o‘o c¨%¡jÓ1×8Ñ8ÑP¸2ÐPÀÇÁÑP�Ø ‘O¨(°c©/Ü Ø=˜Ÿ™¨¨H©Ó6×=Ñ=ÑUÀÐUÀdÇnÁnÑUó�Fô !Ø=˜Ÿ™¨¨H©Ó6×=Ñ=ÑUÀÐUÀdÇnÁnÑUó�Fð !$ V¨VÐ4�C˜’HØ #�o¨(°c¨/Ò:Ü$ðKóð ð
 !$˜u�C˜“Hò' ð ðB ˆ
ùóAs    AF)c                 óæ  — dg i| _         | j                  j                  «       }|D �]H  \  }}t        |t        t
        f«      st        |d«      rt        |«      }nt        |«      dk(  rd }n|\  }}}d|v r|j                  dd«      d   nd}|}|g}|rA|| j                   vr3| j                  |«      }|j                  |«       |r|| j                   vrŒ3|j                  «        t        ||dd  «      D ]V  \  }	}
|
| j                   vsJ ‚|	| j                   v sJ ‚| j                   |	   j                  |
dddœ«       g | j                   |
<   ŒX | j                   |   j                  |d|dœ«       �ŒK y )	Nrµ   r  rX   r…   r   r»   r¼   rl   )Údircacher4   r  r/   r  r2   r
  rJ   r­   Ú_parentr9   ÚreverserU   )r   rù   r3   r…  r¾   rÝ   ÚparÚpar0ÚsubdirsÚparentÚchilds              r   Ú_dircache_from_itemsz(ReferenceFileSystem._dircache_from_itemsF  se  € Ø˜R˜ˆŒØ�_‰_×"Ñ"Ó$ˆÜ‰JˆD�$Ü˜$¤¬ Ô-´¸¸zÔ1JÜ˜4“y‘Ü�T“˜a’Ø‘à!‘
��1�dØ,/°4©K�$—+‘+˜c 1Ó% aÒ(¸RˆCØˆDØ�fˆGÙ˜4 t§}¡}Ñ4à—|‘| DÓ)�Ø—‘˜tÔ$ñ ˜4 t§}¡}Ò4ð
 �O‰OÔÜ!$ W¨g°a°b¨kÖ!:‘�˜à D§M¡MÑ1Ð1Ð1Ø §¡Ñ.Ð.Ð.Ø—‘˜fÑ%×,Ñ,Ø"¨KÀÑCôð (*�—‘˜eÒ$ð ";ð �M‰M˜#Ñ×%Ñ%¨t¸VÈTÑ&RÖSñ3 r   c                 ó
  — | j                  |«      \  }}}t        |t        «      rt        j                  ||| «      S t        |«      \  }	}
|€&|€$ | j                  |	   j                  ||f||dœ|¤ŽS t        | ||f||dœ|¤ŽS )N)Ú
block_sizeÚcache_options)	rŠ  r/   r  r‹   rŒ   r   rd  Ú_openÚReferenceFile)r   r3   Úmoderù  rú  r§   r�  rˆ  r‰  r<   rÝ   s              r   rû  zReferenceFileSystem._opend  s¼   € Ø$(×$4Ñ$4°TÓ$:Ñ!ˆ�V˜Tô �k¤5Ô)Ü—:‘:˜k¨&°Ð6Ó7Ð7ä$ [Ó1‰ˆ�!Øˆ>˜d˜lØ+�4—8‘8˜HÑ%×+Ñ+ØØðð &Ø+ñ	ð
 ñð ô ØØØð
ð "Ø'ñ
ð ñ
ð 	
r   c                 ó¦  — t         j                  d|«       | j                  |«      }t        | j                  t
        «      r	 | j                  j                  ||«      S | j                  s| j                  «        | j                  |«      }|€t        |«      ‚|r|S |D �cg c]  }|d   ‘Œ	 c}S # t        $ r Y nw xY wt        d|› d�«      ‚c c}w )Nzlist %sÚ'z' is not a known keyr¸   )rk  r€  r  r/   r4   ra   rÒ   rÙ   rÜ   rï  r÷  Ú_ls_from_cache)r   r3   rÈ   r§   r;   Úos         r   rÒ   zReferenceFileSystem.ls~  sÏ   € Ü�‰�Y Ô%Ø×#Ñ# DÓ)ˆÜ�d—o‘oÔ':Ô;ðØ—‘×)Ñ)¨$°Ó7Ð7ð �}Š}Ø×%Ñ%Ô'Ø×!Ñ! $Ó'ˆØˆ;Ü# DÓ)Ð)ÙØˆJÙ#&Ó'¡3˜a��&“	 3Ñ'Ð'øô ò Ùðúä# a¨ vÐ-AÐ$BÓCÐCùò (s   ÁB0 Â!CÂ0	B<Â;B<c                 óJ   — | j                  |«      xs | j                  |«      S r   )rj  Úisfile©r   r3   r§   s      r   r¢   zReferenceFileSystem.exists�  s   € Ø�z‰z˜$ÓÒ4 4§;¡;¨tÓ#4Ð4r   c                 óà   ‡— | j                   r‰| j                   v S t        | j                  t        «      r‰| j                  j	                  «       v S t        ˆfd„| j                  D «       «      S )Nc              3   óF   •K  — | ]  }|j                  ‰› d �«      –— Œ y­w)r…   Nr  )r¯   rÝ   r3   s     €r   r±   z,ReferenceFileSystem.isdir.<locals>.<genexpr>›  s!   øè ø€ ÐI¹°A�q—|‘| t f¨A J×/¹ùs   ƒ!)rï  r/   r4   ra   rH   r°  ©r   r3   s    `r   rj  zReferenceFileSystem.isdir“  sW   ø€ Ø�=Š=Ø˜4Ÿ=™=Ð(Ð(Ü˜Ÿ™Ô)<Ô=Ø˜4Ÿ?™?×2Ñ2Ó4Ð4Ð4ô ÓI¸¿ºÓIÓIÐIr   c                 ó   — || j                   v S r   r”  r  s     r   r  zReferenceFileSystem.isfile�  s   € Ø�t—‘Ð&Ð&r   c              ‹   ó2   K  —  | j                   ||fi |¤ŽS ­wr   )rÒ   )r   r3   rÈ   r§   s       r   Ú_lszReferenceFileSystem._ls   s   è ø€ Øˆt�w‰w�t˜VÑ. vÑ.Ð.ùr÷   c                 óP  •‡— |rt        ‰| �  ‰f|||dœ|¤ŽS ‰r0| j                  ‰«      Št        ˆfd„| j                  D «       «      }nt        | j                  «      }|r?| j
                  s| j                  «        |D �ci c]  }|| j                  |«      d   “Œ c}S |S c c}w )N)ÚmaxdepthÚwithdirsrÈ   c              3   óF   •K  — | ]  }|j                  ‰«      sŒ|–— Œ y ­wr   r  )r¯   rA  r3   s     €r   r±   z+ReferenceFileSystem.find.<locals>.<genexpr>ª  s   øè ø€ ÐH¡/˜Q°Q·\±\À$Õ5G”q¡/ùs   ƒ!š!r   )r   Úfindr  rÆ   r4   rï  r÷  r   )	r   r3   r  r  rÈ   r§   r§  rA  r   s	    `      €r   r  zReferenceFileSystem.find£  s¯   ù€ ÙÜ‘7‘<ØðØ'°(À6ñØMSñð ñ Ø×'Ñ'¨Ó-ˆDÜÓH $§/¢/ÓHÓH‰Aä�t—‘Ó'ˆAÙØ—=’=Ø×)Ñ)Ô+Ù:;Ó<¹!°Q�A�t×*Ñ*¨1Ó-¨aÑ0Ñ0¸!Ñ<Ð<àˆHùò =s   ÂB#c                 óð  — | j                   j                  |«      }|�Dt        |t        t        f«      r|dt        |«      dœS t        |«      dkD  r	|d|d   dœS |dd dœg}n2| j                  |d«      }|D �cg c]  }|d   |k(  sŒ|‘Œ }}|s|dddœS |d   d	   €Rt        | j                   |   d   «      \  }}| j                  |   j                  | j                   |   d   «      |d   d	<   |d   S c c}w )
Nrl   r¼   rX   r  Tr¸   r»   r   r¾   )
r4   r.   r/   r2   r  rJ   rÒ   r   rd  r¾   )r   r3   r§   r;   Úout0r  ÚprotrÝ   s           r   rl  zReferenceFileSystem.info´  s
  € Ø�o‰o×!Ñ! $Ó'ˆØˆ?Ü˜#¤¤U˜|Ô,à $¨f¼cÀ#»hÑGÐGÜ�S“˜A’Ø $¨f¸cÀ!¹fÑEÐEà!%¨v¸tÑDÐE‘à—'‘'˜$ Ó%ˆCÙ"Ó8™s˜! a¨¡i°4Ó&7’A˜sˆDÐ8ÙØ $¨kÀ1ÑEÐEØ�‰7�6‰?Ð"ä$ T§_¡_°TÑ%:¸1Ñ%=Ó>‰GˆD�!Ø"Ÿh™h t™n×1Ñ1°$·/±/À$Ñ2GÈÑ2JÓKˆD�‰G�F‰OØ�A‰wˆùò 9s   Á8C3ÂC3c              ‹   ó,   K  — | j                  |«      S ­wr   )rl  r  s      r   Ú_infozReferenceFileSystem._infoÉ  s   è ø€ Ø�y‰y˜‹Ðùs   ‚c              ‹   óx   K  — | j                   j                  |d «       | j                  j                  «        y ­wr   )r4   r4  rï  r3  r  s      r   Ú_rm_filezReferenceFileSystem._rm_fileÌ  s/   è ø€ Ø�‰×ÑØ�$ô	
ð 	�‰×ÑÕùs   ‚8:c              ‹   ó–   K  — |dk(  r| j                  |«      rt        ‚|| j                  |<   | j                  j	                  «        y ­w)Nr¨   )r¢   ÚFileExistsErrorr4   rï  r3  )r   r3   r’   rý  r§   s        r   Ú
_pipe_filezReferenceFileSystem._pipe_fileÒ  s=   è ø€ Ø�8Ò §¡¨DÔ 1Ü!Ð!à $ˆ�‰˜ÑØ�‰×ÑÕùs   ‚AA	c              ‹   óô   K  — |dk(  r| j                  |«      rt        ‚t        |d«      5 }|j                  «       | j                  |<   d d d «       | j
                  j                  «        y # 1 sw Y   Œ$xY w­w)Nr¨   r^  )r¢   r  r   Úreadr4   rï  r3  )r   r›  rš  rý  r§   rË   s         r   Ú	_put_filezReferenceFileSystem._put_fileÙ  s\   è ø€ à�8Ò §¡¨EÔ 2Ü!Ð!Ü�%˜Ô !Ø%&§V¡V£XˆD�O‰O˜EÑ"÷ à�‰×ÑÕ÷ Ðüs   ‚)A8«A,Á	#A8Á,A5Á1A8c                 óÔ  — i }| j                   j                  «       D ]0  \  }}t        |t        «      r	 |j	                  d«      ||<   Œ,|||<   Œ2 t        j                  |dfi |¤Ž5 }|j                  t        j                  d|dœ«      j                  «       «       ddd«       y# t
        $ r, dt        j                  |«      z   j	                  «       ||<   Y Œ½w xY w# 1 sw Y   yxY w)z+Write modified references into new locationÚasciir}  r˜  rX   )rÍ  r•   N)r4   r  r/   r  r  ÚUnicodeDecodeErrorr�  Ú	b64encodert   r   r	  rD   rE   rF   )r   rs   r¦   r;   rA  rÉ  rË   s          r   Ú	save_jsonzReferenceFileSystem.save_jsoná  sÏ   € àˆØ—O‘O×)Ñ)Ö+‰DˆAˆqÜ˜!œUÔ#ðIØŸX™X gÓ.�C˜’Fð ��A’ð ,ô �[‰[˜˜dÑ6 oÒ6¸!Ø�G‰G”D—J‘J¨1°cÑ:Ó;×BÑBÓDÔE÷ 7Ð6øô	 *ò IØ(¬6×+;Ñ+;¸AÓ+>Ñ>×FÑFÓH�C˜“FðIú÷ 7Ð6ús   ´B&Á'6CÂ&2CÃCÃC')NNNNNNNNTi ú  i @BrS  rU  )F)Fr­  r   )r^  NN)T)NFF)Ú	overwrite)$r!   r"   r#   rV  r<   Úcachabler   rŠ  r�  r�   r•  rœ  r	   r¡  r.   r¥  rn  rÎ  rÏ  rÝ  rß  r÷  rû  rÒ   r¢   rj  r  r
  r  rl  r  r  r  r  r!  r$   r%   s   @r   rZ  rZ  ]  sÙ   ø„ ñð €HØ€Hð
 ØØØØØØØØØØØõaóF*!óX
BóBò&òð /?ó 
,ó2ó`óDHò	%óMòB&ò#òJTó<
ó4(ò$5òJò'ó/õò"ò*òóóöFr   rZ  c                   óL   ‡ — e Zd Z	 	 	 	 	 	 dˆ fd„	Zed„ «       Zˆ fd„Zd„ Zˆ xZS )rü  c	           
      ó  •— t        ‰| �  ||f||||||dœ|	¤Ž | j                  j                  | j                  «      \  }
| _        | _        t        |
«      \  }}| j                  j                  |   | _	        |
| _
        d | _        y )N)rý  rù  Ú
autocommitr¾   Ú
cache_typerú  )r   r   ru   rŠ  r3   rƒ  r„  r   rd  Úsrc_fsÚsrc_pathÚ_f)r   ru   r3   rý  rù  r&  r'  rú  r¾   r§   r�  r<   rÝ   r   s                €r   r   zReferenceFile.__init__ñ  s�   ø€ ô 	‰ÑØØð
	
ð Ø!Ø!ØØ!Ø'ñ
	
ð ò
	
ð -1¯G©G×,?Ñ,?ÀÇ	Á	Ó,JÑ)ˆ�T”Z ¤Ü$ [Ó1‰ˆ�!Ø—g‘g—k‘k (Ñ+ˆŒØ#ˆŒØˆ�r   c                 ó  — | j                   �| j                   j                  rY | j                  j                  | j                  f| j
                  | j                  | j                  ddœ| j                  ¤Ž| _         | j                   S )NÚnone)rý  rù  r&  r'  )	r*  Úclosedr(  rû  r)  rý  Ú	blocksizer&  r§   r   s    r   rË   zReferenceFile.f  sj   € à�7‰7ˆ?˜dŸg™gŸnšnØ'�d—k‘k×'Ñ'Ø—‘ðà—Y‘YØŸ>™>ØŸ?™?Ø!ñð —+‘+ñˆDŒGð �w‰wˆr   c                 ól   •— | j                   �| j                   j                  «        t        ‰| �  «       S r   )r*  Úcloser   )r   r   s    €r   r0  zReferenceFile.close  s&   ø€ Ø�7‰7ÐØ�G‰G�M‰MŒOÜ‰w‰}‹Ðr   c                 óØ   — || j                   z   }t        || j                   z   | j                  «      }| j                  j	                  |«       | j                  j                  ||z
  «      S r   )rƒ  Úminr„  rË   Úseekr  )r   rƒ  r„  s      r   Ú_fetch_rangezReferenceFile._fetch_range   sP   € Ø˜Ÿ
™
Ñ"ˆÜ�#˜Ÿ
™
Ñ" D§H¡HÓ-ˆØ�‰�‰�EÔØ�v‰v�{‰{˜3 ™;Ó'Ð'r   )r^  ÚdefaultTÚ	readaheadNN)	r!   r"   r#   r   rW  rË   r0  r4  r$   r%   s   @r   rü  rü  ð  s:   ø„ ð
 ØØØØØõð: ñ
ó ð
ôö
(r   rü  )2r�  Úcollectionsr‹   rO  Úloggingrî   r™  Ú	functoolsr   r   Útypingr   r   Úfsspec.corert   Úfsspec.specr   ÚujsonrD   ry   Úfsspec.asynr   Úfsspec.callbacksr	   r
   r   r   Ú#fsspec.implementations.asyn_wrapperr   Úfsspec.utilsr   r   r   Ú	getLoggerrk  ÚRuntimeErrorr   r+   r6   r=   ÚabcÚ
ValuesViewr?   Ú	ItemsViewrS   r_   ÚMutableMappingra   rZ  rü  rQ   r   r   Ú<module>rH     s  ðÛ Û Û 	Û Û Û Û 	Ý Ý ß )ã Ý ,ðÛõ
 (Ý -ß 8Ñ 8Ý F÷ñ ð 
ˆ×	Ñ	Ð-Ó	.€ôT˜Lô Tò"ò?òô
B�[—_‘_×/Ñ/ô 
BôA�K—O‘O×-Ñ-ô Aò
ô@˜+Ÿ/™/×8Ñ8ô @ôDP
F˜/ô P
Fôf4(Ð(õ 4(øð& ò ÙÛùðús   ¼D ÄDÄD