Ë
    lQêjˆ>  ã            	       ó  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dl
mc mZ d dlZd dlmZmZ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mZ d dlmZ d dlm Z m!Z! d dl"m#Z# d d	l$m%Z% d
Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2de3deee4   eeee4   f   fd„Z5dedede3ddfd„Z6deee4ejn                  f      fd„Z8de4de4de9fd„Z:d eee4ejn                  f      d!ee4ee4   f   de4ddfd"„Z;d eee4ejn                  f      d!ee4ee4   f   dee4e4f   fd#„Z<d$e4de4fd%„Z=d&e4de>fd'„Z?d(e4d)ee4e4f   de>fd*„Z@d+e4de4fd,„ZAd-ej„                  d.e4dee4   fd/„ZCd0e4de4de9fd1„ZDd(e4de4dee4   fd2„ZEd3ee4   de4fd4„ZFde4dee4ee4   f   fd5„ZGde4ddfd6„ZHd7„ ZIded8e4de4ddfd9„ZJej–                  j™                  e d:¬;«      d>d<„«       ZMej–                  j™                  e d:¬;«      ej–                  jœ                  d>d=„«       «       ZOy)?é    N)ÚDictÚListÚOptionalÚTupleÚcast)Ú	ClientAPI)Ú
Collection)Ú
EmbeddingsÚ	Metadatas)ÚMULTI_REGION_ENABLED)Ú_create_isolated_database_mcmrÚ_create_mcmr_clients)Úwait_for_version_increase)Úcreate_batches)ÚchromaÚchroma2zgarbage-collector-0zhttp://localhost:9000)zchroma-storagezchroma-storage2ÚminioÚminio123z	us-east-1é   é   éð   é<   g      >@Úround_indexÚreturnc           
      óÀ  — t        t        «      D �cg c]  }d| › d|› dt        j                  «       › �‘Œ! }}t        t        «      D �cg c]  }t	        | «      t	        |«      dg‘Œ }}t        t        «      D �cg c]  }| |dœ‘Œ	 }}t        t        «      D �cg c]
  }d| › d|› �‘Œ }}|t        t        |«      t        t        |«      |fS c c}w c c}w c c}w c c}w )Nzround-z-record-ú-ç      ð?)ÚroundÚrecordzround z record )ÚrangeÚRECORDS_PER_ROUNDÚuuidÚuuid4Úfloatr   r
   r   )r   Úrecord_indexÚidsÚ
embeddingsÚ	metadatasÚ	documentss         úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/test/property/test_add_gc.pyÚ_records_for_roundr+   +   s  € ô
 "Ô"3Ó4öàð ��˜X l ^°1´T·Z±Z³\°NÒCð€Cð ô "Ô"3Ó4öàô 
ˆ{Ó	œU <Ó0°#Ò6ð€Jð ô "Ô"3Ó4öàð ¨Ó6ð€Ið ô "Ô"3Ó4öàð ��˜X l ^Ò4ð€Ið ð ””Z Ó,¬d´9¸iÓ.HÈ)ÐSÐSùò!ùòùòùòs   ’$CÁ	CÁ:CÂCÚclientÚ
collectionc                 ól   — t        |«      \  }}}}t        | ||||¬«      D ]  } |j                  |Ž  Œ y )N)Úapir&   r'   r(   r)   )r+   r   Úadd)r,   r-   r   r&   r'   r(   r)   Úbatchs           r*   Ú
_add_roundr2   A   sH   € Ü,>¸{Ó,KÑ)€Cˆ�Y 	ÜØØØØØôò ˆð 	ˆ
�‰˜Òñó    c            
      ó  — g } t         D ]W  }	 t        j                  ddd|t        ddgt        j                  t        j                  dd¬«      }| j                  |f«       ŒY | S # t
        $ r t        j                  d	«       Y Œ7w xY w)
NÚkubectlÚlogsz-nz--tail=0z--followTé   )ÚstdoutÚstderrÚtextÚbufsizez3kubectl is required to watch garbage collector logs)	ÚGC_NAMESPACESÚ
subprocessÚPopenÚGC_POD_NAMEÚPIPEÚFileNotFoundErrorÚpytestÚskipÚappend)ÚwatchersÚ	namespaceÚprocs      r*   Ú_start_gc_log_watchersrH   M   s–   € Ø€HÜ"ò +ˆ	ð	OÜ×#Ñ#àØØØÜØØðô "—‘Ü!—‘ØØôˆDð" 	�‰˜ DÐ)Õ*ð'+ð( €Oøô !ò 	OÜ�K‰KÐMÖNð	Oús   �AA%Á%BÂBÚoutputÚcollection_uuidc                 ól   — d}	 | j                  d|«      }|dk(  ry|| ||dz    v ry|t        d«      z   }Œ2)Nr   TzHard deleting collectionséÿÿÿÿFi   )ÚfindÚlen)rI   rJ   ÚoffsetÚhard_delete_indexs       r*   Ú_hard_delete_log_foundrQ   f   sU   € Ø€FØ
Ø"ŸK™KÐ(CÀVÓLÐØ Ò"ØØ˜fÐ%6Ð9JÈTÑ9QÐRÑRØØ"¤SÐ)DÓ%EÑEˆð r3   rE   Úcaptured_stdoutc           	      ó’  — t        j                  «       }	 | D ]=  \  }}|j                  €Œ|j                  |j                  t         j                  |«       Œ? t        j                  «       t        z   }t        j                  «       |k  �r|j                  «       �rt        dt        d|t        j                  «       z
  «      «      }|j                  |¬«      D ]ž  \  }}	t        t        |j                  «      }|j                  j!                  «       }
|
dk(  r|j#                  |j                  «       Œ[||   j%                  |
«       t'        dj)                  ||   «      |«      sŒŽ |j+                  «        y  t        j                  «       |k  r|j                  «       r�Œ|j+                  «        y # |j+                  «        w xY w)Nr   g        ©ÚtimeoutÚ )Ú	selectorsÚDefaultSelectorr8   ÚregisterÚ
EVENT_READÚtimeÚ	monotonicÚGC_HARD_DELETE_TIMEOUT_SECONDSÚget_mapÚminÚmaxÚselectr   ÚstrÚdataÚfileobjÚreadlineÚ
unregisterrD   rQ   ÚjoinÚclose)rE   rR   rJ   ÚselectorrF   rG   ÚdeadlinerU   ÚkeyÚ_Úlines              r*   Ú_wait_for_gc_hard_delete_logrn   q   sn  € ô
 ×(Ñ(Ó*€HðØ'ò 	L‰OˆI�tØ�{‰{Ð"ØØ×Ñ˜dŸk™k¬9×+?Ñ+?ÀÕKð	Lô
 —>‘>Ó#Ô&DÑDˆÜ�n‰nÓ Ó)¨h×.>Ñ.>Õ.@Ü˜#œs 3¨´4·>±>Ó3CÑ(CÓDÓEˆGØ"Ÿ/™/°'˜/Ó:ò 
‘��QÜ ¤ c§h¡hÓ/�	Ø—{‘{×+Ñ+Ó-�Ø˜2’:Ø×'Ñ'¨¯©Ô4ØØ 	Ñ*×1Ñ1°$Ô7Ü)Ø—G‘G˜O¨IÑ6Ó7¸õð à�‰Õð
ô �n‰nÓ Ò)¨h×.>Ñ.>Ö.@ð 	�‰Õøˆ�‰Õús   –EF4 Å'F4 Å9(F4 Æ4Gc                 ó,  — i }| D ]  \  }}|j                  «        Œ | D ]6  \  }}	 |j                  d¬«      \  }}|r||   j                  |«       |||<   Œ8 |S # t        j                  $ r& |j	                  «        |j                  «       \  }}Y ŒWw xY w)Né   rT   )Ú	terminateÚcommunicater=   ÚTimeoutExpiredÚkillrD   )rE   rR   Úcaptured_stderrrl   rG   rF   r8   r9   s           r*   Ú_stop_gc_log_watchersrv   �   s³   € ð €OØò ‰ˆˆ4Ø�‰Õðð $ò ,‰ˆ	�4ð	0Ø!×-Ñ-°aÐ-Ó8‰NˆF�Fñ Ø˜IÑ&×-Ñ-¨fÔ5Ø%+ˆ˜	Ò"ð,ð Ðøô ×(Ñ(ò 	0Ø�I‰IŒKØ!×-Ñ-Ó/‰NˆF’Fð	0ús   ¦AÁ6BÂBÚvaluec                 óD   — t         j                  j                  | d¬«      S )Nz-_.~©Úsafe)ÚurllibÚparseÚquote)rw   s    r*   Ú
_aws_quoter~   £   s   € Ü�<‰<×Ñ˜e¨&ÐÓ1Ð1r3   Ú
date_stampc                 ó
  — t        j                  dt        › �j                  d«      | j                  d«      t        j
                  «      j                  «       }t        j                  |t        j                  d«      t        j
                  «      j                  «       }t        j                  |dt        j
                  «      j                  «       }t        j                  |dt        j
                  «      j                  «       S )NÚAWS4úutf-8s   s3s   aws4_request)ÚhmacÚnewÚMINIO_SECRET_KEYÚencodeÚhashlibÚsha256ÚdigestÚMINIO_REGION)r   Údate_keyÚ
region_keyÚservice_keys       r*   Ú_signing_keyrŽ   §   s¹   € Ü�x‰xØ
ÔÐ Ð!×(Ñ(¨Ó1Ø×Ñ˜'Ó"Ü�‰ó÷ �fƒhð	 ô
 —‘Ø”,×%Ñ% gÓ.´·±óç�fƒhð ô —(‘(˜: u¬g¯n©nÓ=×DÑDÓF€KÜ�8‰8�K ´'·.±.ÓA×HÑHÓJÐJr3   ÚbucketÚqueryc                 ó–  — t         j                  j                  t        «      }t        j                  j                  t        j                  j                  «      }|j                  d«      }|j                  d«      }t        j                  d«      j                  «       }d| › �}t         j                  j                  |d¬«      }dj                  d„ t        |j                  «       «      D «       «      }	d	|j                   › d
|› d|› d�}
d}dj                  d||	|
||g«      }|› dt"        › d�}dj                  d||t        j                  |j%                  d«      «      j                  «       g«      }t'        j(                  t+        |«      |j%                  d«      t        j                  «      j                  «       }dt,        › d|› d|› d|› �}t         j                  j/                  |j0                  |j                   |d|	df«      }t         j2                  j5                  ||||dœd¬«      }	 t         j2                  j7                  |t8        ¬«      5 }|j;                  «       cd d d «       S # 1 sw Y   y xY w# t         j<                  j>                  $ rg}|j;                  «       jA                  dd¬«      }tC        jD                  dt        › d| › d|jF                  › d|jH                  › d|›�
«       Y d }~y d }~wt         j<                  jJ                  $ r,}tC        jD                  dt        › d| › d |› �«       Y d }~y d }~ww xY w)!Nz%Y%m%dT%H%M%SZz%Y%m%dr3   ú/z/-_.~ry   ú&c              3   óT   K  — | ]   \  }}t        |«      › d t        |«      › �–— Œ" y­w)ú=N)r~   )Ú.0rk   rw   s      r*   ú	<genexpr>z$_minio_signed_get.<locals>.<genexpr>½   s/   è ø€ ò Ù5?°S¸%Œ:�c‹?Ð
˜1œZ¨Ó.Ð/Ô0ñùs   ‚&(zhost:z
x-amz-content-sha256:z
x-amz-date:ú
z$host;x-amz-content-sha256;x-amz-dateÚGETz/s3/aws4_requestzAWS4-HMAC-SHA256r‚   zAWS4-HMAC-SHA256 Credential=z, SignedHeaders=z, Signature=rV   )ÚAuthorizationzx-amz-content-sha256z
x-amz-date)ÚheadersÚmethodrT   Úreplace)Úerrorsz)Failed to list MinIO objects from S3 API z: HTTP ú z; body=z"Failed to connect to MinIO S3 API z: )&r{   r|   ÚurlparseÚMINIO_S3_ENDPOINTÚdatetimeÚnowÚtimezoneÚutcÚstrftimer‡   rˆ   Ú	hexdigestr}   rg   ÚsortedÚitemsÚnetlocrŠ   r†   rƒ   r„   rŽ   ÚMINIO_ACCESS_KEYÚ
urlunparseÚschemeÚrequestÚRequestÚurlopenÚ!MINIO_OBJECT_LIST_TIMEOUT_SECONDSÚreadÚerrorÚ	HTTPErrorÚdecoderB   ÚfailÚcodeÚreasonÚURLError)r�   r�   Úendpointr£   Úamz_dater   Úpayload_hashÚpathÚcanonical_uriÚcanonical_queryÚcanonical_headersÚsigned_headersÚcanonical_requestÚcredential_scopeÚstring_to_signÚ	signatureÚauthorizationÚurlr®   ÚresponseÚeÚbodys                         r*   Ú_minio_signed_getrË   ´   s)  € Ü�|‰|×$Ñ$Ô%6Ó7€HÜ
×
Ñ
×
Ñ
¤× 1Ñ 1× 5Ñ 5Ó
6€CØ�|‰|Ð,Ó-€HØ—‘˜hÓ'€JÜ—>‘> #Ó&×0Ñ0Ó2€Làˆvˆhˆ<€DÜ—L‘L×&Ñ& t°'Ð&Ó:€MØ—h‘hñ ÜCIÈ%Ï+É+Ë-ÓCXôó €Oð �—‘Ð ð ! Ø ,˜~ð .Ø�Z˜rð	#ð ð
 <€NØŸ	™	àØØØØØð	
ó	Ðð %˜ Q¤| nÐ4DÐEÐØ—Y‘YàØØÜ�N‰NÐ,×3Ñ3°GÓ<Ó=×GÑGÓIð		
ó€Nô —‘Ü�ZÓ Ø×Ñ˜gÓ&Ü�‰ó÷ �iƒkð	 ð	Ü&Ð' qÐ)9Ð(:ð ;Ø'Ð(¨°Y°Kð	Að ô �,‰,×
!Ñ
!à�O‰OØ�O‰OØØØØð	
ó	€Cô �n‰n×$Ñ$Øà*Ø$0Ø"ñ
ð
 ð %ó €Gð
Ü�^‰^×#Ñ#ØÔ>ð $ó 
ð 	#àØ—=‘=“?÷	#÷ 	#ò 	#ûô �<‰<×!Ñ!ò 
Ø�v‰v‹x�‰˜w¨yˆÓ9ˆÜ�‰Ø7Ü Ð!  6 (¨'°!·&±&°¸¸1¿8¹8¸*ÀGÈDÈ8ðU÷	
ñ 	
ûô �<‰<× Ñ ò 
Ü�‰Ø0Ü Ð!  6 (¨"¨Q¨Cð1÷	
ñ 	
ûð
úsC   È2%I= ÉI1É'	I= É1I:É6I= É:I= É=MÊAK<Ë< MÌ"MÍMÚtagc                 ó,   — | j                  dd«      d   S )Nú}r7   rL   )Úrsplit)rÌ   s    r*   Ú_xml_local_namerÐ   
  s   € Ø�:‰:�c˜1Ó˜bÑ!Ð!r3   ÚelementÚnamec                 ó^   — | D ](  }t        |j                  «      |k(  sŒ|j                  c S  y ©N)rÐ   rÌ   r:   )rÑ   rÒ   Úchilds      r*   Ú_child_textrÖ     s1   € Øò ˆÜ˜5Ÿ9™9Ó%¨Ó-Ø—:‘:Òðð r3   rk   c                 ó   — d|› d�| v S )Nz/collection/z/versionfiles/© )rk   rJ   s     r*   Ú_is_collection_version_file_keyrÙ     s   € Ø˜/Ð*¨.Ð9¸SÐ@Ð@r3   c                 ó¨  — g }d }	 dddœ}|�||d<   t        | |«      }t        j                  |«      }|j                  «       D ]M  }t	        |j
                  «      dk7  rŒt        |d«      }|€Œ+||v sŒ0t        ||«      rŒ=|j                  |«       ŒO t        |d«      dk(  }	|	s	 t        |«      S t        |d	«      }|€t        j                  d
«       ŒÎ)NÚ2Ú1000)z	list-typezmax-keyszcontinuation-tokenÚContentsÚKeyÚIsTruncatedÚtrueÚNextContinuationTokenzFMinIO returned a truncated object listing without a continuation token)rË   ÚETÚ
fromstringÚiterrÐ   rÌ   rÖ   rÙ   rD   rB   r¶   r¨   )
r�   rJ   ÚkeysÚcontinuation_tokenr�   rÊ   ÚrootrÑ   rk   Úis_truncateds
             r*   Ú _list_minio_files_for_collectionré     sì   € Ø€DØ(,ÐØ
Ø!¨vÑ6ˆØÐ)Ø*<ˆEÐ&Ñ'ä  ¨Ó/ˆÜ�}‰}˜TÓ"ˆà—y‘y“{ò 		!ˆGÜ˜wŸ{™{Ó+¨zÒ9ØÜ˜g uÓ-ˆCà‘Ø# sÒ*Ü7¸¸_ÕMà—‘˜CÕ ð		!ô # 4¨Ó7¸6ÑAˆÙØô �$‹<Ðô )¨Ð/FÓGÐØÐ%Ü�K‰KØXôð1 r3   Úpathsc                 ó`   — d}| d | }t        | «      |k  rdndt        | «      |z
  › d�}|› |› �S )Né2   rV   z	 ... and z more©rN   )rê   Úsample_sizeÚsampleÚsuffixs       r*   Ú_format_minio_file_samplerñ   ;  sM   € Ø€KØ�<�KÐ €Fä�%‹j˜KÒ'‰¨y¼¸U»ÀkÑ9QÐ8RÐRWÐ-Xð ð ˆX�f�XÐÐr3   c                 ó  — t        j                  «       t        z   }i }	 t        D �ci c]  }|t	        || «      “Œ }}t        |j                  «       «      r|S t        j                  «       |k\  rn|j                  «       D ��cg c]
  \  }}|rŒ	|‘Œ }}}t        j                  d| › d|› d|j                  «       D ��ci c]  \  }}|t        |«      “Œ c}}› �«       t        j                  d«       ŒÔc c}w c c}}w c c}}w )Nz;Expected MinIO to contain non-version files for collection zC in every test bucket before deletion, but these buckets had none: z. Found counts: r7   )r[   r\   Ú#MINIO_OBJECT_APPEAR_TIMEOUT_SECONDSÚMINIO_BUCKETSré   ÚallÚvaluesr©   rB   r¶   rN   Úsleep)rJ   rj   Úpaths_by_bucketr�   rê   Úmissing_bucketss         r*   Ú$_wait_for_minio_files_for_collectionrú   D  s  € Ü�~‰~ÓÔ"EÑE€HØ,.€OØ
ô (ö
àð Ô4°V¸_ÓMÑMð
ˆð 
ô ˆ×%Ñ%Ó'Ô(Ø"Ð"Ü�>‰>Ó˜xÒ'à,;×,AÑ,AÓ,C÷Ù(˜6 5Ê5’ðˆOñ ô �K‰KØMØ"Ð#ð $/Ø/>Ð.?ð @!à=L×=RÑ=RÓ=T×U©M¨F°E�VœS ›ZÑ'ÓUÐWð	Yôô 	�
‰
�1Œð% ùò
ùóùó Vs   §C3Â
C8ÂC8Â=C>c                 ón  — t        j                  «       t        z   }i }	 t        D �ci c]  }|t	        || «      “Œ }}t        |j                  «       «      sy t        j                  «       |k\  r›|j                  «       D ��ci c]  \  }}|sŒ	||“Œ }}}|j                  «       D ��ci c]  \  }}|t        |«      “Œ }}}t        j                  d| › d|j                  «       D ��ci c]  \  }}|t        |«      “Œ c}}› d|› �«       t        j                  d«       �Œc c}w c c}}w c c}}w c c}}w )Nz0Expected non-version MinIO files for collection zI to be deleted from every test bucket, but found files in these buckets: z. Samples: r7   )r[   r\   Ú#MINIO_OBJECT_DELETE_TIMEOUT_SECONDSrô   ré   Úanyrö   r©   rñ   rB   r¶   rN   r÷   )rJ   rj   rø   r�   rê   Ú	remainingÚsampless          r*   Ú_wait_for_minio_files_deletedr   \  sG  € Ü�~‰~ÓÔ"EÑE€HØ,.€OØ
ô (ö
àð Ô4°V¸_ÓMÑMð
ˆð 
ô �?×)Ñ)Ó+Ô,ØÜ�>‰>Ó˜xÒ'à3B×3HÑ3HÓ3J÷Ù"/ &¨%Êe�˜‘ðˆIñ ð
 &/§_¡_Ó%6÷á!�F˜Eð Ô1°%Ó8Ñ8ðˆGñ ô �K‰KØBØ"Ð#ð $5à=F¿_¹_Ó=N×O©M¨F°E�VœS ›ZÑ'ÓOÐQð RØ#˜9ð	&ôô 	�
‰
�1Œñ- ùò
ùóùóùó Ps   §D Â
D%ÂD%Â'D+Ã&D1c                 ó$   — || t        |«      z     S rÔ   rí   )r   Úround_arounds     r*   Úround_robinr  x  s   € Ø˜¤c¨,Ó&7Ñ7Ñ8Ð8r3   Úcollection_namec                 óÒ  — t        «       }t        D �ci c]  }|g “Œ }}i }	 | j                  |«       t        |||«       t	        ||«      }|j                  «       D ��ci c]  \  }}|dj                  |«      “Œ }}}|j                  «       D ��	cg c]  \  }}	t        |	|«      r|‘Œ }
}}	|j                  «       D ]  \  }}	t        |› dt        |	«      › d�«       Œ! |j                  «       D ]  \  }}|sŒ	t        |› d|dd  › �«       Œ |
s2J d|› d|j                  «       D ��	ci c]  \  }}	||	dd  “Œ c}	}› �«       ‚y c c}w # t	        ||«      }w xY wc c}}w c c}	}w c c}	}w )	NrV   z GC stdout captured z bytesz GC stderr: iüÿÿz:Expected garbage collector logs to hard delete collection z. Captured stdout tails: i0øÿÿ)
rH   r<   Údelete_collectionrn   rv   r©   rg   rQ   ÚprintrN   )r,   r  rJ   rE   rF   rR   ru   ÚlinesÚstdout_by_namespacer8   Úmatching_namespacesr9   s               r*   Ú,_delete_collection_and_assert_gc_hard_deleter  |  s«  € ô &Ó'€HÜ6CÖD¨�y "‘}ÐD€OÐDØ&(€OðKØ× Ñ  Ô1Ü$ X¨ÀÔPä/°¸/ÓJˆð ;J×:OÑ:OÓ:Q÷Ù&6 i°ˆ	�2—7‘7˜5“>Ñ!ðÐñ ð
 "5×!:Ñ!:Ó!<÷áˆI�vÜ! &¨/Ô:ò 	ðÐñ ð 1×6Ñ6Ó8ò EÑˆ	�6Ü��Ð/´°F³¨}¸FÐCÕDðEà,×2Ñ2Ó4ò >Ñˆ	�6ÚÜ�Y�K˜|¨F°5°6¨NÐ+;Ð<Õ=ð>ñ ð ØDØÐ
Ð4Ø@S×@YÑ@YÓ@[×\Ñ+<¨9°fˆY˜˜u˜v˜Ñ&Ó\Ð
^ð	`óÑùò/ Eøô 0°¸/ÓJ‰üóùóùó ]s"   “
E¢E ÁEÂEÄ&E#ÅEz;MCMR GC coverage requires a multi-region Kubernetes cluster)r¸   c                  ó  — t        «       \  } }t        | |d«       dt        j                  «       j                  › �}| j                  |¬«      }|j                  |¬«       t        | |t        |j                  «      «       y )Nútilt-spanningÚtest_add_gc_empty_©rÒ   )
r   r   r"   r#   ÚhexÚcreate_collectionÚget_collectionr  rb   Úid)Úclient1Úclient2r  r-   s       r*   Ú.test_add_gc_hard_deletes_empty_mcmr_collectionr  ž  sr   € ô
 ,Ó-Ñ€GˆWÜ" 7¨G°_ÔEà*¬4¯:©:«<×+;Ñ+;Ð*<Ð=€OØ×*Ñ*°Ð*Ó@€JØ×Ñ ÐÔ0ä0Ø�¤# j§m¡mÓ"4õr3   c            
      óØ  — t        «       \  } }t        | |d«       | |g}dt        j                  «       j                  › �}| j                  |¬«      }|j                  |¬«      }t        |j                  «      }||g}t        t        |j                  «       d   «      }t        t        |j                  «       d   «      }	t        t        «      D ]A  }
t        |
|«      }t        |
|«      }t        |||
«       t!        | ||«      }t!        |||	«      }	ŒC t#        |«      }|j%                  «       D ]#  \  }}t'        d|› dt)        |«      › d|› d�«       Œ% t+        | ||«       t-        |«       y )	Nr  Útest_add_gc_r  ÚversionzMinIO bucket z contained z files for collection z before deletion)r   r   r"   r#   r  r  r  rb   r  r   ÚintÚ	get_modelr    ÚCOMPACTION_ROUNDSr  r2   r   rú   r©   r  rN   r  r   )r  r  Úclientsr  Úcoll1Úcoll2rJ   ÚcollectionsÚcurrent_version1Úcurrent_version2r   Úwriter_clientÚwriter_collectionÚ#minio_files_before_delete_by_bucketr�   rê   s                   r*   Ú(test_add_gc_hard_deletes_mcmr_collectionr&  ¯  s…  € ô ,Ó-Ñ€GˆWÜ" 7¨G°_ÔEØ˜Ð €Gà$¤T§Z¡Z£\×%5Ñ%5Ð$6Ð7€OØ×%Ñ%¨?Ð%Ó;€EØ×"Ñ"¨Ð"Ó8€EÜ˜%Ÿ(™(“m€OØ˜%�.€KäœC §¡Ó!2°9Ñ!=Ó>ÐÜœC §¡Ó!2°9Ñ!=Ó>ÐäÔ.Ó/ò 

ˆÜ# K°Ó9ˆÜ'¨°[ÓAÐÜ�=Ð"3°[ÔAä4Ø�_Ð&6ó
Ðô 5Ø�_Ð&6ó
Ñð

ô +OØó+Ð'ð =×BÑBÓDò 
‰ˆ�ÜØ˜F˜8 ;¬s°5«z¨lÐ:PØÐÐ/ð1õ	
ð
ô 1Ø� /ôô " /Õ2r3   )r   N)Pr¢   r‡   rƒ   rW   r=   r[   Úurllib.errorr{   Úurllib.parseÚurllib.requestÚxml.etree.ElementTreeÚetreeÚElementTreerâ   r"   Útypingr   r   r   r   r   rB   Úchromadb.apir   Úchromadb.api.models.Collectionr	   Úchromadb.api.typesr
   r   Úchromadb.test.conftestr   Ú$chromadb.test.property.test_add_mcmrr   r   Ú-chromadb.test.utils.wait_for_version_increaser   Úchromadb.utils.batch_utilsr   r<   r?   r¡   rô   r«   r…   rŠ   r  r!   r]   ró   rü   r±   r  rb   r+   r2   r>   rH   ÚboolrQ   rn   rv   r~   ÚbytesrŽ   rË   rÐ   ÚElementrÖ   rÙ   ré   rñ   rú   r   r  r  ÚmarkÚskipifr  Úskip_single_regionr&  rØ   r3   r*   ú<module>r;     si  ðÛ Û Û Û Û Û Û Û Û ß "Ð "Û ß 4Õ 4ã å "Ý 5ß 4Ý 7÷õ TÝ 5ð &€Ø#€Ø+Ð Ø5€ØÐ ØÐ Ø€ØÐ ØÐ Ø!$Ð Ø&(Ð #Ø&(Ð #Ø$(Ð !ðTØðTà
ˆ4�‰9�j )¨T°#©YÐ6Ñ7óTð,	�yð 	¨jð 	Àsð 	Ètó 	ð  U¨3°
×0@Ñ0@Ð+@Ñ%AÑ Bó ð2F 3ð F¸ð FÀó FðØ�5˜˜j×.Ñ.Ð.Ñ/Ñ0ðà˜#˜t C™y˜.Ñ)ðð ðð 
ó	ð<Ø�5˜˜j×.Ñ.Ð.Ñ/Ñ0ðà˜#˜t C™y˜.Ñ)ðð 
ˆ#ˆsˆ(�^óð(2�cð 2˜có 2ð
K˜Sð 
K Uó 
KðS
˜cð S
¨$¨s°C¨x©.ð S
¸Uó S
ðl"˜ð " ó "ð˜Ÿ™ð ¨3ð °8¸C±=ó ðA¨ð A¸sð AÀtó Að¨Sð À3ð È4ÐPSÉ9ó ðD T¨#¡Yð °3ó ð¸#ð À$ÀsÈDÐQTÉIÀ~ÑBVó ð0°3ð ¸4ó ò89ðØðØ(+ðØ>Aðà	óðD ‡�×ÑØÐØHð ó ò
ó	ð
ð ‡�×ÑØÐØHð ó ð ‡�×Ñò&3ó  ó	ñ
&3r3   