;i^ddlZddlmZddlmZddlmZdgZGddej Z dS) N) functions) QtWidgets)DataTreeWidgetDiffTreeWidgetc<eZdZdZd dZdZd dZdZd dZd Z dS) rz Widget for displaying differences between hierarchical python data structures (eg, nested dicts, lists, and arrays) Ncltj||tj|_||jt |t |g|_|jD]}|j||| ||dSdSN) rQWidget__init__ QHBoxLayoutlayout setLayoutrtrees addWidgetsetData)selfparentabts TC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/widgets/DiffTreeWidget.pyr zDiffTreeWidget.__init__s""4000+--  t{###$T**N4,@,@A  % %A K ! !! $ $ $ $ = LLA      =c||f|_|jd||jd||||S)z= Set the data to be compared in this widget. rr)datarrcompare)rrrs rrzDiffTreeWidget.setDatasWF  1 a    1 a   ||Aq!!!rcd}|jd|\}}}}|jd|\} } } }|| kr|d||| kr|d|t|trt|trt |} t |} | | z D]}||fzd|d | | z D]}||fzd|d | | zD])}||||||fz*dSt|ttfrt|ttfrttt|t|D]}t||kr||fzd|d3t||kr||fzd|dd||||||fzdSt|tjrVt|tjr=|j|jkr.fd|jD}|jjg|jj[|||}tj|s-|D],}|dt+j|+dSdS|j|jkrt/|jjD]p\}}|||||}tj|s-|D]*}|dt+j|+idSdSdSdSdS)a Compare data structure *a* to structure *b*. Return True if the objects match completely. Otherwise, return a structure that describes the differences: { 'type': bool 'len': bool, 'str': bool, 'shape': bool, 'dtype': bool, 'mask': array, } )r!rrr)treecPg|]"}|jd#S)r)nodeschild).0r"paths r z*DiffTreeWidget.compare..Rs.KKK$*T*0033KKKrN)rparsesetColor isinstancedictsetkeysrlisttuplerangemaxlennpndarrayshapedtypefields compareArraysall setBackgroundfnmkBrush enumerate)rrrr'badtypeAdescAchildsA_typeBdescBchildsBkeysAkeysBkeyi tableNodeseqnks ` rrzDiffTreeWidget.compare#s"#':a=#6#6q#9#9 ugq#':a=#6#6q#9#9 ugq E>> MM$3 ' ' ' E>> MM$3 ' ' ' a  " D:a#6#6" DMMEMMEu} ; ; dC6k1c ::::u} ; ; dC6k1c ::::u} : : QsVQsVT3&[9999 : :D%= ) ) DjT5M.J.J D3s1vvs1vv..// 8 8q66Q;;MM$t)Q!M<<<<VVq[[MM$t)Q!M<<<<LL1qtT1$Y7777  8 82: & & D:a+D+D DTUT[I[I[KKKK KKKJw~%!'.*@''1--vbzz<'<<2:c??;;;;<<<< 7ag%%()<)<)>)>??DD!!//!ad;;!vbzzD%/DD !2:c?? C C C C D D D DI[I[&%DDrcd}tj|||kz}tj|||kz}||k}|}tj||||||<|S)N)r4isnanallclose)rrrintnananansbnansrLmasks rr9zDiffTreeWidget.compareArraysgse% qF{+ qF{+ e^v;qw$004 rctj|}||j}n|j|g}|D]%}|j|}|||&dSr )r<r=rr$r;)rr'columncolorr"brushritems rr*zDiffTreeWidget.setColorpsn 5!! <JEEZ%&E . .D:d#D   vu - - - - . .rcttttusJttdr,t tt tksJt tt rXtD] }|tvsJtD]9}|tvsJ|t|t|:dSt ttrRtt tD].}|t|t|/dSt ttj r5tj tj ksJtj tj ksJtj jd}tjtt|kz}tjtt|kz}tj||ksJ|}tjt|t|sJdStj jD].}|t|t|/dS ttksJdS#t&$r%t)dttzwxYw)z? Compare data structure *a* to structure *b*. __len__NrPz!Cannot compare objects of type %s)typeinfoexpecthasattrr3r+r,compare_resultsr/r1r4r5r6r7r8rQr:rRr. ExceptionNotImplementedError) rrrrNrJrSinansenansrVs r_comparezDiffTreeWidget._compare}s DzzT&\\)))) 4 # # ,t99F ++++ dD ! ! \ # #F{{{{{ 9 9Dyyyy$$T!WfQi8888 9 9d # # \3t99%% 9 9$$T!WfQi8888 9 9 bj ) ) \:----:----z (-$&.9((Ff,<=veun-----v{4:vd|<<<<<<<*//11==A((a&)<<<<== \v~~~~~~ \ \ \)*MPTUYPZPZ*Z[[[ \s J44/K#)NNN)rr ) __name__ __module__ __qualname____doc__r rrr9r*rgrrrrr s"""=D=D=D=DH . . . .#\#\#\#\#\r) numpyr4rr<Qtrr__all__r rrrrrps******  V\V\V\V\V\Y&V\V\V\V\V\r