
    gK%                       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 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&	 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Z0e edge$f   Z1 ed      d)d       Z2d'dZ3d*dZ4d+d Z5ed,d!       Z6d'd"Z7y)-    )annotationsN)MappingSequence)Decimal)Enum)	lru_cache)IPv4AddressIPv4InterfaceIPv4NetworkIPv6AddressIPv6InterfaceIPv6Network)chain)	PosixPath)Pattern)GeneratorType)AnyCallable)UUID   )	JsonValue	safe_repr
   set[int]c                    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o_seens     S/var/www/openai/venv/lib/python3.12/site-packages/logfire/_internal/json_encoder.py_bytes_encoderr$      s     71R=    c                ,    t        t        |       |      S N)r$   bytesr!   seens     r#   _bytearray_encoderr+   '   s    %(D))r%   c                    	 t        |       D cg c]  }t        ||       c}S c c}w # t        $ r# | D cg c]  }t        ||       nc c}w c}cY S w xY wr'   )sortedto_json_value	TypeError)r!   r*   items      r#   _set_encoderr1   +   sU    96<Qi@iddD)i@@@ 9678addD)a889s&   * %* * AA
	AAc                "    | j                         S r'   )	isoformatr    s     r#   _to_isoformatr4   2   s    ;;=r%   c                    t        |       S r'   )strr    s     r#   _to_strr7   6   s    q6Mr%   c                    t        |       S r'   r   r    s     r#   _to_reprr9   :   s    7Nr%   c           	     $   ddl }|j                  d      }|j                  d      }|dz  }t        | j                        }g }t        |       }||kD  rL|dz  }	t	        | j                  |	      j                         | j                  |	      j                               }
n| j                         }
|
D ]R  \  }}||kD  r.|j                  t        |d|       t        || d       z          9|j                  t        |             T 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listr.   )r!   r*   r;   max_rowsmax_columns
col_middlecolumn_countrows	row_count
row_middledf_rows_rows                r#   _pandas_data_frame_encoderrN   >   s    (   !34H##$9:K!Jqyy>LDAI8]
z*335qvvj7I7R7R7TU**,3+%KKS*-.c:+,6G1HHIKKS	"	  t$$r%   c                   ddl }| j                  }| j                  }t        | |j                        r| j
                  } t        |      D ]w  }t        ||   t              dz  }t        d      g|z  }t        d|      ||<   | t        |         }t        | d      ||<   | t        |         }	|j                  ||	f|      } y t        | j                         |      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minNUMPY_DIMENSION_MAX_SIZEslicetupleconcatenater.   tolist)
r!   r*   rQ   rR   
dimensions	dimensionhalfslicesfrontends
             r#   _numpy_array_encoderrd   l   s    * GGEJ!U\\"CC:&	5#%=>!C++!!TNy%- !4%.yfucl; ' T**r%   c                    dd l }t        | |j                        sJ 	 | j                         }t        ||      S # t        $ r | j                         }Y 'w xY wNr   )pydanticrT   	BaseModel
model_dumpAttributeErrordictr.   )r!   r*   rg   dumps       r#   _pydantic_model_encoderrm      sV    a++,,,||~ t$$  vvxs   : AAc           
     V   t        |       sy 	 ddlm}m} 	  ||       }|j
                  }t        | j                  j                  j                         D ci c]  }|||vrt        | |      nd c}|      S # |j                  $ r Y y w xY w# t        $ r t               }Y ww xY wc c}w )Nr   )excinspectz
<deferred>)is_sqlalchemy
sqlalchemyro   rp   NoInspectionAvailableunloadedModuleNotFoundErrorsetr.   
__mapper__attrskeysgetattr)r!   r*   ro   
sa_inspectstatedeferredfields          r#   _get_sqlalchemy_datar      s    	9	qME >> Z[ZfZfZlZlZqZqZstZsQVU(%:5!	LZst  (( 		  5 	us9   B A8 B B&8B
B 	B

B B#"B#)maxsizec                    i t         t        t        t        t        t        t
        t        t        j                  t        t        j                  t        t        j                  t        t        j                  d t        t        t        d t        t         t"        t        t$        t        t&        t        t(        t        t*        t        t,        t        t.        t        t0        d t2        t        t4        t        i} t7        j8                  t:              5  dd l}| j?                  |j@                  t        |jB                  t        |jD                  t        |jF                  t        |jH                  tJ        i       d d d        t7        j8                  t:              5  dd l&}| j?                  |jN                  tP        i       d d d        t7        j8                  t:              5  dd l)}| j?                  |jT                  tV        i       d d d        | S # 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   | S xY w)Nc                "    | j                         S r'   )total_seconds)r!   rL   s     r#   <lambda>z!encoder_by_type.<locals>.<lambda>   s    ):r%   c                .    t        | j                  |      S r'   )r.   valuer)   s     r#   r   z!encoder_by_type.<locals>.<lambda>   s    mAGGT:r%   c                .    t        | j                  |      S r'   )r.   patternr)   s     r#   r   z!encoder_by_type.<locals>.<lambda>   s    qyy$!?r%   r   ),rv   r1   	frozensetr(   r$   	bytearrayr+   datetimedater4   time	timedeltar   r7   r   r   r9   r	   r
   r   r   r   r   r   r   r   	Exception
contextlibsuppressru   rg   updateAnyUrl	NameEmailSecretBytes	SecretStrrh   rm   r;   	DataFramerN   rQ   ndarrayrd   )lookuprg   r;   rQ   s       r#   encoder_by_typer      s   0\0<0 	~0 	%	0
 	}0 	=0 	}0 	:0 	0 	:0 	x0 	W0 	w0 	W0 	W0  	w!0" 	W#0$ 	7?g7+0F. 
		0	1""G$$g""G""$;	
 
2 
		0	1v'')CDE 
2 
		0	1u}}&:;< 
2
 M- 
2	1 
2	1 
2
 Ms%    A&H'&H*.&H6H'*H36I c           
     n   	 t        | t        t        t        t        t        d       f      r| S t        |       |v ry|j                         }|j                  t        |              t        | t        t        f      r| D cg c]  }t        ||       c}S t        | t              rI| j                         D ci c]-  \  }}t        |t              r|n
t        |      t        ||      / c}}S t        | |      }||S t!        j"                  |       rYt!        j$                  |       D ci c]:  }|j&                  s|j(                  t        t+        | |j(                        |      < c}S t-        | j.                        rt1        | |      S | j.                  j2                  d d D ]  }	 t5               |   } || |      c S  t        | t8              r| D cg c]  }t        ||       c}S 	 t        |       S c c}w c c}}w c c}w # t6        $ r Y nw xY wc c}w # t:        $ r Y t        |       S w xY w)Nz<circular reference>r   )rT   intfloatr6   booltypeidcopyaddrC   r[   r.   r   itemsr   r   dataclassesis_dataclassfieldsr   namerz   is_attrs	__class___get_attrs_data__mro__r   KeyErrorr   r   )	r!   r*   r0   keyr   sa_datafbaseencoders	            r#   r.   r.      s   'a#uc4d<=Ha5D=)yy{Aa$':;<!$M$-!<<7# #$'')"+JC "#s+3uVZA[["+ 
 'q$/N%%a(MXM_M_`aMbmMbfgflflAFFM'!QVV*<dCCMbmmakk""1d++ KK'',D()+D1 q$'' - a":;<!$M$-!<< # Q<= = n   =  Q<	s   +H H AH  G:H #H 92G?+H /H ?,H +H=-H*H - H H +H
8
H H H+H :H 
	HH HH 	H43H4c                    	 t        j                  | d d      S # t        $ r, t        j                  t        | t	                     d      cY S w xY w)Nc                *    t        | t                     S r'   )r.   rv   )r!   s    r#   r   z$logfire_json_dumps.<locals>.<lambda>  s    q#%1Hr%   ),:)default
separators)r   )jsondumpsr   r.   rv   )objs    r#   logfire_json_dumpsr     sJ    Lzz#'HU_`` L zz-SU3
KKLs    2AAc                    t        | d      sy	 ddlm}m} t	        | |      xs t	        | j
                  |      S # t        $ r Y yw xY w)Nrw   Fr   )DeclarativeBaseDeclarativeMeta)hasattrsqlalchemy.ormr   r   rT   r   ImportError)r   r   r   s      r#   rq   rq   $  sH    3% C#/]:cmm_3]] s   +; 	AAc                L    	 dd l }|j                  |       S # t        $ r Y yw xY w)Nr   F)rx   hasru   )clsrx   s     r#   r   r   3  s*    yy~ s    	##c           
         dd l }|j                  | j                        D ci c]-  }|j                  t	        t        | |j                        |      / c}S c c}w rf   )rx   r   r   r   r.   rz   )r!   r*   rx   r   s       r#   r   r   =  sJ    EJ\\RSR]R]E^_E^AFFM'!QVV"4d;;E^___s   2A)r!   r(   r"   r   returnr6   )r!   r   r*   r   r   r6   )r!   zset[Any]r*   r   r   r   )r!   r   r"   r   r   r6   )r!   r   r*   r   r   r   )r!   r   r*   r   r   zJsonValue | None)r   z dict[type[Any], EncoderFunction])r   r   r   r6   )r   r   r   r   )r   r   r   r   )8
__future__r   r   r   r   r   collections.abcr   r   decimalr   enumr   	functoolsr   	ipaddressr	   r
   r   r   r   r   	itertoolsr   pathlibr   rer   typesr   typingr   r   uuidr   utilsr   r   rY   r$   r+   r1   r4   r7   r9   rN   rd   rm   r   EncoderFunctionr   r.   r   rq   r   r    r%   r#   <module>r      s    "     -    f f        '  7*9+%\)+X	%( C,i78 4. .b+\L  `r%   