





"""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, prepare_image_inputs


if is_torch_available():
       import torch

if is_vision_available():
       from PIL import Image

       from transformers import OwlViTImageProcessor






class 	__snake_case      (	unittest.TestCase  ):





 """simple docstring"""


 def __init__(					self      ,		__lowerCamelCase      ,		__lowerCamelCase=7      ,		__lowerCamelCase=3      ,		__lowerCamelCase=18      ,		__lowerCamelCase=30      ,		__lowerCamelCase=400      ,		__lowerCamelCase=True      ,		__lowerCamelCase=None      ,		__lowerCamelCase=True      ,		__lowerCamelCase=None      ,		__lowerCamelCase=True      ,		__lowerCamelCase=[0.4_8_1_4_5_4_6_6, 0.4_5_7_8_2_7_5, 0.4_0_8_2_1_0_7_3]      ,		__lowerCamelCase=[0.2_6_8_6_2_9_5_4, 0.2_6_1_3_0_2_5_8, 0.2_7_5_7_7_7_1_1]      ,		__lowerCamelCase=True      ,		):



     '''simple docstring'''




     __A					:		Tuple						=  parent
     __A					:		Optional[int]						=  batch_size
     __A					:		Dict						=  num_channels
     __A					:		str						=  image_size
     __A					:		str						=  min_resolution
     __A					:		Dict						=  max_resolution
     __A					:		int						=  do_resize
     __A					:		Any						=  size if size is not None else {'''height''': 18, '''width''': 18}
     __A					:		Optional[int]						=  do_center_crop
     __A					:		Union[str, Any]						=  crop_size if crop_size is not None else {'''height''': 18, '''width''': 18}
     __A					:		Tuple						=  do_normalize
     __A					:		int						=  image_mean
     __A					:		int						=  image_std
     __A					:		Optional[int]						=  do_convert_rgb







 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     return {
         "do_resize": self.do_resize,
         "size": self.size,
         "do_center_crop": self.do_center_crop,
         "crop_size": self.crop_size,
         "do_normalize": self.do_normalize,
         "image_mean": self.image_mean,
         "image_std": self.image_std,
         "do_convert_rgb": self.do_convert_rgb,
     }






@require_torch
@require_vision
class 	__snake_case      (	SCREAMING_SNAKE_CASE__							,							unittest.TestCase  ):





 """simple docstring"""


 _lowerCamelCase				 =  OwlViTImageProcessor if is_vision_available() else None

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		Tuple						=  OwlViTImageProcessingTester(self						)

 @property
 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     return self.image_processor_tester.prepare_image_processor_dict()

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		int						=  self.image_processing_class(**self.image_processor_dict						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''do_resize'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''size'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''do_center_crop'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''center_crop'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''do_normalize'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''image_mean'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''image_std'''						)						)
     self.assertTrue(hasattr(__lowerCamelCase      ,		'''do_convert_rgb'''						)						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		Optional[Any]						=  self.image_processing_class.from_dict(self.image_processor_dict						)
     self.assertEqual(image_processor.size      ,		{'''height''': 18, '''width''': 18}						)
     self.assertEqual(image_processor.crop_size      ,		{'''height''': 18, '''width''': 18}						)

     __A					:		Union[str, Any]						=  self.image_processing_class.from_dict(self.image_processor_dict      ,		size=42      ,		crop_size=84						)
     self.assertEqual(image_processor.size      ,		{'''height''': 42, '''width''': 42}						)
     self.assertEqual(image_processor.crop_size      ,		{'''height''': 84, '''width''': 84}						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		Optional[int]						=  self.image_processing_class(**self.image_processor_dict						)
     # create random PIL images
     __A					:		str						=  prepare_image_inputs(self.image_processor_tester      ,		equal_resolution=__lowerCamelCase						)

     for image in image_inputs:
         self.assertIsInstance(__lowerCamelCase      ,		Image.Image						)

     # Test not batched input
     __A					:		int						=  image_processing(image_inputs[0]      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             1,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)

     # Test batched
     __A					:		List[str]						=  image_processing(__lowerCamelCase      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             self.image_processor_tester.batch_size,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		Union[str, Any]						=  self.image_processing_class(**self.image_processor_dict						)
     # create random numpy tensors
     __A					:		int						=  prepare_image_inputs(self.image_processor_tester      ,		equal_resolution=__lowerCamelCase      ,		numpify=__lowerCamelCase						)
     for image in image_inputs:
         self.assertIsInstance(__lowerCamelCase      ,		np.ndarray						)

     # Test not batched input
     __A					:		Dict						=  image_processing(image_inputs[0]      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             1,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)

     # Test batched
     __A					:		str						=  image_processing(__lowerCamelCase      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             self.image_processor_tester.batch_size,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)







 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     __A					:		List[str]						=  self.image_processing_class(**self.image_processor_dict						)
     # create random PyTorch tensors
     __A					:		Tuple						=  prepare_image_inputs(self.image_processor_tester      ,		equal_resolution=__lowerCamelCase      ,		torchify=__lowerCamelCase						)
     for image in image_inputs:
         self.assertIsInstance(__lowerCamelCase      ,		torch.Tensor						)

     # Test not batched input
     __A					:		Union[str, Any]						=  image_processing(image_inputs[0]      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             1,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)

     # Test batched
     __A					:		Union[str, Any]						=  image_processing(__lowerCamelCase      ,		return_tensors='''pt'''						).pixel_values
     self.assertEqual(
         encoded_images.shape      ,		(
             self.image_processor_tester.batch_size,
             self.image_processor_tester.num_channels,
             self.image_processor_tester.crop_size['''height'''],
             self.image_processor_tester.crop_size['''width'''],
         )      ,		)











"""simple docstring"""



import unittest
from functools import partial

import torch

from accelerate import Accelerator, debug_launcher
from accelerate.state import AcceleratorState, GradientState
from accelerate.test_utils import require_cpu, require_huggingface_suite
from accelerate.utils import GradientAccumulationPlugin







def 	__lowercase  (     snake_case_						:						Dict=2       ,snake_case_						:						str=True       ,snake_case_						:						Tuple=False		)     ->Any:



    '''simple docstring'''







    __A					:		List[str]						=  Accelerator(step_scheduler_with_optimizer=snake_case_       ,split_batches=snake_case_		)
    __A					:		Dict						=  torch.nn.Linear(2       ,4		)
    __A					:		Tuple						=  torch.optim.AdamW(model.parameters()       ,lr=1.0		)
    __A					:		int						=  torch.optim.lr_scheduler.OneCycleLR(snake_case_       ,max_lr=0.01       ,steps_per_epoch=2       ,epochs=1		)
    __A				, __A				, __A					:		Optional[int]						=  accelerator.prepare(snake_case_       ,snake_case_       ,snake_case_		)

    # Optimizer has stepped
    scheduler.step()
    if step_scheduler_with_optimizer or (num_processes == 1):
        assert (
            scheduler.scheduler.last_epoch == num_processes
        ), F"""Last Epoch ({scheduler.scheduler.last_epoch}) != Num Processes ({num_processes})"""
    else:
        assert (
            scheduler.scheduler.last_epoch != num_processes
        ), F"""Last Epoch ({scheduler.scheduler.last_epoch}) == Num Processes ({num_processes})"""







def 	__lowercase  (     snake_case_						:						str=2       ,snake_case_						:						Dict=True       ,snake_case_						:						Tuple=False		)     ->List[Any]:



    '''simple docstring'''







    __A					:		int						=  Accelerator(step_scheduler_with_optimizer=snake_case_       ,split_batches=snake_case_		)
    __A					:		Any						=  torch.nn.Linear(2       ,4		)
    __A					:		Optional[int]						=  torch.optim.AdamW(model.parameters()       ,lr=1.0		)
    __A					:		Tuple						=  torch.optim.lr_scheduler.LambdaLR(snake_case_       ,lr_lambda=lambda snake_case_		: 1 - n / 10		)
    __A				, __A				, __A					:		Tuple						=  accelerator.prepare(snake_case_       ,snake_case_       ,snake_case_		)

    # Optimizer has stepped
    __A					:		List[Any]						=  False
    scheduler.step()
    __A					:		List[Any]						=  1 - (num_processes if (step_scheduler_with_optimizer and not split_batches) else 1) / 10
    assert (
        scheduler.get_last_lr()[0] == expected_lr
    ), F"""Wrong lr found at first step, expected {expected_lr}, got {scheduler.get_last_lr()[0]}"""

    # Optimizer has not stepped
    __A					:		List[str]						=  True
    scheduler.step()
    if not step_scheduler_with_optimizer:
        __A					:		List[Any]						=  1 - 2 / 10
    assert (
        scheduler.get_last_lr()[0] == expected_lr
    ), F"""Wrong lr found at second step, expected {expected_lr}, got {scheduler.get_last_lr()[0]}"""







def 	__lowercase  (     snake_case_						:						int = 2		)     ->str:



    '''simple docstring'''







    from transformers import get_linear_schedule_with_warmup

    __A					:		Any						=  [1, 2, 4]
    for num_steps in steps:
        __A					:		Tuple						=  GradientAccumulationPlugin(num_steps=snake_case_       ,adjust_scheduler=num_steps > 1		)
        __A					:		Optional[Any]						=  Accelerator(gradient_accumulation_plugin=snake_case_		)
        __A					:		Optional[int]						=  torch.nn.Linear(2       ,4		)
        __A					:		Any						=  torch.optim.AdamW(model.parameters()       ,lr=10.0		)
        __A					:		Dict						=  get_linear_schedule_with_warmup(optimizer=snake_case_       ,num_warmup_steps=0       ,num_training_steps=20		)

        __A				, __A				, __A					:		Union[str, Any]						=  accelerator.prepare(snake_case_       ,snake_case_       ,snake_case_		)

        for i in range(10 * num_steps		):
            with accelerator.accumulate(snake_case_		):
                optimizer.step()
                scheduler.step()

            if i == (10 * num_steps - 2):
                assert (
                    scheduler.get_last_lr()[0] != 0
                ), F"""Wrong lr found at second-to-last step, expected non-zero, got {scheduler.get_last_lr()[0]}. num_steps: {num_steps}"""
        assert (
            scheduler.get_last_lr()[0] == 0
        ), F"""Wrong lr found at last step, expected 0, got {scheduler.get_last_lr()[0]}"""
        GradientState._reset_state()






@require_cpu
class 	__snake_case      (	unittest.TestCase  ):





 """simple docstring"""


 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1						)      ,		num_processes=1						)
     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		split_batches=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1						)      ,		num_processes=1						)
     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		split_batches=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		step_scheduler_with_optimizer=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		step_scheduler_with_optimizer=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     AcceleratorState._reset_state(__lowerCamelCase						)
     debug_launcher(__lowerCamelCase						)
     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		split_batches=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     AcceleratorState._reset_state(__lowerCamelCase						)
     debug_launcher(__lowerCamelCase						)
     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1      ,		split_batches=__lowerCamelCase						)      ,		num_processes=1						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     AcceleratorState._reset_state(__lowerCamelCase						)
     debug_launcher(partial(__lowerCamelCase      ,		step_scheduler_with_optimizer=__lowerCamelCase						)						)

 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     AcceleratorState._reset_state(__lowerCamelCase						)
     debug_launcher(partial(__lowerCamelCase      ,		step_scheduler_with_optimizer=__lowerCamelCase						)						)







 @require_huggingface_suite
 def       UpperCamelCase__(					self						):



     '''simple docstring'''




     AcceleratorState._reset_state(__lowerCamelCase						)
     debug_launcher(partial(__lowerCamelCase      ,		num_processes=1						)						)
     debug_launcher(__lowerCamelCase						)




