o
    w!g"                  
   @  sZ  U d dl mZ d dlZd dlmZmZ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mZmZmZmZmZmZmZmZmZ eeeeeeeeiZded	< G d
d dejZd<ddZ d=ddZ!d>ddZ"d?ddZ#d@d"d#Z$dAd&d'Z%dBd)d*Z&dCd,d-Z'dDd/d0Z(dEd2d3Z)dFd5d6Z*ej+e&ej,e'ej-e(ej.e)ej/e*iZ0d7ed8< dGd:d;Z1dS )H    )annotationsN)Path	PosixPathWindowsPath)AnyCallable)expressions)KindParameterKind)
Alias	AttributeClass	Decorator	DocstringFunctionModuleObject	Parameter
Parametersz dict[type, Callable[[Any], Any]]_json_encoder_mapc                      s6   e Zd ZdZddd fddZd fddZ  ZS )JSONEncoderat  JSON encoder.

    JSON encoders can be used directly, or through
    the [`json.dump`][] or [`json.dumps`][] methods.

    Examples:
        >>> from griffe import JSONEncoder
        >>> JSONEncoder(full=True).encode(..., **kwargs)

        >>> import json
        >>> from griffe import JSONEncoder
        >>> json.dumps(..., cls=JSONEncoder, full=True, **kwargs)
    Ffullargsr   r   boolkwargsreturnNonec                  s   t  j|i | || _dS )a  Initialize the encoder.

        Parameters:
            *args: See [`json.JSONEncoder`][].
            full: Whether to dump full data or base data.
                If you plan to reload the data in Python memory
                using the [`json_decoder`][griffe.json_decoder],
                you don't need the full data as it can be inferred again
                using the base data. If you want to feed a non-Python
                tool instead, dump the full data.
            **kwargs: See [`json.JSONEncoder`][].
        N)super__init__r   )selfr   r   r   	__class__ R/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/_griffe/encoders.pyr   0   s   zJSONEncoder.__init__objc                   s<   z|j | jdW S  ty   tt|t j| Y S w )zReturn a serializable representation of the given object.

        Parameters:
            obj: The object to serialize.

        Returns:
            A serializable representation.
        r   )as_dictr   AttributeErrorr   gettyper   default)r    r%   r!   r#   r$   r*   F   s
   	zJSONEncoder.default)r   r   r   r   r   r   r   r   )r%   r   r   r   )__name__
__module____qualname____doc__r   r*   __classcell__r#   r#   r!   r$   r   !   s
    r   obj_dictdictr   Docstring | Nonec                 C  s   d| v rt di | d S d S )N	docstringr#   )r   r0   r#   r#   r$   _load_docstringU   s   r5   list[Decorator]c                 C  s   dd |  dg D S )Nc                 S  s   g | ]	}t d i |qS )r#   )r   ).0decr#   r#   r$   
<listcomp>\   s    z$_load_decorators.<locals>.<listcomp>
decorators)r(   r4   r#   r#   r$   _load_decorators[   s   r;   
expressionexpressions.Exprc                 C  sZ   t t| d}|di | }|tju r+d }|jD ]}|d ur"||_t|tjr*|}q|S )Nclsr#   )getattrr   popExprAttributevaluesparent
isinstanceExprName)r<   r>   exprpreviousvaluer#   r#   r$   _load_expression_   s   

rI   dict[str, Any]r   c                 C  s*   t | d | d t| d | d t| dS )Nname
annotationkindr*   )rL   rM   r*   r3   )r   r
   r5   r4   r#   r#   r$   _load_parameters   s   
rN   rF   expressions.Expr | str | NonerC   Module | Classr   c                 C  sT   t | tjsd S | D ]}t |tjr||_q
t |tjr't |jtjr'||j_q
d S N)rD   r   ExprrE   rC   rA   first)rF   rC   elemr#   r#   r$   _attach_parent_to_expr}   s   rU   r%   Class | Function | Attributec                 C  s   t | tr| jrt| jj| | jD ]}t|j| qd S t | trR| jr,t| jj| | jD ]}t|j| q/| jD ]}t|j| t|j	| q;t| j
| d S t | tri| jrat| jj| t| j| d S d S rQ   )rD   r   r3   rU   rH   r:   r   
parametersrL   r*   returnsr   )r%   rC   	decoratorparamr#   r#   r$   _attach_parent_to_exprs   s(   





r[   r   c                 C  s|   t | d t| d t| d}| dg }t|tr| }|D ]}||j| t	|| q | j
t| ddO  _
|S )NrK   filepath)rK   r\   r3   memberslabelsr#   )r   r   r5   r(   rD   r1   rB   
set_memberrK   r[   r^   set)r0   moduler]   module_memberr#   r#   r$   _load_module   s   
rc   r   c                 C  s   t | d | d | dt| t| | d d}| dg }t|tr&| }|D ]}||j| t	|| q(| j
t| ddO  _
t	|| |S )	NrK   lineno	endlinenobases)rK   rd   re   r3   r:   rf   r]   r^   r#   )r   r(   r5   r;   rD   r1   rB   r_   rK   r[   r^   r`   )r0   class_r]   class_memberr#   r#   r$   _load_class   s"   	

ri   r   c              	   C  sV   t | d t| d  | d t| | d | dt| d}| jt| ddO  _|S )	NrK   rW   rX   rd   re   )rK   rW   rX   r:   rd   re   r3   r^   r#   )r   r   r;   r(   r5   r^   r`   )r0   functionr#   r#   r$   _load_function   s   
	rk   r   c              	   C  sP   t | d | d | dt| | d| dd}| jt| ddO  _|S )	NrK   rd   re   rH   rL   )rK   rd   re   r3   rH   rL   r^   r#   )r   r(   r5   r^   r`   )r0   	attributer#   r#   r$   _load_attribute   s   rm   r   c                 C  s"   t | d | d | d | ddS )NrK   target_pathrd   re   )rK   targetrd   re   )r   r(   r4   r#   r#   r$   _load_alias   s   rp   zUdict[Kind, Callable[[dict[str, Any]], Module | Class | Function | Attribute | Alias]]_loader_mapDdict[str, Any] | Object | Alias | Parameter | str | expressions.Exprc                 C  sT   d| v rt | S d| v r(zt| d }W n ty!   t|  Y S w t| | S | S )af  Decode dictionaries as data classes.

    The [`json.loads`][] method walks the tree from bottom to top.

    Examples:
        >>> import json
        >>> from griffe import json_decoder
        >>> json.loads(..., object_hook=json_decoder)

    Parameters:
        obj_dict: The dictionary to decode.

    Returns:
        An instance of a data class.
    r>   rM   )rI   r	   
ValueErrorrN   rq   )r0   rM   r#   r#   r$   json_decoder   s   rt   )r0   r1   r   r2   )r0   r1   r   r6   )r<   r1   r   r=   )r0   rJ   r   r   )rF   rO   rC   rP   r   r   )r%   rV   rC   rP   r   r   )r0   rJ   r   r   )r0   rJ   r   r   )r0   rJ   r   r   )r0   rJ   r   r   )r0   rJ   r   r   )r0   rJ   r   rr   )2
__future__r   jsonpathlibr   r   r   typingr   r   _griffer   _griffe.enumerationsr	   r
   _griffe.modelsr   r   r   r   r   r   r   r   r   r   strr`   sortedr   __annotations__r   r5   r;   rI   rN   rU   r[   rc   ri   rk   rm   rp   MODULECLASSFUNCTION	ATTRIBUTEALIASrq   rt   r#   r#   r#   r$   <module>   s>   0
4












	