o
    i                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 er&d dlZdZe Zee ddd	 Zd
Zdedee fddZG dd de
ZG dd de
Zdee ddfddZG dd dZdS )    N)TYPE_CHECKINGLiteral)Field)BitMapFrozenBitMap)IcebergBaseModels   PFA1         zreferenced-data-fileplreturnc                 C   s   t j| dd dd}| dd  } g }d}t|D ]a}t j| dd dd}|dk r1td| ||kr9td|tkrHtd	| d
t d| dd  } ||d k rc|t |d7 }||d k sTt | }| t	|
 d  } || |}q|S )Nr      little	byteorder   zInvalid unsigned key: z&Keys must be sorted in ascending orderzKey z is too large, max z) to maintain compatibility with Java implr
   )int
from_bytesrange
ValueErrorMAX_JAVA_SIGNEDappendEMPTY_BITMAPr   deserializelen	serialize)r   number_of_bitmapsbitmapslast_key_keybm r#   T/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/pyiceberg/table/puffin.py_deserialize_bitmap#   s,   

r%   c                   @   s   e Zd ZU e Zed ed< e Zee	 ed< eddZ
e	ed< eddZe	ed< e Ze	ed	< e Ze	ed
< edddZedB ed< eedZeeef ed< dS )PuffinBlobMetadatazdeletion-vector-v1typefieldszsnapshot-id)aliassnapshot_idzsequence-numbersequence_numberoffsetlengthzcompression-codecN)r)   defaultcompression_codecdefault_factory
properties)__name__
__module____qualname__r   r'   r   __annotations__r(   listr   r*   r+   r,   r-   r/   strdictr2   r#   r#   r#   r$   r&   A   s   
 r&   c                   @   s:   e Zd ZU e Zee ed< eedZ	ee
e
f ed< dS )Footerblobsr0   r2   N)r3   r4   r5   r   r;   r7   r&   r6   r9   r2   r8   r#   r#   r#   r$   r:   L   s   
 r:   r   pa.ChunkedArrayc                 C   s    dd l }|dd t| D S )Nr   c                 3   s&    | ]\ } fd d|D V  qdS )c                    s   g | ]} d > | qS )    r#   ).0poskey_posr#   r$   
<listcomp>T   s    z7_bitmaps_to_chunked_array.<locals>.<genexpr>.<listcomp>Nr#   )r>   bitmapr#   r@   r$   	<genexpr>T   s   $ z,_bitmaps_to_chunked_array.<locals>.<genexpr>)pyarrowchunked_array	enumerate)r   par#   r#   r$   _bitmaps_to_chunked_arrayQ   s   rI   c                   @   sR   e Zd ZU eed< eeee f ed< de	ddfddZ
deedf fd	d
ZdS )
PuffinFilefooter_deletion_vectorspuffinr   Nc                    s    d d  dd  fD ]}|t krtdt d|q dd }|d dkr-tdtj dd d	d
}t |d  d | _ dd    fdd| jjD | _d S )Nr   z Incorrect magic bytes, expected z, got ir   zCThe Puffin-file has a compressed footer, which is not yet supportedir   r      r   c                    s.   i | ]}|j t t |j|j|j  qS r#   )r2   PROPERTY_REFERENCED_DATA_FILEr%   r,   r-   )r>   blobrM   r#   r$   
<dictcomp>n   s     z'PuffinFile.__init__.<locals>.<dictcomp>)	MAGIC_BYTESr   r   r   r:   model_validate_jsonrK   r;   rL   )selfrM   magic_bytesflagsfooter_payload_size_intr#   rR   r$   __init__[   s   
zPuffinFile.__init__r<   c                 C   s   dd | j  D S )Nc                 S   s   i | ]	\}}|t |qS r#   )rI   )r>   pathr   r#   r#   r$   rS   t   s    z(PuffinFile.to_vector.<locals>.<dictcomp>)rL   items)rV   r#   r#   r$   	to_vectors   s   zPuffinFile.to_vector)r3   r4   r5   r:   r6   r9   r8   r7   r   bytesrZ   r]   r#   r#   r#   r$   rJ   W   s
   
 rJ   )mathtypingr   r   pydanticr   	pyroaringr   r   pyiceberg.typedefr   rE   rH   rT   r   r   powr   rP   r^   r7   r%   r&   r:   rI   rJ   r#   r#   r#   r$   <module>   s    