



import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


A_		:  str										=  logging.get_logger(__name__)

A_		:  Dict										=  {
    '''facebook/hubert-base-ls960''': '''https://huggingface.co/facebook/hubert-base-ls960/resolve/main/config.json''',
    # See all Hubert models at https://huggingface.co/models?filter=hubert
}



class 		_lowercase		(							UpperCAmelCase__						):
   _UpperCAmelCase  						=      '''hubert'''

   def __init__(   self      :							Optional[Any]				, __lowerCAmelCase      :							str=32				, __lowerCAmelCase      :							int=768				, __lowerCAmelCase      :							Optional[int]=12				, __lowerCAmelCase      :							List[Any]=12				, __lowerCAmelCase      :							Optional[Any]=3072				, __lowerCAmelCase      :							Tuple="gelu"				, __lowerCAmelCase      :							Dict=0.1				, __lowerCAmelCase      :							List[Any]=0.1				, __lowerCAmelCase      :							str=0.1				, __lowerCAmelCase      :							Union[str, Any]=True				, __lowerCAmelCase      :							Tuple=0.0				, __lowerCAmelCase      :							Optional[int]=0.1				, __lowerCAmelCase      :							List[str]=0.1				, __lowerCAmelCase      :							Dict=0.0_2				, __lowerCAmelCase      :							Any=1E-5				, __lowerCAmelCase      :							Optional[Any]="group"				, __lowerCAmelCase      :							int="gelu"				, __lowerCAmelCase      :							Dict=(512, 512, 512, 512, 512, 512, 512)				, __lowerCAmelCase      :							Tuple=(5, 2, 2, 2, 2, 2, 2)				, __lowerCAmelCase      :							Tuple=(10, 3, 3, 3, 3, 2, 2)				, __lowerCAmelCase      :							Tuple=False				, __lowerCAmelCase      :							Any=128				, __lowerCAmelCase      :							Tuple=16				, __lowerCAmelCase      :							Tuple=False				, __lowerCAmelCase      :							int=True				, __lowerCAmelCase      :							List[str]=0.0_5				, __lowerCAmelCase      :							List[str]=10				, __lowerCAmelCase      :							int=2				, __lowerCAmelCase      :							List[Any]=0.0				, __lowerCAmelCase      :							Dict=10				, __lowerCAmelCase      :							List[str]=0				, __lowerCAmelCase      :							Union[str, Any]="sum"				, __lowerCAmelCase      :							Dict=False				, __lowerCAmelCase      :							List[str]=False				, __lowerCAmelCase      :							int=256				, __lowerCAmelCase      :							List[str]=0				, __lowerCAmelCase      :							str=1				, __lowerCAmelCase      :							Any=2				, **__lowerCAmelCase      :							Tuple				, )							->					Tuple:


    """simple docstring"""






    super().__init__(**__lowerCAmelCase				, pad_token_id=__lowerCAmelCase				, bos_token_id=__lowerCAmelCase				, eos_token_id=__lowerCAmelCase				)
    a							=		hidden_size
    a							=		feat_extract_norm
    a							=		feat_extract_activation
    a							=		list(__lowerCAmelCase				)
    a							=		list(__lowerCAmelCase				)
    a							=		list(__lowerCAmelCase				)
    a							=		conv_bias
    a							=		num_conv_pos_embeddings
    a							=		num_conv_pos_embedding_groups
    a							=		len(self.conv_dim				)
    a							=		num_hidden_layers
    a							=		intermediate_size
    a							=		hidden_act
    a							=		num_attention_heads
    a							=		hidden_dropout
    a							=		attention_dropout
    a							=		activation_dropout
    a							=		feat_proj_layer_norm
    a							=		feat_proj_dropout
    a							=		final_dropout
    a							=		layerdrop
    a							=		layer_norm_eps
    a							=		initializer_range
    a							=		vocab_size
    a							=		do_stable_layer_norm
    a							=		use_weighted_layer_sum
    a							=		classifier_proj_size

    if (
        (len(self.conv_stride				) != self.num_feat_extract_layers)
        or (len(self.conv_kernel				) != self.num_feat_extract_layers)
        or (len(self.conv_dim				) != self.num_feat_extract_layers)
    ):
     raise ValueError(
         "Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =="
         " `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ="
         f""" {len(self.conv_dim				)}`, `len(config.conv_stride) = {len(self.conv_stride				)}`,"""
         f""" `len(config.conv_kernel) = {len(self.conv_kernel				)}`."""				)

    # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
    a							=		apply_spec_augment
    a							=		mask_time_prob
    a							=		mask_time_length
    a							=		mask_time_min_masks
    a							=		mask_feature_prob
    a							=		mask_feature_length
    a							=		mask_feature_min_masks

    # ctc loss
    a							=		ctc_loss_reduction
    a							=		ctc_zero_infinity




   @property
   def 		A				(   self      :							Tuple				)							->					Optional[Any]:


    """simple docstring"""






    return functools.reduce(operator.mul				, self.conv_stride				, 1				)








from typing import Any

import numpy as np





def     lowerCamelCase__  (  UpperCamelCase__      :							np.ndarray    )      ->			bool:



					'''simple docstring'''




					assert np.shape(UpperCamelCase__    )[0] == np.shape(UpperCamelCase__    )[1]

					# If matrix not symmetric, exit right away.
					if np.allclose(UpperCamelCase__							,     matrix.T    ) is False:
										return False

					# Get eigenvalues and eignevectors for a symmetric matrix.
					_snake_case				,  _snake_case						=					np.linalg.eigh(UpperCamelCase__    )

					# Check sign of all eigenvalues.
					# np.all returns a value of type np.bool_
					return bool(np.all(eigen_values > 0    )    )





def     lowerCamelCase__  (  UpperCamelCase__      :							int    )      ->			Any:



					'''simple docstring'''




					_snake_case						=					np.random.randn(UpperCamelCase__							,     UpperCamelCase__    )
					_snake_case						=					np.dot(UpperCamelCase__							,     random_matrix.T    )
					assert _is_matrix_spd(UpperCamelCase__    )
					return spd_matrix





def     lowerCamelCase__  (  UpperCamelCase__      :							np.ndarray							,     UpperCamelCase__      :							np.ndarray							,     UpperCamelCase__      :							int = 1_000							,     UpperCamelCase__      :							float = 1e-8							,     )      ->			Any:



					'''simple docstring'''




					assert np.shape(UpperCamelCase__    )[0] == np.shape(UpperCamelCase__    )[1]
					assert np.shape(UpperCamelCase__    )[0] == np.shape(UpperCamelCase__    )[0]
					assert _is_matrix_spd(UpperCamelCase__    )

					# Initialize solution guess, residual, search direction.
					_snake_case						=					np.zeros((np.shape(UpperCamelCase__    )[0], 1)    )
					_snake_case						=					np.copy(UpperCamelCase__    )
					_snake_case						=					np.copy(UpperCamelCase__    )

					# Set initial errors in solution guess and residual.
					_snake_case						=					1e9
					_snake_case						=					1e9
					_snake_case						=					1e9

					# Set iteration counter to threshold number of iterations.
					_snake_case						=					0

					while error > tol:
										# Save this value so we only calculate the matrix-vector product once.
										_snake_case						=					np.dot(UpperCamelCase__							,     UpperCamelCase__    )

										# The main algorithm.

										# Update search direction magnitude.
										_snake_case						=					np.dot(ra.T							,     UpperCamelCase__    ) / np.dot(pa.T							,     UpperCamelCase__    )
										# Update solution guess.
										_snake_case						=					xa + alpha * pa
										# Calculate new residual.
										_snake_case						=					ra - alpha * w
										# Calculate new Krylov subspace scale.
										_snake_case						=					np.dot(r.T							,     UpperCamelCase__    ) / np.dot(ra.T							,     UpperCamelCase__    )
										# Calculate new A conjuage search direction.
										_snake_case						=					r + beta * pa

										# Calculate errors.
										_snake_case						=					np.linalg.norm(r - ra    )
										_snake_case						=					np.linalg.norm(x - xa    )
										_snake_case						=					np.maximum(UpperCamelCase__							,     UpperCamelCase__    )

										# Update variables.
										_snake_case						=					np.copy(UpperCamelCase__    )
										_snake_case						=					np.copy(UpperCamelCase__    )
										_snake_case						=					np.copy(UpperCamelCase__    )

										# Update number of iterations.
										iterations += 1
										if iterations > max_iterations:
															break

					return x





def     lowerCamelCase__  (  )      ->			None:



					'''simple docstring'''




					_snake_case						=					3
					_snake_case						=					_create_spd_matrix(UpperCamelCase__    )
					_snake_case						=					np.random.randn(UpperCamelCase__							,     1    )
					_snake_case						=					np.dot(UpperCamelCase__							,     UpperCamelCase__    )

					# Numpy solution.
					_snake_case						=					np.linalg.solve(UpperCamelCase__							,     UpperCamelCase__    )

					# Our implementation.
					_snake_case						=					conjugate_gradient(UpperCamelCase__							,     UpperCamelCase__    )

					# Ensure both solutions are close to x_true (and therefore one another).
					assert np.linalg.norm(x_numpy - x_true    ) <= 1e-6
					assert np.linalg.norm(x_conjugate_gradient - x_true    ) <= 1e-6


if __name__ == "__main__":
					import doctest

					doctest.testmod()
					test_conjugate_gradient()



