o
    i                     @   s8   d dl ZdejdedejfddZdd Zdd	d
ZdS )    Nxn_rowsreturnc                 C   sF   | j d | d }tjjj| | j dd ||f | j| jd f dS )z%return a view of x as a Hankel matrix   N)shapestrides)r   nplibstride_tricks
as_stridedr   )r   r   n_cols r   N/home/ubuntu/.local/lib/python3.10/site-packages/fast_bss_eval/numpy/linalg.pyhankel_view   s   &r   c                 C   sN   t j| ddddf | fdd}t|| jd d}|ddddddf }|S )z(
    make symmetric toeplitz matrix
    .Nr   r   axis)r   )r	   concatenater   r   )r   two_xHTr   r   r   toeplitz    s    r   c           
   	   C   s  | j dd \}}}|du r|d }tj| | j dd ||||f d}t| j d D ]D}t| j d D ]:}tj| d| d d||f | dd|||f fdd	}t||}	|	ddddddf |ddd|dd|f< q4q+||j dd
 || || f }|S )zJ
    Create a block matrix where the blocks have a Toeplitz structure
    N   )r   r   .r   r   )r   r	   
zeros_likeranger   r   reshape)
r   ntoprowscolsoutrcvecr   r   r   r   block_toeplitz*   s   $8
0$r'   )N)numpyr	   ndarrayintr   r   r'   r   r   r   r   <module>   s   
