




'''simple docstring'''



import argparse
from collections import defaultdict

import yaml


UpperCAmelCase_							:	int	     =		'''docs/source/en/_toctree.yml'''







def       _UpperCamelCase			(_lowerCamelCase				:  Tuple						)-> List[str]:




     '''simple docstring'''





     __snake_case            =	defaultdict(_lowerCamelCase						)
     __snake_case            =	[]
     __snake_case            =	[]
     for doc in doc_list:
          if "local" in doc:
               counts[doc["local"]] += 1

          if doc["title"].lower() == "overview":
               overview_doc.append({'''local''': doc['''local'''], '''title''': doc['''title''']}						)
          else:
               new_doc_list.append(_lowerCamelCase						)

     __snake_case            =	new_doc_list
     __snake_case            =	[key for key, value in counts.items() if value > 1]

     __snake_case            =	[]
     for duplicate_key in duplicates:
          __snake_case            =	list({doc['''title'''] for doc in doc_list if doc['''local'''] == duplicate_key}						)
          if len(_lowerCamelCase						) > 1:
               raise ValueError(
                   f'''{duplicate_key} is present several times in the documentation table of content at '''
                   '''`docs/source/en/_toctree.yml` with different *Title* values. Choose one of those and remove the '''
                   '''others.'''						)
          # Only add this once
          new_doc.append({'''local''': duplicate_key, '''title''': titles[0]}						)

     # Add none duplicate-keys
     new_doc.extend([doc for doc in doc_list if '''local''' not in counts or counts[doc['''local''']] == 1]						)
     __snake_case            =	sorted(_lowerCamelCase ,						key=lambda _lowerCamelCase						: s["title"].lower()						)

     # "overview" gets special treatment and is always first
     if len(_lowerCamelCase						) > 1:
          raise ValueError('''{doc_list} has two \'overview\' docs which is not allowed.'''						)

     overview_doc.extend(_lowerCamelCase						)

     # Sort
     return overview_doc







def       _UpperCamelCase			(_lowerCamelCase				:  Tuple=False						)-> Any:




     '''simple docstring'''





     with open(_lowerCamelCase ,						encoding='''utf-8'''						) as f:
          __snake_case            =	yaml.safe_load(f.read()						)

     # Get to the API doc
     __snake_case            =	0
     while content[api_idx]["title"] != "API":
          api_idx += 1
     __snake_case            =	content[api_idx]['''sections''']

     # Then to the model doc
     __snake_case            =	0
     while api_doc[scheduler_idx]["title"] != "Schedulers":
          scheduler_idx += 1

     __snake_case            =	api_doc[scheduler_idx]['''sections''']
     __snake_case            =	clean_doc_toc(_lowerCamelCase						)

     __snake_case            =	False
     if new_scheduler_doc != scheduler_doc:
          __snake_case            =	True
          if overwrite:
               __snake_case            =	new_scheduler_doc

     if diff:
          if overwrite:
               __snake_case            =	api_doc
               with open(_lowerCamelCase ,						'''w''' ,						encoding='''utf-8'''						) as f:
                    f.write(yaml.dump(_lowerCamelCase ,						allow_unicode=_lowerCamelCase						)						)
          else:
               raise ValueError(
                   '''The model doc part of the table of content is not properly sorted, run `make style` to fix this.'''						)







def       _UpperCamelCase			(_lowerCamelCase				:  int=False						)-> Optional[int]:




     '''simple docstring'''





     with open(_lowerCamelCase ,						encoding='''utf-8'''						) as f:
          __snake_case            =	yaml.safe_load(f.read()						)

     # Get to the API doc
     __snake_case            =	0
     while content[api_idx]["title"] != "API":
          api_idx += 1
     __snake_case            =	content[api_idx]['''sections''']

     # Then to the model doc
     __snake_case            =	0
     while api_doc[pipeline_idx]["title"] != "Pipelines":
          pipeline_idx += 1

     __snake_case            =	False
     __snake_case            =	api_doc[pipeline_idx]['''sections''']
     __snake_case            =	[]

     # sort sub pipeline docs
     for pipeline_doc in pipeline_docs:
          if "section" in pipeline_doc:
               __snake_case            =	pipeline_doc['''section''']
               __snake_case            =	clean_doc_toc(_lowerCamelCase						)
               if overwrite:
                    __snake_case            =	new_sub_pipeline_doc
          new_pipeline_docs.append(_lowerCamelCase						)

     # sort overall pipeline doc
     __snake_case            =	clean_doc_toc(_lowerCamelCase						)

     if new_pipeline_docs != pipeline_docs:
          __snake_case            =	True
          if overwrite:
               __snake_case            =	new_pipeline_docs

     if diff:
          if overwrite:
               __snake_case            =	api_doc
               with open(_lowerCamelCase ,						'''w''' ,						encoding='''utf-8'''						) as f:
                    f.write(yaml.dump(_lowerCamelCase ,						allow_unicode=_lowerCamelCase						)						)
          else:
               raise ValueError(
                   '''The model doc part of the table of content is not properly sorted, run `make style` to fix this.'''						)


if __name__ == "__main__":
     UpperCAmelCase_							:	Optional[Any]	     =		argparse.ArgumentParser()
     parser.add_argument('''--fix_and_overwrite''', action='''store_true''', help='''Whether to fix inconsistencies.''')
     UpperCAmelCase_							:	Dict	     =		parser.parse_args()

     check_scheduler_doc(args.fix_and_overwrite)
     check_pipeline_doc(args.fix_and_overwrite)












'''simple docstring'''



def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     __snake_case            =	abs(_lowerCamelCase						)
     __snake_case            =	0
     while n > 0:
          res += n % 10
          n //= 10
     return res







def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     __snake_case            =	abs(_lowerCamelCase						)
     return n if n < 10 else n % 10 + sum_of_digits(n // 10						)







def       _UpperCamelCase			(_lowerCamelCase				:  int						)-> int:




     '''simple docstring'''





     return sum(int(_lowerCamelCase						) for c in str(abs(_lowerCamelCase						)						)						)







def       _UpperCamelCase			()-> None:




     '''simple docstring'''





     from collections.abc import Callable
     from timeit import timeit

     def benchmark_a_function(_lowerCamelCase				:  Callable ,						_lowerCamelCase				:  int						) -> None:
          __snake_case            =	f'''{func.__name__}({value})'''
          __snake_case            =	timeit(f'''__main__.{call}''' ,						setup='''import __main__'''						)
          print(f'''{call:56} = {func(_lowerCamelCase						)} -- {timing:.4f} seconds'''						)

     for value in (26_21_44, 11_25_89_99_06_84_26_24, 1_26_76_50_60_02_28_22_94_01_49_67_03_20_53_76):
          for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
               benchmark_a_function(_lowerCamelCase ,						_lowerCamelCase						)
          print()


if __name__ == "__main__":
     import doctest

     doctest.testmod()
     benchmark()






