


"""simple docstring"""






import argparse
import os
import re


# All paths are set with the intent you should run this script from the root of the repo with the command
# python utils/check_dummies.py
lowercase  		=			"""src/transformers"""

# Matches is_xxx_available()
lowercase  		=			re.compile(r"""is\_([a-z_]*)_available()""")
# Matches from xxx import bla
lowercase  		=			re.compile(r"""\s+from\s+\S*\s+import\s+([^\(\s].*)\n""")
lowercase  		=			re.compile(r"""^\s+if\s+not\s+\(?is\_[a-z_]*\_available\(\)""")


lowercase  		=			"""
{0} = None
"""

lowercase  		=			"""
class {0}(metaclass=DummyObject):
    _backends = {1}

    def __init__(self, *args, **kwargs):
        requires_backends(self, {1})
"""


lowercase  		=			"""
def {0}(*args, **kwargs):
    requires_backends({0}, {1})
"""



def 			A__		(					_UpperCAmelCase    :      List[Any]	)							->	List[Any]:

	'''simple docstring'''


	if _re_test_backend.search(_UpperCAmelCase	) is None:
		return None
	snake_case__  :						int		=      [b[0] for b in _re_backend.findall(_UpperCAmelCase	)]
	backends.sort()
	return "_and_".join(_UpperCAmelCase	)



def 			A__		(					)							->	Optional[int]:

	'''simple docstring'''


	with open(os.path.join(_UpperCAmelCase				,    "__init__.py"	)				,    "r"				,    encoding="utf-8"				,    newline="\n"	) as f:
		snake_case__  :						Dict		=      f.readlines()

	# Get to the point we do the actual imports for type checking
	snake_case__  :						Union[str, Any]		=      0
	while not lines[line_index].startswith("if TYPE_CHECKING"	):
		line_index += 1

	snake_case__  :						List[str]		=      {}
	# Go through the end of the file
	while line_index < len(_UpperCAmelCase	):
		# If the line is an if is_backend_available, we grab all objects associated.
		snake_case__  :						Optional[int]		=      find_backend(lines[line_index]	)
		if backend is not None:
			while not lines[line_index].startswith("    else:"	):
				line_index += 1
			line_index += 1

			snake_case__  :						Any		=      []
			# Until we unindent, add backend objects to the list
			while len(lines[line_index]	) <= 1 or lines[line_index].startswith(" " * 8	):
				snake_case__  :						List[Any]		=      lines[line_index]
				snake_case__  :						List[Any]		=      _re_single_line_import.search(_UpperCAmelCase	)
				if single_line_import_search is not None:
					objects.extend(single_line_import_search.groups()[0].split(", "	)	)
				elif line.startswith(" " * 12	):
					objects.append(line[12:-2]	)
				line_index += 1

			snake_case__  :						Dict		=      objects
		else:
			line_index += 1

	return backend_specific_objects



def 			A__		(					_UpperCAmelCase    :      Any				,    _UpperCAmelCase    :      str	)							->	Dict:

	'''simple docstring'''


	if name.isupper():
		return DUMMY_CONSTANT.format(_UpperCAmelCase	)
	elif name.islower():
		return DUMMY_FUNCTION.format(_UpperCAmelCase				,    _UpperCAmelCase	)
	else:
		return DUMMY_CLASS.format(_UpperCAmelCase				,    _UpperCAmelCase	)



def 			A__		(					_UpperCAmelCase    :      Dict=None	)							->	Optional[int]:

	'''simple docstring'''


	if backend_specific_objects is None:
		snake_case__  :						List[Any]		=      read_init()
	# For special correspondence backend to module name as used in the function requires_modulename
	snake_case__  :						Union[str, Any]		=      {}

	for backend, objects in backend_specific_objects.items():
		snake_case__  :						List[str]		=      "[" + ", ".join(F"""\"{b}\"""" for b in backend.split("_and_"	)	) + "]"
		snake_case__  :						int		=      "# This file is autogenerated by the command `make fix-copies`, do not edit.\n"
		dummy_file += "from ..utils import DummyObject, requires_backends\n\n"
		dummy_file += "\n".join([create_dummy_object(_UpperCAmelCase				,    _UpperCAmelCase	) for o in objects]	)
		snake_case__  :						Union[str, Any]		=      dummy_file

	return dummy_files



def 			A__		(					_UpperCAmelCase    :      str=False	)							->	Tuple:

	'''simple docstring'''


	snake_case__  :						Optional[int]		=      create_dummy_files()
	# For special correspondence backend to shortcut as used in utils/dummy_xxx_objects.py
	snake_case__  :						List[Any]		=      {"torch": "pt"}

	# Locate actual dummy modules and read their content.
	snake_case__  :						Any		=      os.path.join(_UpperCAmelCase				,    "utils"	)
	snake_case__  :						List[str]		=      {
	    backend: os.path.join(_UpperCAmelCase				,    F"""dummy_{short_names.get(_UpperCAmelCase				,    _UpperCAmelCase	)}_objects.py"""	)
	    for backend in dummy_files.keys()
	}

	snake_case__  :						Union[str, Any]		=      {}
	for backend, file_path in dummy_file_paths.items():
		if os.path.isfile(_UpperCAmelCase	):
			with open(_UpperCAmelCase				,    "r"				,    encoding="utf-8"				,    newline="\n"	) as f:
				snake_case__  :						Union[str, Any]		=      f.read()
		else:
			snake_case__  :						Optional[int]		=      ""

	for backend in dummy_files.keys():
		if dummy_files[backend] != actual_dummies[backend]:
			if overwrite:
				print(
				    F"""Updating transformers.utils.dummy_{short_names.get(_UpperCAmelCase				,    _UpperCAmelCase	)}_objects.py as the main """
				    "__init__ has new objects."	)
				with open(dummy_file_paths[backend]				,    "w"				,    encoding="utf-8"				,    newline="\n"	) as f:
					f.write(dummy_files[backend]	)
			else:
				raise ValueError(
				    "The main __init__ has objects that are not present in "
				    F"""transformers.utils.dummy_{short_names.get(_UpperCAmelCase				,    _UpperCAmelCase	)}_objects.py. Run `make fix-copies` """
				    "to fix this."	)


if __name__ == "__main__":
					lowercase  		=			argparse.ArgumentParser()
					parser.add_argument("""--fix_and_overwrite""", action="""store_true""", help="""Whether to fix inconsistencies.""")
					lowercase  		=			parser.parse_args()

					check_dummies(args.fix_and_overwrite)









"""simple docstring"""







def 	lowercase     (							A_ = 100    ,  A_ = 100			)-> int:
  '''simple docstring'''







  return max(
      sum(int(A_			) for x in str(base**power			)			)
      for base in range(A_			)
      for power in range(A_			)			)


# Tests
if __name__ == "__main__":
 import doctest

 doctest.testmod()






