
    j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mZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZ defd	Zd
ededefdZdedefdZ G d d          Z  G d d          Z!deej"        e#e$f         de%fdZ&deeee         f         de%fdZ'deee         ee         eej"        f         de%fdZ(deee         ej"        f         fdZ)dedeee         ej"        f         fdZ*de deee         ej"        f         fdZ+de deee         ej"        f         fdZ,d ej"        dee!         fd!Z-d ej"        fd"Z.de fd#Z/dS )$    N)AnyDictListOptionalUnion)is_list_like)AutoIDExceptionCannotInferSchemaExceptionClusteringKeyExceptionDataNotMatchExceptionDataTypeNotSupportExceptionExceptionsMessageFieldsTypeExceptionFieldTypeExceptionPartitionKeyExceptionPrimaryKeyExceptionSchemaNotReadyException   )COMMON_TYPE_PARAMS)DataTypeinfer_dtype_bydatamap_numpy_dtype_to_datatypeprimary_fieldc                     | t          t          j                  | j        t          j        t          j        fvrt          t          j                  d S Nmessage)r   r   NoPrimaryKeydtyper   INT64VARCHARPrimaryKeyType)r   s    ]/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/pymilvus/orm/schema.pyvalidate_primary_keyr$   )   sS    !*;*HIIII8>83C"DDD!*;*JKKKK ED    partition_key_field_namepartition_key_fieldprimary_field_namec                    |`|j         |k    rt          t          j                   |j        t
          j        t
          j        fvrt          t          j                  d S | t          t          j	        | z            d S r   )
namer   r   PartitionKeyNotPrimaryr   r   r    r!   PartitionKeyTypePartitionKeyFieldNotExist)r&   r'   r(   s      r#   validate_partition_keyr.   1   s     &#'999!*;*RSSSS$X^X=M,NNN'0A0RSSSS ON	!	-#%?BZZ
 
 
 	
 
.	-r%   clustering_key_field_nameclustering_key_fieldc           	      B   |}|j         t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j	        fvrt          t          j                  d S | t          t          j        | z            d S r   )r   r   INT8INT16INT32r    FLOATDOUBLEr!   FLOAT_VECTORr   r   ClusteringKeyTypeClusteringKeyFieldNotExist)r/   r0   s     r#   validate_clustering_keyr:   A   s    '%MNNNNO!	.
 	
 	
 )1B1TUUUU	
 	
 
#	.$%@C\\
 
 
 	
 
/	.r%   c                   ^   e Zd ZddedefdZd Zd Zd Zdefd	Z	de
fd
ZdefdZedefd            Zed             Zed             Zed             Zed             Zed             Zej        defd            Zed             Zej        defd            Zd Zd ZdedefdZdS )CollectionSchema fieldsdescriptionc                    t          j        |          | _        g | _        || _        | j                            dd           | _        d | _        d | _        d | _	        t          |t                    st          t          j                  d |D             | _        |                                  |                    dd          r|                                  d S d S )Nenable_dynamic_fieldr   c                 6    g | ]}t          j        |          S  )copydeepcopy).0fields     r#   
<listcomp>z-CollectionSchema.__init__.<locals>.<listcomp>a   s"    AAAe,,AAAr%   check_fieldsT)rD   rE   _kwargs_fields_descriptionget_enable_dynamic_field_primary_field_partition_key_field_clustering_key_field
isinstancelistr   r   
FieldsType_check_kwargs_check_fields)selfr>   r?   kwargss       r#   __init__zCollectionSchema.__init__U   s    }V,,'%)\%5%56Ld%S%S""$(!%)"&$'' 	L%.?.JKKKKAA&AAA::nd++ 	!     	! 	!r%   c                    | j                             dd           }| j                             dd           }| j                             dd           }|/t          |t                    st	          t
          j                  |/t          |t                    st          t
          j                  |/t          |t                    st          t
          j
                  | j        D ]1}t          |t                    st          t
          j                  2d| j         v r:t          | j         d         t                    st!          dt
          j                  d S d S )Nr   r'   r/   r   auto_idr   )rJ   rM   rR   strr   r   PrimaryFieldTyper   PartitionKeyFieldTyper   ClusteringKeyFieldTyperK   FieldSchemar   	FieldTypeboolr	   
AutoIDType)rW   r(   r&   r/   rG   s        r#   rU   zCollectionSchema._check_kwargsg   sZ   !\--otDD#'<#3#34I4#P#P $(L$4$45PRV$W$W!)*=OQT2U2U)%.?.PQQQQ#/
C[]`8a8a/'0A0WXXXX$0D]_b9c9c0(1B1YZZZZ\ 	N 	NEe[11 N(1B1LMMMMN $$ZY8OQU-V-V$!!%6%ABBB %$$$r%   c                    | j                             dd           }| j                             dd           }| j                             dd           }| j        D ]}|r||j        k    rd|_        |r||j        k    rd|_        |j        rA|1||j        k    r&t          j        ||j        fz  }t          |          || _	        |j        }|j        rA|1||j        k    r&t          j
        ||j        fz  }t          |          || _        |j        }|r||j        k    rd|_        |j        rA|1||j        k    r&t          j        ||j        fz  }t          |          || _        |j        }t#          | j	                   t%          || j        | j	        j                   t'          || j                   | j                             dd          }|r|| j	        _        d S d S )Nr   r'   r0   Tr   r[   F)rJ   rM   rK   r*   
is_primaryis_partition_keyr   PrimaryKeyOnlyOner   rO   PartitionKeyOnlyOner   rP   is_clustering_keyClusteringKeyOnlyOner   rQ   r$   r.   r:   r[   )rW   r(   r&   r/   rG   msgr[   s          r#   rV   zCollectionSchema._check_fieldsy   sH   !\--otDD#'<#3#34I4#P#P $(L$4$45KT$R$R!\ &	7 &	7E! (&8EJ&F&F#' ' .,D
,R,R)-& 0%16HEJ6V6V+=ASUZU_@``C-c::::&+#%*Z"% 6+7<TX]Xb<b<b+?0
C C 0<<<<,1)+0:(( /-F%*-T-T*.'& 7-91UZ??+@1
D C 1====-2*,1J)T0111$d&?ATAY	
 	
 	
 	  94;UVVV,""9e44 	2*1D'''	2 	2r%   c                 V    |                                   |                                  d S N)rU   rV   rW   s    r#   _checkzCollectionSchema._check   s,    r%   returnc                 D    t          |                                           S rm   r\   to_dictrn   s    r#   __repr__zCollectionSchema.__repr__       4<<>>"""r%   c                 *    t          | j                  S rm   )lenr>   rn   s    r#   __len__zCollectionSchema.__len__   s    4;r%   otherc                 V    |                                  |                                 k    S )z5The order of the fields of schema must be consistent.rs   rW   ry   s     r#   __eq__zCollectionSchema.__eq__   s    ||~~00r%   rawc                     d |d         D             }|                     dd          }t          ||                     dd          |          S )Nc                 B    g | ]}t                               |          S rC   )r`   construct_from_dict)rF   	field_raws     r#   rH   z8CollectionSchema.construct_from_dict.<locals>.<listcomp>   s&    \\\+11)<<\\\r%   r>   rA   Fr?   r=   )rA   )rM   r<   )clsr~   r>   rA   s       r#   r   z$CollectionSchema.construct_from_dict   s\    \\cRZm\\\"ww'=uEECGGM2..EY
 
 
 	
r%   c                     | j         S rm   )rO   rn   s    r#   r   zCollectionSchema.primary_field   s    ""r%   c                     | j         S rm   )rP   rn   s    r#   r'   z$CollectionSchema.partition_key_field   s    ((r%   c                     | j         S )a  
        Returns the fields about the CollectionSchema.

        :return list:
            List of FieldSchema, return when operation is successful.

        :example:
            >>> from pymilvus import FieldSchema, CollectionSchema, DataType
            >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True)
            >>> schema = CollectionSchema(fields=[field])
            >>> schema.fields
            [<pymilvus.schema.FieldSchema object at 0x7fd3716ffc50>]
        )rK   rn   s    r#   r>   zCollectionSchema.fields   s     |r%   c                     | j         S )a  
        Returns a text description of the CollectionSchema.

        :return str:
            CollectionSchema description text, return when operation is successful.

        :example:
            >>> from pymilvus import FieldSchema, CollectionSchema, DataType
            >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True)
            >>> schema = CollectionSchema(fields=[field], description="test get description")
            >>> schema.description
            'test get description'
        rL   rn   s    r#   r?   zCollectionSchema.description   s       r%   c                 ^    | j         r| j         j        S | j                            dd          S )a  
        Whether the primary keys are automatically generated.

        :return bool:
            * True: If the primary keys are automatically generated,
            * False: Otherwise.

        :example:
            >>> from pymilvus import FieldSchema, CollectionSchema, DataType
            >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True)
            >>> schema = CollectionSchema(fields=[field])
            >>> schema.auto_id
            False
        r[   F)r   r[   rJ   rM   rn   s    r#   r[   zCollectionSchema.auto_id   s3       	.%--|	5111r%   valuec                 J    | j         rt          |          | j         _        d S d S rm   )r   rb   r[   rW   r   s     r#   r[   zCollectionSchema.auto_id  s.     	5)-eD&&&	5 	5r%   c                 *    t          | j                  S rm   rb   rN   rn   s    r#   rA   z%CollectionSchema.enable_dynamic_field  s    D.///r%   c                 .    t          |          | _        d S rm   r   r   s     r#   rA   z%CollectionSchema.enable_dynamic_field  s    %)%[["""r%   c                 L    | j         | j        d | j        D             | j        dS )Nc                 6    g | ]}|                                 S rC   r{   )rF   ss     r#   rH   z,CollectionSchema.to_dict.<locals>.<listcomp>  s     999qqyy{{999r%   )r[   r?   r>   rA   )r[   rL   rK   rA   rn   s    r#   rs   zCollectionSchema.to_dict  s5    |,99DL999$($=	
 
 	
r%   c                 .    |                                   d S rm   )ro   rn   s    r#   verifyzCollectionSchema.verify  s    r%   
field_namedatatypec                 V    t          ||fi |}| j                            |           | S rm   )r`   rK   append)rW   r   r   rX   rG   s        r#   	add_fieldzCollectionSchema.add_field  s4    J;;F;;E"""r%   Nr=   )__name__
__module____qualname__r   r\   rY   rU   rV   ro   rt   intrx   objectr}   classmethodr   r   propertyr   r'   r>   r?   r[   setterrb   rA   rs   r   r   r   rC   r%   r#   r<   r<   T   s       ! !t !# ! ! ! !$C C C$42 42 42l  ## # # # #         1F 1 1 1 1 
d 
 
 
 [
 # # X# ) ) X)   X  ! ! X!  2 2 X2& ^5T 5 5 5 ^5 0 0 X0  1$ 1 1 1 ! 1
 
 
  C 8      r%   r<   c            	           e Zd ZddedededdfdZdefdZdd	ee         fd
Z	d Z
edefd            Zd ZdefdZdefdZed             Zed             Zedefd            ZdS )r`   r=   r*   r   r?   rp   Nc                    || _         	 t          |          }n)# t          $ r t          t          j                  d w xY w|t          j        k    rt          t          j                  || _        || _        i | _	        t          j        |          | _        t          |                    dd          t                    st!          t          j                  |                    dd          | _        |                    dd          | _        |                    dd          | _        d|v r\t          | j        t                    st+          t          j                  | j        s!| j        rt!          t          j                  t          |                    dd          t                    st1          t          j                  t          |                    dd          t                    st5          t          j                  |                    dd          | _        |                    dd          | _        |                    d          | _        d	|v r|d	         | j	        d	<   |                                  d S )
Nr   re   F
is_dynamicr[   rf   ri   element_typemmap_enabled) r*   r   
ValueErrorr   r   
FieldDtypeUNKNOWN_dtyperL   _type_paramsrD   rE   rJ   rR   rM   rb   r   IsPrimaryTypere   r   r[   r	   rc   AutoIDOnlyOnPKr   IsPartitionKeyTyper   IsClusteringKeyTyperf   ri   r   _parse_type_params)rW   r*   r   r?   rX   s        r#   rY   zFieldSchema.__init__#  sW   		^UOOEE 	^ 	^ 	^-6G6RSSSY]]	^H$$$-6G6RSSSS'}V,,&**\5994@@ 	O%.?.MNNNN **\599 **\599zz)U33dlD11 L%.?.JKKKK? Tt| T)2C2RSSSS&**%7??FF 	V'0A0TUUUU&**%8%@@$GG 	X(1B1VWWWW &

+=u E E!',?!G!G"JJ~66V##06~0FDn-!!!!!s    &?c                 D    t          |                                           S rm   rr   rn   s    r#   rt   zFieldSchema.__repr__E  ru   r%   memodictc                 X    |i }|                      |                                           S rm   )r   rs   )rW   r   s     r#   __deepcopy__zFieldSchema.__deepcopy__H  s)    H''777r%   c                 `   | j         t          j        t          j        t          j        t          j        t          j        t          j        t          j        fvrd S | j	        sd S | j	        rCt          D ]=}|| j	        v r0| j        i | _        t          | j	        |                   | j        |<   <d S d S rm   )r   r   BINARY_VECTORr7   FLOAT16_VECTORBFLOAT16_VECTORr!   ARRAYSPARSE_FLOAT_VECTORrJ   r   r   r   )rW   ks     r#   r   zFieldSchema._parse_type_paramsM  s    ;"!#$N(
 
 
 F| 	F< 	@' @ @$$(0,.)+.t|A+?+?D%a(	@ 	@@ @r%   r~   c                    i }|                     |                    di                      |                    dd          |d<   |                    d          |                    d          |d<   |                    dd          |d<   |                    dd          |d<   |                    dd          |d<   |                    d          |d<   t          |d	         |d
         |                    dd          fi |S )Nparamsre   Fr[   rf   ri   r   r   r*   typer?   r=   )updaterM   r`   )r   r~   rX   s      r#   r   zFieldSchema.construct_from_dictc  s    cggh++,,,"ww|U;;|779) #	 2 2F9%(WW-?%G%G!"&)gg.A5&I&I"#"ww|U;;|!$!8!8~3v;FSWW]B5O5OZZSYZZZr%   c                 @   | j         | j        | j        d}| j        rt	          j        | j                  |d<   | j        rd|d<   | j        |d<   | j	        rd|d<   | j
        r
| j
        |d<   | j        t          j        k    r| j        r
| j        |d<   | j        rd|d	<   |S )
N)r*   r?   r   r   Tre   r[   rf   r   r   ri   )r*   rL   r   r   rD   rE   r   re   r[   rf   r   r   r   r   ri   )rW   _dicts     r#   rs   zFieldSchema.to_dictp  s    I,J
 

  	9"mDK88E(O? 	,"&E,#|E)  	-(,E$%? 	2"&/E,:''D,='$($5E.!! 	.)-E%&r%   itemc                 @    | j         r|| j         v r| j         |         S d S rm   r   )rW   r   s     r#   __getattr__zFieldSchema.__getattr__  s-     	+):!:!:$T**tr%   ry   c                     t          |t                    sdS |                                 |                                k    S )NF)rR   r`   rs   r|   s     r#   r}   zFieldSchema.__eq__  s4    %-- 	5||~~00r%   c                     | j         S )a  
        Returns the text description of the FieldSchema.

        :return str:
            FieldSchema description text, returned when the operation is successful.

        :example:
        >>> from pymilvus import FieldSchema, DataType
        >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=False)
        >>> field.description
        'int64'
        r   rn   s    r#   r?   zFieldSchema.description  s       r%   c                     | j         S )a  
        Returns the parameters of the field.

        :return list:
            List of the parameter.

        :example:
        >>> from pymilvus import FieldSchema, DataType
        >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=False)
        >>> field.params
        {}
        >>> fvec_field = FieldSchema("fvec", DataType.FLOAT_VECTOR, is_primary=False, dim=128)
        >>> fvec_field.params
        {'dim': 128}
        r   rn   s    r#   r   zFieldSchema.params  s    "   r%   c                     | j         S rm   )r   rn   s    r#   r   zFieldSchema.dtype  s
    {r%   r   rm   )r   r   r   r\   r   rY   rt   r   r   r   r   r   r   rs   r   r   r}   r   r?   r   r   rC   r%   r#   r`   r`   "  sj        "  "S  "  "  "W[  "  "  "  "D## # # # #8 8Xd^ 8 8 8 8
@ @ @, 
[d 
[ 
[ 
[ [
[  *    
1F 1 1 1 1
 ! ! X! ! ! X!$ x    X  r%   r`   datarp   c                 P    t          | t          j        t          t          f          S )z+DataFrame, list, dict are valid insert data)rR   pd	DataFramerS   dictr   s    r#   is_valid_insert_datar     s    dR\46777r%   c                     t          | t                    pBt          | t                    o-t          |           dk    ot          | d         t                    S )z Dict or List[Dict] are row-basedr   )rR   r   rS   rw   r   r   s    r#   is_row_basedr     sH    dD!! 4N3t99q=NZQ5N5Nr%   c                 h   t          | t          j        t          t          f          st          d          t          | t          j                  rdS t          | t                    rdS t          | t                    r2t          |           dk    rdS t          | d         t                    rdS dS )Nz;The type of data should be list or pandas.DataFrame or dictr   FTr   )rR   r   r   rS   r   r   rw   r   r   s    r#   check_is_row_basedr     s    dR\4677 
)Q
 
 
 	
 $%% u$ t$ t99>>5d1gt$$ 	45r%   c                     t          | t          j        t          f          st	          d          t          | t          j                  }| D ]#}|st          |          st	          d          $d S )Nz3The type of data should be list or pandas.DataFramer   zdata should be a list of list)rR   r   r   rS   r   r   )r   is_dataframecols      r#   _check_insert_datar     s    dR\4011 
)I
 
 
 	
 dBL11L W W 	WL$5$5 	W-6UVVVVW Wr%   r>   c                    t          |           }t          |t          j                  }|rt          |j                  nt          |          }||k    rOd| dt          |           }|r(d | D             }t          |j                  }d| d| }t          |          |rNt          t          |j                  |           D ]-\  }}	||	j        k    rt          d|	j         d|           ,d S d S )Nz0The data don't match with schema fields, expect z list, got c                     g | ]	}|j         
S rC   )r*   )rF   fs     r#   rH   z*_check_data_schema_cnt.<locals>.<listcomp>  s    ---af---r%   z5The fields don't match with schema fields, expected: z, got r   z)The name of field don't match, expected: )	rw   rR   r   r   columnsrS   r   zipr*   )
r>   r   	field_cntr   data_cntr   i_namet_namexys
             r#   _check_data_schema_cntr     s>   FIdBL11L$0?s4<   c$iiHH`y``UXY]U^U^`` 	  	e--f---F$,''Fdfdd\bddG#G4444 T\**F33 	 	DAqAF{{+YYYVWYY     	 	r%   schemac                 ~   | t          d          | j        rt          |t          j                  r| j        j        |v r|| j        j                                                                                 sd| j        j         }t          |          t          |j                  }|                    | j                   ||         }t          j        | j                  }t!          |          D ](\  }}|j        r|j        r|                    |           )t'          ||           t)          |           d S )NSchema shouldn't be Noner   z*Expect no data for auto_id primary field: )r   r[   rR   r   r   r   r*   isnullallr   rS   r   removerD   rE   r>   	enumeratere   popr   r   )r   r   rk   r   
tmp_fieldsirG   s          r#   check_insert_schemar     s:   ~%.HIIII~ *T2<88 V=Q=VZ^=^=^F(-.5577;;== 	5Zv?S?XZZC'4444t|$$v+,,,G}v}--Jj))  5 	 	NN1:t,,,tr%   c                    | t          d          t          |t          j                  rz| j        j        |vs6|| j        j                                                                                 rt          t          j
                  t          |j                  }||         }t          t          j        | j                  |           t#          |           d S )Nr   r   )r   rR   r   r   r   r*   r   r   r   r   UpsertPrimaryKeyEmptyrS   r   r   rD   rE   r>   r   )r   r   r   s      r#   check_upsert_schemar     s    ~%.HIIII$%% $D00D9M9R4S4Z4Z4\4\4`4`4b4b0'0A0WXXXXt|$$G}4=77>>>tr%   dfc                     t          |           \  }}}g }t          ||          D ]>\  }}|                    |i           }t          ||fi |}|                    |           ?|S rm   )prepare_fields_from_dataframer   rM   r`   r   )	r   	col_names
data_typescolumn_params_mapr>   r*   r   type_paramsfield_schemas	            r#   construct_fields_from_dataframer     s    /LR/P/P,Iz,F9j11 $ $e'++D"55"4>>+>>l####Mr%   c                    t          | j                  }t          t          t          |                    }t          | j                  }i }t
          j        |v r]t          |           dk    rt          t          j
                  |                     d                                          d         }t          |          D ]\  }}|t
          j        k    rt          ||                   }|t
          j        t
          j        t
          j        t
          j        fv ri }	|t
          j        k    rt          ||                   dz  |	d<   n[|t
          j        t
          j        fv r)t'          t          ||                   dz            |	d<   nt          ||                   |	d<   |	|||         <   |||<   t
          j        |v rt          t          j
                  |||fS )Nr   r   r      dim   )rS   dtypesmapr   r   r   r   rw   r
   r   DataFrameInvalidheadto_numpyr   r   r   r7   r   r   r   )
r   d_typesr   r   r   valuesr   r   	new_dtypevector_type_paramss
             r#   r   r   &  s   29ooGc5w??@@JRZ  I:%%r77a<<,5F5WXXXX$$&&q)!*-- 	* 	*HAu(((.vay99	*)+,	!   *,& H$:::47q	NNQ4F*511"x'>@X&YYY47F1I!8K4L4L*51147q	NN*516H%il3 )
1:%%(1B1STTTTj"333r%   c                    | t          t          j                  t          | j                  dk     rt          t          j                  g }| j        D ]\}|j        t          j        t          j	        t          j
        t          j        t          j        fv r|                    |j                   ]t          |          dk     rt          t          j                  d S )Nr   r   )r   r   NoSchemarw   r>   EmptySchemar   r   r7   r   r   r   r   r   r*   NoVector)r   vector_fieldsrG   s      r#   check_schemar  K  s    ~%.?.HIIII
6=A%.?.KLLLLM - -;!"#$(
 
 
   ,,,
=A%.?.HIIII r%   )0rD   typingr   r   r   r   r   pandasr   pandas.api.typesr   pymilvus.exceptionsr	   r
   r   r   r   r   r   r   r   r   r   	constantsr   typesr   r   r   r$   r.   r:   r<   r`   r   rS   r   rb   r   r   r   r   r   r   r   r   r   r  rC   r%   r#   <module>r     s    3 3 3 3 3 3 3 3 3 3 3 3 3 3     ) ) ) ) ) )                          * ) ) ) ) )         L L L L L
!
8;
QT
 
 
 
 
s 
RU 
 
 
 
&K K K K K K K K\R R R R R R R Rj8uR\4%=> 84 8 8 8 8
uT4:-. 4    U4:tDz4#MN SW    *WU4:r|#;< W W W W4 uT$Z5M/N    . 0 d4j",>V8W    (
 0 
d4j",>V8W 
 
 
 
 k9J    "4bl "4 "4 "4 "4JJ) J J J J J Jr%   