code: 
  
  
  '''simple docstring'''
  
  import unittest
  
  import numpy as np
  
  from transformers.testing_utils import require_torch, require_vision
  from transformers.utils import is_torch_available, is_vision_available
  
  from ...test_image_processing_common import ImageProcessingSavingTestMixin
  
  
  if is_torch_available():
   import torch
  
  if is_vision_available():
   from PIL import Image
  
   from transformers import SwinaSRImageProcessor
   from transformers.image_transforms import get_image_size
  class 						__lowerCAmelCase		(unittest.TestCase  ):
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def __init__(self					:					Any     ,		UpperCamelCase					:					List[Any]     ,		UpperCamelCase					:					Optional[Any]=7     ,		UpperCamelCase					:					int=3     ,		UpperCamelCase					:					Dict=18     ,		UpperCamelCase					:					Any=30     ,		UpperCamelCase					:					Any=400     ,		UpperCamelCase					:					Dict=True     ,		UpperCamelCase					:					Dict=1 / 255     ,		UpperCamelCase					:					List[Any]=True     ,		UpperCamelCase					:					Dict=8     ,		):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				parent
               lowercase__       =				batch_size
               lowercase__       =				num_channels
               lowercase__       =				image_size
               lowercase__       =				min_resolution
               lowercase__       =				max_resolution
               lowercase__       =				do_rescale
               lowercase__       =				rescale_factor
               lowercase__       =				do_pad
               lowercase__       =				pad_size
  
  
  
        def    UpperCamelCase__	(self					:					int				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               return {
                   "do_rescale": self.do_rescale,
                   "rescale_factor": self.rescale_factor,
                   "do_pad": self.do_pad,
                   "pad_size": self.pad_size,
               }
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					List[str]     ,		UpperCamelCase					:					Union[str, Any]=False     ,		UpperCamelCase					:					Optional[int]=False     ,		UpperCamelCase					:					Any=False				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               assert not (numpify and torchify), "You cannot specify both numpy and PyTorch tensors at the same time"
  
               if equal_resolution:
                      lowercase__       =				[]
                      for i in range(self.batch_size				):
                             image_inputs.append(
                                 np.random.randint(
                                     255     ,		size=(self.num_channels, self.max_resolution, self.max_resolution)     ,		dtype=np.uinta				)				)
               else:
                      lowercase__       =				[]
                      for i in range(self.batch_size				):
                             lowercase__    ,lowercase__       =				np.random.choice(np.arange(self.min_resolution     ,		self.max_resolution				)     ,		2				)
                             image_inputs.append(np.random.randint(255     ,		size=(self.num_channels, width, height)     ,		dtype=np.uinta				)				)
  
               if not numpify and not torchify:
                      # PIL expects the channel dimension as last dimension
                      lowercase__       =				[Image.fromarray(np.moveaxis(UpperCamelCase     ,		0     ,		-1				)				) for x in image_inputs]
  
               if torchify:
                      lowercase__       =				[torch.from_numpy(UpperCamelCase				) for x in image_inputs]
  
               return image_inputs
  
  
  
  
  
  
  @require_torch
  @require_vision
  class 						__lowerCAmelCase		(lowercase_						,  unittest.TestCase  ):
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        lowerCAmelCase__      :  Optional[Any]						      =							SwinaSRImageProcessor if is_vision_available() else None
  
  
  
        def    UpperCamelCase__	(self					:					Any				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				SwinaSRImageProcessingTester(self				)
  
  
  
        @property
        def    UpperCamelCase__	(self					:					List[Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               return self.image_processor_tester.prepare_image_processor_dict()
  
  
  
        def    UpperCamelCase__	(self					:					Optional[int]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				self.image_processing_class(**self.image_processor_dict				)
               self.assertTrue(hasattr(UpperCamelCase     ,		'''do_rescale'''				)				)
               self.assertTrue(hasattr(UpperCamelCase     ,		'''rescale_factor'''				)				)
               self.assertTrue(hasattr(UpperCamelCase     ,		'''do_pad'''				)				)
               self.assertTrue(hasattr(UpperCamelCase     ,		'''pad_size'''				)				)
  
  
  
        def    UpperCamelCase__	(self					:					Optional[Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               pass
  
  
  
        def    UpperCamelCase__	(self					:					Any     ,		UpperCamelCase					:					str				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__    ,lowercase__       =				get_image_size(UpperCamelCase				)
               lowercase__       =				self.image_processor_tester.pad_size
  
               lowercase__       =				(old_height // size + 1) * size - old_height
               lowercase__       =				(old_width // size + 1) * size - old_width
               return old_height + pad_height, old_width + pad_width
  
  
  
        def    UpperCamelCase__	(self					:					str				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				self.image_processing_class(**self.image_processor_dict				)
               # create random PIL images
               lowercase__       =				self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase				)
               for image in image_inputs:
                      self.assertIsInstance(UpperCamelCase     ,		Image.Image				)
  
               # Test not batched input
               lowercase__       =				image_processor(image_inputs[0]     ,		return_tensors='''pt'''				).pixel_values
               lowercase__    ,lowercase__       =				self.calculate_expected_size(np.array(image_inputs[0]				)				)
               self.assertEqual(
                   encoded_images.shape     ,		(
                       1,
                       self.image_processor_tester.num_channels,
                       expected_height,
                       expected_width,
                   )     ,		)
  
  
  
        def    UpperCamelCase__	(self					:					Tuple				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				self.image_processing_class(**self.image_processor_dict				)
               # create random numpy tensors
               lowercase__       =				self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase     ,		numpify=UpperCamelCase				)
               for image in image_inputs:
                      self.assertIsInstance(UpperCamelCase     ,		np.ndarray				)
  
               # Test not batched input
               lowercase__       =				image_processor(image_inputs[0]     ,		return_tensors='''pt'''				).pixel_values
               lowercase__    ,lowercase__       =				self.calculate_expected_size(image_inputs[0]				)
               self.assertEqual(
                   encoded_images.shape     ,		(
                       1,
                       self.image_processor_tester.num_channels,
                       expected_height,
                       expected_width,
                   )     ,		)
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					Union[str, Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				self.image_processing_class(**self.image_processor_dict				)
               # create random PyTorch tensors
               lowercase__       =				self.image_processor_tester.prepare_inputs(equal_resolution=UpperCamelCase     ,		torchify=UpperCamelCase				)
               for image in image_inputs:
                      self.assertIsInstance(UpperCamelCase     ,		torch.Tensor				)
  
               # Test not batched input
               lowercase__       =				image_processor(image_inputs[0]     ,		return_tensors='''pt'''				).pixel_values
               lowercase__    ,lowercase__       =				self.calculate_expected_size(image_inputs[0]				)
               self.assertEqual(
                   encoded_images.shape     ,		(
                       1,
                       self.image_processor_tester.num_channels,
                       expected_height,
                       expected_width,
                   )     ,		)
  
  
  
  
  
style_context: 
  
  
  '''simple docstring'''
  
  import argparse
  import collections
  from pathlib import Path
  
  import torch
  from torch.serialization import default_restore_location
  
  from transformers import BertConfig, DPRConfig, DPRContextEncoder, DPRQuestionEncoder, DPRReader
  
  
  lowerCamelCase							:     List[str]								=			collections.namedtuple(
      'CheckpointState', ['model_dict', 'optimizer_dict', 'scheduler_dict', 'offset', 'epoch', 'encoder_params']
  )
  
  def _SCREAMING_SNAKE_CASE   (A ) -> CheckpointState:
  
  
  
  
  
  
         """simple docstring"""
  
  
  
  
  
  
  
         print(f"Reading saved model from {model_file}" )
         lowercase__       =				torch.load(A						,				map_location=lambda A						,				A : default_restore_location(A						,				'''cpu''' ) )
         return CheckpointState(**A )
  class 						__lowerCAmelCase		:
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def __init__(self					:					Any     ,		UpperCamelCase					:					Path				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				src_file
  
  
  
        def    UpperCamelCase__	(self					:					List[str]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               raise NotImplementedError
  
  
  
  
  
  
        @staticmethod
        def    UpperCamelCase__	(UpperCamelCase					:					str     ,		*UpperCamelCase					:					Dict     ,		**UpperCamelCase					:					int				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               if comp_type.startswith('''c'''				):
                      return DPRContextEncoderState(*UpperCamelCase     ,		**UpperCamelCase				)
               if comp_type.startswith('''q'''				):
                      return DPRQuestionEncoderState(*UpperCamelCase     ,		**UpperCamelCase				)
               if comp_type.startswith('''r'''				):
                      return DPRReaderState(*UpperCamelCase     ,		**UpperCamelCase				)
               else:
                      raise ValueError('''Component type must be either \'ctx_encoder\', \'question_encoder\' or \'reader\'.'''				)
  
  
  
  
  
  
  class 						__lowerCAmelCase		(lowercase_  ):
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					Any				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				DPRContextEncoder(DPRConfig(**BertConfig.get_config_dict('''bert-base-uncased'''				)[0]				)				)
               print(f"Loading DPR biencoder from {self.src_file}"				)
               lowercase__       =				load_states_from_checkpoint(self.src_file				)
               lowercase__    ,lowercase__       =				model.ctx_encoder, '''ctx_model.'''
               # Fix changes from https://github.com/huggingface/transformers/commit/614fef1691edb806de976756d4948ecbcd0c0ca3
               lowercase__       =				{'''bert_model.embeddings.position_ids''': model.ctx_encoder.bert_model.embeddings.position_ids}
               for key, value in saved_state.model_dict.items():
                      if key.startswith(UpperCamelCase				):
                             lowercase__       =				key[len(UpperCamelCase				) :]
                             if not key.startswith('''encode_proj.'''				):
                                    lowercase__       =				'''bert_model.''' + key
                             lowercase__       =				value
               encoder.load_state_dict(UpperCamelCase				)
               return model
  
  
  
  
  
  
  class 						__lowerCAmelCase		(lowercase_  ):
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					Union[str, Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				DPRQuestionEncoder(DPRConfig(**BertConfig.get_config_dict('''bert-base-uncased'''				)[0]				)				)
               print(f"Loading DPR biencoder from {self.src_file}"				)
               lowercase__       =				load_states_from_checkpoint(self.src_file				)
               lowercase__    ,lowercase__       =				model.question_encoder, '''question_model.'''
               # Fix changes from https://github.com/huggingface/transformers/commit/614fef1691edb806de976756d4948ecbcd0c0ca3
               lowercase__       =				{'''bert_model.embeddings.position_ids''': model.question_encoder.bert_model.embeddings.position_ids}
               for key, value in saved_state.model_dict.items():
                      if key.startswith(UpperCamelCase				):
                             lowercase__       =				key[len(UpperCamelCase				) :]
                             if not key.startswith('''encode_proj.'''				):
                                    lowercase__       =				'''bert_model.''' + key
                             lowercase__       =				value
               encoder.load_state_dict(UpperCamelCase				)
               return model
  
  
  
  
  
  
  class 						__lowerCAmelCase		(lowercase_  ):
  
  
  
  
  
        '''simple docstring'''
  
  
  
  
  
  
        def    UpperCamelCase__	(self					:					Optional[Any]				):
  
               '''simple docstring'''
  
  
  
  
  
  
  
               lowercase__       =				DPRReader(DPRConfig(**BertConfig.get_config_dict('''bert-base-uncased'''				)[0]				)				)
               print(f"Loading DPR reader from {self.src_file}"				)
               lowercase__       =				load_states_from_checkpoint(self.src_file				)
               # Fix changes from https://github.com/huggingface/transformers/commit/614fef1691edb806de976756d4948ecbcd0c0ca3
               lowercase__       =				{
                   '''encoder.bert_model.embeddings.position_ids''': model.span_predictor.encoder.bert_model.embeddings.position_ids
               }
               for key, value in saved_state.model_dict.items():
                      if key.startswith('''encoder.'''				) and not key.startswith('''encoder.encode_proj'''				):
                             lowercase__       =				'''encoder.bert_model.''' + key[len('''encoder.'''				) :]
                      lowercase__       =				value
               model.span_predictor.load_state_dict(UpperCamelCase				)
               return model
  
  
  
  
  
  
  def _SCREAMING_SNAKE_CASE   (A						,				A						,				A ) -> Optional[Any]:
  
  
  
  
  
  
         """simple docstring"""
  
  
  
  
  
  
  
         lowercase__       =				Path(A )
         dest_dir.mkdir(exist_ok=A )
  
         lowercase__       =				DPRState.from_type(A						,				src_file=A )
         lowercase__       =				dpr_state.load_dpr_model()
         model.save_pretrained(A )
         model.from_pretrained(A )  # sanity check
  
  
  if __name__ == "__main__":
   lowerCamelCase							:     List[Any]								=			argparse.ArgumentParser()
   # Required parameters
   parser.add_argument(
       '--type', type=str, help='Type of the component to convert: \'ctx_encoder\', \'question_encoder\' or \'reader\'.'
   )
   parser.add_argument(
       '--src',
       type=str,
       help=(
           'Path to the dpr checkpoint file. They can be downloaded from the official DPR repo'
           ' https://github.com/facebookresearch/DPR. Note that in the official repo, both encoders are stored in the'
           ' \'retriever\' checkpoints.'
       ),
   )
   parser.add_argument('--dest', type=str, default=None, help='Path to the output PyTorch model directory.')
   lowerCamelCase							:     Optional[int]								=			parser.parse_args()
  
   lowerCamelCase							:     List[str]								=			Path(args.src)
   lowerCamelCase							:     List[Any]								=			f"""converted-{src_file.name}""" if args.dest is None else args.dest
   lowerCamelCase							:     Optional[int]								=			Path(dest_dir)
   assert src_file.exists()
   assert (
       args.type is not None
   ), "Please specify the component type of the DPR model to convert: 'ctx_encoder', 'question_encoder' or 'reader'."
   convert(args.type, src_file, dest_dir)
  
  
  
  
  