

'''simple docstring'''




import sys
import warnings
from os.path import abspath, dirname, join


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
_a					:			int							=    abspath(join(dirname(dirname(dirname(__file__))), 'src'))
sys.path.insert(1, git_repo_path)


# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='ignore', category=FutureWarning)


def    lowerCamelCase__		(    SCREAMING_SNAKE_CASE   : List[Any]    ):
  from transformers.testing_utils import pytest_addoption_shared

  pytest_addoption_shared(__A    )



def    lowerCamelCase__		(    SCREAMING_SNAKE_CASE   : Optional[Any]    ):
  from transformers.testing_utils import pytest_terminal_summary_main

  UpperCAmelCase    				=						terminalreporter.config.getoption('--make-reports'    )
  if make_reports:
    pytest_terminal_summary_main(__A							, id=__A    )










'''simple docstring'''







import functools





def 		_UpperCAmelCase (				__A				: list[int]    ,		__A				: list[int]   ):

				# Validation
				if not isinstance(__A    ,		__A   ) or not all(isinstance(__A    ,		__A   ) for day in days   ):
								raise ValueError('''The parameter days should be a list of integers'''   )

				if len(__A   ) != 3 or not all(isinstance(__A    ,		__A   ) for cost in costs   ):
								raise ValueError('''The parameter costs should be a list of three integers'''   )

				if len(__A   ) == 0:
								return 0

				if min(__A   ) <= 0:
								raise ValueError('''All days elements should be greater than 0'''   )

				if max(__A   ) >= 3_66:
								raise ValueError('''All days elements should be less than 366'''   )

				a_		:	List[Any]									=   set(__A   )

				@functools.cache
				def dynamic_programming(__A				: int   ) -> int:
								if index > 3_65:
												return 0

								if index not in days_set:
												return dynamic_programming(index + 1   )

								return min(
								    costs[0] + dynamic_programming(index + 1   )    ,		costs[1] + dynamic_programming(index + 7   )    ,		costs[2] + dynamic_programming(index + 30   )    ,		)

				return dynamic_programming(1   )


if __name__ == "__main__":
		import doctest

		doctest.testmod()




