
    ȯeiX                       U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddl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mZmZmZ dd	l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* erddl+mZ, ddl-Z.ddl/m0Z0  e jb                  e2      Z3de4d<   dZ5de4d<   dZ6de4d<   dZ7de4d<   dZ8de4d<   e9e:e;e   z  eegef   f   Z<de4d<   dZ=de4d<    G d de$      Z>	 	 d+	 	 	 	 	 	 	 	 	 	 	 d,dZ? G d  d!      Z@ G d" d#      ZA eA       ZBd-d$ZCd.d%ZDd/d&ZE G d' d(      ZF G d) d*      ZGy)0z0Hashing for st.cache_data and st.cache_resource.    )annotationsN)Callable)Enum)Pattern)MappingProxyType)TYPE_CHECKINGAnyFinal	TypeAliascast)logger	type_utilutil)StreamlitAPIException)UnhashableTypeError)	CacheType)UploadedFile)Imager
   _LOGGERiP  _PANDAS_ROWS_LARGEi'  _PANDAS_SAMPLE_SIZEi  _NP_SIZE_LARGEi _NP_SAMPLE_SIZEr   HashFuncsDicts<   streamlit-57R34ML17-hesamagicalponyflyingthroughthesky-CYCLE_CYCLE_PLACEHOLDERc                  ^     e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ xZS )UserHashErrorc                    t        |      j                  | _        || _        || _        | j                  ||      }t        |   |       | j                  |j                         y N)
type__name__alternate_name	hash_func
cache_type_get_message_from_funcsuper__init__with_traceback__traceback__)selforig_excobject_to_hashr#   r$   msg	__class__s         c/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/streamlit/runtime/caching/hashing.pyr'   zUserHashError.__init__G   sX     #8n55"$))(NCH223    c                    | j                  ||      }d|d    d|d    d|d    d|d    d	|d    d
|d    d|d    dj                  d      S )N
orig_exception_descz'

This error is likely due to a bug in hash_func_namezB, which is a
user-defined hash function that was passed into the `cache_primitivez` decorator of
object_descz.

z( failed when hashing an object of type
`failed_obj_type_strz`.  If you don't know where that object is coming from,
try looking at the hash chain below for an object that you do recognize, then
pass that to `hash_funcs` instead:

```

hash_stackz
```

If you think this is actually a Streamlit bug, please
[file a bug report here](https://github.com/streamlit/streamlit/issues/new/choose).
)_get_error_message_argsstrip)r*   r+   cached_funcargss       r/   r%   z$UserHashError._get_message_from_funcW   s    
 ++HkB  &&*+;&<%= >66:;L6M5N Om     
 l  & %+)	r0   c                   t         j                  j                  }t        j                  |      }|d}nt        |d      rd|j                   d}nd}d}| j                  t        j                  u rd}n| j                  t        j                  u rd}t        | j                  d      rd| j                  j                   dnd}t        |      |t         j                  j                         |||d	S )
N	somethingr!   `z()`z
a function z@st.cache_resourcez@st.cache_data)r3   r7   r8   r6   r5   r4   )hash_stackscurrenthash_sourcer   get_fqn_typehasattrr!   r$   r   RESOURCEDATAr#   strpretty_print)r*   r+   
failed_objrC   r7   r6   decorator_namer4   s           r/   r9   z%UserHashError._get_error_message_argst   s    
 "))55'44Z@%K[*-k22337K&K??i0001N__	.-N t~~z2 ''(, 	 $'x=#6%--::<&-,
 	
r0   r   )
r+   BaseExceptionr,   r	   r#   zCallable[[Any], Any]r$   zCacheType | NonereturnNone)r+   rL   r;   r	   rM   rH   )r+   rL   rJ   r	   rM   zdict[str, Any])r!   
__module____qualname__r'   r%   r9   __classcell__)r.   s   @r/   r   r   F   s     (,44 4 (	4
 %4 
4   
	:#
#
 #
 
	#
r0   r   c                j    |t         j                  _        t        ||      }|j	                  ||        y)zcUpdates a hashlib hasher with the hash of val.

    This is the main entrypoint to hashing.py.
    N)rA   rB   rC   _CacheFuncHasherupdate)valhasherr$   rC   
hash_funcschs         r/   update_hashrY      s,     '2K#	*j	1BIIfcr0   c                  @    e Zd ZdZd	dZd
dZddZd	dZddZd
dZ	y)
_HashStacka  Stack of what has been hashed, for debug and circular reference detection.

    This internally keeps 1 stack per thread.

    Internally, this stores the ID of pushed objects rather than the objects
    themselves because otherwise the "in" operator inside __contains__ would
    fail for objects that don't return a boolean for "==" operator. For
    example, arr == 10 where arr is a NumPy array returns another NumPy array.
    This causes the "in" to crash since it expects a boolean.
    c                D    t        j                         | _        d | _        y r   )collectionsOrderedDict_stackrC   r*   s    r/   r'   z_HashStack.__init__   s    ?J?V?V?X 7;r0   c                ,    t        j                  |       S r   r   repr_r`   s    r/   __repr__z_HashStack.__repr__       zz$r0   c                4    || j                   t        |      <   y r   )r_   idr*   rU   s     r/   pushz_HashStack.push   s    "BsGr0   c                8    | j                   j                          y r   )r_   popitemr`   s    r/   popz_HashStack.pop   s    r0   c                0    t        |      | j                  v S r   )rg   r_   rh   s     r/   __contains__z_HashStack.__contains__   s    #w$++%%r0   c                    dddj                  fdt        | j                  j                               D              S )Nc                X    	 dt        j                  |        d|  S # t        $ r Y yw xY w)NzObject of type z: z"<Unable to convert item to string>)r   rD   	Exception)vs    r/   to_strz'_HashStack.pretty_print.<locals>.to_str   s8    <()?)?)B(C2aSII <;<s    	))r2   c              3  .   K   | ]  } |        y wr    ).0xrs   s     r/   	<genexpr>z*_HashStack.pretty_print.<locals>.<genexpr>   s     KqKs   )rr   r	   rM   rH   )joinreversedr_   values)r*   rs   s    @r/   rI   z_HashStack.pretty_print   s1    	< yyKHT[[5G5G5I,JKKKr0   NrM   rN   rM   rH   )rU   r	   rM   rN   )rU   r	   rM   bool)
r!   rO   rP   __doc__r'   rd   ri   rl   rn   rI   ru   r0   r/   r[   r[      s&    	; #&Lr0   r[   c                  2    e Zd ZdZddZddZedd       Zy)	_HashStacksz@Stacks of what has been hashed, with at most 1 stack per thread.c                6    t        j                         | _        y r   )weakrefWeakKeyDictionary_stacksr`   s    r/   r'   z_HashStacks.__init__   s    %%' 	r0   c                ,    t        j                  |       S r   rb   r`   s    r/   rd   z_HashStacks.__repr__   re   r0   c                    t        j                         }| j                  j                  |d       }|t	               }|| j                  |<   |S r   )	threadingcurrent_threadr   getr[   )r*   r   stacks      r/   rB   z_HashStacks.current   sE    "113  6=LE+0DLL(r0   Nr|   r}   )rM   r[   )r!   rO   rP   r   r'   rd   propertyrB   ru   r0   r/   r   r      s#    J

  	 	r0   r   c                V    | j                         dz   dz  }| j                  |dd      S )N   littleT)signed)
bit_lengthto_bytes)i	num_bytess     r/   _int_to_bytesr      s,    !#)I::i$:77r0   c                .    dd l }|j                  d|       S )Nr   z<d)structpack)fr   s     r/   _float_to_bytesr      s     ;;tQr0   c                v   | ydd} ||       r| S t        | t              rt        t        ||             r| S t        | t              r"t        t        ||             rdt        |       fS t        j                  |       s*t        j                  |       st        j                  |       rt        |       S t        S )zReturn key for memoization.Nc           
         t        | t        t        t        t        t
        t        t        j                  f      xs | d u S r   )	
isinstancebytes	bytearrayrH   floatintr~   uuidUUID)objs    r/   	is_simplez_key.<locals>.is_simple  s0    sUIsE3diiPQ d{	
r0   __l)r   r	   rM   r~   )r   tupleallmaplistinspect	isbuiltin	isroutineiscoderg   NoResult)r   r   s     r/   _keyr      s     {
 ~
#u#c)S&9":
#tSC%8!9uSz""!2!23!77>>#;N#wOr0   c                  F    e Zd ZdZ	 d	 	 	 	 	 d	dZd
dZddZddZddZy)rS   z+A hasher that can hash objects with cycles.Nc                    |  |rO|j                         D ci c]-  \  }}t        |t              r|nt        j                  |      |/ c}}| _        ni | _        i | _        d| _        || _        y c c}}w )Nr   )	itemsr   rH   r   get_fqn_hash_funcs_hashessizer$   )r*   r$   rW   krr   s        r/   r'   z_CacheFuncHasher.__init__  su     	 ',,. Aq  3'Y->->q-A1D D
  "D)+ 	$ s   2A1c                ,    t        j                  |       S r   rb   r`   s    r/   rd   z_CacheFuncHasher.__repr__3  re   r0   c                X   t        |      j                  j                         }|t        |      f}|d   t        ur|| j
                  v r| j
                  |   S |t        j                  v rt        S t        j                  j                  |       	 d|| j                  |      fz  }| xj                  t        j                  |      z  c_        |d   t        ur|| j
                  |<   t        j                  j                          |S # t        j                  j                          w xY w)zKAdd memoization to _to_bytes and protect against cycles in data structures.   s   %s:%s)r    rP   encoder   r   r   rA   rB   r   ri   	_to_bytesr   sys	getsizeofrl   )r*   r   tnamekeybs        r/   r   z_CacheFuncHasher.to_bytes6  s    S	&&--/d3i  q6!cT\\&9<<$$ +%%%%%  %	&E4>>##677A IIq))I1vX%$%S!
 ##% ##%s   AD	 	 D)c                H    | j                  |      }|j                  |       y)z6Update the provided hasher with the hash of an object.N)r   rT   )r*   rV   r   r   s       r/   rT   z_CacheFuncHasher.updateW  s    MM#ar0   c                Z   t        j                  dd      }t        j                  |d      st        j                  |d      r| j	                  t        |            S t        |t        t        f      r|S t        j                  |      | j                  v r<| j                  t        j                  |         }	  ||      }| j	                  |      S t        |t              r|j                         S t        |t               rt#        |      S t        |t$              rt'        |      S t        |t(        j*                        r|j                  S t        |t,        j,                        r|j/                         j                         S t        |t0        t2        f      r)|D ]  }| j5                  ||        |j7                         S t        |t8              r7|j;                         D ]  }| j5                  ||        |j7                         S |y|d	u ry
|du ryt        |t<              s9t?        j@                  |      r$| j	                  t?        jB                  |            S t        |tD              rt        |      j                         S t        j                  |d      rddl#m$} tK        d|      }| j5                  ||jL                         | j5                  ||jN                  jP                         tS        |      tT        k\  r|jW                  tX        d      }	 | j5                  | ||      j[                         j]                                |j7                         S t        j                  |d      rddl#m$} tK        d|      }	| j5                  ||	jj                         tS        |	      tT        k\  r|	jW                  tX        d      }		 | j	                   ||	jl                              }
| j5                  ||
       | j	                   ||	            }| j5                  ||       |j7                         S t        j                  |d      rddl7}tK        d|      }| j5                  |t        |jN                        j                                | j5                  ||jj                         tS        |      tT        k\  r|jW                  tX        d      }	 | j5                  ||jq                  d      js                         ju                         j                                |j7                         S t        j                  |d      r/ddl7}tK        d|      }| j5                  ||jj                         tS        |      tT        k\  r|jW                  tX        d      }	 |jv                  j;                         D ]N  \  }}| j5                  ||j                                | j5                  |t        |      j                                P |jy                  d      jq                  d      js                         ju                         j                         }| j5                  ||       |j7                         S t        j                  |d      rtK        d|      }| j5                  ||jj                         | j5                  |t        |jN                               |jL                  tz        k\  r@ddl>}|j~                  j                  d      }|j                  |j                  t               }| j5                  ||j]                                |j7                         S t        j                  |d!      rBddl>}tK        d"|      }|j                  |j]                         d#$      }| j	                  |      S t        j                  |      r#t        |j                  j                               S t        |t        t        j                  j                  f      r| j	                  t9        |            S t        j                  |d%      r#t        |j                  j                               S t        |t              rl| j5                  ||jP                         | j5                  ||j                                | j5                  ||j                                |j7                         S t        |d&      rt        |t        j                  t        j                  f      r~t        |d&d'      }| j5                  ||       | j5                  |t        j                  j                  |             | j5                  ||j                                |j7                         S t        |t              r'| j	                  |j                  |j                  g      S t        |t        j                  t        j                  f      rP| j5                  ||j                                | j5                  ||j                                |j7                         S t        j                  |d(      r#t        |j                  j                               S t        j                  |      r| j	                  |j                        S t        j                  |      r| j	                  |j                        S t        |t        j                        rd| j5                  ||j                         | j5                  ||j                         | j5                  ||j                         |j7                         S t        j                  |      r\	 tK        d)|      }t        |d*      r|j                         }n|j                         }| j5                  ||       |j7                         S 	 |j                         }|D ]  }| j5                  ||        |j7                         S # t        $ r}t        |||| j                        |d}~ww xY w# t^        $ rA t`        jc                  dd	       dte        jf                  |td        jh                        z  cY S w xY w# t^        $ rA t`        jc                  dd	       dte        jf                  |	td        jh                        z  cY S w xY w# t^        $ rA t`        jc                  dd	       dte        jf                  |td        jh                        z  cY S w xY w# t^        $ rA t`        jc                  dd	       dte        jf                  |td        jh                        z  cY S w xY w# t        $ r}t        d+      |d}~ww xY w# t        $ r}t               |d}~ww xY w),zHash objects to bytes, including code with dependencies.

        Python's built in `hash` does not produce consistent results across
        runs.
        md5F)usedforsecurityzunittest.mock.Mockzunittest.mock.MagicMock)r#   r$   N   0T   1zpandas.core.series.Seriesr   )hash_pandas_objectzpd.Series[Any])nrandom_statez?Pandas Series hash failed. Falling back to pickling the object.)exc_infos   %szpandas.core.frame.DataFramezpd.DataFramezBPandas DataFrame hash failed. Falling back to pickling the object.zpolars.series.series.Seriesz	pl.Series)r   seed)r   z?Polars Series hash failed. Falling back to pickling the object.z polars.dataframe.frame.DataFramezpl.DataFramezBPolars DataFrame hash failed. Falling back to pickling the object.znumpy.ndarrayznpt.NDArray[Any])r   zPIL.Image.Imager   uint8)dtypezbuiltins.getset_descriptorname
wonthappenznumpy.ufuncr	   model_dump_jsonze
                    Pydantic object contains unhashable members, such as functions.
                )jhashlibnewr   is_typer   rg   r   r   r   rD   r   rq   r   r$   rH   r   r   r   r   r   r   r   datetime	isoformatr   r   rT   digestdictr   r    dataclassesis_dataclassasdictr   pandas.utilr   r   r   r   r   lenr   sampler   to_numpytobytes	TypeErrorr   warningpickledumpsHIGHEST_PROTOCOLshapedtypespolarshashto_arrow	to_stringschema	hash_rowsr   numpyrandomRandomStatechoiceflatr   
frombufferr   r   r!   r   r]   abc	ItemsViewrP   r   tellgetvaluerE   ioIOBasetempfile_TemporaryFileWrappergetattrospathgetmtimer   patternflagsStringIOBytesIOismoduleisclass	functoolspartialr<   funckeywordsis_pydantic_modelr   jsonr   
__reduce__)r*   r   hr#   outputexitemr   
series_objdf_objcolumn_hash_bytesvalues_hash_bytesplctnp_objnpstatepil_objnp_arrayobj_nameany_obj	json_datareduce_datas                           r/   r   z_CacheFuncHasher._to_bytes\  s
    KKu5S"679;L;L*<

 ==C))cE9-.J!!#&$*:*::(()?)?)DEI"3
 ==((c3::<c5!"3''c3 %%c499%99c8,,-==?))++cD%=) %At$%88:c4 		 %At$%88:;$;%<#t$)A)A#)F==!3!3C!899c4 s8??$$S"=>6.4JKK:??+KK:++001:"44'..1DST.U
QA1*=FFHPPRSxxz! s$AB6#'#<FKK6<<(6{00)<1MM$(MM2DV]]2S$T!A01$(MM2DV2L$M!A01xxz! s$AB{C(CKK3syy>0023KK399%3x--jj#6Qj?JAsxxQx/88:DDFMMOPxxz! s$FG~s+CKK399%3x--jj#6Qj?JJJ,,. 4DAqKK188:.KK3q6==?34
 MMqM)..A.6??AKKMTTV " A01xxz! sO4'+,>'DFKK6<<(KK3v||,-{{n,"		--a0fkkHKK6>>+,88:s$56!'3/G }}W__%6g}FH==**s#,,.//.0I0IJK==c++s$@A))00233\* KK388$KK388:&KK3<<>*88:S&!sRYY(F(FGH sFL9HKK8$KK277++H56KK388:&88:W%==#++syy!9::bkk2::67 KK388:&KK3<<>*88:sM2,,.//c" ==..__S! ==..Y../ KK388$KK388$KK3<<(88:((- uc*7$56 ' 7 7 9I !(IAy)xxz!4!nn. $ %At$%88:o  #yT__v  QU!    v||J8O8OPPPQ4  MX!    v||FF4K4KLLLM0  JU!    v||C1H1HIIIJ<  JX!    v||C1H1HIIIJ|  ) +   4)+34s   :p  Aq  A+r As &Ct'  Au4 v 	p=p88p= Ar
	r
AssAt$#t$'Au10u14	v=v		v	v*v%%v*r   )r$   r   rW   HashFuncsDict | NonerM   rN   r}   )r   r	   rM   r   )rV   r	   r   r	   rM   rN   )	r!   rO   rP   r   r'   rd   r   rT   r   ru   r0   r/   rS   rS     s?    5 IM%#%1E%	%2 B
or0   rS   c                      e Zd ZdZy)r   z<Placeholder class for return values when None is meaningful.N)r!   rO   rP   r   ru   r0   r/   r   r     s    Fr0   r   )NN)rU   r	   rV   r	   r$   r   rC   zCallable[..., Any] | NonerW   r"  rM   rN   )r   r   rM   r   )r   r   rM   r   )r   z
Any | NonerM   r	   )Hr   
__future__r   r]   collections.abcr   r   r  r   r   r   r   r   r   r   r   r   r   r   enumr   rer   typesr   typingr   r	   r
   r   r   	streamlitr   r   r   streamlit.errorsr   &streamlit.runtime.caching.cache_errorsr   $streamlit.runtime.caching.cache_typer   'streamlit.runtime.uploaded_file_managerr   numpy.typingnptpandaspd	PIL.Imager   
get_loggerr!   r   __annotations__r   r   r   r   r   rH   r    r   r   r   rY   r[   r   rA   r   r   r   rS   r   ru   r0   r/   <module>r6     s   7 "        	 	  
     $   " = = - - 2 F : @"""8, , # E "# U #      d3i3%*1E EFy F
 D E 
Q
) Q
p .2'+	  +	
 % 
$%L %LP 0 m8
 6t tn	 	r0   