


import math

UpperCAmelCase   :    str     =		10
UpperCAmelCase   :    int     =		7
UpperCAmelCase   :    Any     =		BALLS_PER_COLOUR * NUM_COLOURS






def 	__lowerCamelCase						(							lowerCamelCase__		:						int = 20      ):





			'''simple docstring'''




			lowerCamelCase    		=  math.comb(lowerCamelCase__  ,							lowerCamelCase__      )
			lowerCamelCase    		=  math.comb(NUM_BALLS - BALLS_PER_COLOUR  ,							lowerCamelCase__      )

			lowerCamelCase    		=  NUM_COLOURS * (1 - missing_colour / total)

			return f'{result:.9f}'


if __name__ == "__main__":
		print(solution(20))





import itertools
import random
import unittest

import numpy as np

from transformers import is_speech_available
from transformers.testing_utils import require_torch, require_torchaudio

from ...test_sequence_feature_extraction_common import SequenceFeatureExtractionTestMixin


if is_speech_available():
		from transformers import SpeechaTextFeatureExtractor

UpperCAmelCase   :    Any     =		random.Random()






def 	__lowerCamelCase						(							lowerCamelCase__		:						int  ,							lowerCamelCase__		:						Union[str, Any]=1.0  ,							lowerCamelCase__		:						Union[str, Any]=None  ,							lowerCamelCase__		:						int=None      ):





			'''simple docstring'''




			if rng is None:
						lowerCamelCase    		=  global_rng

			lowerCamelCase    		=  []
			for batch_idx in range(shape[0]      ):
						values.append([]      )
						for _ in range(shape[1]      ):
									values[-1].append(rng.random() * scale      )

			return values







@require_torch
@require_torchaudio
class        __lowercase       (							unittest.TestCase  ):



		"""simple docstring"""

		def __init__( self		,      A		,      A=7		,      A=4_00		,      A=20_00		,      A=24		,      A=24		,      A=0.0		,      A=1_60_00		,      A=True		,      A=True		,      )  -> str:







					'''simple docstring'''







					lowerCamelCase    		=  parent
					lowerCamelCase    		=  batch_size
					lowerCamelCase    		=  min_seq_length
					lowerCamelCase    		=  max_seq_length
					lowerCamelCase    		=  (self.max_seq_length - self.min_seq_length) // (self.batch_size - 1)
					lowerCamelCase    		=  feature_size
					lowerCamelCase    		=  num_mel_bins
					lowerCamelCase    		=  padding_value
					lowerCamelCase    		=  sampling_rate
					lowerCamelCase    		=  return_attention_mask
					lowerCamelCase    		=  do_normalize







		def 					__A   ( self	)  -> List[str]:







					'''simple docstring'''







					return {
					    "feature_size": self.feature_size,
					    "num_mel_bins": self.num_mel_bins,
					    "padding_value": self.padding_value,
					    "sampling_rate": self.sampling_rate,
					    "return_attention_mask": self.return_attention_mask,
					    "do_normalize": self.do_normalize,
					}







		def 					__A   ( self		,      A=False		,      A=False	)  -> Tuple:







					'''simple docstring'''







					def _flatten(A	):
								return list(itertools.chain(*A	)	)

					if equal_length:
								lowerCamelCase    		=  [floats_list((self.max_seq_length, self.feature_size)	) for _ in range(self.batch_size	)]
					else:
								# make sure that inputs increase in size
								lowerCamelCase    		=  [
								    floats_list((x, self.feature_size)	)
								    for x in range(self.min_seq_length		,      self.max_seq_length		,      self.seq_length_diff	)
								]
					if numpify:
								lowerCamelCase    		=  [np.asarray(A	) for x in speech_inputs]
					return speech_inputs







@require_torch
@require_torchaudio
class        __lowercase       (							a_			,							unittest.TestCase  ):



		"""simple docstring"""

		UpperCamelCase     :					str			       =		SpeechaTextFeatureExtractor if is_speech_available() else None







		def 					__A   ( self	)  -> int:







					'''simple docstring'''







					lowerCamelCase    		=  SpeechaTextFeatureExtractionTester(self	)







		def 					__A   ( self		,      A	)  -> List[Any]:







					'''simple docstring'''







					self.assertTrue(np.all(np.mean(A		,      axis=0	) < 1e-3	)	)
					self.assertTrue(np.all(np.abs(np.var(A		,      axis=0	) - 1	) < 1e-3	)	)







		def 					__A   ( self	)  -> Optional[int]:







					'''simple docstring'''







					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					# create three inputs of length 800, 1000, and 1200
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]
					lowerCamelCase    		=  [np.asarray(A	) for speech_input in speech_inputs]

					# Test feature size
					lowerCamelCase    		=  feature_extractor(A		,      padding=A		,      return_tensors="""np"""	).input_features
					self.assertTrue(input_features.ndim == 3	)
					self.assertTrue(input_features.shape[-1] == feature_extractor.feature_size	)

					# Test not batched input
					lowerCamelCase    		=  feature_extractor(speech_inputs[0]		,      return_tensors="""np"""	).input_features
					lowerCamelCase    		=  feature_extractor(np_speech_inputs[0]		,      return_tensors="""np"""	).input_features
					self.assertTrue(np.allclose(A		,      A		,      atol=1e-3	)	)

					# Test batched
					lowerCamelCase    		=  feature_extractor(A		,      return_tensors="""np"""	).input_features
					lowerCamelCase    		=  feature_extractor(A		,      return_tensors="""np"""	).input_features
					for enc_seq_a, enc_seq_a in zip(A		,      A	):
								self.assertTrue(np.allclose(A		,      A		,      atol=1e-3	)	)

					# Test 2-D numpy arrays are batched.
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in (8_00, 8_00, 8_00)]
					lowerCamelCase    		=  np.asarray(A	)
					lowerCamelCase    		=  feature_extractor(A		,      return_tensors="""np"""	).input_features
					lowerCamelCase    		=  feature_extractor(A		,      return_tensors="""np"""	).input_features
					for enc_seq_a, enc_seq_a in zip(A		,      A	):
								self.assertTrue(np.allclose(A		,      A		,      atol=1e-3	)	)







		def 					__A   ( self	)  -> Optional[Any]:







					'''simple docstring'''







					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]

					lowerCamelCase    		=  ["""longest""", """max_length""", """do_not_pad"""]
					lowerCamelCase    		=  [None, 16, None]
					for max_length, padding in zip(A		,      A	):
								lowerCamelCase    		=  feature_extractor(
								    A		,      padding=A		,      max_length=A		,      return_attention_mask=A	)
								lowerCamelCase    		=  inputs.input_features
								lowerCamelCase    		=  inputs.attention_mask
								lowerCamelCase    		=  [np.sum(A	) for x in attention_mask]

								self._check_zero_mean_unit_variance(input_features[0][: fbank_feat_lengths[0]]	)
								self._check_zero_mean_unit_variance(input_features[1][: fbank_feat_lengths[1]]	)
								self._check_zero_mean_unit_variance(input_features[2][: fbank_feat_lengths[2]]	)







		def 					__A   ( self	)  -> List[Any]:







					'''simple docstring'''







					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]

					lowerCamelCase    		=  ["""longest""", """max_length""", """do_not_pad"""]
					lowerCamelCase    		=  [None, 16, None]
					for max_length, padding in zip(A		,      A	):
								lowerCamelCase    		=  feature_extractor(
								    A		,      max_length=A		,      padding=A		,      return_tensors="""np"""		,      return_attention_mask=A	)
								lowerCamelCase    		=  inputs.input_features
								lowerCamelCase    		=  inputs.attention_mask
								lowerCamelCase    		=  [np.sum(A	) for x in attention_mask]

								self._check_zero_mean_unit_variance(input_features[0][: fbank_feat_lengths[0]]	)
								self.assertTrue(input_features[0][fbank_feat_lengths[0] :].sum() < 1e-6	)
								self._check_zero_mean_unit_variance(input_features[1][: fbank_feat_lengths[1]]	)
								self.assertTrue(input_features[0][fbank_feat_lengths[1] :].sum() < 1e-6	)
								self._check_zero_mean_unit_variance(input_features[2][: fbank_feat_lengths[2]]	)







		def 					__A   ( self	)  -> int:







					'''simple docstring'''







					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]
					lowerCamelCase    		=  feature_extractor(
					    A		,      padding="""max_length"""		,      max_length=4		,      truncation=A		,      return_tensors="""np"""		,      return_attention_mask=A		,      )
					lowerCamelCase    		=  inputs.input_features
					lowerCamelCase    		=  inputs.attention_mask
					lowerCamelCase    		=  np.sum(attention_mask == 1		,      axis=1	)

					self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]	)
					self._check_zero_mean_unit_variance(input_features[1]	)
					self._check_zero_mean_unit_variance(input_features[2]	)







		def 					__A   ( self	)  -> List[Any]:







					'''simple docstring'''







					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]
					lowerCamelCase    		=  feature_extractor(
					    A		,      padding="""longest"""		,      max_length=4		,      truncation=A		,      return_tensors="""np"""		,      return_attention_mask=A		,      )
					lowerCamelCase    		=  inputs.input_features
					lowerCamelCase    		=  inputs.attention_mask
					lowerCamelCase    		=  np.sum(attention_mask == 1		,      axis=1	)

					self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]	)
					self._check_zero_mean_unit_variance(input_features[1, : fbank_feat_lengths[1]]	)
					self._check_zero_mean_unit_variance(input_features[2]	)

					# make sure that if max_length < longest -> then pad to max_length
					self.assertEqual(input_features.shape		,      (3, 4, 24)	)

					lowerCamelCase    		=  [floats_list((1, x)	)[0] for x in range(8_00		,      14_00		,      2_00	)]
					lowerCamelCase    		=  feature_extractor(
					    A		,      padding="""longest"""		,      max_length=16		,      truncation=A		,      return_tensors="""np"""		,      return_attention_mask=A		,      )
					lowerCamelCase    		=  inputs.input_features
					lowerCamelCase    		=  inputs.attention_mask
					lowerCamelCase    		=  np.sum(attention_mask == 1		,      axis=1	)

					self._check_zero_mean_unit_variance(input_features[0, : fbank_feat_lengths[0]]	)
					self._check_zero_mean_unit_variance(input_features[1, : fbank_feat_lengths[1]]	)
					self._check_zero_mean_unit_variance(input_features[2]	)

					# make sure that if max_length < longest -> then pad to max_length
					self.assertEqual(input_features.shape		,      (3, 6, 24)	)







		def 					__A   ( self	)  -> Optional[int]:







					'''simple docstring'''







					import torch

					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  np.random.rand(1_00		,      32	).astype(np.floataa	)
					lowerCamelCase    		=  np_speech_inputs.tolist()

					for inputs in [py_speech_inputs, np_speech_inputs]:
								lowerCamelCase    		=  feature_extractor.pad([{"""input_features""": inputs}]		,      return_tensors="""np"""	)
								self.assertTrue(np_processed.input_features.dtype == np.floataa	)
								lowerCamelCase    		=  feature_extractor.pad([{"""input_features""": inputs}]		,      return_tensors="""pt"""	)
								self.assertTrue(pt_processed.input_features.dtype == torch.floataa	)







		def 					__A   ( self		,      A	)  -> Any:







					'''simple docstring'''







					from datasets import load_dataset

					lowerCamelCase    		=  load_dataset("""hf-internal-testing/librispeech_asr_dummy"""		,      """clean"""		,      split="""validation"""	)
					# automatic decoding with librispeech
					lowerCamelCase    		=  ds.sort("""id"""	).select(range(A	)	)[:num_samples]["""audio"""]

					return [x["array"] for x in speech_samples]







		def 					__A   ( self	)  -> Any:







					'''simple docstring'''







					lowerCamelCase    		=  np.array([
					    -1.5745, -1.7713, -1.7020, -1.6069, -1.2250, -1.1105, -0.9072, -0.8241,
					    -1.2310, -0.8098, -0.3320, -0.4101, -0.7985, -0.4996, -0.8213, -0.9128,
					    -1.0420, -1.1286, -1.0440, -0.7999, -0.8405, -1.2275, -1.5443, -1.4625,
					]	)
					# fmt: on

					lowerCamelCase    		=  self._load_datasamples(1	)
					lowerCamelCase    		=  self.feature_extraction_class(**self.feat_extract_tester.prepare_feat_extract_dict()	)
					lowerCamelCase    		=  feature_extractor(A		,      return_tensors="""pt"""	).input_features
					self.assertEquals(input_features.shape		,      (1, 5_84, 24)	)
					self.assertTrue(np.allclose(input_features[0, 0, :30]		,      A		,      atol=1e-4	)	)

