




import hashlib
import importlib.util
import json
import os
import pathlib
from types import ModuleType

import pytest
import requests

__magic_name__     :     List[str]  							=					pathlib.Path.cwd().joinpath("""project_euler""")
__magic_name__     :     Dict  							=					pathlib.Path.cwd().joinpath(
    """scripts""", """project_euler_answers.json"""
)

with open(PROJECT_EULER_ANSWERS_PATH) as file_handle:
      __magic_name__     :     dict[str, str]  							=					json.load(file_handle)
def 		a_       (   __lowerCAmelCase							):

  '''simple docstring'''





  lowerCAmelCase__								=			importlib.util.spec_from_file_location(file_path.name      ,   str(__lowerCAmelCase							)							)
  lowerCAmelCase__								=			importlib.util.module_from_spec(__lowerCAmelCase							)  # type: ignore
  spec.loader.exec_module(__lowerCAmelCase							)  # type: ignore
  return module
def 		a_       (   ):

  '''simple docstring'''





  lowerCAmelCase__								=			[]
  for problem_dir_path in PROJECT_EULER_DIR_PATH.iterdir():
    if problem_dir_path.is_file() or problem_dir_path.name.startswith('''_'''							):
      continue
    for file_path in problem_dir_path.iterdir():
      if file_path.suffix != ".py" or file_path.name.startswith(('''_''', '''test''')							):
        continue
      solution_file_paths.append(__lowerCAmelCase							)
  return solution_file_paths
def 		a_       (   ):

  '''simple docstring'''





  with open(os.environ['''GITHUB_EVENT_PATH''']							) as file:
    lowerCAmelCase__								=			json.load(__lowerCAmelCase							)
  return event["pull_request"]["url"] + "/files"
def 		a_       (   ):

  '''simple docstring'''





  lowerCAmelCase__								=			[]
  lowerCAmelCase__								=			{
      '''Accept''': '''application/vnd.github.v3+json''',
      '''Authorization''': '''token ''' + os.environ['''GITHUB_TOKEN'''],
  }
  lowerCAmelCase__								=			requests.get(get_files_url()      ,   headers=__lowerCAmelCase							).json()
  for file in files:
    lowerCAmelCase__								=			pathlib.Path.cwd().joinpath(file['''filename''']							)
    if (
        filepath.suffix != ".py"
        or filepath.name.startswith(('''_''', '''test''')							)
        or not filepath.name.startswith('''sol'''							)
    ):
      continue
    solution_file_paths.append(__lowerCAmelCase							)
  return solution_file_paths
def 		a_       (   ):

  '''simple docstring'''





  if os.environ.get('''CI'''							) and os.environ.get('''GITHUB_EVENT_NAME'''							) == "pull_request":
    # Return only if there are any, otherwise default to all solutions
    if filepaths := added_solution_file_path():
      return filepaths
  return all_solution_file_paths()




@pytest.mark.parametrize(
    '''solution_path'''      ,   collect_solution_file_paths()      ,   ids=lambda __lowerCAmelCase							: F"""{path.parent.name}/{path.name}"""      ,   )
def 		a_       (   __lowerCAmelCase							):

  '''simple docstring'''





  lowerCAmelCase__								=			solution_path.parent.name[8:].zfill(3							)
  lowerCAmelCase__								=			PROBLEM_ANSWERS[problem_number]
  lowerCAmelCase__								=			convert_path_to_module(__lowerCAmelCase							)
  lowerCAmelCase__								=			str(solution_module.solution()							)  # type: ignore
  lowerCAmelCase__								=			hashlib.shaaaa(answer.encode()							).hexdigest()
  assert (
      answer == expected
  ), F"""Expected solution to {problem_number} to have hash {expected}, got {answer}"""







def 		a_       (   __lowerCAmelCase      ,   __lowerCAmelCase							):
  assert isinstance(__lowerCAmelCase      ,   __lowerCAmelCase							), F"""The input value of [set_a={set_a}] is not a set"""
  assert isinstance(__lowerCAmelCase      ,   __lowerCAmelCase							), F"""The input value of [set_b={set_b}] is not a set"""

  return {a + b for a in set_a for b in set_b}


if __name__ == "__main__":
      from doctest import testmod

      testmod()

