


'''simple docstring'''




import argparse
import struct
import unittest

class 		UpperCAmelCase_      :





     def __init__( self       :      List[str]    ,      UpperCAmelCase__       :      bytes    )				->  None:
        lowerCAmelCase     =			data

        # Initialize hash values
        lowerCAmelCase     =			[
            0X6_A_0_9_E_6_6_7,
            0XB_B_6_7_A_E_8_5,
            0X3_C_6_E_F_3_7_2,
            0XA_5_4_F_F_5_3_A,
            0X5_1_0_E_5_2_7_F,
            0X9_B_0_5_6_8_8_C,
            0X1_F_8_3_D_9_A_B,
            0X5_B_E_0_C_D_1_9,
        ]

        # Initialize round constants
        lowerCAmelCase     =			[
            0X4_2_8_A_2_F_9_8,
            0X7_1_3_7_4_4_9_1,
            0XB_5_C_0_F_B_C_F,
            0XE_9_B_5_D_B_A_5,
            0X3_9_5_6_C_2_5_B,
            0X5_9_F_1_1_1_F_1,
            0X9_2_3_F_8_2_A_4,
            0XA_B_1_C_5_E_D_5,
            0XD_8_0_7_A_A_9_8,
            0X1_2_8_3_5_B_0_1,
            0X2_4_3_1_8_5_B_E,
            0X5_5_0_C_7_D_C_3,
            0X7_2_B_E_5_D_7_4,
            0X8_0_D_E_B_1_F_E,
            0X9_B_D_C_0_6_A_7,
            0XC_1_9_B_F_1_7_4,
            0XE_4_9_B_6_9_C_1,
            0XE_F_B_E_4_7_8_6,
            0X0_F_C_1_9_D_C_6,
            0X2_4_0_C_A_1_C_C,
            0X2_D_E_9_2_C_6_F,
            0X4_A_7_4_8_4_A_A,
            0X5_C_B_0_A_9_D_C,
            0X7_6_F_9_8_8_D_A,
            0X9_8_3_E_5_1_5_2,
            0XA_8_3_1_C_6_6_D,
            0XB_0_0_3_2_7_C_8,
            0XB_F_5_9_7_F_C_7,
            0XC_6_E_0_0_B_F_3,
            0XD_5_A_7_9_1_4_7,
            0X0_6_C_A_6_3_5_1,
            0X1_4_2_9_2_9_6_7,
            0X2_7_B_7_0_A_8_5,
            0X2_E_1_B_2_1_3_8,
            0X4_D_2_C_6_D_F_C,
            0X5_3_3_8_0_D_1_3,
            0X6_5_0_A_7_3_5_4,
            0X7_6_6_A_0_A_B_B,
            0X8_1_C_2_C_9_2_E,
            0X9_2_7_2_2_C_8_5,
            0XA_2_B_F_E_8_A_1,
            0XA_8_1_A_6_6_4_B,
            0XC_2_4_B_8_B_7_0,
            0XC_7_6_C_5_1_A_3,
            0XD_1_9_2_E_8_1_9,
            0XD_6_9_9_0_6_2_4,
            0XF_4_0_E_3_5_8_5,
            0X1_0_6_A_A_0_7_0,
            0X1_9_A_4_C_1_1_6,
            0X1_E_3_7_6_C_0_8,
            0X2_7_4_8_7_7_4_C,
            0X3_4_B_0_B_C_B_5,
            0X3_9_1_C_0_C_B_3,
            0X4_E_D_8_A_A_4_A,
            0X5_B_9_C_C_A_4_F,
            0X6_8_2_E_6_F_F_3,
            0X7_4_8_F_8_2_E_E,
            0X7_8_A_5_6_3_6_F,
            0X8_4_C_8_7_8_1_4,
            0X8_C_C_7_0_2_0_8,
            0X9_0_B_E_F_F_F_A,
            0XA_4_5_0_6_C_E_B,
            0XB_E_F_9_A_3_F_7,
            0XC_6_7_1_7_8_F_2,
        ]

        lowerCAmelCase     =			self.preprocessing(self.data    )
        self.final_hash()





     @staticmethod
     def 							__UpperCAmelCase      ( UpperCAmelCase__       :      bytes    )				->  bytes:
        lowerCAmelCase     =			b'\x80' + (b'\x00' * (6_3 - (len(UpperCAmelCase__    ) + 8) % 6_4))
        lowerCAmelCase     =			struct.pack('>Q'    ,      (len(UpperCAmelCase__    ) * 8)    )
        return data + padding + big_endian_integer





     def 							__UpperCAmelCase      ( self       :      Tuple    )				->  None:
        # Convert into blocks of 64 bytes
        lowerCAmelCase     =			[
            self.preprocessed_data[x : x + 6_4]
            for x in range(0    ,      len(self.preprocessed_data    )    ,      6_4    )
        ]

        for block in self.blocks:
           # Convert the given block into a list of 4 byte integers
           lowerCAmelCase     =			list(struct.unpack('>16L'    ,      UpperCAmelCase__    )    )
           # add 48 0-ed integers
           words += [0] * 4_8

           lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     =			self.hashes

           for index in range(0    ,      6_4    ):
              if index > 1_5:
                 # modify the zero-ed indexes at the end of the array
                 lowerCAmelCase     =			(
                     self.ror(words[index - 1_5]    ,      7    )
                     ^ self.ror(words[index - 1_5]    ,      1_8    )
                     ^ (words[index - 1_5] >> 3)
                 )
                 lowerCAmelCase     =			(
                     self.ror(words[index - 2]    ,      1_7    )
                     ^ self.ror(words[index - 2]    ,      1_9    )
                     ^ (words[index - 2] >> 1_0)
                 )

                 lowerCAmelCase     =			(
                     words[index - 1_6] + sa + words[index - 7] + sa
                 ) % 0X1_0_0_0_0_0_0_0_0

              # Compression
              lowerCAmelCase     =			self.ror(UpperCAmelCase__    ,      6    ) ^ self.ror(UpperCAmelCase__    ,      1_1    ) ^ self.ror(UpperCAmelCase__    ,      2_5    )
              lowerCAmelCase     =			(e & f) ^ ((~e & 0XF_F_F_F_F_F_F_F) & g)
              lowerCAmelCase     =			(
                  h + sa + ch + self.round_constants[index] + words[index]
              ) % 0X1_0_0_0_0_0_0_0_0
              lowerCAmelCase     =			self.ror(UpperCAmelCase__    ,      2    ) ^ self.ror(UpperCAmelCase__    ,      1_3    ) ^ self.ror(UpperCAmelCase__    ,      2_2    )
              lowerCAmelCase     =			(a & b) ^ (a & c) ^ (b & c)
              lowerCAmelCase     =			(sa + maj) % 0X1_0_0_0_0_0_0_0_0

              lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     ,  lowerCAmelCase     =			(
                  g,
                  f,
                  e,
                  ((d + tempa) % 0X1_0_0_0_0_0_0_0_0),
                  c,
                  b,
                  a,
                  ((tempa + tempa) % 0X1_0_0_0_0_0_0_0_0),
              )

           lowerCAmelCase     =			[a, b, c, d, e, f, g, h]

           # Modify final values
           lowerCAmelCase     =			[
               ((element + mutated_hash_values[index]) % 0X1_0_0_0_0_0_0_0_0)
               for index, element in enumerate(self.hashes    )
           ]

        lowerCAmelCase     =			''.join([hex(UpperCAmelCase__    )[2:].zfill(8    ) for value in self.hashes]    )





     def 							__UpperCAmelCase      ( self       :      Optional[Any]    ,      UpperCAmelCase__       :      int    ,      UpperCAmelCase__       :      int    )				->  int:
        return 0XF_F_F_F_F_F_F_F & (value << (3_2 - rotations)) | (value >> rotations)




class 		UpperCAmelCase_      (  unittest.TestCase		):





     def 							__UpperCAmelCase      ( self       :      List[Any]    )				->  None:
        import hashlib

        lowerCAmelCase     =			bytes('Test String'    ,      'utf-8'    )
        self.assertEqual(SHAaaa(UpperCAmelCase__    ).hash    ,      hashlib.shaaaa(UpperCAmelCase__    ).hexdigest()    )





def 	a_					( ):
   import doctest

   doctest.testmod()

   lowerCAmelCase     =			argparse.ArgumentParser()
   parser.add_argument(
       '-s'	, '--string'	, dest='input_string'	, default='Hello World!! Welcome to Cryptography'	, help='Hash the string'	, )
   parser.add_argument(
       '-f'	, '--file'	, dest='input_file'	, help='Hash contents of a file'				)

   lowerCAmelCase     =			parser.parse_args()

   lowerCAmelCase     =			args.input_string

   # hash input should be a bytestring
   if args.input_file:
      with open(args.input_file	, 'rb'				) as f:
         lowerCAmelCase     =			f.read()
   else:
      lowerCAmelCase     =			bytes(lowerCamelCase	, 'utf-8'				)

   print(SHAaaa(lowerCamelCase				).hash				)


if __name__ == "__main__":
       main()












import gc
import unittest

from transformers import CTRLConfig, is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
				import torch

				from transformers import (
				    CTRL_PRETRAINED_MODEL_ARCHIVE_LIST,
				    CTRLForSequenceClassification,
				    CTRLLMHeadModel,
				    CTRLModel,
				)

class 	A_       :
	def __init__(    self							,					_A							,					_A=1_4							,					_A=7							,					_A=True							,					_A=True							,					_A=True							,					_A=True							,					_A=True							,					_A=9_9							,					_A=3_2							,					_A=5							,					_A=4							,					_A=3_7							,					_A="gelu"							,					_A=0.1							,					_A=0.1							,					_A=5_1_2							,					_A=1_6							,					_A=2							,					_A=0.02							,					_A=3							,					_A=4							,					_A=None							,					):






				'''simple docstring'''







				UpperCAmelCase   		=				parent
				UpperCAmelCase   		=				batch_size
				UpperCAmelCase   		=				seq_length
				UpperCAmelCase   		=				is_training
				UpperCAmelCase   		=				use_token_type_ids
				UpperCAmelCase   		=				use_input_mask
				UpperCAmelCase   		=				use_labels
				UpperCAmelCase   		=				use_mc_token_ids
				UpperCAmelCase   		=				vocab_size
				UpperCAmelCase   		=				hidden_size
				UpperCAmelCase   		=				num_hidden_layers
				UpperCAmelCase   		=				num_attention_heads
				UpperCAmelCase   		=				intermediate_size
				UpperCAmelCase   		=				hidden_act
				UpperCAmelCase   		=				hidden_dropout_prob
				UpperCAmelCase   		=				attention_probs_dropout_prob
				UpperCAmelCase   		=				max_position_embeddings
				UpperCAmelCase   		=				type_vocab_size
				UpperCAmelCase   		=				type_sequence_label_size
				UpperCAmelCase   		=				initializer_range
				UpperCAmelCase   		=				num_labels
				UpperCAmelCase   		=				num_choices
				UpperCAmelCase   		=				scope
				UpperCAmelCase   		=				self.vocab_size - 1
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				ids_tensor([self.batch_size, self.seq_length]							,					self.vocab_size		)

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

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

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

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

				UpperCAmelCase   		=				self.get_config()

				UpperCAmelCase   		=				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      _lowercase				(    self		):






				'''simple docstring'''







				return CTRLConfig(
				    vocab_size=self.vocab_size							,					n_embd=self.hidden_size							,					n_layer=self.num_hidden_layers							,					n_head=self.num_attention_heads							,					n_positions=self.max_position_embeddings							,					pad_token_id=self.pad_token_id							,					)
	def      _lowercase				(    self							,					_A							,					_A							,					_A							,					_A							,					_A							,					*_A		):






				'''simple docstring'''







				UpperCAmelCase   		=				CTRLModel(config=_A		)
				model.to(_A		)
				model.eval()

				model(_A							,					token_type_ids=_A							,					head_mask=_A		)
				model(_A							,					token_type_ids=_A		)
				UpperCAmelCase   		=				model(_A		)
				self.parent.assertEqual(result.last_hidden_state.shape							,					(self.batch_size, self.seq_length, self.hidden_size)		)
				self.parent.assertEqual(len(result.past_key_values		)							,					config.n_layer		)
	def      _lowercase				(    self							,					_A							,					_A							,					_A							,					_A							,					_A							,					*_A		):






				'''simple docstring'''







				UpperCAmelCase   		=				CTRLLMHeadModel(_A		)
				model.to(_A		)
				model.eval()

				UpperCAmelCase   		=				model(_A							,					token_type_ids=_A							,					labels=_A		)
				self.parent.assertEqual(result.loss.shape							,					()		)
				self.parent.assertEqual(result.logits.shape							,					(self.batch_size, self.seq_length, self.vocab_size)		)
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				self.prepare_config_and_inputs()

				(
				    (
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			(
				    UpperCAmelCase
				)		,			
				)   		=				config_and_inputs

				UpperCAmelCase   		=				{'''input_ids''': input_ids, '''token_type_ids''': token_type_ids, '''head_mask''': head_mask}

				return config, inputs_dict







	def      _lowercase				(    self							,					_A							,					_A							,					_A							,					_A							,					*_A		):






				'''simple docstring'''







				UpperCAmelCase   		=				self.num_labels
				UpperCAmelCase   		=				CTRLForSequenceClassification(_A		)
				model.to(_A		)
				model.eval()
				UpperCAmelCase   		=				ids_tensor([self.batch_size]							,					self.type_sequence_label_size		)
				UpperCAmelCase   		=				model(_A							,					token_type_ids=_A							,					labels=_A		)
				self.parent.assertEqual(result.logits.shape							,					(self.batch_size, self.num_labels)		)

@require_torch
class 	A_       (a_     ,							a_     ,							a_     ,							unittest.TestCase			):
	UpperCAmelCase__					=			(CTRLModel, CTRLLMHeadModel, CTRLForSequenceClassification) if is_torch_available() else ()
	UpperCAmelCase__					=			(CTRLLMHeadModel,) if is_torch_available() else ()
	UpperCAmelCase__					=			(
	    {
	        '''feature-extraction''': CTRLModel,
	        '''text-classification''': CTRLForSequenceClassification,
	        '''text-generation''': CTRLLMHeadModel,
	        '''zero-shot''': CTRLForSequenceClassification,
	    }
	    if is_torch_available()
	    else {}
	)
	UpperCAmelCase__					=			True
	UpperCAmelCase__					=			False
	UpperCAmelCase__					=			False
	def      _lowercase				(    self							,					_A							,					_A							,					_A							,					_A							,					_A		):






				'''simple docstring'''







				if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
							# Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
							# `CTRLConfig` was never used in pipeline tests, either because of a missing checkpoint or because a tiny
							# config could not be created.
							return True

				return False
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				CTRLModelTester(self		)
				UpperCAmelCase   		=				ConfigTester(self							,					config_class=_A							,					n_embd=3_7		)
	def      _lowercase				(    self		):






				'''simple docstring'''







				super().tearDown()
				# clean-up as much as possible GPU memory occupied by PyTorch
				gc.collect()
				torch.cuda.empty_cache()
	def      _lowercase				(    self		):






				'''simple docstring'''







				self.config_tester.run_common_tests()
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_ctrl_model(*_A		)
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_lm_head_model(*_A		)
	@unittest.skip('''Will be fixed soon by reducing the size of the model used for common tests.'''		)
	def      _lowercase				(    self		):






				'''simple docstring'''







				pass
	@slow
	def      _lowercase				(    self		):






				'''simple docstring'''







				for model_name in CTRL_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
							UpperCAmelCase   		=				CTRLModel.from_pretrained(_A		)
							self.assertIsNotNone(_A		)







	@unittest.skip('''The model doesn\'t support left padding'''		)  # and it's not used enough to be worth fixing :)
	def      _lowercase				(    self		):






				'''simple docstring'''







				pass

@require_torch
class 	A_       (unittest.TestCase			):
	def      _lowercase				(    self		):






				'''simple docstring'''







				super().tearDown()
				# clean-up as much as possible GPU memory occupied by PyTorch
				gc.collect()
				torch.cuda.empty_cache()







	@slow
	def      _lowercase				(    self		):






				'''simple docstring'''







				UpperCAmelCase   		=				CTRLLMHeadModel.from_pretrained('''ctrl'''		)
				model.to(_A		)
				UpperCAmelCase   		=				torch.tensor(
				    [[1_1_8_5_9, 0, 1_6_1_1, 8]]							,					dtype=torch.long							,					device=_A		)  # Legal the president is
				UpperCAmelCase   		=				[
				    1_1_8_5_9,
				    0,
				    1_6_1_1,
				    8,
				    5,
				    1_5_0,
				    2_6_4_4_9,
				    2,
				    1_9,
				    3_4_8,
				    4_6_9,
				    3,
				    2_5_9_5,
				    4_8,
				    2_0_7_4_0,
				    2_4_6_5_3_3,
				    2_4_6_5_3_3,
				    1_9,
				    3_0,
				    5,
				]  # Legal the president is a good guy and I don't want to lose my job. \n \n I have a

				UpperCAmelCase   		=				model.generate(_A							,					do_sample=_A		)
				self.assertListEqual(output_ids[0].tolist()							,					_A		)



