o
    3Ih'0                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlm  m	  mZ d dl
mZ d dlm  mZ d dlmZmZmZmZmZmZmZmZ d dlm  m	  mZ d dlmZmZmZmZ d dlZd dlmZ G dd deZ d	e j!d
eddfddZ"d
eddfddZ#d
eddfddZ$dS )    N)check_metadata)	ClientAPI)BundleRuleBasedStateMachinerule
initializemultipleconsumesrun_state_machine_as_testMultipleResults)AnyDictMappingOptional)hashing_embedding_functionc                
       s  e Zd ZU eej ed< eee	e
j f ed< edZdef fddZe d.dd	Zeee d
dejdeej fddZeeddejddfddZeeeddejddfddZe d.ddZeejdddejdddddededdfddZeeee ejeeee ddejde	e
j deej fd d!Zeeeeejee e  d"dejde
jd#e	e deej fd$d%Z!d&ed'e	e
j ddfd(d)Z"d&eddfd*d+Z#e$deee	e
j f fd,d-Z%  Z&S )/CollectionStateMachinecollections_modelclientc                    s   t    i | _|| _d S N)super__init__r   r   )selfr   	__class__ g/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/test/property/test_collections.pyr      s   

zCollectionStateMachine.__init__returnNc                 C   s   | j   i | _d S r   )r   resetr   r   r   r   r   r   #   s   

z!CollectionStateMachine.initialize)targetcollr!   c                 C   s   |j | jv s|jd ur8t|jdkr8tt | jj|j |j|j	d}W d    t
 S 1 s0w   Y  t
 S | jj|j |j|j	d}| |j |j |j |j ksTJ t| j|j  |j t
|S Nr   namemetadataembedding_function)r$   modelr%   lenpytestraises	Exceptionr   create_collectionr&   r   	set_modelr   r   r!   cr   r   r   create_coll(   s*   
z"CollectionStateMachine.create_coll)r!   c                 C   s   |j | jv r"| jj|j d}|j |j ksJ t| j|j  |j d S tt | jj|j d W d    d S 1 s;w   Y  d S Nr$   )	r$   r'   r   get_collectionr   r%   r)   r*   r+   r.   r   r   r   get_collC   s   "zCollectionStateMachine.get_collc                 C   s   |j | jv r-t| j|j  | jj|j d | |j  W d    n1 s'w   Y  ntt	 | jj|j d W d    n1 sEw   Y  tt	 | jj
|j d W d    d S 1 scw   Y  d S r1   )r$   r'   
invariantscollection_deletedr   delete_collectiondelete_from_modelr)   r*   r+   r3   )r   r!   r   r   r   delete_collM   s   "z"CollectionStateMachine.delete_collc                 C   s>   | j  }t|t| jksJ |D ]
}|j| jv sJ qd S r   )r   list_collectionsr(   r'   r$   )r   collsr/   r   r   r   r:   Z   s
   
z'CollectionStateMachine.list_collections      )	min_value	max_valuer   limitoffsetrA   rB   c                 C   s~   | j j||d}| j  }| j  }||||  }|| |kr5t|t|| dks-J ||ks3J d S t||ks=J d S )Nr@   r   )r   r:   count_collectionsr(   max)r   rA   rB   r;   total_collections	all_colls	man_collsr   r   r   "list_collections_with_limit_offsetb   s   

z9CollectionStateMachine.list_collections_with_limit_offset)r    new_metadatar!   rI   c                 C   s   |d ur/t |dkr/tt | jj|j||jd}W d    t S 1 s'w   Y  t S |j| j	vr@||_
| |j|j
 | jj|j||jd}|j|jksSJ t| j	|j |j
 t|S r"   )r(   r)   r*   r+   r   get_or_create_collectionr$   r&   r   r'   r%   r-   r   )r   r!   rI   r/   r   r   r   get_or_create_collx   s,   
z)CollectionStateMachine.get_or_create_coll)r    r!   rI   new_namerL   c                 C   s  |j | jvr(tt | jj|j d}W d    t S 1 s w   Y  t S | jj|j d}| j|j  }|j }|d urmt|dkrhtt | jj	|j ||j
d}W d    t S 1 s`w   Y  t S ||_|}|d ur|| jv r||j krtt |j||d W d    t S 1 sw   Y  t S | |j  ||_ |}| || |j||d | jj|j d}|j |j ksJ t| j|j  |j t|S )Nr2   r   r#   )r%   r$   )r$   r'   r)   r*   r+   r   r3   r   r(   rJ   r&   r%   modifyr8   r-   r   )r   r!   rI   rL   r/   	_metadata_namer   r   r   modify_coll   sR   


z"CollectionStateMachine.modify_collr$   r%   c                 C   s   | j }|||< d S r   r'   )r   r$   r%   r'   r   r   r   r-      s   z CollectionStateMachine.set_modelc                 C   s   | j }||= d S r   rQ   )r   r$   r'   r   r   r   r8      s   
z(CollectionStateMachine.delete_from_modelc                 C   s   | j S r   )r   r   r   r   r   r'      s   zCollectionStateMachine.model)r   N)'__name__
__module____qualname__r   
strategiesExternalCollection__annotations__r   strr   typesCollectionMetadatar   r   r   r   r   r   r0   r4   r	   r9   r:   stintegersintrH   one_ofnonecollection_metadataMetadatarK   collection_namerP   r-   r8   propertyr'   __classcell__r   r   r   r   r      sz   
 	2.
&r   caplogr   r   c                    s    |  tj t fdd d S )Nc                      s   t  S r   )r   r   r   r   r   <lambda>   s    z"test_collections.<locals>.<lambda>)	set_levelloggingERRORr
   )re   r   r   rf   r   test_collections   s   rk   c                 C   s   t | }|  |jtjdd ttjdddd d\}|jtjdd ttjdddd d\}|j|dddd	d d
 |j|d d d
 d S )Njjn2yjLW1zp2Ti_  )dtypedimr#   r!   rI   ig       im)7fGeK5jr!   rI   rL   )	r   r   rK   rU   rV   r   numpyfloat32rP   )r   statev1v6r   r   r   test_previously_failing_one   s,   rz   c              
   C   s   t | }|  |jtjdi tdtjddd d\}|j|dddd	d
ddd\}|jtjddddddddtdtjddddddddd |j|ddidd}|j|d d}|jtjdd td tj	ddd d d S )!NC1030   )rn   rm   r#   ro   100qNYST)r~   40p1nviWeL7fO7bVYWq4LEMWjCo
OF5F0MzbQgrt   VS0QGhgj:Ui  ipSPFgh_   >)hA1uhUhLEEMfeC_kNweFB3DSaP6H533Ki{  i{  g?g    .G3EtXTZiv  )xVW09xUpDZAgzn1dUTalF-MYyugXZ_hKL35J2SK0l026Ai1iF  )
r   r   rK   rU   rV   r   ru   rv   rP   float16)r   rw   v13v15v17v18r   r   r   test_previously_failing_two  sj   

r   )%r)   ri   hypothesis.strategiesrU   r[   !chromadb.test.property.invariantsr   !chromadb.test.property.strategiestestrc   chromadb.apir   chromadb.api.typesapirY   hypothesis.statefulr   r   r   r   r   r	   r
   r   r5   typingr   r   r   r   ru   r   r   LogCaptureFixturerk   rz   r   r   r   r   r   <module>   s"    (
 ]
