
    Yh_                     j    d Z g ZddlZddlmZmZ  G d dej        j                  Z	ddl
mZ d
d	ZdS )zz
Matrix square root for general matrices and for upper triangular matrices.

This module exists to avoid cyclic imports.

    N   )ztrsyldtrsylc                       e Zd ZdS )
SqrtmErrorN)__name__
__module____qualname__     n/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/linalg/_matfuncs_sqrtm.pyr   r      s        Dr   r   )within_block_loop@   c           	      :   t          j        |           }t          j        |           ot          j        |d          dk    }|sBt          j        | t           j        d          } t          j        |t           j                  }nAt          j        | t           j        d          } t          j        |t           j                  }t          j        t          j        |                    }| j        \  }}t          ||z  d          }t          ||          \  }}|dz   }	||z
  }
|
|z  ||	z  z   |k    rt          d          g }d}|
|f||	ffD ]6\  }}t          |          D ]!}|                    |||z   f           ||z  }"7	 t          || ||           n!# t          $ r}t!          |j         |d	}~ww xY wt          |          D ]}||         \  }}t          |dz
  d
d
          D ]}||         \  }}| ||||f         }||z
  dk    r0||||||f                             |||||f                   z
  }|||||f         }|||||f         }|rt'          |||          \  }}}nt)          |||          \  }}}||z  |||||f<   |S )a  
    Matrix square root of an upper triangular matrix.

    This is a helper function for `sqrtm` and `logm`.

    Parameters
    ----------
    T : (N, N) array_like upper triangular
        Matrix whose square root to evaluate
    blocksize : int, optional
        If the blocksize is not degenerate with respect to the
        size of the input array, then use a blocked algorithm. (Default: 64)

    Returns
    -------
    sqrtm : (N, N) ndarray
        Value of the sqrt function at `T`

    References
    ----------
    .. [1] Edvin Deadman, Nicholas J. Higham, Rui Ralha (2013)
           "Blocked Schur Algorithms for Computing the Matrix Square Root,
           Lecture Notes in Computer Science, 7782. pp. 171-182.

    g        )initialr   C)dtypeorder)r   r   zinternal inconsistencyN)npdiag	isrealobjminasarray
complex128float64sqrtshapemaxdivmod	Exceptionrangeappendr   RuntimeErrorr   argsdotr   r   )T	blocksizeT_diagkeep_it_realRnnblocksbsmallnlargeblargensmallstart_stop_pairsstartcountsizeiejjstartjstopistartistopSRiiRjjxscaleinfos                               r   _sqrtm_triurC      s5   4 WQZZF<??Frvfb'A'A'AQ'FL  6JqS999F"-888Jq
#666F"*555
  A 7DAq!y.!$$G Aw''NFFaZFvF&(A--0111 E(66*:;  tu 	 	A##UEDL$9:::TMEE	
)!Q 0':::: ) ) )!&!q() 7^^ 6 6(+qsB## 	6 	6A,Q/MFE&,u,-A1uqyy&,f4599!E&L<B5L=I ;J K K K F5L&,./CF5L&,./C 5!'S!!4!45$$!'S!!4!45$,-IAfUlF5L())!	6& Hs   
F 
F;'F66F;)r   )__doc____all__numpyr   lapackr   r   linalgLinAlgErrorr   _matfuncs_sqrtm_triur   rC   r   r   r   <module>rK      s          # " " " " " " "	 	 	 	 	& 	 	 	 4 3 3 3 3 3W W W W W Wr   