
    g"              
         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ej>                        ZddZ ddZ!ddZ"ddZ#ddZ$ddZ%d dZ&d!dZ'd"dZ(d#dZ)d$dZ*ejV                  e&ejX                  e'ejZ                  e(ej\                  e)ej^                  e*iZ0ded<   d%dZ1y)&    )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                  D     e Zd ZdZdd	 	 	 	 	 	 	 d fdZd fdZ x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fullc               2    t        |   |i | || _        y)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   argskwargs	__class__s       E/var/www/openai/venv/lib/python3.12/site-packages/_griffe/encoders.pyr   zJSONEncoder.__init__0   s!    $ 	$)&)	5    c                    	 |j                  | j                        S # t        $ r/ t        j	                  t        |      t        |         |      cY S w xY 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   objr!   s     r"   r)   zJSONEncoder.defaultF   sO    	J;;DII;.. 	J$((cEGODSII	Js    5AA)r   r   r   boolr    r   returnNone)r*   r   r,   r   )__name__
__module____qualname____doc__r   r)   __classcell__)r!   s   @r"   r   r   !   sD    " 66 6 	6
 
6,J Jr#   r   c                (    d| v rt        di | d   S y )N	docstring )r   obj_dicts    r"   _load_docstringr8   U   s     h18K011r#   c                ^    | j                  dg       D cg c]  }t        di | c}S c c}w )N
decoratorsr5   )r'   r   )r7   decs     r"   _load_decoratorsr<   [   s/    (0\2(FG(FI(FGGGs   *c                    t        t        | j                  d            } |di | }|t        j                  u r9d }|j                  D ](  }|||_        t        |t        j                        s'|}* |S )Nclsr5   )getattrr	   popExprAttributevaluesparent
isinstanceExprName)
expressionr>   exprpreviousvalues        r"   _load_expressionrJ   _   sp    
+z~~e4
5CD k'''[[E#'%!5!56 	 !
 Kr#   c           	     ^    t        | d   | d   t        | d         | d   t        |             S )Nname
annotationkindr)   )rM   rN   r)   r4   )r   r   r8   r6   s    r"   _load_parameterrO   s   s<    L)8F+,#!(+ r#   c                .   t        | t        j                        sy | D ]u  }t        |t        j                        r||_        %t        |t        j
                        s@t        |j                  t        j                        se||j                  _        w y N)rD   r	   ExprrE   rC   rA   first)rG   rC   elems      r"   _attach_parent_to_exprrU   }   sf    dK,,-dK001 DKk778Z

T_ThTh=i &DJJ	 r#   c                   t        | t              rT| j                  r t        | j                  j                  |       | j
                  D ]  }t        |j                  |        y t        | t              r| j                  r t        | j                  j                  |       | j
                  D ]  }t        |j                  |        | j                  D ].  }t        |j                  |       t        |j                  |       0 t        | j                  |       y t        | t              rC| j                  r t        | j                  j                  |       t        | j                  |       y y rQ   )rD   r   r4   rU   rI   r:   r   
parametersrM   r)   returnsr   )r*   rC   	decoratorparams       r"   _attach_parent_to_exprsr[      s     #u=="3==#6#6?I"9??F; (	C	"=="3==#6#6?I"9??F; (^^E"5#3#3V<"5==&9 $ 	s{{F3	C	#=="3==#6#6?syy&1 
$r#   c                p   t        | d   t        | d         t        |             }| j                  dg       }t	        |t
              r|j                         }|D ]*  }|j                  |j                  |       t        ||       , |xj                  t        | j                  dd            z  c_
        |S )NrL   filepath)rL   r]   r4   memberslabelsr5   )r   r   r8   r'   rD   dictrB   
set_memberrL   r[   r_   set)r7   moduler^   module_members       r"   _load_modulere      s    &)D*9M4NZijrZstFll9b)G'4 .." -,,m<v6 ! MMSh344MMr#   c           	        t        | d   | d   | j                  d      t        |       t        |       | d         }| j                  dg       }t	        |t
              r|j                         }|D ]*  }|j                  |j                  |       t        ||       , |xj                  t        | j                  dd            z  c_
        t        ||       |S )	NrL   lineno	endlinenobases)rL   rg   rh   r4   r:   ri   r^   r_   r5   )r   r'   r8   r<   rD   r`   rB   ra   rL   r[   r_   rb   )r7   class_r^   class_members       r"   _load_classrl      s    f!,,{+!(+#H-wF ll9b)G'4 ..",++\:f5   MMSh344MFF+Mr#   c                    t        | d   t        | d    | d   t        |       | d   | j                  d      t	        |             }|xj
                  t        | j                  dd            z  c_        |S )	NrL   rW   rX   rg   rh   )rL   rW   rX   r:   rg   rh   r4   r_   r5   )r   r   r<   r'   r8   r_   rb   )r7   functions     r"   _load_functionro      sr    fx56##H-!,,{+!(+H OOs8<<"566OOr#   c           
         t        | d   | d   | j                  d      t        |       | j                  d      | j                  d            }|xj                  t	        | j                  dd            z  c_        |S )	NrL   rg   rh   rI   rM   )rL   rg   rh   r4   rI   rM   r_   r5   )r   r'   r8   r_   rb   )r7   	attributes     r"   _load_attributerr      sq    f!,,{+!(+ll7#<<-I HLL2677r#   c                P    t        | d   | d   | d   | j                  d            S )NrL   target_pathrg   rh   )rL   targetrg   rh   )r   r'   r6   s    r"   _load_aliasrv      s3    f&!,,{+	 r#   zUdict[Kind, Callable[[dict[str, Any]], Module | Class | Function | Attribute | Alias]]_loader_mapc                    d| v rt        |       S d| v r	 t        | d         }t	        |   |       S | S # t        $ r t        |       cY S w xY w)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>   rN   )rJ   r
   
ValueErrorrO   rw   )r7   rN   s     r"   json_decoderrz      sj    " )) 	-()D 4 ** O  	-"8,,	-s   3 A
	A
)r7   r`   r,   zDocstring | None)r7   r`   r,   zlist[Decorator])rF   r`   r,   zexpressions.Expr)r7   dict[str, Any]r,   r   )rG   zexpressions.Expr | str | NonerC   Module | Classr,   r-   )r*   zClass | Function | AttributerC   r|   r,   r-   )r7   r{   r,   r   )r7   r{   r,   r   )r7   r{   r,   r   )r7   r{   r,   r   )r7   r{   r,   r   )r7   r{   r,   zDdict[str, Any] | Object | Alias | Parameter | str | expressions.Expr)2
__future__r   jsonpathlibr   r   r   typingr   r   _griffer	   _griffe.enumerationsr
   r   _griffe.modelsr   r   r   r   r   r   r   r   r   r   strrb   sortedr   __annotations__r   r8   r<   rJ   rO   rU   r[   re   rl   ro   rr   rv   MODULECLASSFUNCTION	ATTRIBUTEALIASrw   rz   r5   r#   r"   <module>r      s    #  0 0    4   	#s	7 3 1J$"" 1JhH('20.
 	KKJJMM>NNOJJfb r#   