o
    FDi                     @   sj   d dl mZ d dlmZmZ G dd dZG dd dZG dd deZG d	d
 d
eZG dd dZ	dS )    )nestedcolumn)BufferedReaderBufferedWriterc                   @   s0   e Zd ZdZdZdefddZdefddZd	S )
	BlockInfoFwriterc                    sZ   | dI d H  || jI d H  | dI d H  || jI d H  | dI d H  d S )N      r   )write_varintwrite_uint8is_overflowswrite_int32
bucket_num)selfr    r   K/var/www/Datamplify/venv/lib/python3.10/site-packages/asynch/proto/block.pywrite	   s   zBlockInfo.writereaderc                    sR   	 |  I d H }|sd S |dkrt| I d H | _n|dkr(| I d H | _q)NTr   r	   )read_varintbool
read_uint8r   read_uint32r   )r   r   	field_numr   r   r   read   s   zBlockInfo.readN)	__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r      s
    r   c                   @   s^   e Zd Z				dddZdd Zedd Zed	d
 Zdd Zdd Z	dd Z
dd ZdS )	BaseBlockNFc                 C   s0   |pg | _ || _|pt | _| |pg | _d S N)columns_with_typestypes_checkr   info	normalizedata)r   r   r#   r!   r    r   r   r   __init__   s   
zBaseBlock.__init__c                 C   s   |S r   r   r   r#   r   r   r   r"   +      zBaseBlock.normalizec                 C      t r   NotImplementedErrorr   r   r   r   num_columns.      zBaseBlock.num_columnsc                 C   r'   r   r(   r*   r   r   r   num_rows2   r,   zBaseBlock.num_rowsc                 C   r'   r   r(   r*   r   r   r   get_columns6   r&   zBaseBlock.get_columnsc                 C   r'   r   r(   r*   r   r   r   get_rows9   r&   zBaseBlock.get_rowsc                 C   r'   r   r(   r   indexr   r   r   get_column_by_index<   r&   zBaseBlock.get_column_by_indexc                 C   s   t t| j S r   )listzipr#   r*   r   r   r   
transposed?   s   zBaseBlock.transposed)NNNF)r   r   r   r$   r"   propertyr+   r-   r.   r/   r2   r5   r   r   r   r   r      s    


r   c                   @   sT   e Zd Zdd Zedd Zedd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )ColumnOrientedBlockc                 C   s    |sg S |  | | | |S r   )_check_number_of_columns_check_all_columns_equal_lengthr%   r   r   r   r"   D   s
   

zColumnOrientedBlock.normalizec                 C   
   t | jS r   lenr#   r*   r   r   r   r+   L      
zColumnOrientedBlock.num_columnsc                 C   s   | j r
t| jd S dS Nr   )r+   r<   r#   r*   r   r   r   r-   P   s   zColumnOrientedBlock.num_rowsc                 C      | j S r   r#   r*   r   r   r   r.   T      zColumnOrientedBlock.get_columnsc                 C      |   S r   r5   r*   r   r   r   r/   W      zColumnOrientedBlock.get_rowsc                 C   s
   | j | S r   r@   r0   r   r   r   r2   Z   s   
z'ColumnOrientedBlock.get_column_by_indexc                 C   s6   t | j}t |}||krd| d| }t|d S )N	Expected  columns, got )r<   r   
ValueError)r   r#   expected_row_lengotmsgr   r   r   r8   ]   s   
z,ColumnOrientedBlock._check_number_of_columnsc                 C   sB   t |d }|D ]}t |}||krd| d| }t|qd S )Nr   rE   z rows, got )r<   rG   )r   r#   expectedcolumnrI   rJ   r   r   r   r9   e   s   z3ColumnOrientedBlock._check_all_columns_equal_lengthN)r   r   r   r"   r6   r+   r-   r.   r/   r2   r8   r9   r   r   r   r   r7   C   s    

r7   c                   @   s   e Zd ZefZeefZee Zdd Z	e
dd Ze
dd Zdd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )RowOrientedBlockc                 C   sF   |sg S |d }| j r| | t|tr| | |S | | |S r>   )r    _check_row_type
isinstancedict_mutate_dicts_to_rows_check_rows)r   r#   	first_rowr   r   r   r"   t   s   



zRowOrientedBlock.normalizec                 C   s,   | j d ur
t| j S | jrt| jd S dS r>   )r   r<   r-   r#   r*   r   r   r   r+      s   

zRowOrientedBlock.num_columnsc                 C   r:   r   r;   r*   r   r   r   r-      r=   zRowOrientedBlock.num_rowsc                 C   rB   r   rC   r*   r   r   r   r.      rD   zRowOrientedBlock.get_columnsc                 C   r?   r   r@   r*   r   r   r   r/      rA   zRowOrientedBlock.get_rowsc                    s    fdd| j D S )Nc                    s   g | ]}|  qS r   r   ).0rowr1   r   r   
<listcomp>   s    z8RowOrientedBlock.get_column_by_index.<locals>.<listcomp>r@   r0   r   rV   r   r2      s   z$RowOrientedBlock.get_column_by_indexc                 C   s$   d}| j r| j}| || j| d S )NF)r    _check_dict_row_type_pure_mutate_dicts_to_rowsr   )r   r#   check_row_typer   r   r   rQ      s   z&RowOrientedBlock._mutate_dicts_to_rowsc              	   C   s   g }|D ]}d }|d  drt|d }||d |f qt|D ]/\}}|r.|| g }	|D ]\}
}|d u rB|	||
  q2|	| ||
 || q2|	||< q$|S )Nr   Nestedr   )
startswithr   get_columns_with_typesappend	enumeraterY   )r   r#   r   rZ   columns_with_cwtxcwtirU   new_datanamer   r   r   rY      s    
z+RowOrientedBlock._pure_mutate_dicts_to_rowsc                 C   s\   t | j}t |d }||krd| d| }t|| jr*| j}|D ]}|| q#d S d S )Nr   rE   rF   )r<   r   rG   r    _check_tuple_row_type)r   r#   rH   rI   rJ   rZ   rU   r   r   r   rR      s   

zRowOrientedBlock._check_rowsc                 C   $   t || jstdt| dd S )NUnsupported row type: z". dict, list or tuple is expected.)rO   supported_row_types	TypeErrortyper   rU   r   r   r   rN         z RowOrientedBlock._check_row_typec                 C   rg   )Nrh   z. list or tuple is expected.)rO   tuple_row_typesrj   rk   rl   r   r   r   rf      rm   z&RowOrientedBlock._check_tuple_row_typec                 C   rg   )Nrh   z. dict is expected.)rO   dict_row_typesrj   rk   rl   r   r   r   rX      rm   z%RowOrientedBlock._check_dict_row_typeN)r   r   r   rP   ro   r3   tuplern   ri   r"   r6   r+   r-   r.   r/   r2   rQ   rY   rR   rN   rf   rX   r   r   r   r   rM   o   s$    

rM   c                   @   s"   e Zd ZdefddZdd ZdS )BlockStreamProfileInfor   c                 C   s.   d| _ d| _d| _d| _d| _d| _|| _d S )Nr   F)rowsblocksbytesapplied_limitrows_before_limitcalculated_rows_before_limitr   )r   r   r   r   r   r$      s   
zBlockStreamProfileInfo.__init__c                    sz   | j  I d H | _| j  I d H | _| j  I d H | _t| j  I d H | _| j  I d H | _t| j  I d H | _	d S r   )
r   r   rr   rs   rt   r   r   ru   rv   rw   r*   r   r   r   r      s   zBlockStreamProfileInfo.readN)r   r   r   r   r$   r   r   r   r   r   rq      s    	rq   N)
asynch.proto.columnsr   asynch.proto.streams.bufferedr   r   r   r   r7   rM   rq   r   r   r   r   <module>   s    %,j