





import inspect
import unittest

from transformers import RegNetConfig, is_flax_available
from transformers.testing_utils import require_flax, slow
from transformers.utils import cached_property, is_vision_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_flax_common import FlaxModelTesterMixin, floats_tensor


if is_flax_available():
  import jax
  import jax.numpy as jnp

  from transformers.models.regnet.modeling_flax_regnet import FlaxRegNetForImageClassification, FlaxRegNetModel

if is_vision_available():
  from PIL import Image

  from transformers import AutoImageProcessor



class  __lowerCAmelCase     (	unittest.TestCase   ):




 def __init__(						self	,				__UpperCAmelCase	,				__UpperCAmelCase=3	,				__UpperCAmelCase=32	,				__UpperCAmelCase=3	,				__UpperCAmelCase=10	,				__UpperCAmelCase=[10, 20, 30, 40]	,				__UpperCAmelCase=[1, 1, 2, 1]	,				__UpperCAmelCase=True	,				__UpperCAmelCase=True	,				__UpperCAmelCase="relu"	,				__UpperCAmelCase=3	,				__UpperCAmelCase=None	,				):



    '''simple docstring'''
    __lowerCamelCase													=    parent
    __lowerCamelCase													=    batch_size
    __lowerCamelCase													=    image_size
    __lowerCamelCase													=    num_channels
    __lowerCamelCase													=    embeddings_size
    __lowerCamelCase													=    hidden_sizes
    __lowerCamelCase													=    depths
    __lowerCamelCase													=    is_training
    __lowerCamelCase													=    use_labels
    __lowerCamelCase													=    hidden_act
    __lowerCamelCase													=    num_labels
    __lowerCamelCase													=    scope
    __lowerCamelCase													=    len(__UpperCAmelCase				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    floats_tensor([self.batch_size, self.num_channels, self.image_size, self.image_size]				)

    __lowerCamelCase													=    self.get_config()

    return config, pixel_values




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    return RegNetConfig(
        num_channels=self.num_channels	,				embeddings_size=self.embeddings_size	,				hidden_sizes=self.hidden_sizes	,				depths=self.depths	,				hidden_act=self.hidden_act	,				num_labels=self.num_labels	,				image_size=self.image_size	,				)




 def        lowerCamelCase      (						self	,				__UpperCAmelCase	,				__UpperCAmelCase				):



    '''simple docstring'''
    __lowerCamelCase													=    FlaxRegNetModel(config=__UpperCAmelCase				)
    __lowerCamelCase													=    model(__UpperCAmelCase				)

    # Output shape (b, c, h, w)
    self.parent.assertEqual(
        result.last_hidden_state.shape	,				(self.batch_size, self.hidden_sizes[-1], self.image_size // 32, self.image_size // 32)	,				)




 def        lowerCamelCase      (						self	,				__UpperCAmelCase	,				__UpperCAmelCase				):



    '''simple docstring'''
    __lowerCamelCase													=    self.num_labels
    __lowerCamelCase													=    FlaxRegNetForImageClassification(config=__UpperCAmelCase				)
    __lowerCamelCase													=    model(__UpperCAmelCase				)
    self.parent.assertEqual(result.logits.shape	,				(self.batch_size, self.num_labels)				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    self.prepare_config_and_inputs()
    __lowerCamelCase							,__lowerCamelCase													=    config_and_inputs
    __lowerCamelCase													=    {'''pixel_values''': pixel_values}
    return config, inputs_dict



@require_flax
class  __lowerCAmelCase     (	lowerCAmelCase__  ,	unittest.TestCase   ):
 lowerCAmelCase__       					=  (FlaxRegNetModel, FlaxRegNetForImageClassification) if is_flax_available() else ()

 lowerCAmelCase__       					=  False
 lowerCAmelCase__       					=  False
 lowerCAmelCase__       					=  False




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    FlaxRegNetModelTester(self				)
    __lowerCamelCase													=    ConfigTester(self	,				config_class=__UpperCAmelCase	,				has_text_modality=__UpperCAmelCase				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    self.create_and_test_config_common_properties()
    self.config_tester.create_and_test_config_to_json_string()
    self.config_tester.create_and_test_config_to_json_file()
    self.config_tester.create_and_test_config_from_and_save_pretrained()
    self.config_tester.create_and_test_config_with_num_labels()
    self.config_tester.check_config_can_be_init_without_params()
    self.config_tester.check_config_arguments_init()




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    return




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_model(*__UpperCAmelCase				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_for_image_classification(*__UpperCAmelCase				)




 @unittest.skip(reason='''RegNet does not use inputs_embeds'''				)
 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    pass




 @unittest.skip(reason='''RegNet does not support input and output embeddings'''				)
 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    pass




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase							,__lowerCamelCase													=    self.model_tester.prepare_config_and_inputs_for_common()

    for model_class in self.all_model_classes:
       __lowerCamelCase													=    model_class(__UpperCAmelCase				)
       __lowerCamelCase													=    inspect.signature(model.__call__				)
       # signature.parameters is an OrderedDict => so arg_names order is deterministic
       __lowerCamelCase													=    [*signature.parameters.keys()]

       __lowerCamelCase													=    ['''pixel_values''']
       self.assertListEqual(arg_names[:1]	,				__UpperCAmelCase				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    def check_hidden_states_output(__UpperCAmelCase	,				__UpperCAmelCase	,				__UpperCAmelCase				):
       __lowerCamelCase													=    model_class(__UpperCAmelCase				)

       __lowerCamelCase													=    model(**self._prepare_for_class(__UpperCAmelCase	,				__UpperCAmelCase				)				)

       __lowerCamelCase													=    outputs.encoder_hidden_states if config.is_encoder_decoder else outputs.hidden_states

       __lowerCamelCase													=    self.model_tester.num_stages
       self.assertEqual(len(__UpperCAmelCase				)	,				expected_num_stages + 1				)

    __lowerCamelCase							,__lowerCamelCase													=    self.model_tester.prepare_config_and_inputs_for_common()

    for model_class in self.all_model_classes:
       __lowerCamelCase													=    True
       check_hidden_states_output(__UpperCAmelCase	,				__UpperCAmelCase	,				__UpperCAmelCase				)

       # check that output_hidden_states also work using config
       del inputs_dict["output_hidden_states"]
       __lowerCamelCase													=    True

       check_hidden_states_output(__UpperCAmelCase	,				__UpperCAmelCase	,				__UpperCAmelCase				)




 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase							,__lowerCamelCase													=    self.model_tester.prepare_config_and_inputs_for_common()

    for model_class in self.all_model_classes:
       with self.subTest(model_class.__name__				):
          __lowerCamelCase													=    self._prepare_for_class(__UpperCAmelCase	,				__UpperCAmelCase				)
          __lowerCamelCase													=    model_class(__UpperCAmelCase				)

          @jax.jit
          def model_jitted(__UpperCAmelCase	,				**__UpperCAmelCase				):
             return model(pixel_values=__UpperCAmelCase	,				**__UpperCAmelCase				)

          with self.subTest('''JIT Enabled'''				):
             __lowerCamelCase													=    model_jitted(**__UpperCAmelCase				).to_tuple()

          with self.subTest('''JIT Disabled'''				):
             with jax.disable_jit():
                __lowerCamelCase													=    model_jitted(**__UpperCAmelCase				).to_tuple()

          self.assertEqual(len(__UpperCAmelCase				)	,				len(__UpperCAmelCase				)				)
          for jitted_output, output in zip(__UpperCAmelCase	,				__UpperCAmelCase				):
             self.assertEqual(jitted_output.shape	,				output.shape				)





def 		a__			(		):
   __lowerCamelCase													=    Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''							)
   return image





@require_flax
class  __lowerCAmelCase     (	unittest.TestCase   ):




 @cached_property
 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    return AutoImageProcessor.from_pretrained('''facebook/regnet-y-040'''				) if is_vision_available() else None




 @slow
 def        lowerCamelCase      (						self				):



    '''simple docstring'''
    __lowerCamelCase													=    FlaxRegNetForImageClassification.from_pretrained('''facebook/regnet-y-040'''				)

    __lowerCamelCase													=    self.default_image_processor
    __lowerCamelCase													=    prepare_img()
    __lowerCamelCase													=    image_processor(images=__UpperCAmelCase	,				return_tensors='''np'''				)

    __lowerCamelCase													=    model(**__UpperCAmelCase				)

    # verify the logits
    __lowerCamelCase													=    (1, 1000)
    self.assertEqual(outputs.logits.shape	,				__UpperCAmelCase				)

    __lowerCamelCase													=    jnp.array([-0.4_180, -1.5_051, -3.4_836]				)

    self.assertTrue(jnp.allclose(outputs.logits[0, :3]	,				__UpperCAmelCase	,				atol=1E-4				)				)











import argparse
import csv
import logging
import os
import random

import numpy as np
import torch
from torch.utils.data import DataLoader, RandomSampler, SequentialSampler, TensorDataset
from tqdm import tqdm, trange

from transformers import (
    CONFIG_NAME,
    WEIGHTS_NAME,
    AdamW,
    OpenAIGPTDoubleHeadsModel,
    OpenAIGPTTokenizer,
    get_linear_schedule_with_warmup,
)


logging.basicConfig(
    format="""%(asctime)s - %(levelname)s - %(name)s - %(message)s""", datefmt="""%m/%d/%Y %H:%M:%S""", level=logging.INFO
)
a_			=					logging.getLogger(__name__)





def 		a__			(		_UpperCamelCase			: str ,_UpperCamelCase			: List[Any]							):
   __lowerCamelCase													=    np.argmax(_UpperCamelCase ,axis=1							)
   return np.sum(outputs == labels							)





def 		a__			(		_UpperCamelCase			: Optional[int]							):
   with open(_UpperCamelCase ,encoding='''utf_8'''							) as f:
      __lowerCamelCase													=    csv.reader(_UpperCamelCase							)
      __lowerCamelCase													=    []
      next(_UpperCamelCase							)  # skip the first line
      for line in tqdm(_UpperCamelCase							):
         output.append((''' '''.join(line[1:5]							), line[5], line[6], int(line[-1]							) - 1)							)
   return output





def 		a__			(		_UpperCamelCase			: Any ,_UpperCamelCase			: Dict ,_UpperCamelCase			: str ,_UpperCamelCase			: Union[str, Any] ,_UpperCamelCase			: Any ,_UpperCamelCase			: Dict							):
   __lowerCamelCase													=    []
   for dataset in encoded_datasets:
      __lowerCamelCase													=    len(_UpperCamelCase							)
      __lowerCamelCase													=    np.zeros((n_batch, 2, input_len) ,dtype=np.intaa							)
      __lowerCamelCase													=    np.zeros((n_batch, 2) ,dtype=np.intaa							)
      __lowerCamelCase													=    np.full((n_batch, 2, input_len) ,fill_value=-1_00 ,dtype=np.intaa							)
      __lowerCamelCase													=    np.zeros((n_batch,) ,dtype=np.intaa							)
      for (
          i,
          (story, conta, conta, mc_label),
      ) in enumerate(_UpperCamelCase							):
         __lowerCamelCase													=    [start_token] + story[:cap_length] + [delimiter_token] + conta[:cap_length] + [clf_token]
         __lowerCamelCase													=    [start_token] + story[:cap_length] + [delimiter_token] + conta[:cap_length] + [clf_token]
         __lowerCamelCase													=    with_conta
         __lowerCamelCase													=    with_conta
         __lowerCamelCase													=    len(_UpperCamelCase							) - 1
         __lowerCamelCase													=    len(_UpperCamelCase							) - 1
         __lowerCamelCase													=    with_conta
         __lowerCamelCase													=    with_conta
         __lowerCamelCase													=    mc_label
      __lowerCamelCase													=    (input_ids, mc_token_ids, lm_labels, mc_labels)
      tensor_datasets.append(tuple(torch.tensor(_UpperCamelCase							) for t in all_inputs							)							)
   return tensor_datasets





def 		a__			(		):
   __lowerCamelCase													=    argparse.ArgumentParser()
   parser.add_argument('''--model_name''' ,type=_UpperCamelCase ,default='''openai-gpt''' ,help='''pretrained model name'''							)
   parser.add_argument('''--do_train''' ,action='''store_true''' ,help='''Whether to run training.'''							)
   parser.add_argument('''--do_eval''' ,action='''store_true''' ,help='''Whether to run eval on the dev set.'''							)
   parser.add_argument(
       '''--output_dir''' ,default=_UpperCamelCase ,type=_UpperCamelCase ,required=_UpperCamelCase ,help='''The output directory where the model predictions and checkpoints will be written.''' ,)
   parser.add_argument('''--train_dataset''' ,type=_UpperCamelCase ,default=''''''							)
   parser.add_argument('''--eval_dataset''' ,type=_UpperCamelCase ,default=''''''							)
   parser.add_argument('''--seed''' ,type=_UpperCamelCase ,default=42							)
   parser.add_argument('''--num_train_epochs''' ,type=_UpperCamelCase ,default=3							)
   parser.add_argument('''--train_batch_size''' ,type=_UpperCamelCase ,default=8							)
   parser.add_argument('''--eval_batch_size''' ,type=_UpperCamelCase ,default=16							)
   parser.add_argument('''--adam_epsilon''' ,default=1e-8 ,type=_UpperCamelCase ,help='''Epsilon for Adam optimizer.'''							)
   parser.add_argument('''--max_grad_norm''' ,type=_UpperCamelCase ,default=1							)
   parser.add_argument(
       '''--max_steps''' ,default=-1 ,type=_UpperCamelCase ,help=(
           '''If > 0: set total number of training                         steps to perform. Override num_train_epochs.'''
       ) ,)
   parser.add_argument(
       '''--gradient_accumulation_steps''' ,type=_UpperCamelCase ,default=1 ,help='''Number of updates steps to accumulate before                        performing a backward/update pass.''' ,)
   parser.add_argument('''--learning_rate''' ,type=_UpperCamelCase ,default=6.25e-5							)
   parser.add_argument('''--warmup_steps''' ,default=0 ,type=_UpperCamelCase ,help='''Linear warmup over warmup_steps.'''							)
   parser.add_argument('''--lr_schedule''' ,type=_UpperCamelCase ,default='''warmup_linear'''							)
   parser.add_argument('''--weight_decay''' ,type=_UpperCamelCase ,default=0.01							)
   parser.add_argument('''--lm_coef''' ,type=_UpperCamelCase ,default=0.9							)
   parser.add_argument('''--n_valid''' ,type=_UpperCamelCase ,default=3_74							)

   parser.add_argument('''--server_ip''' ,type=_UpperCamelCase ,default='''''' ,help='''Can be used for distant debugging.'''							)
   parser.add_argument('''--server_port''' ,type=_UpperCamelCase ,default='''''' ,help='''Can be used for distant debugging.'''							)
   __lowerCamelCase													=    parser.parse_args()
   print(_UpperCamelCase							)

   if args.server_ip and args.server_port:
      # Distant debugging - see https://code.visualstudio.com/docs/python/debugging#_attach-to-a-local-script
      import ptvsd

      print('''Waiting for debugger attach'''							)
      ptvsd.enable_attach(address=(args.server_ip, args.server_port) ,redirect_output=_UpperCamelCase							)
      ptvsd.wait_for_attach()

   random.seed(args.seed							)
   np.random.seed(args.seed							)
   torch.manual_seed(args.seed							)
   torch.cuda.manual_seed_all(args.seed							)

   __lowerCamelCase													=    torch.device('''cuda''' if torch.cuda.is_available() else '''cpu'''							)
   __lowerCamelCase													=    torch.cuda.device_count()
   logger.info('''device: {}, n_gpu {}'''.format(_UpperCamelCase ,_UpperCamelCase							)							)

   if not args.do_train and not args.do_eval:
      raise ValueError('''At least one of `do_train` or `do_eval` must be True.'''							)

   if not os.path.exists(args.output_dir							):
      os.makedirs(args.output_dir							)

   # Load tokenizer and model
   # This loading functions also add new tokens and embeddings called `special tokens`
   # These new embeddings will be fine-tuned on the RocStories dataset
   __lowerCamelCase													=    ['''_start_''', '''_delimiter_''', '''_classify_''']
   __lowerCamelCase													=    OpenAIGPTTokenizer.from_pretrained(args.model_name							)
   tokenizer.add_tokens(_UpperCamelCase							)
   __lowerCamelCase													=    tokenizer.convert_tokens_to_ids(_UpperCamelCase							)
   __lowerCamelCase													=    OpenAIGPTDoubleHeadsModel.from_pretrained(args.model_name							)
   model.resize_token_embeddings(len(_UpperCamelCase							)							)
   model.to(_UpperCamelCase							)

   # Load and encode the datasets
   def tokenize_and_encode(_UpperCamelCase			: Dict							):
      if isinstance(_UpperCamelCase ,_UpperCamelCase							):
         return tokenizer.convert_tokens_to_ids(tokenizer.tokenize(_UpperCamelCase							)							)
      elif isinstance(_UpperCamelCase ,_UpperCamelCase							):
         return obj
      return [tokenize_and_encode(_UpperCamelCase							) for o in obj]

   logger.info('''Encoding dataset...'''							)
   __lowerCamelCase													=    load_rocstories_dataset(args.train_dataset							)
   __lowerCamelCase													=    load_rocstories_dataset(args.eval_dataset							)
   __lowerCamelCase													=    (train_dataset, eval_dataset)
   __lowerCamelCase													=    tokenize_and_encode(_UpperCamelCase							)

   # Compute the max input length for the Transformer
   __lowerCamelCase													=    model.config.n_positions // 2 - 2
   __lowerCamelCase													=    max(
       len(story[:max_length]							) + max(len(conta[:max_length]							) ,len(conta[:max_length]							)							) + 3
       for dataset in encoded_datasets
       for story, conta, conta, _ in dataset							)
   __lowerCamelCase													=    min(_UpperCamelCase ,model.config.n_positions							)  # Max size of input for the pre-trained model

   # Prepare inputs tensors and dataloaders
   __lowerCamelCase													=    pre_process_datasets(_UpperCamelCase ,_UpperCamelCase ,_UpperCamelCase ,*_UpperCamelCase							)
   __lowerCamelCase							,__lowerCamelCase													=    tensor_datasets[0], tensor_datasets[1]

   __lowerCamelCase													=    TensorDataset(*_UpperCamelCase							)
   __lowerCamelCase													=    RandomSampler(_UpperCamelCase							)
   __lowerCamelCase													=    DataLoader(_UpperCamelCase ,sampler=_UpperCamelCase ,batch_size=args.train_batch_size							)

   __lowerCamelCase													=    TensorDataset(*_UpperCamelCase							)
   __lowerCamelCase													=    SequentialSampler(_UpperCamelCase							)
   __lowerCamelCase													=    DataLoader(_UpperCamelCase ,sampler=_UpperCamelCase ,batch_size=args.eval_batch_size							)

   # Prepare optimizer
   if args.do_train:
      if args.max_steps > 0:
         __lowerCamelCase													=    args.max_steps
         __lowerCamelCase													=    args.max_steps // (len(_UpperCamelCase							) // args.gradient_accumulation_steps) + 1
      else:
         __lowerCamelCase													=    len(_UpperCamelCase							) // args.gradient_accumulation_steps * args.num_train_epochs

      __lowerCamelCase													=    list(model.named_parameters()							)
      __lowerCamelCase													=    ['''bias''', '''LayerNorm.bias''', '''LayerNorm.weight''']
      __lowerCamelCase													=    [
          {
              '''params''': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay							)],
              '''weight_decay''': args.weight_decay,
          },
          {'''params''': [p for n, p in param_optimizer if any(nd in n for nd in no_decay							)], '''weight_decay''': 0.0},
      ]
      __lowerCamelCase													=    AdamW(_UpperCamelCase ,lr=args.learning_rate ,eps=args.adam_epsilon							)
      __lowerCamelCase													=    get_linear_schedule_with_warmup(
          _UpperCamelCase ,num_warmup_steps=args.warmup_steps ,num_training_steps=_UpperCamelCase							)

   if args.do_train:
      __lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase													=    0, 0, None
      model.train()
      for _ in trange(int(args.num_train_epochs							) ,desc='''Epoch'''							):
         __lowerCamelCase													=    0
         __lowerCamelCase													=    0
         __lowerCamelCase													=    tqdm(_UpperCamelCase ,desc='''Training'''							)
         for step, batch in enumerate(_UpperCamelCase							):
            __lowerCamelCase													=    tuple(t.to(_UpperCamelCase							) for t in batch							)
            __lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase													=    batch
            __lowerCamelCase													=    model(_UpperCamelCase ,mc_token_ids=_UpperCamelCase ,lm_labels=_UpperCamelCase ,mc_labels=_UpperCamelCase							)
            __lowerCamelCase													=    args.lm_coef * losses[0] + losses[1]
            loss.backward()
            optimizer.step()
            scheduler.step()
            optimizer.zero_grad()
            tr_loss += loss.item()
            __lowerCamelCase													=    (
                loss.item() if exp_average_loss is None else 0.7 * exp_average_loss + 0.3 * loss.item()
            )
            nb_tr_steps += 1
            __lowerCamelCase													=    '''Training loss: {:.2e} lr: {:.2e}'''.format(_UpperCamelCase ,scheduler.get_lr()[0]							)

    # Save a trained model
   if args.do_train:
      # Save a trained model, configuration and tokenizer
      __lowerCamelCase													=    model.module if hasattr(_UpperCamelCase ,'''module'''							) else model  # Only save the model itself

      # If we save using the predefined names, we can load using `from_pretrained`
      __lowerCamelCase													=    os.path.join(args.output_dir ,_UpperCamelCase							)
      __lowerCamelCase													=    os.path.join(args.output_dir ,_UpperCamelCase							)

      torch.save(model_to_save.state_dict() ,_UpperCamelCase							)
      model_to_save.config.to_json_file(_UpperCamelCase							)
      tokenizer.save_vocabulary(args.output_dir							)

      # Load a trained model and vocabulary that you have fine-tuned
      __lowerCamelCase													=    OpenAIGPTDoubleHeadsModel.from_pretrained(args.output_dir							)
      __lowerCamelCase													=    OpenAIGPTTokenizer.from_pretrained(args.output_dir							)
      model.to(_UpperCamelCase							)

   if args.do_eval:
      model.eval()
      __lowerCamelCase							,__lowerCamelCase													=    0, 0
      __lowerCamelCase							,__lowerCamelCase													=    0, 0
      for batch in tqdm(_UpperCamelCase ,desc='''Evaluating'''							):
         __lowerCamelCase													=    tuple(t.to(_UpperCamelCase							) for t in batch							)
         __lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase													=    batch
         with torch.no_grad():
            __lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase							,__lowerCamelCase													=    model(
                _UpperCamelCase ,mc_token_ids=_UpperCamelCase ,lm_labels=_UpperCamelCase ,mc_labels=_UpperCamelCase							)

         __lowerCamelCase													=    mc_logits.detach().cpu().numpy()
         __lowerCamelCase													=    mc_labels.to('''cpu'''							).numpy()
         __lowerCamelCase													=    accuracy(_UpperCamelCase ,_UpperCamelCase							)

         eval_loss += mc_loss.mean().item()
         eval_accuracy += tmp_eval_accuracy

         nb_eval_examples += input_ids.size(0							)
         nb_eval_steps += 1

      __lowerCamelCase													=    eval_loss / nb_eval_steps
      __lowerCamelCase													=    eval_accuracy / nb_eval_examples
      __lowerCamelCase													=    tr_loss / nb_tr_steps if args.do_train else None
      __lowerCamelCase													=    {'''eval_loss''': eval_loss, '''eval_accuracy''': eval_accuracy, '''train_loss''': train_loss}

      __lowerCamelCase													=    os.path.join(args.output_dir ,'''eval_results.txt'''							)
      with open(_UpperCamelCase ,'''w'''							) as writer:
         logger.info('''***** Eval results *****'''							)
         for key in sorted(result.keys()							):
            logger.info('''  %s = %s''' ,_UpperCamelCase ,str(result[key]							)							)
            writer.write('''%s = %s\n''' % (key, str(result[key]							))							)


if __name__ == "__main__":
  main()






