pBFj7zddlZddlZddlZddlZddlZddlZddlmZm Z m Z ddl m Z m Z ddgZejdkrdnd Zd ZGd d eZGd deZGddeZGddeZGddeZGddeZGddeZGddeZddefdZdZdS)N) BaseHandlerregister unregister) b64decode b64encoderegister_handlersunregister_handlerslittle<>c8|jj}|dkrtn|S)z%translate equals sign to native order=)dtype byteordernative_byteorder)arrrs BC:\PYTHON\_runtimes\venv\Lib\site-packages\jsonpickle/ext/numpy.py get_byteorderrs" #I(C//  Y>ceZdZdZdZdS)NumpyBaseHandlerct|dr||d<dSt|}d}||r|t |d}||d<dS)Ntostringrz(numpy.record, )hasattrrstr startswithlen)selfrdataprefixs r flatten_dtypezNumpyBaseHandler.flatten_dtypess 5* % % "!NN,,DMMMJJE&F'' 0c&kkB./!DMMMrc|d}|drtj|}tj|S)Nr){[)rast literal_evalnpr)r r!rs r restore_dtypezNumpyBaseHandler.restore_dtype"s?W    J ' ' ,$U++ExrN)__name__ __module__ __qualname__r#r*rrrrs2"""rrceZdZdZdZdS)NumpyDTypeHandlerc2||||SN)r#r objr!s rflattenzNumpyDTypeHandler.flatten*s 3%%% rc,||Sr2)r*r r!s rrestorezNumpyDTypeHandler.restore.s!!$'''rNr+r,r-r5r8r.rrr0r0)s2(((((rr0ceZdZdZdZdS)NumpyGenericHandlerc||jd||j|d|d<|S)NNFresetvalue)r#r newbyteordercontextr5tolistr3s rr5zNumpyGenericHandler.flatten3sS 3911#66=== ,,SZZ\\,GGW  rc|j|dd}|||S)Nr@Fr>)rBr8r*type)r r!r@s rr8zNumpyGenericHandler.restore8sB $$T']%$@@!!$'',,U333rNr9r.rrr;r;2s2 44444rr;ceZdZdZdZdS)NumpyDatetimeHandlerzEExtend NumpyGenericHandler to handle nanosecond-resolution datetime64c"|j|dd}|d}|dr)|||dS|||S)Nr@Fr>rz[ns]ns)rBr8endswithr*rE)r r!r@rs rr8zNumpyDatetimeHandler.restore@s $$T']%$@@W  >>& ! ! >%%d++00== =!!$'',,U333rN)r+r,r-__doc__r8r.rrrGrG=s)OO44444rrGc(eZdZdZfdZdZxZS)UnpickleableNumpyGenericHandlerz From issue #381, this is used for simplifying the output of numpy arrays when unpicklable=False (the default is True). c|jjs.|j|dSt t |||S)NFr>)rB unpicklabler5rCsuperr;)r r4r! __class__s rr5z'UnpickleableNumpyGenericHandler.flattenNsU|' G<'' E'BB B,d33;;CFF Frctr2)NotImplementedErrorr7s rr8z'UnpickleableNumpyGenericHandler.restoreTs!!r)r+r,r-rKr5r8 __classcell__rQs@rrMrMHsV GGGGG """""""rrMc*eZdZdZdZdZdZdZdS)NumpyNDArrayHandlerz>Stores arrays as text representation, without regard for viewsc0|jjdurd|d<dSdS)NF writeable)flagsrYr3s r flatten_flagsz!NumpyNDArrayHandler.flatten_flags[s* 9 % ' ' %D    ( 'rcN|ddsd|j_dSdS)NrYTF)getrZrY)r r!rs r restore_flagsz!NumpyNDArrayHandler.restore_flags_s2xx T** ("'CI    ( (rc||jd|||||j|d|d<d|jvr |j|d<|S)Nr=Fr>valuesrshape)r#rrAr[rBr5rCrar3s rr5zNumpyNDArrayHandler.flattencs 3911#66=== 3%%%--cjjll%-HHX  >> IDM rcL|j|dd}tj||||dd}|dd}|||}||||S)Nr`Fr>orderCrrcra)rBr8r)arrayr*r]reshaper^)r r!r`rras rr8zNumpyNDArrayHandler.restorems%%d8nE%BBh $,,T22$((7C:P:P   $''  ++e$$C 4%%% rN)r+r,r-rKr[r^r5r8r.rrrWrWXsVHH&&&(((     rrWcDeZdZdZdefdZdZdZfdZfdZ xZ S)NumpyNDArrayHandlerBinaryzstores arrays with size greater than 'size_threshold' as (optionally) compressed base64 Notes ----- This would be easier to implement using np.save/np.load, but that would be less language-agnostic c"||_||_dS)a :param size_threshold: nonnegative int or None valid values for 'size_threshold' are all nonnegative integers and None if size_threshold is None, values are always stored as nested lists :param compression: a compression module or None valid values for 'compression' are {zlib, bz2, None} if compression is None, no compression is applied N)size_threshold compression)r rlrms r__init__z"NumpyNDArrayHandlerBinary.__init__s-&rcR|jj}|dkrt||d<dSdS)N|r)rrr)r r4r!rs rflatten_byteorderz+NumpyNDArrayHandlerBinary.flatten_byteorders7I'    -c 2 2D     rcx|dd}|r!|j||_dSdS)Nr)r]rrA)r r!rrs rrestore_byteorderz+NumpyNDArrayHandlerBinary.restore_byteordersBHH[$//  : ..y99CIII : :rc|j|j|jkr$t||}n.|jt kr9t j| }n=t|dr| d}n| d}|j r|j |}t||d<|j|d<||jd||||||||jjsd|d <|S) encode numpy to jsonNtobytesa)rcr`rar=Frc)rlsizerPr5robjectjsondumpsrCencoderrvrrmcompressrrar#rArqr[rZ c_contiguous)r r4r!bufrQs rr5z!NumpyNDArrayHandlerBinary.flattensP   &$*=*I*I77??3--DDyF""j..5577i(( .kkk,,lll-- 5&//44&s^^DNIDM   sy55c::D A A A  " "3 - - -   sD ) ) )9) $ #W  rc |d}t|tr#t|}nt|tt fr,t j|g||}nL||}t|}|j r|j |}|tkrtj|}t j|||dd}|dd}|||}ngt j|||d|dd}|||||||S) decode numpy from jsonr`)rrcrdreraN)bufferrrarc) isinstancelistrPr8intfloatr)rfr*rrm decompressrzr{loadsdecoder]rgndarraycopyrsr^)r r!r`rrrrarQs rr8z!NumpyNDArrayHandlerBinary.restoresh fd # # *''//$''CC e - - *(F84+=+=d+C+CDDDCC&&t,,EF##C 7&11#66CJJLL11hvU$((7C:P:PQQQ$//$++e,,Cj((7++((7C00  $&&  &&tS111   tS ) ) ) r) r+r,r-rKzlibrnrqrsr5r8rTrUs@rririzs')d ' ' ' '333 ::: (((((T!!!!!!!!!rric>eZdZdZddeffd ZfdZfdZxZS)NumpyNDArrayHandlerViewaPickles references inside ndarrays, or array-views Notes ----- The current implementation has some restrictions. 'base' arrays, or arrays which are viewed by other arrays, must be f-or-c-contiguous. This is not such a large restriction in practice, because all numpy array creation is c-contiguous by default. Relaxing this restriction would be nice though; especially if it can be done without bloating the design too much. Furthermore, ndarrays which are views of array-like objects implementing __array_interface__, but which are not themselves nd-arrays, are deepcopied with a warning (by default), as we cannot guarantee whatever custom logic such classes implement is correctly reproduced. warnrjcZt||||_dS)aO :param mode: {'warn', 'raise', 'ignore'} How to react when encountering array-like objects whose references we cannot safely serialize :param size_threshold: nonnegative int or None valid values for 'size_threshold' are all nonnegative integers and None if size_threshold is None, values are always stored as nested lists :param compression: a compression module or None valid values for 'compression' are {zlib, bz2, None} if compression is None, no compression is applied N)rPrnmode)r rrlrmrQs rrnz NumpyNDArrayHandlerView.__init__s* 555 rc|j}|A|jjr5t||}|jjsd|d<nt |tjr/|jjr"|j |d|d<|j j |j j z }|r||d<|jjs |j |d<|j |d <||jd ||||t%|d kr+t%|t%|krd nd}|r||d <|j|j|jkr)tt*|||nr|jdkrd}t/j|n|jdkrd}t3|t||}|S)ruNrxrcFr>baseoffsetstridesrar=rpSrrzndarray is defined by reference to an object we do not know how to serialize. A deep copy is serialized instead, breaking memory aliasing.raisezMndarray is defined by reference to an object we do not know how to serialize.)rrZforcrPr5rrr)rrBctypesr!rrar#rrAr[rrlryrirwarningsr ValueErrorr)r r4r!rrrmsgrQs rr5zNumpyNDArrayHandlerView.flattensx >sDIIIyF""'  c""""g%%1!oo%77??388::t44D rc |dd}|#t|}n |j|d}t |t jst j|}|jj s Jdt j|j | | |dd|d|d d |d d }| |||S) rrNFr>z8Current implementation assumes base is C or F contiguousrrprarrr)rrrarr)r]rPr8rBrr)rrfrZrr!r*rAr^)r r!rrrQs rr8zNumpyNDArrayHandlerView.restoreEs-xx%% <''//$''CC<''E'::DdBJ// &x~~  J JI J J*y((..;;DHH[RUTJJJJ RXbh   )+<4HHHH RXbm $ $ .0AMMMM R]0t<<<<<rsF  8888888888''''''''  5 6-83333??? {$(((((((((44444*44444444.444 " " " " "&9 " " " *Dlllll 3lll^vvvvv7vvvt====6 2 2 2 2 2r