






"""simple docstring"""


from __future__ import annotations

import unittest

from transformers import AutoTokenizer, GPTJConfig, is_tf_available
from transformers.testing_utils import require_tf, slow, tooslow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin
from ...utils.test_modeling_tf_core import TFCoreModelTesterMixin


if is_tf_available():
       import tensorflow as tf

       from transformers.models.gptj.modeling_tf_gptj import (
           TFGPTJForCausalLM,
           TFGPTJForQuestionAnswering,
           TFGPTJForSequenceClassification,
           TFGPTJModel,
           shape_list,
       )


class    snake_case						:


   '''simple docstring'''

   def __init__(      self					:	List[Any],			_lowerCamelCase					:	Optional[int]    ):

     '''simple docstring'''
     __A		     =					parent
     __A		     =					13
     __A		     =					7
     __A		     =					True
     __A		     =					True
     __A		     =					True
     __A		     =					True
     __A		     =					True
     __A		     =					99
     __A		     =					32
     __A		     =					4
     __A		     =					2
     __A		     =					4
     __A		     =					37
     __A		     =					'''gelu'''
     __A		     =					0.1
     __A		     =					0.1
     __A		     =					5_12
     __A		     =					16
     __A		     =					2
     __A		     =					0.02
     __A		     =					3
     __A		     =					4
     __A		     =					None
     __A		     =					self.vocab_size - 1
     __A		     =					self.vocab_size - 1
     __A		     =					self.vocab_size - 1


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict    ):

     '''simple docstring'''
     __A		     =					ids_tensor([self.batch_size, self.seq_length],			self.vocab_size    )

     __A		     =					None
     if self.use_input_mask:
       __A		     =					random_attention_mask([self.batch_size, self.seq_length]    )

     __A		     =					None
     if self.use_token_type_ids:
       __A		     =					ids_tensor([self.batch_size, self.seq_length],			self.type_vocab_size    )

     __A		     =					None
     if self.use_mc_token_ids:
       __A		     =					ids_tensor([self.batch_size, self.num_choices],			self.seq_length    )

     __A		     =					None
     __A		     =					None
     __A		     =					None
     if self.use_labels:
       __A		     =					ids_tensor([self.batch_size],			self.type_sequence_label_size    )
       __A		     =					ids_tensor([self.batch_size, self.seq_length],			self.num_labels    )
       __A		     =					ids_tensor([self.batch_size],			self.num_choices    )

     __A		     =					GPTJConfig(
         vocab_size=self.vocab_size,			n_embd=self.hidden_size,			n_layer=self.num_hidden_layers,			n_head=self.num_attention_heads,			intermediate_size=self.intermediate_size,			hidden_act=self.hidden_act,			hidden_dropout_prob=self.hidden_dropout_prob,			attention_probs_dropout_prob=self.attention_probs_dropout_prob,			n_positions=self.max_position_embeddings,			type_vocab_size=self.type_vocab_size,			initializer_range=self.initializer_range,			bos_token_id=self.bos_token_id,			eos_token_id=self.eos_token_id,			pad_token_id=self.pad_token_id,			rotary_dim=self.rotary_dim,			return_dict=_lowerCamelCase,			)

     __A		     =					ids_tensor([self.num_hidden_layers, self.num_attention_heads],			2    )

     return (
         config,
         input_ids,
         input_mask,
         head_mask,
         token_type_ids,
         mc_token_ids,
         sequence_labels,
         token_labels,
         choice_labels,
     )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict,			_lowerCamelCase					:	Optional[Any],			_lowerCamelCase					:	Tuple,			_lowerCamelCase					:	int,			_lowerCamelCase					:	List[Any],			_lowerCamelCase					:	List[str],			*_lowerCamelCase					:	Union[str, Any]    ):

     '''simple docstring'''
     __A		     =					TFGPTJModel(config=_lowerCamelCase    )
     __A		     =					{
         '''input_ids''': input_ids,
         '''attention_mask''': input_mask,
         '''token_type_ids''': token_type_ids,
     }
     __A		     =					model(_lowerCamelCase    )

     __A		     =					[input_ids, None, input_mask]  # None is the input for 'past'
     __A		     =					model(_lowerCamelCase    )

     __A		     =					model(_lowerCamelCase    )

     self.parent.assertEqual(result.last_hidden_state.shape,			(self.batch_size, self.seq_length, self.hidden_size)    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Any,			_lowerCamelCase					:	List[str],			_lowerCamelCase					:	Optional[Any],			_lowerCamelCase					:	int,			_lowerCamelCase					:	Tuple,			_lowerCamelCase					:	Optional[int],			*_lowerCamelCase					:	List[str]    ):

     '''simple docstring'''
     __A		     =					TFGPTJModel(config=_lowerCamelCase    )

     # first forward pass
     __A		     =					model(_lowerCamelCase,			token_type_ids=_lowerCamelCase,			use_cache=_lowerCamelCase    )
     __A		     =					model(_lowerCamelCase,			token_type_ids=_lowerCamelCase    )
     __A		     =					model(_lowerCamelCase,			token_type_ids=_lowerCamelCase,			use_cache=_lowerCamelCase    )

     self.parent.assertTrue(len(_lowerCamelCase    ) == len(_lowerCamelCase    )    )
     self.parent.assertTrue(len(_lowerCamelCase    ) == len(_lowerCamelCase    ) + 1    )

     __A     ,       __A		     =					outputs.to_tuple()

     # create hypothetical next token and extent to next_input_ids
     __A		     =					ids_tensor((self.batch_size, 1),			config.vocab_size    )
     __A		     =					ids_tensor([self.batch_size, 1],			self.type_vocab_size    )

     # append to next input_ids and token_type_ids
     __A		     =					tf.concat([input_ids, next_tokens],			axis=-1    )
     __A		     =					tf.concat([token_type_ids, next_token_types],			axis=-1    )

     __A		     =					model(_lowerCamelCase,			token_type_ids=_lowerCamelCase    )['''last_hidden_state''']
     __A		     =					model(_lowerCamelCase,			token_type_ids=_lowerCamelCase,			past_key_values=_lowerCamelCase    )[
         '''last_hidden_state'''
     ]

     # select random slice
     __A		     =					int(ids_tensor((1,),			shape_list(_lowerCamelCase    )[-1]    )    )
     __A		     =					output_from_no_past[:, -1, random_slice_idx]
     __A		     =					output_from_past[:, 0, random_slice_idx]

     # test that outputs are equal for slice
     tf.debugging.assert_near(_lowerCamelCase,			_lowerCamelCase,			rtol=1e-6    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	List[Any],			_lowerCamelCase					:	List[str],			_lowerCamelCase					:	Dict,			_lowerCamelCase					:	int,			_lowerCamelCase					:	List[Any],			_lowerCamelCase					:	Dict,			*_lowerCamelCase					:	Dict    ):

     '''simple docstring'''
     __A		     =					TFGPTJModel(config=_lowerCamelCase    )

     # create attention mask
     __A		     =					self.seq_length // 2
     __A		     =					tf.ones((self.batch_size, half_seq_length),			dtype=tf.intaa    )
     __A		     =					tf.zeros((self.batch_size, self.seq_length - half_seq_length),			dtype=tf.intaa    )
     __A		     =					tf.concat([attn_mask_begin, attn_mask_end],			axis=1    )

     # first forward pass
     __A     ,       __A		     =					model(_lowerCamelCase,			attention_mask=_lowerCamelCase    ).to_tuple()

     # create hypothetical next token and extent to next_input_ids
     __A		     =					ids_tensor((self.batch_size, 1),			config.vocab_size    )

     # change a random masked slice from input_ids
     __A		     =					ids_tensor((1,),			_lowerCamelCase    ).numpy() + 1
     __A		     =					ids_tensor((self.batch_size, self.seq_length),			config.vocab_size    )
     __A		     =					tf.range(self.seq_length    ) == (self.seq_length - random_seq_idx_to_change)
     __A		     =					tf.transpose(
         tf.broadcast_to(tf.expand_dims(_lowerCamelCase,			-1    ),			(self.seq_length, self.batch_size)    )    )
     __A		     =					tf.where(_lowerCamelCase,			_lowerCamelCase,			_lowerCamelCase    )

     # append to next input_ids and attn_mask
     __A		     =					tf.concat([input_ids, next_tokens],			axis=-1    )
     __A		     =					tf.concat([attn_mask, tf.ones((shape_list(_lowerCamelCase    )[0], 1),			dtype=tf.intaa    )],			axis=1    )

     # get two different outputs
     __A		     =					model(_lowerCamelCase,			attention_mask=_lowerCamelCase    )['''last_hidden_state''']
     __A		     =					model(_lowerCamelCase,			past_key_values=_lowerCamelCase,			attention_mask=_lowerCamelCase    )[
         '''last_hidden_state'''
     ]

     # select random slice
     __A		     =					int(ids_tensor((1,),			shape_list(_lowerCamelCase    )[-1]    )    )
     __A		     =					output_from_no_past[:, -1, random_slice_idx]
     __A		     =					output_from_past[:, 0, random_slice_idx]

     # test that outputs are equal for slice
     tf.debugging.assert_near(_lowerCamelCase,			_lowerCamelCase,			rtol=1e-12    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Tuple,			_lowerCamelCase					:	int,			_lowerCamelCase					:	Union[str, Any],			_lowerCamelCase					:	List[Any],			_lowerCamelCase					:	Any,			_lowerCamelCase					:	Tuple,			*_lowerCamelCase					:	Union[str, Any]    ):

     '''simple docstring'''
     __A		     =					TFGPTJModel(config=_lowerCamelCase    )

     __A		     =					input_ids[:1, :]
     __A		     =					input_mask[:1, :]
     __A		     =					token_type_ids[:1, :]
     __A		     =					1

     # first forward pass
     __A		     =					model(_lowerCamelCase,			attention_mask=_lowerCamelCase,			token_type_ids=_lowerCamelCase,			use_cache=_lowerCamelCase    )

     __A     ,       __A		     =					outputs.to_tuple()

     # create hypothetical next token and extent to next_input_ids
     __A		     =					ids_tensor((self.batch_size, 3),			config.vocab_size    )
     __A		     =					ids_tensor((self.batch_size, 3),			2    )
     __A		     =					ids_tensor((self.batch_size, 3),			self.type_vocab_size    )

     # append to next input_ids and token_type_ids
     __A		     =					tf.concat([input_ids, next_tokens],			axis=-1    )
     __A		     =					tf.concat([input_mask, next_attn_mask],			axis=-1    )
     __A		     =					tf.concat([token_type_ids, next_token_types],			axis=-1    )

     __A		     =					model(
         _lowerCamelCase,			token_type_ids=_lowerCamelCase,			attention_mask=_lowerCamelCase    )['''last_hidden_state''']
     __A		     =					model(
         _lowerCamelCase,			token_type_ids=_lowerCamelCase,			attention_mask=_lowerCamelCase,			past_key_values=_lowerCamelCase,			)['''last_hidden_state''']
     self.parent.assertTrue(output_from_past.shape[1] == next_tokens.shape[1]    )

     # select random slice
     __A		     =					int(ids_tensor((1,),			shape_list(_lowerCamelCase    )[-1]    )    )
     __A		     =					output_from_no_past[:, -3:, random_slice_idx]
     __A		     =					output_from_past[:, :, random_slice_idx]

     # test that outputs are equal for slice
     tf.debugging.assert_near(_lowerCamelCase,			_lowerCamelCase,			rtol=1e-3    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Optional[Any],			_lowerCamelCase					:	str,			_lowerCamelCase					:	Optional[Any],			_lowerCamelCase					:	str,			_lowerCamelCase					:	List[Any],			_lowerCamelCase					:	Tuple,			*_lowerCamelCase					:	int    ):

     '''simple docstring'''
     __A		     =					TFGPTJForCausalLM(config=_lowerCamelCase    )
     __A		     =					{
         '''input_ids''': input_ids,
         '''attention_mask''': input_mask,
         '''token_type_ids''': token_type_ids,
     }
     __A		     =					model(_lowerCamelCase    )
     self.parent.assertEqual(result.logits.shape,			(self.batch_size, self.seq_length, self.vocab_size)    )






   def 							_SCREAMING_SNAKE_CASE							(      self					:	str    ):

     '''simple docstring'''
     __A		     =					self.prepare_config_and_inputs()

     (
         (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       (
         __A
     )     ,       
     )		     =					config_and_inputs

     __A		     =					{
         '''input_ids''': input_ids,
         '''token_type_ids''': token_type_ids,
         '''attention_mask''': input_mask,
     }
     return config, inputs_dict





@require_tf
class    snake_case						(				_lowerCAmelCase  ,      _lowerCAmelCase  ,      _lowerCAmelCase  ,      unittest.TestCase		):


   '''simple docstring'''

   A_		:      Union[str, Any]							=					(
       (TFGPTJForCausalLM, TFGPTJForSequenceClassification, TFGPTJForQuestionAnswering, TFGPTJModel)
       if is_tf_available()
       else ()
   )

   A_		:      Dict							=					(TFGPTJForCausalLM,) if is_tf_available() else ()
   A_		:      Dict							=					(
       {
           "feature-extraction": TFGPTJModel,
           "question-answering": TFGPTJForQuestionAnswering,
           "text-classification": TFGPTJForSequenceClassification,
           "text-generation": TFGPTJForCausalLM,
           "zero-shot": TFGPTJForSequenceClassification,
       }
       if is_tf_available()
       else {}
   )
   A_		:      List[str]							=					False
   A_		:      Any							=					False
   A_		:      Optional[int]							=					False
   A_		:      Union[str, Any]							=					False


   def 							_SCREAMING_SNAKE_CASE							(      self					:	str,			_lowerCamelCase					:	List[str],			_lowerCamelCase					:	List[Any],			_lowerCamelCase					:	Dict,			_lowerCamelCase					:	int,			_lowerCamelCase					:	str    ):

     '''simple docstring'''
     if (
         pipeline_test_casse_name == "QAPipelineTests"
         and tokenizer_name is not None
         and not tokenizer_name.endswith('''Fast'''    )
     ):
       # `QAPipelineTests` fails for a few models when the slower tokenizer are used.
       # (The slower tokenizers were never used for pipeline tests before the pipeline testing rework)
       # TODO: check (and possibly fix) the `QAPipelineTests` with slower tokenizer
       return True

     return False


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict    ):

     '''simple docstring'''
     __A		     =					TFGPTJModelTester(self    )
     __A		     =					ConfigTester(self,			config_class=_lowerCamelCase,			n_embd=37    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	str    ):

     '''simple docstring'''
     self.config_tester.run_common_tests()


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Tuple    ):

     '''simple docstring'''
     __A		     =					self.model_tester.prepare_config_and_inputs()
     self.model_tester.create_and_check_gptj_model(*_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Optional[Any]    ):

     '''simple docstring'''
     __A		     =					self.model_tester.prepare_config_and_inputs()
     self.model_tester.create_and_check_gptj_model_past(*_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	List[str]    ):

     '''simple docstring'''
     __A		     =					self.model_tester.prepare_config_and_inputs()
     self.model_tester.create_and_check_gptj_model_attention_mask_past(*_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	str    ):

     '''simple docstring'''
     __A		     =					self.model_tester.prepare_config_and_inputs()
     self.model_tester.create_and_check_gptj_model_past_large_inputs(*_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Any    ):

     '''simple docstring'''
     __A		     =					self.model_tester.prepare_config_and_inputs()
     self.model_tester.create_and_check_gptj_lm_head_model(*_lowerCamelCase    )


   @slow
   @unittest.skipIf(
       not is_tf_available() or len(tf.config.list_physical_devices('''GPU'''    )    ) > 0,			'''skip testing on GPU for now to avoid GPU OOM.''',			)
   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict    ):

     '''simple docstring'''
     __A		     =					TFGPTJModel.from_pretrained('''EleutherAI/gpt-j-6B''',			from_pt=_lowerCamelCase    )
     self.assertIsNotNone(_lowerCamelCase    )






   @unittest.skip(reason='''Currently, model embeddings are going to undergo a major refactor.'''    )
   def 							_SCREAMING_SNAKE_CASE							(      self					:	List[Any]    ):

     '''simple docstring'''
     super().test_resize_token_embeddings()





@require_tf
@tooslow
# Marked as @tooslow due to GPU OOM -- but still useful to run locally. Requires ~39GB of RAM.
class    snake_case						(				unittest.TestCase		):


   '''simple docstring'''

   def 							_SCREAMING_SNAKE_CASE							(      self					:	Any    ):

     '''simple docstring'''
     __A		     =					TFGPTJForCausalLM.from_pretrained('''EleutherAI/gpt-j-6B''',			from_pt=_lowerCamelCase    )
     __A		     =					tf.convert_to_tensor([[4_64, 32_90]],			dtype=tf.intaa    )  # The dog
     # fmt: off
     # The dog is a man's best friend. It is a loyal companion, and it is a friend
     __A		     =					[4_64, 32_90, 3_18, 2_57, 5_82, 3_38, 12_66, 15_45, 13, 6_32, 3_18, 2_57, 91_12, 1_51_85, 11, 2_90, 3_40, 3_18, 2_57, 15_45]
     # fmt: on
     __A		     =					model.generate(_lowerCamelCase,			do_sample=_lowerCamelCase    )
     self.assertListEqual(output_ids[0].numpy().tolist(),			_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Tuple    ):

     '''simple docstring'''
     __A		     =					AutoTokenizer.from_pretrained('''EleutherAI/gpt-j-6B''',			revision='''float16'''    )
     __A		     =					TFGPTJForCausalLM.from_pretrained('''EleutherAI/gpt-j-6B''',			revision='''float16''',			from_pt=_lowerCamelCase    )

     __A		     =					tokenizer('''Today is a nice day and''',			return_tensors='''tf'''    )
     # forces the generation to happen on CPU, to avoid GPU-related quirks
     with tf.device(''':/CPU:0'''    ):
       __A		     =					model.generate(**_lowerCamelCase,			do_sample=_lowerCamelCase,			seed=[42, 0]    )
     __A		     =					tokenizer.decode(output_ids[0],			skip_special_tokens=_lowerCamelCase    )

     __A		     =					'''Today is a nice day and I’m going to go for a walk. I’'''
     self.assertEqual(_lowerCamelCase,			_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict    ):

     '''simple docstring'''
     __A		     =					TFGPTJForCausalLM.from_pretrained('''EleutherAI/gpt-j-6B''',			revision='''float16''',			from_pt=_lowerCamelCase    )
     __A		     =					AutoTokenizer.from_pretrained('''EleutherAI/gpt-j-6B''',			revision='''float16'''    )

     __A		     =					'''left'''

     # Define PAD Token = EOS Token = 50256
     __A		     =					tokenizer.eos_token
     __A		     =					model.config.eos_token_id

     # use different length sentences to test batching
     __A		     =					[
         '''Hello, my dog is a little''',
         '''Today, I''',
     ]
     __A		     =					[
         '''Hello, my dog is a little over a year old and has been diagnosed with hip dysplasia''',
         '''Today, I’m going to be talking about a topic that’''',
     ]
     return model, tokenizer, sentences, expected_output_sentences


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Tuple    ):

     '''simple docstring'''
     # Confirms that we get the expected results with left-padded beam search
     __A     ,       __A     ,       __A     ,       __A		     =					self._get_beam_search_test_objects()

     __A		     =					tokenizer(_lowerCamelCase,			return_tensors='''tf''',			padding=_lowerCamelCase    )
     __A		     =					model.generate(**_lowerCamelCase,			do_sample=_lowerCamelCase,			num_beams=2    )
     __A		     =					tokenizer.batch_decode(_lowerCamelCase,			skip_special_tokens=_lowerCamelCase    )
     self.assertListEqual(_lowerCamelCase,			_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Optional[int]    ):

     '''simple docstring'''
     # Confirms that left-padding is working properly
     __A     ,       __A     ,       __A     ,       __A		     =					self._get_beam_search_test_objects()

     __A		     =					tokenizer(_lowerCamelCase,			return_tensors='''tf''',			padding=_lowerCamelCase    )
     __A		     =					tokenizer(sentences[0],			return_tensors='''tf'''    )
     __A		     =					model.generate(**_lowerCamelCase,			do_sample=_lowerCamelCase,			num_beams=2    )
     __A		     =					(
         shape_list(inputs_non_padded['''input_ids''']    )[-1]
         - tf.reduce_sum(tf.cast(inputs['''attention_mask'''][-1],			tf.intaa    )    ).numpy()
     )
     __A		     =					tokenizer(sentences[1],			return_tensors='''tf'''    )
     __A		     =					model.generate(
         **_lowerCamelCase,			do_sample=_lowerCamelCase,			num_beams=2,			max_length=model.config.max_length - num_paddings    )
     __A		     =					tokenizer.decode(output_non_padded[0],			skip_special_tokens=_lowerCamelCase    )
     __A		     =					tokenizer.decode(output_padded[0],			skip_special_tokens=_lowerCamelCase    )
     self.assertListEqual(_lowerCamelCase,			[non_padded_sentence, padded_sentence]    )






   def 							_SCREAMING_SNAKE_CASE							(      self					:	List[Any]    ):

     '''simple docstring'''
     # Confirms that XLA is working properly
     __A     ,       __A     ,       __A     ,       __A		     =					self._get_beam_search_test_objects()

     __A		     =					tokenizer(_lowerCamelCase,			return_tensors='''tf''',			padding=_lowerCamelCase    )
     __A		     =					tf.function(model.generate,			jit_compile=_lowerCamelCase    )
     __A		     =					xla_generate(**_lowerCamelCase,			do_sample=_lowerCamelCase,			num_beams=2    )
     __A		     =					tokenizer.batch_decode(_lowerCamelCase,			skip_special_tokens=_lowerCamelCase    )
     self.assertListEqual(_lowerCamelCase,			_lowerCamelCase    )





'''simple docstring'''




from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_torch_available,
)


_A										= {
    'configuration_rwkv': ['RWKV_PRETRAINED_CONFIG_ARCHIVE_MAP', 'RwkvConfig', 'RwkvOnnxConfig'],
}

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 _A										= [
     'RWKV_PRETRAINED_MODEL_ARCHIVE_LIST',
     'RwkvForCausalLM',
     'RwkvModel',
     'RwkvPreTrainedModel',
 ]


if TYPE_CHECKING:
 from .configuration_rwkv import RWKV_PRETRAINED_CONFIG_ARCHIVE_MAP, RwkvConfig, RwkvOnnxConfig

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_rwkv import (
      RWKV_PRETRAINED_MODEL_ARCHIVE_LIST,
      RwkvForCausalLM,
      RwkvModel,
      RwkvPreTrainedModel,
  )
else:
 import sys

 _A										= _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)




