




'''simple docstring'''







from __future__ import annotations

from typing import Any







def 	_A			(   *UpperCAmelCase	):






   '''simple docstring'''







   if all(_check_not_integer(UpperCAmelCase	) for m in matrix_s	):
      for i in matrix_s[1:]:
         _verify_matrix_sizes(matrix_s[0]			,UpperCAmelCase	)
      return [[sum(UpperCAmelCase	) for t in zip(*UpperCAmelCase	)] for m in zip(*UpperCAmelCase	)]
   raise TypeError('Expected a matrix, got int/list instead'	)







def 	_A			(   UpperCAmelCase			,UpperCAmelCase	):






   '''simple docstring'''







   if (
       _check_not_integer(UpperCAmelCase	)
       and _check_not_integer(UpperCAmelCase	)
       and _verify_matrix_sizes(UpperCAmelCase			,UpperCAmelCase	)
   ):
      return [[i - j for i, j in zip(*UpperCAmelCase	)] for m in zip(UpperCAmelCase			,UpperCAmelCase	)]
   raise TypeError('Expected a matrix, got int/list instead'	)







def 	_A			(   UpperCAmelCase			,UpperCAmelCase	):






   '''simple docstring'''







   return [[x * n for x in row] for row in matrix]







def 	_A			(   UpperCAmelCase			,UpperCAmelCase	):






   '''simple docstring'''







   if _check_not_integer(UpperCAmelCase	) and _check_not_integer(UpperCAmelCase	):
      A__     , A__         =    _verify_matrix_sizes(UpperCAmelCase			,UpperCAmelCase	)

   if cols[0] != rows[1]:
      A__         =    (
          'Cannot multiply matrix of dimensions '
          F"""({rows[0]},{cols[0]}) and ({rows[1]},{cols[1]})"""
      )
      raise ValueError(UpperCAmelCase	)
   return [
       [sum(m * n for m, n in zip(UpperCAmelCase			,UpperCAmelCase	)	) for j in zip(*UpperCAmelCase	)] for i in matrix_a
   ]







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   A__         =    int(UpperCAmelCase	)
   return [[int(row == column	) for column in range(UpperCAmelCase	)] for row in range(UpperCAmelCase	)]







def 	_A			(   UpperCAmelCase			,UpperCAmelCase = True	):






   '''simple docstring'''







   if _check_not_integer(UpperCAmelCase	):
      if return_map:
         return map(UpperCAmelCase			,zip(*UpperCAmelCase	)	)
      else:
         return list(map(UpperCAmelCase			,zip(*UpperCAmelCase	)	)	)
   raise TypeError('Expected a matrix, got int/list instead'	)







def 	_A			(   UpperCAmelCase			,UpperCAmelCase			,UpperCAmelCase	):






   '''simple docstring'''







   A__         =    matrix[:row] + matrix[row + 1 :]
   return [row[:column] + row[column + 1 :] for row in minor]







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   if len(UpperCAmelCase	) == 1:
      return matrix[0][0]

   return sum(
       x * determinant(minor(UpperCAmelCase			,0			,UpperCAmelCase	)	) * (-1) ** i
       for i, x in enumerate(matrix[0]	)	)







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   A__         =    determinant(UpperCAmelCase	)
   if det == 0:
      return None

   A__         =    [
       [determinant(minor(UpperCAmelCase			,UpperCAmelCase			,UpperCAmelCase	)	) for j in range(len(UpperCAmelCase	)	)]
       for i in range(len(UpperCAmelCase	)	)
   ]

   A__         =    [
       [x * (-1) ** (row + col) for col, x in enumerate(matrix_minor[row]	)]
       for row in range(len(UpperCAmelCase	)	)
   ]
   A__         =    list(transpose(UpperCAmelCase	)	)
   return scalar_multiply(UpperCAmelCase			,1 / det	)







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   return not isinstance(UpperCAmelCase			,UpperCAmelCase	) and not isinstance(matrix[0]			,UpperCAmelCase	)







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   return len(UpperCAmelCase	), len(matrix[0]	)







def 	_A			(   UpperCAmelCase			,UpperCAmelCase	):






   '''simple docstring'''







   A__         =    _shape(UpperCAmelCase	) + _shape(UpperCAmelCase	)
   if shape[0] != shape[3] or shape[1] != shape[2]:
      A__         =    (
          'operands could not be broadcast together with shape '
          F"""({shape[0], shape[1]}), ({shape[2], shape[3]})"""
      )
      raise ValueError(UpperCAmelCase	)
   return (shape[0], shape[2]), (shape[1], shape[3])







def 	_A			(   ):






   '''simple docstring'''







   A__         =    [[12, 10], [3, 9]]
   A__         =    [[3, 4], [7, 4]]
   A__         =    [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34], [41, 42, 43, 44]]
   A__         =    [[3, 0, 2], [2, 0, -2], [0, 1, 1]]
   print(F"""Add Operation, {add(UpperCAmelCase			,UpperCAmelCase	) = } \n"""	)
   print(
       F"""Multiply Operation, {multiply(UpperCAmelCase			,UpperCAmelCase	) = } \n"""			,)
   print(F"""Identity: {identity(5	)}\n"""	)
   print(F"""Minor of {matrix_c} = {minor(UpperCAmelCase			,1			,2	)} \n"""	)
   print(F"""Determinant of {matrix_b} = {determinant(UpperCAmelCase	)} \n"""	)
   print(F"""Inverse of {matrix_d} = {inverse(UpperCAmelCase	)}\n"""	)


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    main()








'''simple docstring'''







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

import pytest
import requests

lowerCAmelCase_    	=							pathlib.Path.cwd().joinpath('''project_euler''')
lowerCAmelCase_    	=							pathlib.Path.cwd().joinpath(
    '''scripts''', '''project_euler_answers.json'''
)

with open(PROJECT_EULER_ANSWERS_PATH) as file_handle:
    lowerCAmelCase_    	=							json.load(file_handle)







def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







   A__         =    importlib.util.spec_from_file_location(file_path.name			,str(UpperCAmelCase	)	)
   A__         =    importlib.util.module_from_spec(UpperCAmelCase	)  # type: ignore
   spec.loader.exec_module(UpperCAmelCase	)  # type: ignore
   return module







def 	_A			(   ):






   '''simple docstring'''







   A__         =    []
   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(UpperCAmelCase	)
   return solution_file_paths







def 	_A			(   ):






   '''simple docstring'''







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







def 	_A			(   ):






   '''simple docstring'''







   A__         =    []
   A__         =    {
       'Accept': 'application/vnd.github.v3+json',
       'Authorization': 'token ' + os.environ['GITHUB_TOKEN'],
   }
   A__         =    requests.get(get_files_url()			,headers=UpperCAmelCase	).json()
   for file in files:
      A__         =    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(UpperCAmelCase	)
   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 UpperCAmelCase	: F"""{path.parent.name}/{path.name}"""			,)
def 	_A			(   UpperCAmelCase	):






   '''simple docstring'''







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


