
    G@d3                     >   d Z ddlZddlmZ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 ddlmZ ddlmZ ddlmZ d	Zd
Z G d d          Z G d de          ZdeiZ G d de	          Z G d de
          Z G d de          Zd Zedk    r e             dS dS )zArray Builder Widget.    N)QEventQPointQt)QDialogQHBoxLayout	QLineEditQTableWidgetQTableWidgetItemQToolButtonQToolTip)_)ima)QStylePalette)HelperToolButtonzCtrl+Mz
Ctrl+Alt+Mc                   0    e Zd ZdZdZdZdZdZdZdZ	d Z
dS )ArrayBuilderTypeNc                     d S N selfs    ;lib/python3.11/site-packages/spyder/widgets/arraybuilder.pycheck_valueszArrayBuilderType.check_values,   s        )__name__
__module____qualname__LANGUAGEELEMENT_SEPARATORROW_SEPARATORBRACESEXTRA_VALUESARRAY_PREFIXMATRIX_PREFIXr   r   r   r   r   r   #   sG        HMFLLM    r   r   c                   4    e Zd ZdZdZdZg dddgdZdZd	Zd
S )ArrayBuilderPythonz, ;z], [)nanNANNaNNaNAnainfINF)znp.nanznp.infznp.array([[znp.matrix([[N)	r   r   r   r   r    r!   r"   r#   r$   r   r   r   r&   r&   0   sF        MF999%. L !L"MMMr   r&   pythonc                   4     e Zd Zd fd	Z fdZ fdZ xZS )ArrayInlineNc                 t    t          t          |                               |           || _        || _        d S r   )superr2   __init___parent_optionsr   parentoptions	__class__s      r   r5   zArrayInline.__init__B   s3    k4  ))&111r   c                 P   |                                 t          j        t          j        fv rP| j                                         | j                                        r| j                            |           dS dS t          t          |                               |           dS )Override Qt method.N)
keyr   	Key_Enter
Key_Returnr6   process_textis_validkeyPressEventr4   r2   r   eventr;   s     r   rC   zArrayInline.keyPressEventG   s    99;;2<777L%%'''|$$&& 2**5111112 2 +t$$22599999r   c                    |                                 t          j        k    r|                                t          j        k    s"|                                t          j        k    r|                                 }|                                 }|dk    r8||dz
           dk    r)|d|dz
           | j	        j
        z   dz   ||d         z   }n|d|         dz   ||d         z   }|                     |           |                     |           |                     |dz              dS t          t          |                               |          S )zn
        Override Qt method.

        This is needed to be able to intercept the Tab key press event.
        r       NF)typer   KeyPressr>   r   Key_Tab	Key_SpacetextcursorPositionr7   r    setCursorPositionsetTextr4   r2   rE   )r   rE   rM   cursorr;   s       r   rE   zArrayInline.eventQ   s5    ::<<6?**		rz))UYY[[BL-H-Hyy{{,,.. Q;;4q>S#8#8 &(Odm.II!"$(M2DD  =3.fgg>D&&v...T"""&&vz222u[$''--e444r   r   )r   r   r   r5   rC   rE   __classcell__r;   s   @r   r2   r2   A   so                   
: : : : :5 5 5 5 5 5 5 5 5r   r2   c                   <     e Zd Zd fd	Z fdZd Zd Zd Z xZS )
ArrayTableNc                 .   t          t          |                               |           || _        || _        |                     d           |                     d           |                                  | j        	                    | j
                   d S )N   )r4   rU   r5   r6   r7   setRowCountsetColumnCountreset_headerscellChangedconnectcell_changedr8   s      r   r5   zArrayTable.__init__l   s    j$((000A 	  !233333r   c                 <   t          t          |                               |           |                                t          j        t          j        fv rF|                     d           |                     d           | j                            |           dS dS )r=   TFN)	r4   rU   rC   r>   r   r?   r@   setDisabledr6   rD   s     r   rC   zArrayTable.keyPressEventw   s    j$--e44499;;2<777T"""U###L&&u-----	 87r   c                 b   |                      ||          }d }|r<|                                 }|                                 }|                                }|rB||dz
  k    r|                     |dz              ||dz
  k    r|                     |dz              |                                  d S )NrG   )itemrowCountcolumnCountrM   rX   rY   rZ   )r   rowcolra   valuerowscolss          r   r]   zArrayTable.cell_changed   s    yyc"" 	 ==??D##%%DIIKKE 	.dQh  ***dQh##D1H---r   c           	         |                                  }|                                 }t          |          D ]2}|                     |t	          t          |                               3t          |          D ]H}|                     |t	          t          |                               |                     |d           IdS )z3Update the column and row numbering in the headers.(   N)rb   rc   rangesetVerticalHeaderItemr
   strsetHorizontalHeaderItemsetColumnWidth)r   rg   rh   rcs        r   rZ   zArrayTable.reset_headers   s    }}!!t 	D 	DA&&q*:3q66*B*BCCCCt 	' 	'A((,<SVV,D,DEEE2&&&&	' 	'r   c                 L   g }|                                  }|                                 }|dk    r |dk    r|                     dd          }|dS t          |dz
            D ]}t          |dz
            D ]q}|                     ||          }||                                }nd}|                                sd}|                    d           |                    |           r|                    | j        j                   d	                    |dd                   S )	z-Return the entered array in a parseable form.rW   r   N rG   0rH   )
rb   rc   ra   rk   rM   stripappendr7   r    join)r   rM   rg   rh   ra   rp   rq   rf   s           r   rM   zArrayTable.text   s    }}!! 19999Q??D|rtax 	5 	5A4!8__ # #yyA# IIKKEEE{{}}  EC   E""""KK34444wwtCRCy!!!r   r   )	r   r   r   r5   rC   r]   rZ   rM   rR   rS   s   @r   rU   rU   k   s        	4 	4 	4 	4 	4 	4. . . . .   	' 	' 	'" " " " " " "r   rU   c                   h     e Zd Z	 	 d fd	Z fdZ fdZdd	Zd
 Zd Zd Z	e
d             Z xZS )ArrayBuilderDialogNTr   Fr0   c                 `   t          t          |                               |           || _        t                              dd           | _        || _        d | _        d | _	        || _
        || _        t          d          | _        t          d          | _        t                      | _        t#                      | _        | j                            t)          j        d                     d                    t.          j        t.          j                  }| j                            |           |rG| j                            | j                   t9          | | j                  | _        | j        | _        nF| j                            | j                   t=          | | j                  | _        | j        | _        d	}|                     |           d
}| j                            |           |                      tB          j"        tB          j#        z  tB          j$        z             | %                    d           | &                    d           | j        '                    d           tQ                      | _)        | j)        *                    | j                   | j)        *                    | j        dtB          j+                   | j)        *                    | j        dtB          j+                   | ,                    | j)                   | j        -                                 d S )N)r9   r0   aw  
           <b>Numpy Array/Matrix Helper</b><br>
           Type an array in Matlab    : <code>[1 2;3 4]</code><br>
           or Spyder simplified syntax : <code>1 2;3 4</code>
           <br><br>
           Hit 'Enter' for array or 'Ctrl+Enter' for matrix.
           <br><br>
           <b>Hint:</b><br>
           Use two spaces or two tabs to generate a ';'.
           aY  
           <b>Numpy Array/Matrix Helper</b><br>
           Enter an array in the table. <br>
           Use Tab to move between cells.
           <br><br>
           Hit 'Enter' for array or 'Ctrl+Enter' for matrix.
           <br><br>
           <b>Hint:</b><br>
           Use two tabs at the end of a row to move to the next row.
           MessageBoxInformationa  
            QToolButton {{
              border: 1px solid grey;
              padding:0px;
              border-radius: 2px;
              background-color: qlineargradient(x1: 1, y1: 1, x2: 1, y2: 1,
                  stop: 0 {stop_0}, stop: 1 {stop_1});
            }}
            )stop_0stop_1)r:   z
            QDialog {
              margin:0px;
              border: 1px solid grey;
              padding:0px;
              border-radius: 2px;
            }z
            QToolButton {
              margin:1px;
              border: 0px solid grey;
              padding:0px;
              border-radius: 0px;
            }Tg?   rG   ).r4   rz   r5   	_language_REGISTERED_ARRAY_BUILDERSgetr7   r6   _text_valid_offset_force_floatr   _help_inline_help_tabler   _button_warningr   _button_helpsetIconr   iconformatr   COLOR_BACKGROUND_4COLOR_BACKGROUND_2setStyleSheet
setToolTipr2   _widgetrU   _tablesetWindowFlagsr   WindowDialogFramelessWindowHintsetModalsetWindowOpacitysetMinimumWidthr   _layout	addWidgetAlignTop	setLayoutsetFocus)r   r9   inlineoffsetforce_floatlanguagestyler;   s          r   r5   zArrayBuilderDialog.__init__   s    $''000???!266xFF
 ( 	 	 	  	 	 	  +}},..!!#(+B"C"CDDD }?,?  A A 	 	''... 	'(():;;;$T4=AAADJ:DLL(()9:::$T4=AAADK;DL 	5!!! 	**5111 	BI	1B4JJKKKdd###$$S))) #}}t|,,,t3QDDDt0!R[AAAt|$$$r   c                    t          j                     |                                t          j        z  }|                                t          j        t          j        fv rE|r|                     d           n|                     d           | 	                                 dS t          t          |                               |           dS )r=   F)arrayTN)r   hideText	modifiersr   ControlModifierr>   r?   r@   rA   acceptr4   rz   rC   )r   rE   ctrlr;   s      r   rC   z ArrayBuilderDialog.keyPressEvent  s      2#5599;;2<777 .!!!....!!!---KKMMMMM$d++99%@@@@@r   c                     |                                 t          j        k    r$|                                t          j        k    rdS t          t          |                               |          S )zM
        Override Qt method.

        Useful when in line edit mode.
        F)	rI   r   rJ   r>   r   rK   r4   rz   rE   rD   s     r   rE   zArrayBuilderDialog.event'  sR     ::<<6?**uyy{{bj/H/H5'..44U;;;r   c           	      n   |r| j         j        }n| j         j        }d}| j                                                                        }|dk    rd| j         j        z   dz   }t          j        || j         j        |          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        | j         j        dz   d|          }|	                    d| j         j
                  }g }|                    | j         j                  }t          |          }g }	|D ]}
g }|
                    | j         j
                  }|	                    t          |                     |D ]o}|}| j         j                                        D ]\  }}||v r|}| j        r%	 t#          t%          |                    }n#  Y nxY w|                    |           p|                    | j         j
                            |                     | j         j                            |          }|}t          t)          |	                    d	k    rd
| _        nd| _        |d	k    r |dd         }|	                    dd          }| j        }| j         j        	                    ddd|t          |          z   d	z
  z  z             }|	                    | j         j        |          }d                    |||          }|| _        nd| _        |                                  dS )zP
        Construct the text based on the entered content in the widget.
        z]])rs   z(\s*)z\s+rH   z]$z^\[z*$rG   TFNru   z])
z	{0}{1}{2})r7   r#   r$   r   rM   rv   r    resubreplacer   splitlenrw   r"   itemsr   rm   floatrx   setr   r   r!   r   r   update_warning)r   r   prefixsuffixvaluesexp
new_valuesrg   nrowsncolsrd   new_rowelementsenumr>   r   bracesrM   s                      r   rA   zArrayBuilderDialog.process_text2  s1     	1]/FF]0F""$$**,,R<<T]888CCVC!<fEEFVFC00FVE2v..FVFB//FVDM7%?VLLF ^^C$-*IJJF J<< ;<<DIIEE C C99T]%DEES]]+++! ( (AC (,}'A'G'G'I'I & &V&=="%C ( !!"%eAhh--CC! DNN3''''!!M388AAC C C C499*EEJF 3u::!##"# zzt44 \F])11sFS[[014557 7F ^^DM$?&IIF%%fff==DDJJDJs   8GGc                    | j         }|                                 st          d          }|                    t	          j        d                     |                    |           t          j        | j	        
                    t          dd                    |           dS | j                             d           dS )zV
        Updates the icon and tip based on the validity of the array content.
        zArray dimensions not validMessageBoxWarningr      rs   N)r   rB   r   r   r   r   r   r   showTextr   mapToGlobalr   )r   widgettips      r   r   z!ArrayBuilderDialog.update_warning  s     %}} 	0011CNN38$788999c"""dl66va||DDcJJJJJ ++B/////r   c                     | j         S )z+Return if the current array state is valid.)r   r   s    r   rB   zArrayBuilderDialog.is_valid  s
    {r   c                     | j         S )z$Return the parsed array/matrix text.)r   r   s    r   rM   zArrayBuilderDialog.text  s
    zr   c                     | j         S )z Return the array builder widget.)r   r   s    r   array_widgetzArrayBuilderDialog.array_widget  s     |r   )NTr   Fr0   )T)r   r   r   r5   rC   rE   rA   r   rB   rM   propertyr   rR   rS   s   @r   rz   rz      s        GL"]  ]  ]  ]  ]  ] ~A A A A A	< 	< 	< 	< 	<L L L L\0 0 0       X    r   rz   c                      ddl m}   |             }t          d d          }t          d d          }|                                 |                                 |                                 d S )Nr   )qapplicationF)r   T)spyder.utils.qthelpersr   rz   showexec_)r   app	dlg_table
dlg_inlines       r   testr     st    333333
,..C"4666I#D666JNNOOIIKKKKKr   __main__) __doc__r   qtpy.QtCorer   r   r   qtpy.QtWidgetsr   r   r   r	   r
   r   r   spyder.config.baser   spyder.utils.icon_managerr   spyder.utils.paletter   spyder.widgets.helperwidgetsr   SHORTCUT_TABLESHORTCUT_INLINEr   r&   r   r2   rU   rz   r   r   r   r   r   <module>r      s!     
			 + * * * * * * * * *E E E E E E E E E E E E E E E E E E !           ) ) ) ) ) ) . . . . . . 9 9 9 9 9 9 
 
 
 
 
 
 
 
	# 	# 	# 	# 	#) 	# 	# 	#   
'5 '5 '5 '5 '5) '5 '5 '5TK" K" K" K" K" K" K" K"\_ _ _ _ _ _ _ _D   zDFFFFF r   