o
    uyiS                     @   s  d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZG d d	lHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ d
Z`eEfdee?ePf deeaedeGf f defddZbdee?ePf de9fddZcG dd de@e9 Zded Zedee?ePf dee?ePf de9fddZfeEeEfdee?ePf dee?ePf deeaedeGf f deeaedef f def
ddZgG dd deZhG dd de>ePe9f ZiG d d! d!e>ePef ZjG d"d# d#e=eP Zkd$S )%    )Enum)CallableDictListOptionalTupleUnion)BinaryDecoder)BinaryReaderBooleanReader
DateReaderDecimalReaderDefaultReaderDoubleReaderFixedReaderFloatReaderIntegerReader
ListReader	MapReader
NoneReaderOptionReaderReaderStringReaderStructReader
TimeReaderTimestampNanoReaderTimestampReaderTimestamptzNanoReaderTimestamptzReaderUnknownReader
UUIDReader)BinaryWriterBooleanWriter
DateWriterDecimalWriterDefaultWriterDoubleWriterFixedWriterFloatWriterIntegerWriter
ListWriter	MapWriterOptionWriterStringWriterStructWriterTimestampNanoWriterTimestamptzNanoWriterTimestamptzWriterTimestampWriter
TimeWriterUnknownWriter
UUIDWriterWriter)ResolveError)PartnerAccessorPrimitiveWithPartnerVisitorSchemaSchemaVisitorPerPrimitiveTypepromotevisitvisit_with_partner)
EMPTY_DICTRecordStructProtocol)
BinaryTypeBooleanTypeDateTypeDecimalType
DoubleType	FixedType	FloatTypeIcebergTypeIntegerTypeListTypeLongTypeMapTypeNestedFieldPrimitiveType
StringType
StructTypeTimestampNanoTypeTimestampTypeTimestamptzNanoTypeTimestamptzTypeTimeTypeUnknownTypeUUIDTypefile_schema
read_types.returnc                 C   s   t | | |S )aM  Construct a reader from a file schema.

    Args:
        file_schema (Schema | IcebergType): The schema of the Avro file.
        read_types (Dict[int, Callable[..., StructProtocol]]): Constructors for structs for certain field-ids

    Raises:
        NotImplementedError: If attempting to resolve an unrecognized object type.
    )resolve_reader)rZ   r[    r^   Z/home/ubuntu/maya3_transcribe/venv/lib/python3.10/site-packages/pyiceberg/avro/resolver.pyconstruct_readerv   s   r`   c                 C   s
   t | tS )zConstruct a writer from a file schema.

    Args:
        file_schema (Schema | IcebergType): The schema of the Avro file.

    Raises:
        NotImplementedError: If attempting to resolve an unrecognized object type.
    )r=   CONSTRUCT_WRITER_VISITOR)rZ   r^   r^   r_   construct_writer   s   
	rb   c                   @   s  e Zd ZdZdededefddZdedee defd	d
Z	de
dedefddZdededefddZdedededefddZdedefddZdedefddZdedefdd Zd!edefd"d#Zd$edefd%d&Zd'edefd(d)Zd*edefd+d,Zd-edefd.d/Zd0e defd1d2Z!d3e"defd4d5Z#d6e$defd7d8Z%d9e&defd:d;Z'd<e(defd=d>Z)d?e*defd@dAZ+dBe,defdCdDZ-dEe.defdFdGZ/dHe0defdIdJZ1dKS )LConstructWriterz/Construct a writer tree from an Iceberg schema.schemastruct_resultr\   c                 C   s   |S Nr^   )selfrd   re   r^   r^   r_   rd         zConstructWriter.schemastructfield_resultsc                 C   s   t tdd t|D S )Nc                 s   s    | ]	\}}||fV  qd S rf   r^   ).0posresultr^   r^   r_   	<genexpr>   s    z)ConstructWriter.struct.<locals>.<genexpr>)r.   tuple	enumerate)rg   ri   rj   r^   r^   r_   ri      s   zConstructWriter.structfieldfield_resultc                 C   s   |j r|S t|S rf   requiredr,   )rg   rq   rr   r^   r^   r_   rq         zConstructWriter.field	list_typeelement_resultc                 C   s   t |S rf   )r*   )rg   rv   rw   r^   r^   r_   list   s   zConstructWriter.listmap_type
key_resultvalue_resultc                 C   s
   t ||S rf   )r+   )rg   ry   rz   r{   r^   r^   r_   map   s   
zConstructWriter.map
fixed_typec                 C      t t|S rf   r'   len)rg   r}   r^   r^   r_   visit_fixed      zConstructWriter.visit_fixeddecimal_typec                 C      t |j|jS rf   r$   	precisionscale)rg   r   r^   r^   r_   visit_decimal      zConstructWriter.visit_decimalboolean_typec                 C      t  S rf   r"   )rg   r   r^   r^   r_   visit_boolean      zConstructWriter.visit_booleaninteger_typec                 C   r   rf   r)   )rg   r   r^   r^   r_   visit_integer   r   zConstructWriter.visit_integer	long_typec                 C   r   rf   r   )rg   r   r^   r^   r_   
visit_long   r   zConstructWriter.visit_long
float_typec                 C   r   rf   r(   )rg   r   r^   r^   r_   visit_float   r   zConstructWriter.visit_floatdouble_typec                 C   r   rf   r&   )rg   r   r^   r^   r_   visit_double   r   zConstructWriter.visit_double	date_typec                 C   r   rf   r#   )rg   r   r^   r^   r_   
visit_date   r   zConstructWriter.visit_date	time_typec                 C   r   rf   r3   )rg   r   r^   r^   r_   
visit_time   r   zConstructWriter.visit_timetimestamp_typec                 C   r   rf   r2   )rg   r   r^   r^   r_   visit_timestamp   r   zConstructWriter.visit_timestamptimestamp_ns_typec                 C   r   rf   r/   )rg   r   r^   r^   r_   visit_timestamp_ns   r   z"ConstructWriter.visit_timestamp_nstimestamptz_typec                 C   r   rf   r1   )rg   r   r^   r^   r_   visit_timestamptz   r   z!ConstructWriter.visit_timestamptztimestamptz_ns_typec                 C   r   rf   r0   )rg   r   r^   r^   r_   visit_timestamptz_ns   r   z$ConstructWriter.visit_timestamptz_nsstring_typec                 C   r   rf   r-   )rg   r   r^   r^   r_   visit_string   r   zConstructWriter.visit_string	uuid_typec                 C   r   rf   r5   )rg   r   r^   r^   r_   
visit_uuid   r   zConstructWriter.visit_uuidbinary_typec                 C   r   rf   r!   )rg   r   r^   r^   r_   visit_binary   r   zConstructWriter.visit_binaryunknown_typec                 C   r   rf   r4   )rg   r   r^   r^   r_   visit_unknown   r   zConstructWriter.visit_unknownN)2__name__
__module____qualname____doc__r:   r6   rd   rQ   r   ri   rN   rq   rK   rx   rM   r|   rG   r   rE   r   rC   r   rJ   r   rL   r   rH   r   rF   r   rD   r   rV   r   rS   r   rR   r   rU   r   rT   r   rP   r   rX   r   rB   r   rW   r   r^   r^   r^   r_   rc      s0    rc   record_schemac                 C   s"   | |krt |S t|| t t S )aO  Resolve the file and read schema to produce a reader.

    Args:
        record_schema (Schema | IcebergType): The schema of the record in memory.
        file_schema (Schema | IcebergType): The schema of the file that will be written

    Raises:
        NotImplementedError: If attempting to resolve an unrecognized object type.
    )rb   r>   WriteSchemaResolverSchemaPartnerAccessor)r   rZ   r^   r^   r_   resolve_writer   s   r   read_schema
read_enumsc                 C   s   t | |t||t S )a>  Resolve the file and read schema to produce a reader.

    Args:
        file_schema (Schema | IcebergType): The schema of the Avro file.
        read_schema (Schema | IcebergType): The requested read schema which is equal, subset or superset of the file schema.
        read_types (Dict[int, Callable[..., StructProtocol]]): A dict of types to use for struct data.
        read_enums (Dict[int, Callable[..., Enum]]): A dict of fields that have to be converted to an enum.

    Raises:
        NotImplementedError: If attempting to resolve an unrecognized object type.
    )r>   ReadSchemaResolverr   )rZ   r   r[   r   r^   r^   r_   r]      s   r]   c                   @   sp   e Zd ZU dZdZedef ed< eed< dedef deddfdd	Z	d
e
defddZd
e
ddfddZdS )
EnumReaderz5An Enum reader to wrap primitive values into an Enum.enumreader.r   r   r\   Nc                 C   s   || _ || _d S rf   r   )rg   r   r   r^   r^   r_   __init__  s   
zEnumReader.__init__decoderc                 C   s   |  | j|S rf   )r   r   readrg   r   r^   r^   r_   r     ru   zEnumReader.readc                 C   s   d S rf   r^   r   r^   r^   r_   skip  rh   zEnumReader.skip)r   r   r   r   	__slots__r   r   __annotations__r   r   r	   r   r   r^   r^   r^   r_   r      s   
 r   c                
       s  e Zd Zdedee dedefddZdedee de	e defd	d
Z
dedee dedefddZdedee dedefddZdedee dededef
ddZdedee def fddZdedee defd d!Zd"edee defd#d$Zd%edee defd&d'Zd(edee defd)d*Zd+edee defd,d-Zd.edee defd/d0Zd1edee defd2d3Z d4e!dee defd5d6Z"d7e#dee defd8d9Z$d:e%dee defd;d<Z&d=e'dee defd>d?Z(d@e)dee defdAdBZ*dCe+dee defdDdEZ,dFe-dee defdGdHZ.dIe/dee defdJdKZ0dLe1dee defdMdNZ2dOe3dee defdPdQZ4  Z5S )Rr   rZ   r   rm   r\   c                 C      |S rf   r^   )rg   rZ   r   rm   r^   r^   r_   rd     rh   zWriteSchemaResolver.schemarecord_structfile_writersc                 C   s   t |tstd| dd t|jD }g }t||jD ];\}}|j|v r2|||j |f q|jrR|j	d urG|d t
||j	df q|jrQtd| q|d |f qtt|dS )Nz2File/write schema are not aligned for struct, got c                 S      i | ]\}}|j |qS r^   field_idrk   rl   rq   r^   r^   r_   
<dictcomp>      z.WriteSchemaResolver.struct.<locals>.<dictcomp>)writervaluez2Field is required, and there is no write default: )field_writers)
isinstancerQ   r7   rp   fieldszipr   appendrt   write_defaultr%   
ValueErrorr.   ro   )rg   rZ   r   r   record_struct_positionsresultsr   
file_fieldr^   r^   r_   ri     s   


zWriteSchemaResolver.structr   record_typefield_writerc                 C      |j r|S t|S rf   rs   )rg   r   r   r   r^   r^   r_   rq   -  ru   zWriteSchemaResolver.fieldfile_list_type	file_listelement_writerc                 C   s   t |jr|S t|S rf   )r*   element_requiredr,   )rg   r   r   r   r^   r^   r_   rx   0  s   zWriteSchemaResolver.listfile_map_typefile_primitive
key_writervalue_writerc                 C   s   t ||jr|S t|S rf   )r+   value_requiredr,   )rg   r   r   r   r   r^   r^   r_   r|   3  s   zWriteSchemaResolver.maprecord_primitivec                    s(   |d ur||krt || t ||S rf   )r<   super	primitive)rg   r   r   	__class__r^   r_   r   8  s   
zWriteSchemaResolver.primitiver   partnerc                 C   r   rf   r   rg   r   r   r^   r^   r_   r   @  r   z!WriteSchemaResolver.visit_booleanr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   C  r   z!WriteSchemaResolver.visit_integerr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   F  r   zWriteSchemaResolver.visit_longr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   I  r   zWriteSchemaResolver.visit_floatr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   L  r   z WriteSchemaResolver.visit_doubler   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   O  r   z!WriteSchemaResolver.visit_decimalr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   R  r   zWriteSchemaResolver.visit_dater   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   U  r   zWriteSchemaResolver.visit_timer   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   X  r   z#WriteSchemaResolver.visit_timestampr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   [  r   z&WriteSchemaResolver.visit_timestamp_nsr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   ^  r   z%WriteSchemaResolver.visit_timestamptzr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   a  r   z(WriteSchemaResolver.visit_timestamptz_nsr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   d  r   z WriteSchemaResolver.visit_stringr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   g  r   zWriteSchemaResolver.visit_uuidr}   c                 C   r~   rf   r   rg   r}   r   r^   r^   r_   r   j  r   zWriteSchemaResolver.visit_fixedr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   m  r   z WriteSchemaResolver.visit_binaryr   c                 C   r   rf   r   rg   r   r   r^   r^   r_   r   p  r   z!WriteSchemaResolver.visit_unknown)6r   r   r   r:   r   rI   r6   rd   rQ   r   ri   rN   rq   rK   rx   rM   r|   rO   r   rC   r   rJ   r   rL   r   rH   r   rF   r   rE   r   rD   r   rV   r   rS   r   rR   r   rU   r   rT   r   rP   r   rX   r   rG   r   rB   r   rW   r   __classcell__r^   r^   r   r_   r     sD    "
"r   c                
       s8  e Zd ZU dZeeedef f ed< eeede	f f ed< e
e ed< eefdeeedef f deeede	f f ddfdd	Zd
edee dedefddZdedee ddfddZdedee ddfddZdedee de
e defddZdedee dedefddZdedee d edefd!d"Zd#ed$ee d%ed&edef
d'd(Zd)ed*ee def fd+d,Zd-ed.ee defd/d0Zd1e d.ee defd2d3Z!d4e"d.ee defd5d6Z#d7e$d.ee defd8d9Z%d:e&d.ee defd;d<Z'd=e(d.ee defd>d?Z)d@e*d.ee defdAdBZ+dCe,d.ee defdDdEZ-dFe.d.ee defdGdHZ/dIe0d.ee defdJdKZ1dLe2d.ee defdMdNZ3dOe4d.ee defdPdQZ5dRe6d.ee defdSdTZ7dUe8d.ee defdVdWZ9dXe:d.ee defdYdZZ;d[e<d.ee defd\d]Z=d^e>d.ee defd_d`Z?  Z@S )ar   r[   r   context.r[   r   r  r\   Nc                 C   s   || _ || _g | _d S rf   r  )rg   r[   r   r^   r^   r_   r   z  s   
zReadSchemaResolver.__init__rd   expected_schemarm   c                 C   r   rf   r^   )rg   rd   r	  rm   r^   r^   r_   rd     rh   zReadSchemaResolver.schemarq   field_partnerc                 C   s   | j |j d S rf   )r  r   r   rg   rq   r
  r^   r^   r_   before_field  ru   zReadSchemaResolver.before_fieldc                 C   s   | j   d S rf   )r  popr  r^   r^   r_   after_field  r   zReadSchemaResolver.after_fieldri   expected_structfield_readersc           
         s  t jdkrjt nt}j|t}|s!ttt|||S t	|t
s-td| dd t|jD  fddt|j|D }dd |jD }t|jD ]0\}}	|	j|vrt	|	trq|	jd urq||t|	jf qS|	jr{t|	 d	||t f qStt|||S )
Nr   1File/read schema are not aligned for struct, got c                 S   r   r^   r   r   r^   r^   r_   r     r   z-ReadSchemaResolver.struct.<locals>.<dictcomp>c                    s<   g | ]\}} |jj |j  s|nt |fqS r^   )getr   r   r   )rk   rq   result_reader	enum_typeexpected_positionsrg   r^   r_   
<listcomp>  s    
z-ReadSchemaResolver.struct.<locals>.<listcomp>c                 S   s   h | ]}|j qS r^   r   )rk   rq   r^   r^   r_   	<setcomp>  s    z,ReadSchemaResolver.struct.<locals>.<setcomp>z1 is non-optional, and not part of the file schema)r   r  STRUCT_ROOTr[   r  r@   r   ro   rp   r   rQ   r7   r   r   r   rN   initial_defaultr   r   rt   r   )
rg   ri   r  r  read_struct_idstruct_callabler   file_fieldsrl   
read_fieldr^   r  r_   ri     s(   

	
zReadSchemaResolver.structexpected_fieldfield_readerc                 C   r   rf   )rt   r   )rg   rq   r  r   r^   r^   r_   rq     ru   zReadSchemaResolver.fieldrv   expected_listelement_readerc                 C   s4   |rt |tstd| t|jr|S t|S Nz/File/read schema are not aligned for list, got )r   rK   r7   r   r   r   )rg   rv   r!  r"  r^   r^   r_   rx     s   zReadSchemaResolver.listry   expected_map
key_readervalue_readerc                 C   s6   |rt |tstd| t||jr|S t|S Nz.File/read schema are not aligned for map, got )r   rM   r7   r   r   r   )rg   ry   r$  r%  r&  r^   r^   r_   r|     s   zReadSchemaResolver.mapr   expected_primitivec                    sF   |d urt |tstd| d| ||krt|| t ||S )Nz%File/read schema are not aligned for z, got )r   rO   r7   r<   r   r   )rg   r   r(  r   r^   r_   r     s   

zReadSchemaResolver.primitiver   r   c                 C   r   rf   )r   r   r^   r^   r_   r     r   z ReadSchemaResolver.visit_booleanr   c                 C   r   rf   r   r   r^   r^   r_   r     r   z ReadSchemaResolver.visit_integerr   c                 C   r   rf   r)  r   r^   r^   r_   r     r   zReadSchemaResolver.visit_longr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   zReadSchemaResolver.visit_floatr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   zReadSchemaResolver.visit_doubler   c                 C   r   rf   )r   r   r   r   r^   r^   r_   r     r   z ReadSchemaResolver.visit_decimalr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   zReadSchemaResolver.visit_dater   c                 C   r   rf   )r   r   r^   r^   r_   r     r   zReadSchemaResolver.visit_timer   c                 C   r   rf   )r   r   r^   r^   r_   r     r   z"ReadSchemaResolver.visit_timestampr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   z%ReadSchemaResolver.visit_timestamp_nsr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   z$ReadSchemaResolver.visit_timestamptzr   c                 C   r   rf   )r   r   r^   r^   r_   r     r   z'ReadSchemaResolver.visit_timestamptz_nsr   c                 C   r   rf   )r   r  r^   r^   r_   r     r   zReadSchemaResolver.visit_stringr   c                 C   r   rf   )r    r  r^   r^   r_   r     r   zReadSchemaResolver.visit_uuidr}   c                 C   r~   rf   )r   r   r  r^   r^   r_   r     r   zReadSchemaResolver.visit_fixedr   c                 C   r   rf   )r
   r  r^   r^   r_   r     r   zReadSchemaResolver.visit_binaryr   c                 C   r   rf   )r   r  r^   r^   r_   r     r   z ReadSchemaResolver.visit_unknown)Ar   r   r   r   r   intr   rA   r   r   r   r?   r   r:   r   rI   r   rd   rN   r  r  rQ   ri   rq   rK   rx   rM   r|   rO   r   rC   r   rJ   r   rL   r   rH   r   rF   r   rE   r   rD   r   rV   r   rS   r   rR   r   rU   r   rT   r   rP   r   rX   r   rG   r   rB   r   rW   r   r  r^   r^   r   r_   r   t  sN   
 
	"%""r   c                	   @   s   e Zd Zdee dee fddZdee dededee fddZd	ee dee fd
dZ	dee dee fddZ
dee dee fddZdS )r   r   r\   c                 C   s    t |tr	| S td| )Nz1File/read schema are not aligned for schema, got )r   r:   	as_structr7   )rg   r   r^   r^   r_   schema_partner   s   
z$SchemaPartnerAccessor.schema_partnerr   
field_namec                 C   s2   t |tr||}ntd| |r|jS d S )Nr  )r   rQ   rq   r7   
field_type)rg   r   r   r-  rq   r^   r^   r_   r
    s   
z#SchemaPartnerAccessor.field_partnerpartner_listc                 C      t |tr|jS td| r#  )r   rK   element_typer7   )rg   r/  r^   r^   r_   list_element_partner     
z*SchemaPartnerAccessor.list_element_partnerpartner_mapc                 C   r0  r'  )r   rM   key_typer7   rg   r4  r^   r^   r_   map_key_partner  r3  z%SchemaPartnerAccessor.map_key_partnerc                 C   r0  r'  )r   rM   
value_typer7   r6  r^   r^   r_   map_value_partner  r3  z'SchemaPartnerAccessor.map_value_partnerN)r   r   r   r   rI   r,  r*  strr
  r2  r7  r9  r^   r^   r^   r_   r     s    "r   N)lr   r   typingr   r   r   r   r   r   pyiceberg.avro.decoderr	   pyiceberg.avro.readerr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    pyiceberg.avro.writerr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   pyiceberg.exceptionsr7   pyiceberg.schemar8   r9   r:   r;   r<   r=   r>   pyiceberg.typedefr?   r@   rA   pyiceberg.typesrB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r  r*  r`   rb   rc   ra   r   r]   r   r   r   r   r^   r^   r^   r_   <module>   s\    	d`$	d

F





a 