o
    :i                     @   s   d dl mZ d dlmZmZ d dlmZmZmZ d dl	Z
d dlmZ d dlmZ d dlmZ d dlmZ d	eeB d
edefddZG dd deeZdS )    )ABC)countislice)Any	GeneratorIterableN)common_types)Record)ExtendedPointId)Workeriterablesizereturnc                 c   s>    t | }|rtt||}t|dkrdS |V  |sdS dS )zF
    >>> list(iter_batch([1,2,3,4,5], 3))
    [[1, 2, 3], [4, 5]]
    r   N)iterlistr   len)r   r   source_iterb r   l/home/aiteam/pcaa-dev/dashboard-backend/venv/lib/python3.10/site-packages/qdrant_client/uploader/uploader.py
iter_batch   s   r   c                   @   s   e Zd ZedeeejB  dedefddZ	ede
eejf ejB eej B dee
 dB d	ee dB dedef
d
dZedejdedee fddZede
eejf dedee
eee f  fddZdS )BaseUploaderrecords
batch_sizer   c           	      c   sd    t ||}|D ]'}g g g }}}|D ]}||j ||j ||j q|||fV  qd S N)r   appendidvectorpayload)	clsr   r   record_batchesrecord_batch	ids_batchvectors_batchpayload_batchrecordr   r   r   iterate_records_batches   s   
z$BaseUploader.iterate_records_batchesvectorsr   Nidsc                 c   s    |d u rdd t  D }nt||}|d u r dd t  D }nt||}t|tjr2| ||}nt|trItdd | D rI| 	||}nt||}t
|||E d H  d S )Nc                 s       | ]}d V  qd S r   r   .0_r   r   r   	<genexpr>5       z/BaseUploader.iterate_batches.<locals>.<genexpr>c                 s   r)   r   r   r*   r   r   r   r-   :   r.   c                 s   s    | ]	}t |tjV  qd S r   )
isinstancenpndarray)r+   valuer   r   r   r-   @   s    
)r   r   r/   r0   r1   _vector_batches_from_numpydictanyvalues(_vector_batches_from_numpy_named_vectorszip)r   r'   r   r(   r   ids_batchespayload_batchesvector_batchesr   r   r   iterate_batches,   s   


zBaseUploader.iterate_batchesc                 c   s4    t d| jd |D ]}| |||   V  q
d S )Nr   )rangeshapetolist)r'   r   ir   r   r   r3   I   s   z'BaseUploader._vector_batches_from_numpyc                 #   sh    t tdd   D dksJ dtt  jd } fddt|D }t||E d H  d S )Nc                 S   s   g | ]}|j d  qS )r   )r>   )r+   arrr   r   r   
<listcomp>S   s    zIBaseUploader._vector_batches_from_numpy_named_vectors.<locals>.<listcomp>   z8Each named vector should have the same number of vectorsr   c                 3   s(    | ]  fd d  D V  qdS )c                    s   i | ]}||     qS r   )r?   )r+   name)r@   r'   r   r   
<dictcomp>Y   s    zSBaseUploader._vector_batches_from_numpy_named_vectors.<locals>.<genexpr>.<dictcomp>N)keys)r+   r'   )r@   r   r-   X   s
    
zHBaseUploader._vector_batches_from_numpy_named_vectors.<locals>.<genexpr>)r   setr6   nextr   r>   r=   r   )r'   r   num_vectorsr;   r   rG   r   r7   N   s    
z5BaseUploader._vector_batches_from_numpy_named_vectors)__name__
__module____qualname__classmethodr   r	   typesPointStructintr&   r4   str
NumpyArrayVectorStructr
   r<   staticmethodfloatr3   r   r7   r   r   r   r   r      s>    

r   )abcr   	itertoolsr   r   typingr   r   r   numpyr0   qdrant_client.conversionsr   rO   &qdrant_client.conversions.common_typesr	   qdrant_client.http.modelsr
    qdrant_client.parallel_processorr   rQ   r   r   r   r   r   r   <module>   s    