
    Je                        d Z ddlZddlmZmZ ddlmZmZmZm	Z	m
Z
mZmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@ i ddddddddddddddddddddddddddd dd!dd"dd#d$i d%d&d'd$d(d$d)d$d*d$d+d$d,d$d-d$d.d$d/d$d0d$d1d$d2d$d3d$d4d$d5d$d6d$d$d$d$dddd7ZAd8ZBd9ZCd:ZDd; ZEd< ZFd= ZG G d> d?e      ZH G d@ dAe      ZI G dB dCe#      ZJ G dD dEe%      ZK G dF dGe@      ZLy)Hz'
NumPy Array Editor Dialog based on Qt
    N)from_qvariantto_qvariant)QAbstractTableModelQItemSelectionQLocaleQItemSelectionRangeQModelIndexQtSlot)QColorQCursorQDoubleValidatorQKeySequence)QAbstractItemDelegateQApplication	QCheckBox	QComboBoxQDialogQGridLayoutQHBoxLayoutQInputDialogQItemDelegateQLabel	QLineEditQMenuQMessageBoxQPushButtonQSpinBoxQStackedWidget
QTableViewQVBoxLayoutQWidget)value_to_display)numpy)_)DEFAULT_SMALL_DELTA)get_font)CONF)is_binary_string	is_stringis_text_stringto_binary_stringto_text_string)ima)add_actionscreate_action
keybinding)
BaseDialogsingle%.6gdoublefloat_	longfloatfloat16float32float64float96float128csinglez%rcomplex_
clongfloat	complex64
complex128
complex192
complex256bytez%dbytes8%sshortintcint_longlongintpint8int16int32int64ubyteushortuintcuint	ulonglonguintpuint8)uint16uint32uint64bool_bool8boolg    Ag     j@<   c                 >    d| j                   v xs | j                   dv S )z-Return True if datatype dtype is a float kindfloat)r3   r5   )namedtypes    U/usr/lib/python3/dist-packages/spyder/plugins/variableexplorer/widgets/arrayeditor.pyis_floatrd   a   s     uzz!Hejj4H&HH    c                 x    t        |       xs. d| j                  v xs d| j                  v xs d| j                  v S )z.Return True is datatype dtype is a number kindintlongrG   )rd   r`   ra   s    rc   	is_numberri   f   s?    E? &u

2 &%**8L &%**$&re   c           
          t        t        | D cg c]"  }|j                         |j                         f$ c}       \  }}t	        |      t        |      t	        |      t        |      fS c c}w )z-Extract the boundaries from a list of indexes)listziprowcolumnminmax)
index_listirowscolss       rc   get_idx_rectru   l   sV    c:FaQUUWahhj1FGHJD$YD	3t9c$i99 Gs   'A+c                       e Zd ZdZdZdZ	 	 ddZd Zd Zd Z	 e
       fd	Z e
       fd
ZddZddZd Zd Zej$                  fdZej(                  fdZd Zej$                  fdZd Zy)
ArrayModelzArray Editor Table Model  (   Nc                    t        j                  |        || _        i | _        || _        || _        || _        t        j                  dg|j                        | _
        |j                  t        j                  t        j                  fv rt        j                  | _        nt        j                  | _        ddg}d| _        d| _        d| _        || _        || _        | j&                  j*                  d   | _        | j&                  j*                  d   | _        | j,                  | j.                  z  }| j&                  j                  j0                  d	k(  s	 t        j2                  | j                  |            | _        t        j6                  | j                  |            | _        | j8                  | j4                  k(  r| xj4                  dz  c_        |d   | _        |d   |d   z
  | _        d
| _        d| _#        |j                  jH                  dv r-t        jJ                  t        jL                  |            | _#        | j&                  j                  j0                  d	k(  s| jF                  rd| _        |tN        kD  r#| jP                  | _)        | jT                  | _+        y | j,                  tX        kD  r| jP                  | _)        n| j,                  | _)        | j.                  tZ        kD  r| jT                  | _+        y | j.                  | _+        y # t@        tB        tD        f$ r' d | _        d | _        d | _        d | _        d| _        Y Uw xY w)Nr   ra   gQ?gGz?gffffff?g      ?g333333?   objectTF)fc).r   __init__dialogchangesxlabelsylabelsreadonlynparrayrb   
test_arrayr@   rA   abs
color_funcrealsatvalalp_data_formatshape
total_rows
total_colsr`   nanminvminnanmaxvmaxhue0dhuebgcolor_enabledAttributeError	TypeError
ValueErrorhas_infkindanyisinf
LARGE_SIZEROWS_TO_LOADrows_loadedCOLS_TO_LOADcols_loadedLARGE_NROWS
LARGE_COLS)	selfdataformatr   r   r   parenthuerangesizes	            rc   r   zArrayModel.__init__{   s   $$T* ((A3djj9 ::",,66 ffDO ggDO :
****1-****1-0zz$$0-IIdood&;<	IIdood&;<	99		)IINI$QK	$QK3	'+$ ::??j(66"((4.1DL ::  H,#(D  *#00D#00D,#'#4#4 #'?? +#'#4#4 #'?? = #Iz: - 	 	 	 	',$-s   B!L 7MMc                     | j                   S )zReturn current format)r   r   s    rc   
get_formatzArrayModel.get_format   s     ||re   c                     | j                   S )zReturn data)r   r   s    rc   get_datazArrayModel.get_data   s    zzre   c                 2    || _         | j                          y)Change display formatN)r   reset)r   r   s     rc   
set_formatzArrayModel.set_format   s    

re   c                 d    | j                   | j                  k  r| j                   S | j                  S )zArray column number)r   r   r   qindexs     rc   columnCountzArrayModel.columnCount   *    ??d...??"###re   c                 d    | j                   | j                  k  r| j                   S | j                  S )zArray row number)r   r   r   s     rc   rowCountzArrayModel.rowCount   r   re   c                 x    |r| j                   | j                  kD  ryy|r| j                  | j                  kD  ryyy )NTF)r   r   r   r   )r   rs   columnss      rc   can_fetch_morezArrayModel.can_fetch_more   s=    !1!11!1!11	 re   c                 r   | j                  |      r| j                  | j                  z
  }t        || j                        }| j                  t               | j                  | j                  |z   dz
         | xj                  |z  c_        | j                          | j                  |      r| j                  | j                  z
  }t        || j                        }| j                  t               | j                  | j                  |z   dz
         | xj                  |z  c_	        | j                          y y )Nrs   r{   r   )r   r   r   ro   r   beginInsertRowsr	   endInsertRowsr   r   r   beginInsertColumnsendInsertColumns)r   rs   r   reminderitems_to_fetchs        rc   
fetch_morezArrayModel.fetch_more   s   D))9)99H 4+<+<=N  0@0@!%!1!1N!BQ!FH. w/)9)99H 4+<+<=N##KM43C3C$($4$4~$E$IK.!!# 0re   c                 8    |dkD  | _         | j                          y)zToggle backgroundcolorr   N)r   r   )r   states     rc   bgcolorzArrayModel.bgcolor   s    $qy

re   c                    |j                         }|j                         }t        | j                  j                        dk(  r| j                  |   }n| j                  ||f   }| j
                  j                  ||f|      S )Nr{   )rm   rn   lenr   r   r   get)r   indexrr   jvalues        rc   	get_valuezArrayModel.get_value   si    IIKLLNtzz A%JJqMEJJq!t$E||A..re   c                 (   |j                         s
t               S | j                  |      }| j                  j                  j
                  }t        |      r	 t        |d      }|t        j                  k(  rF|t        j                  j                  u ry|dk(  rt        |      S 	 t        | j                  |z        S |t        j&                  k(  r3t        t)        t        j*                  t        j,                  z              S |t        j.                  k(  r| j0                  r|t        j                  j                  ur| j2                  s	 | j4                  | j6                  t9        | j:                        | j=                  |      z
  z  t9        | j:                        | j>                  z
  z  z   }t9        t        j@                  |            }tC        jD                  || jF                  | jH                  | jJ                        }t        |      S |t        jN                  k(  rt        tQ        tR                    S t               S # t        $ r Y w xY w# t         $ r d| _        t%        |      cY S w xY w# t         tL        f$ r t               cY S w xY w)zCell content.utf8 r|   Tfont_size_delta)*isValidr   r   r   rb   r`   r)   r-   	Exceptionr
   DisplayRoler   mamaskedr#   r   r   r   reprTextAlignmentRolerg   AlignCenterAlignVCenterBackgroundColorRoler   r   r   r   r_   r   r   r   r   r   fromHsvFr   r   r   r   FontRoler'   r&   )r   r   roler   dtnhuecolors          rc   r   zArrayModel.data	  s   }}= u%jj## E"&uf5
 2>>!$(? ,E22+*4<<%+?@@ R)))s2>>"//#ABCCb,,,1E1E-dll%yyyyE$))$4tu7M$MN		*TYY688 BFF3K(TXXtxxJ"5)) R[[ x8KLMM}C   % +(,#E{*+ z* %"}$%s7   I %I CI5 	III21I25JJc           	         |j                         r| j                  ry|j                         }|j                         }t	        |t
              }| j                  j                  j                  }|dk(  r	 t        t        |            }n|j                  d      s|j                  d      rt        |d      }n|j                  d      s|j                  d      rt        |      }nc|j                         j                  d	      s|j                         j!                  d	      ry	 t#        |      }|j$                  s|j&                  }	 || j.                  d<   || j4                  ||f<   | j6                  j9                  ||       t;        |      s=| j=                  |      }|| j>                  kD  r|| _        || j@                  k  r|| _         y# t        $ r |j                         dk(  }Y w xY w# t        $ r7}t)        j*                  | j,                  d
dt        |      z         Y d}~yd}~ww xY w# t0        $ rN}t3        dt        |      z          t)        j*                  | j,                  d
dt        |      z         Y d}~yd}~ww xY w)zCell content changeFr\   truestringbytesr   unicodestreErrorzValue error: %sNr   zOverflowError: zOverflow error: %sT)!r   r   rm   rn   r   r   r   rb   r`   r\   r_   r   lower
startswithr,   r-   endswithcompleximagr   r   criticalr   r   OverflowErrorprintr   dataChangedemitr*   r   r   r   )	r   r   r   r   rr   r   rb   r   r   s	            rc   setDatazArrayModel.setData8  s   }}$--IIKLLNeS)

  %%F?.5<( h'5+;+;G+D"5&1Ci(E,<,<U,C 'C{{}'',0F0Fs0Kenxx((C
	!$DOOA  #aVeU+~//#&CTYY	TYY	M  .kkmv-.  $$T[['%6Q%?A  	#c!f,-  g!5A!>@		sC   4G &#G1 
H4 G.-G.1	H1:-H,,H14	J=AJJc                     |j                         st        j                  S t        j                  t	        t        j                  | |      t        j                  z              S )zSet editable flag)r   r
   ItemIsEnabled	ItemFlagsrg   r   flagsItemIsEditabler   r   s     rc   r   zArrayModel.flagsk  sM    }}###||C 3 9 9$ F " 1 1!2 3 4 	4re   c                     |t         j                  k7  r
t               S |t         j                  k(  r| j                  n| j
                  }|t        t        |            S t        ||         S )zSet header data)r
   r   r   
Horizontalr   r   rg   )r   sectionorientationr   labelss        rc   
headerDatazArrayModel.headerDatar  sS    2>>!= !,!=4<<>s7|,,vg//re   c                 D    | j                          | j                          y N)beginResetModelendResetModelr   s    rc   r   zArrayModel.reset|  s    re   )r4   NNFNFF)__name__
__module____qualname____doc__r   r   r   r   r   r   r	   r   r   r   r   r   r   r
   r   r   EditRoler   r   r  r    re   rc   rw   rw   u   s    "LLBF(,F3P

 "- $ *m $
$ 
/  "~~ -^ *, 1f4 57NN 0re   rw   c                   *    e Zd ZdZddZd Zd Zd Zy)ArrayDelegatezArray Editor Item DelegateNc                 >    t        j                  | |       || _        y r
  )r   r   rb   )r   rb   r   s      rc   r   zArrayDelegate.__init__  s    tV,
re   c                    |j                         }|j                  |      }t        |      t        j                  k(  s|j
                  ry|j                  j                  j                  dk(  r| }|j                  |t        |             y|t        j                  j                  urt        |      }|j                  t        t                      |j#                  t$        j&                         t)        | j                        r6t+        |      }|j-                  t/        d             |j1                  |       |j2                  j5                  | j6                         |S y)zCreate editor widgetNr\   r   C)modelr   typer   ndarrayr   r   rb   r`   r   r   r   r   r   setFontr'   r&   setAlignmentr
   r   ri   r   	setLocaler   setValidatorreturnPressedconnectcommitAndCloseEditor)r   r   optionr   r  r   editor	validators           rc   createEditorzArrayDelegate.createEditor  s   &;"**$[[##v-IEMM%U!34"%%,,&v&FNN84GHI/$,V4	##GCL1##I.  (()B)BCM 're   c                     | j                         }	 | j                  j                  |       | j                  j                  |t
        j                         y# t        $ r Y 6w xY w)zCommit and close editorN)sender
commitDatar   r   closeEditorr   NoHint)r   r$  s     rc   r"  z"ArrayDelegate.commitAndCloseEditor  sW    	OO  ( 	f&;&B&BC  		s   A 	A$#A$c                     t        |j                         j                  |t        j                        t
              }|j                  |       y)zSet editor widget's dataN)r   r  r   r
   r   r   setText)r   r$  r   texts       rc   setEditorDatazArrayDelegate.setEditorData  s1    U[[]//r~~FLtre   r
  )r  r  r  r  r   r&  r"  r/  r  re   rc   r  r    s    $,	Dre   r  c                   v    e Zd ZdZd Zd Zd ZddZ e       d        Z	d Z
d Zd	 Zd
 Z e       d        Zy)	ArrayViewzArray view classc                    t        j                  | |       | j                  |       | j                  t	        ||              d}t        |d         D ]  }|| j                  |      z  } | j                         j                  t        |d      | j                                || _        | j                         | _        t        j                  | j                   dd|        | j#                         j$                  j'                  | j(                         | j+                         j$                  j'                  | j,                         y )Nr   r{   i   variable_explorercopy)contextr`   r   )r    r   setModelsetItemDelegater  rangecolumnWidthviewportresizero   heightr   
setup_menumenur(   config_shortcutr4  horizontalScrollBarvalueChangedr!  _load_more_columnsverticalScrollBar_load_more_rows)r   r   r  rb   r   total_widthks          rc   r   zArrayView.__init__  s   D&)e]5$78uQx 	/A4++A..K	/s;5t{{}E
OO%	II'		
 	  "//77##	% --55d6J6JKre   c                 J    	 | j                  |d       y# t        $ r Y yw xY w)zLoad more columns to display.Tr   Nload_more_data	NameErrorr   r   s     rc   rB  zArrayView._load_more_columns  s,    	t4 		    	""c                 J    	 | j                  |d       y# t        $ r Y yw xY w)zLoad more rows to display.Tr   NrH  rK  s     rc   rD  zArrayView._load_more_rows  s,    	D1 		rL  c                 d   	 | j                         j                         }d x}}|r[|| j                         j                         k(  r:| j	                         j
                  }| j	                         j                  |       |r[|| j                         j                         k(  r:| j	                         j                  }| j	                         j                  |       ||?t               }|D ]  }|j                         }	|j                         }
|*|	dk(  r%|
|dz
  k(  r| j	                         j
                  dz
  }
|j                         }|j                         }|*|dk(  r%||dz
  k(  r| j	                         j                  dz
  }| j	                         j                  |	|      }| j	                         j                  |
|      }t        ||      }|j!                  |        | j                         j#                  || j                         j$                         y y # t&        $ r Y y w xY w)Nr   r   r   r{   )selectionModel	selectionrC  maximumr  r   r   r@  r   r   topbottomleftrightr   r   appendselectClearAndSelectrJ  )r   r   rs   r   old_selectionold_rows_loadedold_cols_loadednew_selectionpartrR  rS  rT  rU  top_leftbottom_rights                  rc   rI  zArrayView.load_more_data  s   '	 //1;;=M044Oo!7!7!9!A!A!CC"&**,":":

''T'25D$<$<$>$F$F$HH"&**,":":

'''8*o.I . 0) /D((*C![[]F'31HOA4E)F "&!9!9!!;99;D JJLE'3 $	e8I.J !%

 8 8 :#zz|11#t<H#'::<#5#5fe#DL.xFD!((.%/& ##%,,!4#6#6#8#G#GI- /J0  	 	s   HH# #	H/.H/c                    t        j                  t        t        j                               | j                          | j                         j                  d       | j                          t        j                          y)zResize cells to contentsTr   N)	r   setOverrideCursorr   r
   
WaitCursorresizeColumnsToContentsr  r   restoreOverrideCursorr   s    rc   resize_to_contentszArrayView.resize_to_contents  sV     	&&wr}}'=>$$&

-$$&**,re   c                     t        | t        d      t        d      t        j                  d      | j
                  t        j                        | _        t        |       }t        || j                  g       |S )zSetup context menuCopyeditcopy)shortcuticon	triggeredr5  )r0   r%   r1   r.   rj  r4  r
   WidgetShortcutcopy_actionr   r/   )r   r>  s     rc   r=  zArrayView.setup_menu  s_    (qy2<V2D.1hhz.B3799131B1B	D
 T{D4++./re   c                 v    | j                   j                  |j                                |j                          yzReimplement Qt methodN)r>  popup	globalPosacceptr   events     rc   contextMenuEventzArrayView.contextMenuEvent  s"    		)*re   c                 x    |t         j                  k(  r| j                          yt        j                  | |       yro  )r   rg  r4  r    keyPressEventrs  s     rc   rw  zArrayView.keyPressEvent  s)    L%%%IIK$$T51re   c                    |syt        |      \  }}}}|dk(  r=|| j                         j                  dz
  k(  r| j                         j                  dz
  }|dk(  r=|| j                         j                  dz
  k(  r| j                         j
                  dz
  }| j                         j                         }t        j                         }	 t        j                  ||||dz   ||dz   f   d| j                         j                                |j                         j!                  d      }|j#                          |S #  t        j                  | t        d      t        d             Y yxY w)	z)Copy an array portion to a unicode stringNr   r{   	)	delimiterfmtWarningz1It was not possible to copy values for this arrayzutf-8)ru   r  r   r   r   r   r   ioBytesIOr   savetxtr   r   warningr%   getvaluedecodeclose)	r   
cell_rangerow_minrow_maxcol_mincol_maxr   outputcontentss	            rc   _sel_to_textzArrayView._sel_to_text"  sB   -9*-E*'7a<G

(@(@(BC jjl--a/Ga<G

(@(@(BCjjl--a/G

%%'	JJvuWWQY%6	8I%IJ!%4::<+B+B+DF ??$++G4	a	l ! #/ !01 s   AE   +E-c                     | j                  | j                               }t        j                         }|j	                  |       y)zCopy text to clipboardN)r  selectedIndexesr   	clipboardr-  )r   cliptxtr  s      rc   r4  zArrayView.copy=  s9     ##T%9%9%;= **,	'"re   Nr  )r  r  r  r  r   rB  rD  rI  r   re  r=  ru  rw  r  r4  r  re   rc   r1  r1    s[    L()V 
V- -	
26 
V# #re   r1  c                   >    e Zd Z	 	 ddZd Zd Z e       d        Zy)ArrayEditorWidgetNc                    t        j                  | |       || _        d | _        t	        | j                  j
                        dk(  rF| j                  j
                  | _        | j                  j
                  d   df| j                  _        nNt	        | j                  j
                        dk(  r,| j                  j
                  | _        d| j                  _        t        j                  |j                  j                  d      }t        | j                  |||||       | _        t        | | j                  |j                  |j
                        | _        t               }|j                  | j                         | j!                  |       y )Nr{   r   )r{   r{   rF   )r   r   r   r   r   )r"   r   r   old_data_shaper   r   SUPPORTED_FORMATSr   rb   r`   rw   r  r1  viewr!   	addWidget	setLayout)r   r   r   r   r   r   r   layouts           rc   r   zArrayEditorWidget.__init__G  s   v&	"tyy1$"&))//D#yyq115DIIO!Q&"&))//D$DIIO"&&tzz=		&'(/(4Q
dDJJ

DJJG	#vre   c                     t        | j                  j                  j                               D ]  \  \  }}}|| j                  ||f<    | j
                  | j
                  | j                  _        yy)zAccept changesN)rk   r  r   itemsr   r  r   )r   rr   r   r   s       rc   accept_changesz ArrayEditorWidget.accept_changes\  sd    !$**"4"4":":"<= 	$MFQE#DIIadO	$*"11DIIO +re   c                 T    | j                   | j                   | j                  _        yy)zReject changesN)r  r   r   r   s    rc   reject_changesz ArrayEditorWidget.reject_changesc  s$    *"11DIIO +re   c                 p   t        j                  | t        d      t        d      t        j                  | j
                  j                               \  }}|r-t        |      }	 |dz   | j
                  j                  |       yy#  t        j                  | t        d      t        d      |z         Y yxY w)r   FormatzFloat formattingg?r   zFormat (%s) is incorrectN)r   getTextr%   r   Normalr  r   r   r   r   r   )r   r   valids      rc   change_formatzArrayEditorWidget.change_formath  s     %,,T1h<!"$6!7!*!1!14::3H3H3JL [F
 JJ!!&) $$T1W:%&'A%BV%KMs   #B .B5)FNN)r  r  r  r   r  r  r   r  r  re   rc   r  r  E  s-    .3'+*22
 
V* *re   r  c                        e Zd ZdZd fd	Z	 	 ddZ eee      d        Zd Z	d Z
d Z e       d        Zd	 Zd
 Z e       d        Z xZS )ArrayEditorzArray Editor Dialogc                     t         |   |       | j                  t        j                         d | _        d | _        d | _        d | _        d | _	        d | _
        i i i g| _        d| _        y )Nr   )superr   setAttributer
   WA_DeleteOnCloser   arraywidgetstackr  btn_save_and_close	btn_closedim_indexeslast_dim)r   r   	__class__s     rc   r   zArrayEditor.__init__{  sg      	"--.	
"&B<re   c           
          | _         |xs!  j                   j                  j                   }t        |t        j
                  j                        }t        |j                  d      r|j                  j                  du}nd}|j                  dkD  r j                  t        d             y|@t        |       j                   j                  d   k7  r j                  t        d             y|@t        |       j                   j                  d   k7  r j                  t        d	             y|st        |j                  d
      r|j                  j                  }nd}|dk(  r4|j                  dk(  r j                  t        d             ydx _        }nV|t"        vrN|j%                  d      s=|j%                  d      s,t        d      |z  }	 j                  t        d      |	z         yt'                _         j+                   j(                         |rt-        |      dz   t        d      z   }nt        d      }|r|dt        d      z   dz   z  } j/                  |       t1                _        |rH|j                  j                  D ]-  }
 j2                  j5                  t7         ||
   |||             / nA|r j2                  j5                  t7         ||||              j2                  j5                  t7         |j                   |||              j2                  j5                  t7         |j8                  |||             n|j                  dk(  r{t;         d       _         j<                  j>                  jA                   jB                         tE                _#        tE                _$         jK                   jL                         n( j2                  j5                  t7         ||||              j2                  jO                          _(         jP                  jR                  jT                  jA                   jV                          j2                  jX                  jA                   jZ                          j(                  j5                   j2                  dd       d}|s|s|j                  dk(  rt]               }|r|j5                  tE        t        d                   g }|j                  j                  D ]_  }
|j                  j^                  |
   }|
}t        |      dk\  r#|d   }ta        |      stc        |      }|d|z   z  }|je                  |       a n t        d      t        d      t        d      g}|j                  dk(  rtg        d      D cg c]  }ti        |       }}tk               }|jm                  |       |jn                  jA                   jJ                         tE        t        d             }|j5                  |       |j5                  |       |j5                   jF                         tE        t        d!            }|j5                  |       |j5                   j<                         |j5                   jH                         n\tk               }|jn                  jA                   j2                  jp                         |jm                  |       |j5                  |       |r?tE        t        d"            }|js                  t        d#             |j5                  |       |ju                          t]               }tw        t        d$            }|jy                  t{         jP                  j                   j                               |j5                  |       |j|                  jA                   jP                  j~                         tw        t        d%            }|j5                  |       |j|                  jA                   jP                  j                  j                         t        t        d&             _C         j                  jy                   jP                  jR                  j                          j                  j                   jP                  jR                  j                          j                  j                  jA                   fd'       |j5                   j                         |ju                          |s~tw        t        d(             _G         j                  j                  d        j                  j|                  jA                   j                         |j5                   j                         tw        t        d)             _J         j                  j                  d        j                  j                  d        j                  j|                  jA                   j                         |j5                   j                         |j                  d*d*d*d*       |O|j                  d*d*d*d*        j(                  j                  |dd        j(                  j                  |dd       n j(                  j                  |dd        j                  d+d,        j                  t        j                         yc c}w )-zb
        Setup ArrayEditor:
        return False if data is not supported, True otherwise
        namesNF   z4Arrays with more than 3 dimensions are not supportedr{   z=The 'xlabels' argument length do no match array column numberr   z:The 'ylabels' argument length do no match array row numberr`   Unknownr|   r  z-Object arrays without shape are not supportedTr   r   z	%s arraysz%s are currently not supportedz - zNumPy object arrayArray editorz (z	read only))keyboardTrackingzRecord array fields:   zMasked dataDataMaskzAxis:zIndex:z.<u>Warning</u>: Changes are applied separatelyznFor performance reasons, changes applied to masked arrays won't be reflected in array's data (and vice-versa).r  ResizezBackground colorc                 N    j                   j                  j                  |       S r
  )r  r  r   )r   r   s    rc   <lambda>z-ArrayEditor.setup_and_check.<locals>.<lambda>:  s    $**0088? re   zSave and CloseClose   rx   i,  )Tr   r   	writeable
isinstancer   r   MaskedArrayhasattrrb   r  ndimerrorr%   r   r   r`   r   r  r   r   r  r  r-   setWindowTitler   r  r  r  maskr   
index_spinrA  r!  change_active_widgetr   shape_labelslicing_labelcurrent_dim_changedr  currentWidgetr  r  r   save_and_close_enablecurrentChangedcurrent_widget_changedr   fieldsr+   r   rV  r8  r   r   addItemscurrentIndexChangedsetCurrentIndex
setToolTip
addStretchr   
setEnabledrd   clickedr  r  re  r   r   r   
setCheckedstateChangedr  setDisabledrr  r  setAutoDefault
setDefaultrejectsetContentsMargins	addLayoutsetMinimumSizesetWindowFlagsr
   Window)r   r   titler   r   r   is_masked_arrayis_record_arrayr   arrr`   btn_layout_topr  fieldr.  rr   ra_combolabelbtn_layout_bottom
btn_format
btn_resizes   `                    rc   setup_and_checkzArrayEditor.setup_and_check  s    	<499??#<#<<$T255+<+<=
 4::w'"jj..d:O#O99q=JJq % & '3w<499??13E#EJJq ) * +3w<499??13E#EJJq " # $ tzz6*jjooh::#JJq "-  . /  ,0/..s~~e7LNN95ns*

1=>DE!mt{{#"5)E1A6J4KKEn%ETAkN*S00EE" $D)


(( A

$$%6tT$Z7?7>&@ AA JJ  !24x3:G"E FJJ  !24H3:G"E FJJ  !24H3:G"E FYY!^ 'teDDOOO((001J1JK  &xD!'D $$T]]3JJ  !24x3:G"E F  ::335**2243M3MN

!!))$*E*EFdjj!Q/ oa(]N((2H0I)JK JJ,, 'D JJ--d3ED5zQ %a-e4$(KEe+LL&' =)1V9ai@yyA~).q2AQ22$T?!!%(,,44T5M5MN qz*((/((2(()9)9:q{+((/((9((););<$T?,,44TZZ5O5OP!!%(((2FG    $D "E F ((/%%' (M 8-
ht'7'7'<'<'B'BCD##J/""4#3#3#A#AB 8-
##J/""4#3#3#8#8#K#KL #5!67 0 0 6 6 F FG 0 0 6 6 F FG!!))?	A##DLL1$$&&1!4D2E&FD###//5##++33DKK@''(?(?@$QwZ0%%d+!!$'&&t{{3##DNN3 	,,Q1a8%--aAq9KK!!.!Q7KK!!"3Q:KK!!"3Q: 	C% 	BII&e 3s   0k>c                     | j                   rR| j                   j                  d       | j                   j                  d       | j                   j                  d       yy)zAHandle the data change event to enable the save and close button.TN)r  r  r  r  )r   left_topr_  s      rc   r  z!ArrayEditor.save_and_close_enable\  sN     ""##..t4##2248##..t4 #re   c                 (   | j                   j                  |      | _        | j                  j                  j                  j                  | j                         | j                  j                  | j                  j                  j                         y r
  )
r  widgetr  r  r   r!  r  r   r  r   r  s     rc   r  z"ArrayEditor.current_widget_changedd  sc    ::,,U3**2243M3MN 0 0 6 6 F FGre   c           	      J   dgdz  }d|| j                   <   | j                  j                  ddj                  |      z   dz   |z         |dk  r'| j                  j
                  | j                      |z   }n|}t        d      gdz  }||| j                   <   | j                  | j                      j                  |      }|| j                  j                         }	 | j                  j                  t        | | j                  t        |                      || j                  | j                      |<   | j                  j                          | j                  j!                  |       y# t        $ r2 | j                  j                  t        | | j                               Y w xY w)	z
        This is implemented for handling negative values in index for
        3d arrays, to give the same behavior as slicing
        :r  <font color=red>%i</font>z
Slicing: [, ]r   N)r  r  r-  joinr   r   slicer  r   r  countr  r  tuple
IndexErrorupdater  )r   r   string_index
data_indexslice_indexstack_indexs         rc   r  z ArrayEditor.change_active_widgeti  sn   
 uQw&AT]]#""MDIIl4K$K #%$',$- 	.197%?JJT{mAo%/DMM"&&t}}599*E****,KI

$$%6$))E+$67&9 : ;FDT]]+J7JJ

"";/	  I

$$%6tTYY%GHIs   ;E' '8F"!F"c                    || _         dgdz  }d||<   | j                  j                  ddj                  |      z   dz   | j                  j
                  z         | j                  j                         dk7  r| j                  j                  d       n| j                  d       | j                  j                  | j                  j
                  |    | j                  j
                  |   dz
         y	)
z]
        This change the active axis the array editor is plotting over
        in 3D
        z%ir  r  zShape: (r  z)    r   r{   N)r  r  r-  r  r   r   r  r   setValuer  setRange)r   r   string_sizes      rc   r  zArrayEditor.current_dim_changed  s    
 fQh8E  *tyy/E"E!(#),0IIOO"< 	=??  "a'OO$$Q' %%a(  $))//%"8!8!%!7!9	;re   c                     	 t        | j                  j                               D ]+  }| j                  j                  |      j	                          - t        j                  |        y# t        $ r Y yw xY w)zReimplement Qt method.N)r8  r  r  r  r  r   rr  RuntimeErrorr  s     rc   rr  zArrayEditor.accept  sc    	tzz//12 :

!!%(779:NN4  	 	s   A&A) )	A54A5c                     | j                   S )z-Return modified array -- this is *not* a copy)r   r   s    rc   r   zArrayEditor.get_value  s     yyre   c                     t        j                  | t        d      |       | j                  t        j
                         | j                          y)z)An error occurred, closing the dialog boxr  N)r   r   r%   r  r
   r  r  )r   messages     rc   r  zArrayEditor.error  s6    T1^#4g>"--.re   c                     | j                   Qt        | j                  j                               D ]+  }| j                  j	                  |      j                          - t        j                  |        yro  )r  r8  r  r  r  r  r   r  r  s     rc   r  zArrayEditor.reject  sX     'tzz//12 :

!!%(779:tre   r
  )r   FNN)r  r  r  r  r   r  r   r	   r  r  r  r  rr  r   r  r  __classcell__)r  s   @rc   r  r  y  s{    & 8=.2L\ 
+{#5 $5H
08;& 
V	 	 
V re   r  )Mr  r}  qtpy.compatr   r   qtpy.QtCorer   r   r   r   r	   r
   r   
qtpy.QtGuir   r   r   r   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   spyder_kernels.utils.nsviewr#    spyder_kernels.utils.lazymodulesr$   r   spyder.config.baser%   spyder.config.fontsr&   spyder.config.guir'   spyder.config.managerr(   spyder.py3compatr)   r*   r+   r,   r-   spyder.utils.icon_managerr.   spyder.utils.qthelpersr/   r0   r1   2spyder.plugins.variableexplorer.widgets.basedialogr2   r  r   r   r   rd   ri   ru   rw   r  r1  r  r  r  re   rc   <module>r     s   
 3E E E F F% % % % % % 9 8 ! 3 & &@ @ ) I I I)f)f) f) 	)
 v) v) v) v) ) t) ) $) ) $) $)  $!)" D#)$ d%)& T')( D))* D+), -). D/)0 D1)2 T3)4 T5)6 T7)8 T9): d;)< T=)> D?)@ A)B TC)D TE)F Q) X 

I
&:I$ IX*M *\S#
 S#l1* 1*h}* }re   