U
    Kºc„  ã                   @   s"   d dl Z dd„ ZG dd„ dƒZdS )é    Nc                 C   s    | dkr|dkp| dko|dkS )Né   é   é   © )Úrow_block_sizeÚcol_block_sizer   r   úF/tmp/pip-unpacked-wheel-gikjz4vx/torch/ao/nn/sparse/quantized/utils.pyÚ$is_valid_linear_block_sparse_pattern   s    ÿr	   c                   @   sJ   e Zd Ze ¡ ZdZdZdZdZ	ddd„Z
dd„ Zdd„ Zed	d
„ ƒZdS )ÚLinearBlockSparsePatternr   r   c                 C   s8   t ||ƒst‚tj ¡  tjt_tjt_|t_|t_d S ©N)	r	   ÚAssertionErrorr
   ÚrlockÚacquirer   Úprev_row_block_sizer   Úprev_col_block_size)Úselfr   r   r   r   r   Ú__init__   s    
z!LinearBlockSparsePattern.__init__c                 C   s   d S r   r   )r   r   r   r   Ú	__enter__   s    z"LinearBlockSparsePattern.__enter__c                 C   s   t jt _t jt _t j ¡  d S r   )r
   r   r   r   r   r   Úrelease)r   Úexc_typeÚ	exc_valueZ	backtracer   r   r   Ú__exit__   s    z!LinearBlockSparsePattern.__exit__c                   C   s   t jt jfS r   )r
   r   r   r   r   r   r   Ú
block_size$   s    z#LinearBlockSparsePattern.block_sizeN)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú	threadingÚRLockr   r   r   r   r   r   r   r   Ústaticmethodr   r   r   r   r   r
      s   
r
   )r   r	   r
   r   r   r   r   Ú<module>   s   
