L iXUdZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZmZmZmZmZdd lm Z m!Z!m"Z"dd l#m$Z$dd l%m&Z&dd l'm(Z(dd l)m*Z*erddl+mZ,ddl-Z.ddl/m0Z0e jbe2Z3de4d<dZ5de4d<dZ6de4d<dZ7de4d<dZ8de4d<e9e:e;ezeegeffZ d+ d,dZ?Gd d!Z@Gd"d#ZAeAZBd-d$ZCd.d%ZDd/d&ZEGd'd(ZFGd)d*ZGy)0z0Hashing for st.cache_data and st.cache_resource.) annotationsN)Callable)Enum)Pattern)MappingProxyType) TYPE_CHECKINGAnyFinal TypeAliascast)logger type_utilutil)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^eZdZ d dfd Z ddZ ddZxZS) UserHashErrorct|j|_||_||_|j ||}t |||j|jyN) type__name__alternate_name hash_func cache_type_get_message_from_funcsuper__init__with_traceback __traceback__)selforig_excobject_to_hashr#r$msg __class__s g/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/streamlit/runtime/caching/hashing.pyr'zUserHashError.__init__GsX#8n55"$))(NC  H223c|j||}d|dd|dd|dd|dd |dd |d d |d djdS)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_argsstrip)r*r+ cached_funcargss r/r%z$UserHashError._get_message_from_funcWs ++HkB&&*+;&<%=>66:;L6M5NOm l & %+) r0ctjj}tj|}|d}nt |drd|j d}nd}d}|jtjurd}n|jtjurd}t |jdrd|jj dnd}t||tjj|||d S) N somethingr!`z()`z a functionz@st.cache_resourcez@st.cache_data)r3r7r8r6r5r4) hash_stackscurrent hash_sourcer get_fqn_typehasattrr!r$rRESOURCEDATAr#str pretty_print)r*r+ failed_objrCr7r6decorator_namer4s r/r9z%UserHashError._get_error_message_argsts "))55 '44Z@  %K [* -k22337K&K ??i00 01N __  .-Nt~~z2''( , $'x=#6%--::<&-,   r0r) r+ BaseExceptionr,r r#zCallable[[Any], Any]r$zCacheType | NonereturnNone)r+rLr;r rMrH)r+rLrJr rMzdict[str, Any])r! __module__ __qualname__r'r%r9 __classcell__)r.s@r/rrFs (, 444( 4 % 4  4  :# # #   # r0rcj|tj_t||}|j ||y)zcUpdates a hashlib hasher with the hash of val. This is the main entrypoint to hashing.py. N)rArBrC_CacheFuncHasherupdate)valhasherr$rC hash_funcschs r/ update_hashrYs,'2K# *j 1BIIfcr0c@eZdZdZd dZd dZd dZd dZd dZd dZ y) _HashStackaStack 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. cDtj|_d|_yr) collections OrderedDict_stackrCr*s r/r'z_HashStack.__init__s?J?V?V?X 7;r0c,tj|Srrrepr_r`s r/__repr__z_HashStack.__repr__zz$r0c4||jt|<yr)r_idr*rUs r/pushz_HashStack.pushs" BsGr0c8|jjyr)r_popitemr`s r/popz_HashStack.pops r0c0t||jvSr)rgr_rhs r/ __contains__z_HashStack.__contains__s#w$++%%r0cdddjfdt|jjDS)NcX dtj|d|S#t$rYywxYw)NzObject of type z: z")rrD Exception)vs r/to_strz'_HashStack.pretty_print..to_strs8 <()?)?)B(C2aSII <; z*_HashStack.pretty_print..sKqKs)rrr rMrH)joinreversedr_values)r*rss @r/rIz_HashStack.pretty_prints1 < yyKHT[[5G5G5I,JKKKr0NrMrNrMrH)rUr rMrN)rUr rMbool) r!rOrP__doc__r'rdrirlrnrIrur0r/r[r[s& ;  #&Lr0r[c2eZdZdZddZddZeddZy) _HashStacksz@Stacks of what has been hashed, with at most 1 stack per thread.c6tj|_yr)weakrefWeakKeyDictionary_stacksr`s r/r'z_HashStacks.__init__s  % % ' r0c,tj|Srrbr`s r/rdz_HashStacks.__repr__rer0ctj}|jj|d}|t }||j|<|Sr) threadingcurrent_threadrgetr[)r*rstacks r/rBz_HashStacks.currentsE"113   6 =LE+0DLL ( r0Nr|r})rMr[)r!rOrPrr'rdpropertyrBrur0r/rrs#J    r0rcV|jdzdz}|j|ddS)NlittleT)signed) bit_lengthto_bytes)i num_bytess r/ _int_to_bytesrs,!#)I ::i$: 77r0c.ddl}|jd|S)Nrz.is_simples0 sUIsE3diiP Q d{ r0__l)rr rMr~) rtupleallmaplistinspect isbuiltin isroutineiscodergNoResult)rrs r/_keyrs { ~ #u#c)S&9": #tSC%8!9uSz""!2!23!77>>#;N#w Or0cFeZdZdZ d d dZd dZd dZd dZd dZy) rSz+A hasher that can hash objects with cycles.Nc||rO|jDcic]-\}}t|tr|ntj||/c}}|_ni|_i|_d|_||_ycc}}w)Nr) itemsrrHrget_fqn _hash_funcs_hashessizer$)r*r$rWkrrs r/r'z_CacheFuncHasher.__init__su ',,. Aq 3'Y->->q-A1D D  "D )+  $ s2A1c,tj|Srrbr`s r/rdz_CacheFuncHasher.__repr__3rer0cXt|jj}|t|f}|dtur||j vr|j |S|t jvrtSt jj| d||j|fz}|xjtj|z c_ |dtur||j |<t jj|S#t jjwxYw)zKAdd memoization to _to_bytes and protect against cycles in data structures.s%s:%s)r rPencoderrrrArBrri _to_bytesrsys getsizeofrl)r*rtnamekeybs r/rz_CacheFuncHasher.to_bytes6sS &&--/d3i  q6 !cT\\&9<<$ $ +%% %% %  % &E4>>##677A IIq) )I1vX%$% S!    # # %    # # %s AD D)cH|j|}|j|y)z6Update the provided hasher with the hash of an object.N)rrT)r*rVrrs r/rTz_CacheFuncHasher.updateWs MM#  ar0cZtjdd}tj|dstj|dr|j t |St |ttfr|Stj||jvr<|jtj|} ||}|j |St |tr|jSt |t r t#|St |t$r t'|St |t(j*r |jSt |t,j,r|j/jSt |t0t2fr)|D]}|j5|||j7St |t8r7|j;D]}|j5|||j7S|y|d ury |duryt |t<s9t?j@|r$|j t?jB|St |tDrt|jStj|d rd d l#m$}tKd|}|j5||jL|j5||jNjPtS|tTk\r|jWtXd } |j5|||j[j]|j7Stj|drd d l#m$}tKd|} |j5|| jjtS| tTk\r| jWtXd } |j || jl} |j5|| |j || } |j5|| |j7Stj|drd dl7} tKd|}|j5|t|jNj|j5||jjtS|tTk\r|jWtXd } |j5||jqd jsjuj|j7Stj|dr/d dl7} tKd|}|j5||jjtS|tTk\r|jWtXd } |jvj;D]N\} }|j5|| j|j5|t|jP|jyd jqd jsjuj} |j5|| |j7Stj|drtKd|}|j5||jj|j5|t|jN|jLtzk\r@d dl>}|j~jd }|j|jt }|j5||j]|j7Stj|d!rBd dl>}tKd"|}|j|j]d#$}|j |Stj|r#t|jjSt |ttjjfr|j t9|Stj|d%r#t|jjSt |trl|j5||jP|j5||j|j5||j|j7St|d&rt |tjtjfr~t|d&d'}|j5|||j5|tjj||j5||j|j7St |tr'|j |j|jgSt |tjtjfrP|j5||j|j5||j|j7Stj|d(r#t|jjStj|r|j |jStj|r|j |jSt |tjrd|j5||j|j5||j|j5||j|j7Stj|r\ tKd)|}t|d*r|j}n|j}|j5|||j7S |j}|D]}|j5|||j7S#t$r}t||||j|d}~wwxYw#t^$rAt`jcdd dtejf|tdjhzcYSwxYw#t^$rAt`jcdd dtejf| tdjhzcYSwxYw#t^$rAt`jcdd dtejf|tdjhzcYSwxYw#t^$rAt`jcdd dtejf|tdjhzcYSwxYw#t$r}td+|d}~wwxYw#t$r}t|d}~wwxYw),zHash objects to bytes, including code with dependencies. Python's built in `hash` does not produce consistent results across runs. md5F)usedforsecurityzunittest.mock.Mockzunittest.mock.MagicMock)r#r$N0T1zpandas.core.series.Seriesr)hash_pandas_objectz pd.Series)n random_statez?Pandas Series hash failed. Falling back to pickling the object.)exc_infos%szpandas.core.frame.DataFramez pd.DataFramezBPandas DataFrame hash failed. Falling back to pickling the object.zpolars.series.series.Seriesz pl.Series)rseed)rz?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.ndarrayznpt.NDArray[Any])rzPIL.Image.Imageruint8)dtypezbuiltins.getset_descriptorname wonthappenz numpy.ufuncr model_dump_jsonze Pydantic object contains unhashable members, such as functions. )jhashlibnewris_typerrgrrrrDrrqrr$rHrrrrrrrdatetime isoformatrrrTdigestdictrr dataclasses is_dataclassasdictr pandas.utilrr rrrlenrsamplerto_numpytobytes TypeErrorrwarningpickledumpsHIGHEST_PROTOCOLshapedtypespolarshashto_arrow to_stringschema hash_rowsrnumpyrandom RandomStatechoiceflatr frombufferrrr!rr]abc ItemsViewrPrtellgetvaluerEioIOBasetempfile_TemporaryFileWrappergetattrospathgetmtimerpatternflagsStringIOBytesIOismoduleisclass functoolspartialr<funckeywordsis_pydantic_modelrjsonr __reduce__)r*rhr#outputexitemr series_objdf_objcolumn_hash_bytesvalues_hash_bytesplctnp_objnpstatepil_objnp_arrayobj_nameany_obj json_data reduce_datas r/rz_CacheFuncHasher._to_bytes\s  KKu 5   S"6 79;L;L *< ==C) ) cE9- .J  ! !# &$*:*: :(()?)?)DEI "3 ==( ( c3 ::<  c5 !"3' ' c3  % % c499 %99  c8,, -==?))+ + cD%= ) % At$ %88:  c4   % At$ %88:  ; $; %<#t$)A)A#)F==!3!3C!89 9 c4 s8??$ $   S"= > 6$(c$:J KK:?? + KK:++00 1:"44'..1DST.U  Q A1*=FFHPPRSxxz!  s$A B 6#'#002 3 KK399 %3x--jj#6Qj? J AsxxQx/88:DDFMMOPxxz!  s$F G ~s+C KK399 %3x--jj#6Qj? JJJ,,.4DAqKK188:.KK3q6==?34 MMqM)..A.6??AKKMTTV" A01xxz!  sO 4'+,>'DF KK6<< ( KK3v||, -{{n," --a0fkkH KK6>>+ ,88:    s$5 6 !'3/G}}W__%6g}FH==* *   s #,,./ / . 0I0IJ K==c+ +   s$@ A))0023 3 \ * KK388 $ KK388: & KK3<<> *88:  S& ! sRYY(F(FG HsFL9H KK8 $ KK277++H5 6 KK388: &88:  W %==#++syy!9: : bkk2::6 7 KK388: & KK3<<> *88:    sM 2,,./ /   c "==. . __S !==. . Y.. / KK388 $ KK388 $ KK3<< (88:   ( ( -  uc*7$56 ' 7 7 9I!( I Ay)xxz! 4!nn. $ % At$ %88: o #yT__ v QU! v||J8O8OPPP Q4 MX! v||FF4K4KLLL M0 JU! v||C1H1HIII J< JX! v||C1H1HIII J| )+  4)+3 4s:p AqA+r As&Ct'Au4v p=p88p=Ar  r  AssAt$#t$'Au10u14 v= v  v v* v%%v*r)r$rrWHashFuncsDict | NonerMrNr})rr rMr)rVr rr rMrN) r!rOrPrr'rdrrTrrur0r/rSrSs?5IM%#%1E% %2 B or0rSceZdZdZy)rzr6s7"  $"==--2F:@"""8,,#E"#U#   d3i3%*1E EF yF DE Q )Q p.2'+   +  %   $%L%LP0m 8  6ttn   r0