o
    iZ&                     @   s  d dl Z d dlZd dlZd dlZd dlZG dd dZdddejdejdejej dejd	 d
ejf
ddZ	dej
eef dejdejd	 d
ej
eef fddZdejd
ejej fddZdejd
ejfddZdejd
ejeef fddZdejd
ejeef fddZdejeejf d
ejeef fddZdejeejf d
ejeef fddZdejd
eje fddZd edejdejd	 d!ejeef d
ef
d"d#ZdS )$    Nc                   @   s,   e Zd ZU dZeed< deddfddZdS )FieldMetadataa  
    Metadata class used to annotate fields to provide additional information.

    Example:
    class MyDict(TypedDict):
        field: typing.Annotated[str, FieldMetadata(alias="field_name")]

    Will serialize: `{"field": "value"}`
    To: `{"field_name": "value"}`
    aliasreturnNc                C   s
   || _ d S N)r   )selfr    r   _/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cohere/core/serialization.py__init__   s   
zFieldMetadata.__init__)__name__
__module____qualname____doc__str__annotations__r	   r   r   r   r   r      s   
 r   )
inner_typeobject_
annotationr   	direction)readwriter   c                    s  | du rdS du r t }t|r't|tjr't| tjr't	| |S t
|r8t| tjr8t	| |S t
|tjksLt
|tksL|tjkrmt| tjrmt
|d }t
|d  fdd|  D S t| tst
|tjkst
|tks|tjkrt| tjrt
|d  fdd| D S t
|tjkst
|tks|tjkrt| tjst
|tjkst
|tjjks|tjkrt| tjrt
|d  fdd	| D S t
|tjkrt
|D ]
}t|  |d
} q| S t }|du r| S | S )a.  
    Respect the metadata annotations on a field, such as aliasing. This function effectively
    manipulates the dict-form of an object to respect the metadata annotations. This is primarily used for
    TypedDicts, which cannot support aliasing out of the box, and can be extended for additional
    utilities, such as defaults.

    Parameters
    ----------
    object_ : typing.Any

    annotation : type
        The type we're looking to apply typing annotations from

    inner_type : typing.Optional[type]

    Returns
    -------
    typing.Any
    Nr      c              	      s"   i | ]\}}|t | d qS r   r   r   r   'convert_and_respect_annotation_metadata).0keyvalue)r   r   
value_typer   r   
<dictcomp>Q   s    z;convert_and_respect_annotation_metadata.<locals>.<dictcomp>c                    s   h | ]
}t | d qS r   r   r   itemr   r   r   r   r   	<setcomp>c       z:convert_and_respect_annotation_metadata.<locals>.<setcomp>c                    s   g | ]
}t | d qS r   r   r    r"   r   r   
<listcomp>|   r$   z;convert_and_respect_annotation_metadata.<locals>.<listcomp>r   )_remove_annotationsinspectisclass
issubclasspydantic	BaseModel
isinstancetypingMapping_convert_mappingtyping_extensionsis_typeddict
get_originDictdictget_argsitemsr   SetsetListlistSequencecollectionsabcUnionr   _get_annotation)r   r   r   r   
clean_typekey_typememberannotated_typer   )r   r   r   r   r   r      sz   












r   expected_typec           
      C   s   i }z	t j|dd}W n ty   t|di }Y nw t|}|  D ]I\}}|dkr>||v r>||}|d ur=||}	n||}	|	d u rL|||< q#|dkr^||vr^t||	|d||< q#t||	|d|t||	||< q#|S )NTinclude_extrasr   r   )r   r   r   )	r0   get_type_hints	NameErrorgetattr_get_alias_to_field_namer6   getr   
_alias_key)
r   rD   r   converted_objectannotationsaliases_to_field_namesr   r   dealiased_keytype_r   r   r   r/      s.   



r/   rQ   c                 C   sJ   t | }|d u rd S |t jkrt | d } t | }|t jkr#| S d S Nr   )r0   r2   NotRequiredr5   	AnnotatedrQ   maybe_annotated_typer   r   r   r?      s   



r?   c                 C   sR   t | }|d u r| S |t jkrtt | d S |t jkr'tt | d S | S rR   )r0   r2   rS   r&   r5   rT   rU   r   r   r   r&      s   


r&   c                 C      t j| dd}t|S NTrE   )r0   rG   rJ   rQ   rN   r   r   r   get_alias_to_field_mapping      rZ   c                 C   rW   rX   )r0   rG   _get_field_to_alias_namerY   r   r   r   get_field_to_alias_mapping   r[   r]   field_to_hintc                 C   s2   i }|   D ]\}}t|}|d ur|||< q|S r   r6   _get_alias_from_typer^   aliasesfieldhintmaybe_aliasr   r   r   rJ         rJ   c                 C   s2   i }|   D ]\}}t|}|d ur|||< q|S r   r_   ra   r   r   r   r\      rf   r\   c                 C   sN   t | }|d ur%t|dd  }|D ]}t|tr$|jd ur$|j  S qd S )Nr   )r?   r0   r5   r,   r   r   )rQ   rV   rN   r   r   r   r   r`      s   
r`   r   rO   c                 C   s"   |dkr
| | | S t|dp| S )Nr   )rQ   )rK   r`   )r   rQ   r   rO   r   r   r   rL     s   rL   )r<   r'   r-   r*   r0   r   AnyOptionalLiteralr   r.   r   objectr/   r?   r&   r3   rZ   r]   rJ   r\   r`   rL   r   r   r   r   <module>   sl   

 
%

