o
    i'                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZmZ d dl	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 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlm Z m!Z! d dl"m#Z# ddl$m%Z%m&Z& dZ'	 dBddZ(dCddZ)dDdd Z*dEd"d#Z+dEd$d%Z,dEd&d'Z-dFd(d)Z.dFd*d+Z/dFd,d-Z0dGd/d0Z1e!e dge%f Z2edHd2d3Z3dFd4d5Z4dId7d8Z5dJd:d;Z6edKd>d?Z7dFd@dAZ8dS )L    )annotationsN)MappingSequence)Decimal)Enum)cache	lru_cache)IPv4AddressIPv4InterfaceIPv4NetworkIPv6AddressIPv6InterfaceIPv6Network)chain)	PosixPath)Pattern)GeneratorType)AnyCallable)UUID   )	JsonValue	safe_repr
   obytes_seenset[int]returnstrc                 C  s   t | dd S )a  Encode bytes using repr() to get a string representation of the bytes object.

    We remove the leading 'b' and the quotes around the string representation.

    Examples:
        >>> print(b'hello')
        b'hello'
        >>> print(_bytes_encoder(b'hello'))
        hello
       reprr   r    r%   d/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/logfire/_internal/json_encoder.py_bytes_encoder   s   r'   	bytearrayseenc                 C  s   t t| |S N)r'   r   r   r)   r%   r%   r&   _bytearray_encoder'   s   r,   set[Any]r   c                   s>   z fddt | D W S  ty    fdd| D  Y S w )Nc                      g | ]}t | qS r%   to_json_value.0itemr)   r%   r&   
<listcomp>-       z _set_encoder.<locals>.<listcomp>c                   r.   r%   r/   r1   r4   r%   r&   r5   /   r6   )sorted	TypeErrorr+   r%   r4   r&   _set_encoder+   s
   r9   r   c                 C     |   S r*   )	isoformatr$   r%   r%   r&   _to_isoformat2      r<   c                 C     t | S r*   )r   r$   r%   r%   r&   _to_str6   r=   r?   c                 C  r>   r*   r"   r$   r%   r%   r&   _to_repr:   r=   r@   c                 C  s   ddl }|d}|d}|d }t| j}g }t| }||kr5|d }	t| |	 | |	 }
n|  }
|
D ]$\}}||krX|t	|d| t	|| d   q;|t	| q;t
||S )a  Encode pandas data frame by extracting important information.

    It summarizes rows and columns if they are more than limit.
    e.g. The data part of a data frame like:
    [
        [1, 2, 3, 4, 5],
        [2, 3, 6, 8, 10],
        [3, 6, 9, 12, 15],
        [4, 8, 12, 16, 20],
        [5, 10, 15, 20, 25],
    ]
    will be summarized to:
    [
        [1, 2, 4, 5],
        [2, 3, 8, 10],
        [4, 8, 16, 20],
        [5, 10, 20, 25],
    ]
    r   Nzdisplay.max_rowszdisplay.max_columnsr    )pandas
get_optionlencolumnsr   headiterrowstailappendlistr0   )r   r)   rA   max_rowsmax_columns
col_middlecolumn_countrows	row_count
row_middledf_rows_rowr%   r%   r&   _pandas_data_frame_encoder>   s    


 *
rT   c           
      C  s   ddl }| j}| j}t| |jr| j} t|D ]8}|| tkr qtd }tdg| }td|||< | t	| }t| d||< | t	| }	|j
||	f|d} qt|  |S )a  Encode numpy array by extracting important information.

    It summarizes rows and columns if they are more than limit.
    e.g. The data part of a data frame like:
    [
        [1, 2, 3, 4, 5],
        [2, 3, 6, 8, 10],
        [3, 6, 9, 12, 15],
        [4, 8, 12, 16, 20],
        [5, 10, 15, 20, 25],
    ]
    will be summarized to:
    [
        [1, 2, 4, 5],
        [2, 3, 8, 10],
        [4, 8, 16, 20],
        [5, 10, 20, 25],
    ]
    r   Nr    )axis)numpyshapendim
isinstancematrixArangeNUMPY_DIMENSION_MAX_SIZEslicetupleconcatenater0   tolist)
r   r)   rV   rW   
dimensions	dimensionhalfslicesfrontendr%   r%   r&   _numpy_array_encoderl   s    rh   c                 C  sb   dd l }t| |jsJ t| |jrt| j|S z|  }W n ty+   |  }Y nw t||S )Nr   )	pydanticrY   	BaseModel	RootModelr0   root
model_dumpAttributeErrordict)r   r)   ri   dumpr%   r%   r&   _pydantic_model_encoder   s   
rq   JsonValue | Nonec                   s   t sd S z ddlm}m} z|}W n |jy!   Y W d S w |j W n ty2   t  Y nw t fddj	j
 D |S )Nr   )excinspectc                   s$   i | ]}|| vrt |nd qS )z
<deferred>)getattr)r2   fielddeferredr   r%   r&   
<dictcomp>   s   $ z(_get_sqlalchemy_data.<locals>.<dictcomp>)is_sqlalchemy
sqlalchemyrs   rt   NoInspectionAvailableunloadedModuleNotFoundErrorsetr0   
__mapper__attrskeys)r   r)   rs   
sa_inspectstater%   rw   r&   _get_sqlalchemy_data   s"   

r    dict[type[Any], EncoderFunction]c                  C  s  i t ttttttttjt	tjt	tj
t	tjdd tttdd tttttttttttttttttdd tttti} tt' dd l}dd l}|  |j!t|j"t|j#t|j$t|j%t|j&t'i W d    n1 sxw   Y  tt dd l(}|  |j)t*i W d    n1 sw   Y  tt dd l+}|  |j,t-i W d    | S 1 sw   Y  | S )Nc                 S  r:   r*   )total_seconds)r   rR   r%   r%   r&   <lambda>   s    z!encoder_by_type.<locals>.<lambda>c                 S     t | j|S r*   )r0   valuer+   r%   r%   r&   r          c                 S  r   r*   )r0   patternr+   r%   r%   r&   r      r   r   ).r   r9   	frozensetr   r'   r(   r,   datetimedater<   time	timedeltar   r?   r   r   r@   r	   r
   r   r   r   r   r   r   r   	Exception
contextlibsuppressr~   ri   pydantic_coreupdateAnyUrlUrl	NameEmailSecretBytes	SecretStrrj   rq   rA   	DataFramerT   rV   ndarrayrh   )lookupri   r   rA   rV   r%   r%   r&   encoder_by_type   s   
	

r   c              	     s  zt  tttttd fr W S t v rW dS  t  t  t	t
fr5fdd D W S t  trFfdd  D W S t }|d urR|W S t re fddt D W S t jrpt W S  jjd d D ]}zt | }W n	 ty   Y qxw |   W S t  trfdd D W S z	t  }W n	 ty   Y nw t|W S W t S  ty   Y t S w )	Nz<circular reference>c                   r.   r%   r/   r1   r4   r%   r&   r5     r6   z!to_json_value.<locals>.<listcomp>c                   s.   i | ]\}}t |tr|nt|t| qS r%   )rY   r   r   r0   )r2   keyr   r4   r%   r&   ry     s    z!to_json_value.<locals>.<dictcomp>c                   s(   i | ]}|j r|jtt |jqS r%   )r#   namer0   ru   r2   fr+   r%   r&   ry     s   ( r!   c                   r.   r%   r/   r1   r4   r%   r&   r5     r6   )rY   intfloatr   booltypeidcopyaddrI   r_   r   itemsr   dataclassesis_dataclassfieldsis_attrs	__class___get_attrs_data__mro__r   KeyErrorr   to_dictr   r0   r   )r   r)   sa_databaseencoderr   r%   r+   r&   r0      sR   





r0   objc                 C  sD   zt j| dd dddW S  ty!   t jt| t ddd Y S w )Nc                 S  s   t | t S r*   )r0   r   )r   r%   r%   r&   r   /  r   z$logfire_json_dumps.<locals>.<lambda>),:F)default
separatorsensure_ascii)r   r   )jsondumpsr   r0   r   )r   r%   r%   r&   logfire_json_dumps-  s
   r   r   c                 C  sN   zt | ds	W dS ddlm}m} t| |pt| j|W S  ty&   Y dS w )Nr   Fr   )DeclarativeBaseDeclarativeMeta)hasattrsqlalchemy.ormr   r   rY   r   r   )r   r   r   r%   r%   r&   rz   6  s   
rz   clsr   c                 C  s*   z
dd l }|| W S  ty   Y dS w )Nr   F)r   hasr~   )r   r   r%   r%   r&   r   E  s   r   c                   s$   dd l } fdd| jD S )Nr   c                   s"   i | ]}|j tt |j qS r%   )r   r0   ru   r   r+   r%   r&   ry   R  s   " z#_get_attrs_data.<locals>.<dictcomp>)r   r   r   )r   r)   r   r%   r+   r&   r   O  s   r   )r   r   r   r   r   r   )r   r(   r)   r   r   r   )r   r-   r)   r   r   r   )r   r   r   r   r   r   )r   r   r)   r   r   r   )r   r   r)   r   r   rr   )r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )9
__future__r   r   r   r   r   collections.abcr   r   decimalr   enumr   	functoolsr   r   	ipaddressr	   r
   r   r   r   r   	itertoolsr   pathlibr   rer   typesr   typingr   r   uuidr   utilsr   r   r]   r'   r,   r9   r<   r?   r@   rT   rh   rq   r   EncoderFunctionr   r0   r   rz   r   r   r%   r%   r%   r&   <module>   sL     







.
.

3
8
		