§
     �’j¸  ã                   ó˜  — d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 	 	 dded	e
d
ee	j                 dededdfd„Z	 	 	 ddededee
         dz  dededdfd„Zded	e
defd„Z	 d dedee
         dz  dee
         fd„Zdedee
         dee
         fd„Zdeded	e
ddfd„Zded	e
dee
e	j        f         ddfd„Z	 d!deded	e
deddf
d„ZdS )"é    N)ÚIterable)Úto_dictÚmodel_fields)Ú
QdrantBase)Úmodelsé   ç      @ÚclientÚcollection_nameÚpointsÚmax_attemptsÚpauseÚreturnc           	      ó<  — d}||k    r‚	 |                       ||d¬¦  «         d S # t          $ rT}t          d|› d|› d|› �¦  «         ||k     r't          d|› d�¦  «         t          j        |¦  «         |dz  }Y d }~nd }~ww xY w||k    °‚t          d	|› d
�¦  «        ‚)Né   T)r   r   ÚwaitzException: z
, attempt ú/zNext attempt in z secondszFailed to upload points after z	 attempts)Úupload_pointsÚ	ExceptionÚprintÚtimeÚsleep)r
   r   r   r   r   ÚattemptsÚes          úKC:\Projects\DSCons\.venv\Lib\site-packages\qdrant_client\migrate\migrate.pyÚupload_with_retryr   	   sý   € ð €HØ
�lÒ
"Ð
"ð	Ø× Ò Ø /ØØð !ñ ô ð ð
 ˆFøÝð 	ð 	ð 	ÝÐF ÐFÐF¨XÐFÐF¸ÐFÐFÑGÔGÐGØ˜,Ò&Ð&ÝÐ8¨Ð8Ð8Ð8Ñ9Ô9Ð9Ý”
˜5Ñ!Ô!Ð!Ø˜‰MˆHˆHˆHˆHˆHˆHøøøøð	øøøð �lÒ
"Ð
"õ ÐL°\ÐLÐLÐLÑ
MÔ
MÐMs   Š$ ¤
B®A
A=Á=BFéd   Úsource_clientÚdest_clientÚcollection_namesÚrecreate_on_collisionÚ
batch_sizec                 ó¦  ‡ — t          ‰ |¦  «        }t          ˆ fd„|D ¦   «         ¦  «        rt          d¦  «        ‚t          ||¦  «        }t	          |¦  «        t	          |¦  «        z
  }|r|st          d|› �¦  «        ‚|D ]%}t          ‰ ||¦  «         t          ‰ |||¦  «         Œ&|D ]%}t          ‰ ||¦  «         t          ‰ |||¦  «         Œ&dS )aE  
    Migrate collections from source client to destination client

    Args:
        source_client (QdrantBase): Source client
        dest_client (QdrantBase): Destination client
        collection_names (list[str], optional): List of collection names to migrate.
            If None - migrate all source client collections. Defaults to None.
        recreate_on_collision (bool, optional): If True - recreate collection if it exists, otherwise
            raise ValueError.
        batch_size (int, optional): Batch size for scrolling and uploading vectors. Defaults to 100.
    c              3   ó8   •K  — | ]}t          ‰|¦  «        V — Œd S ©N)Ú_has_custom_shards)Ú.0r   r   s     €r   ú	<genexpr>zmigrate.<locals>.<genexpr>7   s?   øè è € ð ð Ø?NÕ˜=¨/Ñ:Ô:ðð ð ð ð ð ó    z@Migration of collections with custom shards is not supported yetz*Collections already exist in dest_client: N)Ú_select_source_collectionsÚanyÚ
ValueErrorÚ_find_collisionsÚsetÚ_recreate_collectionÚ_migrate_collection)r   r   r    r!   r"   Ú
collisionsÚabsent_dest_collectionsr   s   `       r   Úmigrater3   #   s3  ø€ õ& 2°-ÐAQÑRÔRÐÝ
ð ð ð ð ØRbðñ ô ñ ô ð ]õ Ð[Ñ\Ô\Ð\å! +Ð/?Ñ@Ô@€JÝ!Ð"2Ñ3Ô3µc¸*±o´oÑEÐàð TÐ/ð TÝÐRÀjÐRÐRÑSÔSÐSà2ð Uð UˆÝ˜]¨K¸ÑIÔIÐIÝ˜M¨;¸ÈÑTÔTÐTÐTà%ð Uð UˆÝ˜]¨K¸ÑIÔIÐIÝ˜M¨;¸ÈÑTÔTÐTÐTðUð Ur)   c                 óˆ   — |                       |¦  «        }t          |j        j        dd ¦  «        t          j        j        k    S )NÚsharding_method)Úget_collectionÚgetattrÚconfigÚparamsr   ÚShardingMethodÚCUSTOM)r   r   Úcollection_infos      r   r&   r&   K   s>   € Ø#×2Ò2°?ÑCÔC€Oå�Ô&Ô-Ð/@À$ÑGÔGÝÔ Ô'ò	(ðr)   c                 óæ   ‡— |                       ¦   «         j        }d„ |D ¦   «         Š|�Ft          ˆfd„|D ¦   «         ¦  «        s*J dt          |¦  «        t          ‰¦  «        z
  › �¦   «         ‚n‰}|S )Nc                 ó   — g | ]	}|j         ‘Œ
S © ©Úname©r'   Ú
collections     r   ú
<listcomp>z._select_source_collections.<locals>.<listcomp>W   s   € ÐTÐTÐT°:˜zœÐTÐTÐTr)   c              3   ó    •K  — | ]}|‰v V — Œ	d S r%   r?   )r'   r   Úsource_collection_namess     €r   r(   z-_select_source_collections.<locals>.<genexpr>Z   s:   øè è € ð 
ð 
Ø;JˆOÐ6Ð6ð
ð 
ð 
ð 
ð 
ð 
r)   z)Source client does not have collections: )Úget_collectionsÚcollectionsÚallr.   )r   r    Úsource_collectionsrF   s      @r   r*   r*   S   s»   ø€ ð '×6Ò6Ñ8Ô8ÔDÐØTÐTÐASÐTÑTÔTÐàÐ#Ýð 
ð 
ð 
ð 
ØN^ð
ñ 
ô 
ñ 
ô 
ð 	nð 	nàmµsÐ;KÑ7LÔ7LÍsÐSjÑOkÔOkÑ7kÐmÐmñ	nô 	nð 
ð 	nð 3ÐàÐr)   c                 óŽ   — |                       ¦   «         j        }d„ |D ¦   «         }|t          |¦  «        z  }t          |¦  «        S )Nc                 ó   — h | ]	}|j         ’Œ
S r?   r@   rB   s     r   ú	<setcomp>z#_find_collisions.<locals>.<setcomp>e   s   € ÐPÐPÐP°˜Zœ_ÐPÐPÐPr)   )rG   rH   r.   Úlist)r   r    Údest_collectionsÚdest_collection_namesÚexisting_dest_collectionss        r   r-   r-   c   sO   € Ø"×2Ò2Ñ4Ô4Ô@ÐØPÐPÐ?OÐPÑPÔPÐØ 5½Ð<LÑ8MÔ8MÑ MÐÝÐ)Ñ*Ô*Ð*r)   c                 óÜ  — |                       |¦  «        }|j        }|j        }|                     |¦  «        r|                     |¦  «         d }|j        �?t          j        di d„ t          |j        ¦  «         	                    ¦   «         D ¦   «         ¤Ž}| 
                    ||j        j        |j        j        |j        j        |j        j        |j        j        |j        j        t          j        di t          |j        ¦  «        ¤Žt          j        di t          |j        ¦  «        ¤Žt          j        di t          |j        ¦  «        ¤Ž|j        |¬¦  «         t3          |||¦  «         d S )Nc                 óP   — i | ]#\  }}|t          t          j        ¦  «        v ¯ ||“Œ$S r?   )r   r   ÚStrictModeConfig)r'   ÚkÚvs      r   ú
<dictcomp>z(_recreate_collection.<locals>.<dictcomp>x   s>   € ð ð ð á�A�qØ�¥VÔ%<Ñ=Ô=Ð=Ð=ð �1à=Ð=Ð=r)   )Úvectors_configÚsparse_vectors_configÚshard_numberÚreplication_factorÚwrite_consistency_factorÚon_disk_payloadÚhnsw_configÚoptimizers_configÚ
wal_configÚquantization_configÚstrict_mode_configr?   )r6   r8   Úpayload_schemaÚcollection_existsÚdelete_collectionrb   r   rT   r   ÚitemsÚcreate_collectionr9   ÚvectorsÚsparse_vectorsrZ   r[   r\   r]   ÚHnswConfigDiffr^   ÚOptimizersConfigDiffÚoptimizer_configÚWalConfigDiffr`   ra   Ú_recreate_payload_schema)r   r   r   Úsrc_collection_infoÚ
src_configÚsrc_payload_schemarb   s          r   r/   r/   j   s‹  € ð
 (×6Ò6°ÑGÔGÐØ$Ô+€JØ,Ô;ÐØ×$Ò$ _Ñ5Ô5ð 7Ø×%Ò% oÑ6Ô6Ð6à9=ÐØÔ$Ð0Ý#Ô4ð 
ð 
ðð å# JÔ$AÑBÔB×HÒHÑJÔJðñ ô ð
ð 
Ðð ×!Ò!ØØ!Ô(Ô0Ø(Ô/Ô>ØÔ&Ô3Ø%Ô,Ô?Ø!+Ô!2Ô!KØ"Ô)Ô9ÝÔ)ÐLÐL­G°JÔ4JÑ,KÔ,KÐLÐLÝ Ô5Ð]Ð]½À
Ô@[Ñ8\Ô8\Ð]Ð]ÝÔ'ÐIÐI­'°*Ô2GÑ*HÔ*HÐIÐIØ&Ô:Ø-ð "ñ ô ð õ ˜[¨/Ð;MÑNÔNÐNÐNÐNr)   rc   c                 ó�   — |                      ¦   «         D ]0\  }}|                      |||j        €|j        n|j        ¬¦  «         Œ1d S )N)Ú
field_nameÚfield_schema)rf   Úcreate_payload_indexr9   Ú	data_type)r   r   rc   rs   Ú
field_infos        r   rn   rn   �   sm   € ð
 #1×"6Ò"6Ñ"8Ô"8ð 
ð 
Ñˆ
�JØ×(Ò(ØØ!Ø1;Ô1BÐ1J˜Ô-Ð-ÐPZÔPað 	)ñ 	
ô 	
ð 	
ð 	
ð
ð 
r)   c                 óX  — |                       |dd¬¦  «        \  }}t          |||¬¦  «         |�0|                       |||d¬¦  «        \  }}t          |||¬¦  «         |­0|                      |¦  «        j        }|                     |¦  «        j        }||k    sJ d|› d|› �¦   «         ‚dS )	aF  Migrate collection from source client to destination client

    Args:
        collection_name (str): Collection name
        source_client (QdrantBase): Source client
        dest_client (QdrantBase): Destination client
        batch_size (int, optional): Batch size for scrolling and uploading vectors. Defaults to 100.
    é   T)ÚlimitÚwith_vectors)r
   r   r   N)Úoffsetrz   r{   zCMigration failed, vectors count are not equal: source vector count z, dest vector count )Úscrollr   Úcount)r   r   r   r"   ÚrecordsÚnext_offsetÚsource_client_vectors_countÚdest_client_vectors_counts           r   r0   r0   �   s  € ð )×/Ò/°ÀqÐW[Ð/Ñ\Ô\Ñ€Gˆ[Ý˜[¸/ÐRYÐZÑZÔZÐZØ
Ð
!Ø,×3Ò3Ø K°zÐPTð  4ñ  
ô  
Ñˆ�õ 	 ¸oÐV]Ð^Ñ^Ô^Ð^ð	 Ð
!ð
 #0×"5Ò"5°oÑ"FÔ"FÔ"LÐØ +× 1Ò 1°/Ñ BÔ BÔ HÐà#Ð'@Ò@Ð@Ð@ð ZÐMhð  Zð  Zð  Xð  Zð  Zñ 	AÔ@Ð@Ð@Ð@r)   )r   r	   )NFr   r%   )r   )r   Útypingr   Úqdrant_client._pydantic_compatr   r   Úqdrant_client.client_baser   Úqdrant_client.httpr   ÚstrÚPointStructÚintÚfloatr   rN   Úboolr3   r&   r*   r-   r/   ÚdictÚPayloadIndexInforn   r0   r?   r)   r   ú<module>rŽ      sÁ  ðØ €€€Ø Ð Ð Ð Ð Ð à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø %Ð %Ð %Ð %Ð %Ð %ð ØðNð NØðNàðNð �VÔ'Ô(ðNð ð	Nð
 ðNð 
ðNð Nð Nð Nð: *.Ø"'Øð%Uð %UØð%Uàð%Uð ˜3”i $Ñ&ð%Uð  ð	%Uð
 ð%Uð 
ð%Uð %Uð %Uð %UðP jð À3ð È4ð ð ð ð ð EIðð ØðØ15°c´¸TÑ1Aðà	ˆ#„Yðð ð ð ð + *ð +ÀÀSÄ	ð +ÈdÐSVÌið +ð +ð +ð +ð#OØð#Oàð#Oð ð#Oð 
ð	#Oð #Oð #Oð #OðL

Øð

àð

ð ˜˜fÔ5Ð5Ô6ð

ð 
ð	

ð 

ð 

ð 

ð" ð	Zð ZØðZàðZð ðZð ð	Zð
 
ðZð Zð Zð Zð Zð Zr)   