U
    f»{jS  ã                   @   sb   d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
 ddlmZ dd„ Zdd
d„Zdd„ ZdS )é   )ÚFIFF)Úfind_tagÚhas_tag)Ú	write_intÚstart_blockÚ	end_blockÚwrite_float_matrixÚwrite_name_listé   )Úloggerc                 C   sF   | d | d  | d< | d< | d | d  | d< | d< | d j | d< dS )z Transpose mat inplace (no copy).ÚncolÚnrowÚ	col_namesÚ	row_namesÚdataN)ÚT)Úmat© r   úL/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/matrix.pyÚ_transpose_named_matrix   s    r   ú    Fc                 C   s†  |d t jkrpt|d ƒD ]<}|d | d t jkrt|d | |ƒr|d | } q�qt |d|  ¡ dS n t||ƒs�t |d|  ¡ dS t| ||ƒ}|dkr®tdƒ‚n|j}|j	\}}	t| |t j
ƒ}|dk	ræ|j|krætdƒ‚t| |t jƒ}|dk	�r|j|	k�rtdƒ‚t| |t jƒ}|dk	�r6|j d	¡ng }
t| |t jƒ}|dk	�r^|j d	¡ng }t||	|
||d
�}|�r‚t|ƒ |S )av  Read named matrix from the given node.

    Parameters
    ----------
    fid : file
        The opened file descriptor.
    node : dict
        The node in the tree.
    matkind : int
        The type of matrix.
    transpose : bool
        If True, transpose the matrix. Default is False.
    %(verbose)s

    Returns
    -------
    mat: dict
        The matrix data
    ÚblockZnchildÚchildrenz.Desired named matrix (kind = %d) not availableNzMatrix data missingz@Number of rows in matrix data and FIFF_MNE_NROW tag do not matchzCNumber of columns in matrix data and FIFF_MNE_NCOL tag do not matchú:)r   r   r   r   r   )r   ÚFIFFB_MNE_NAMED_MATRIXÚranger   r   Úinfor   Ú
ValueErrorr   ÚshapeÚFIFF_MNE_NROWÚFIFF_MNE_NCOLÚFIFF_MNE_ROW_NAMESÚsplitÚFIFF_MNE_COL_NAMESÚdictr   )ÚfidÚnodeZmatkindÚindentZ	transposeÚkÚtagr   r   r   r   r   r   r   r   r   Ú_read_named_matrix   sH    ÿ
ÿ


ÿr*   c                 C   sB  |d |d  }|d j |krr|t|d j ƒ }||d j k rN|dkrNd| }td|d |d ||d j |f ƒ‚t| tjƒ t| tj|d ƒ t| tj|d ƒ t	|d ƒdkràt	|d ƒ|d krÎtdƒ‚t
| tj|d ƒ t	|d	 ƒdk�r"t	|d	 ƒ|d k�rtd
ƒ‚t
| tj|d	 ƒ t| ||d ƒ t| tjƒ dS )zÛWrite named matrix from the given node.

    Parameters
    ----------
    fid : file
        The opened file descriptor.
    kind : int
        The kind of the matrix.
    matkind : int
        The type of matrix.
    r   r   r   é    r   zƒCannot write matrix: row (%i) and column (%i) total element (%i) mismatch with data size (%i), appears to be off by a factor of %gxr   z$len(mat["row_names"]) != mat["nrow"]r   z$len(mat["col_names"]) != mat["ncol"]N)ÚsizeÚfloatr   r   r   r   r   r   r    Úlenr	   r!   r#   r   r   )r%   Úkindr   Zn_totÚratior   r   r   Úwrite_named_matrixX   s0     ÿýr1   N)r   F)Ú	constantsr   r)   r   r   Úwriter   r   r   r   r	   Úutilsr   r   r*   r1   r   r   r   r   Ú<module>   s   
D