


"""simple docstring"""





from __future__ import annotations

from decimal import Decimal

from numpy import array


def      _snake_case						(						_snake_case				:			Any			):
      lowerCAmelCase					:	str       =   Decimal

      # Check if the provided matrix has 2 rows and 2 columns
      # since this implementation only works for 2x2 matrices
      if len(_snake_case			) == 2 and len(matrix[0]			) == 2 and len(matrix[1]			) == 2:
            # Calculate the determinant of the matrix
            lowerCAmelCase					:	Union[str, Any]       =   float(
                d(matrix[0][0]			) * d(matrix[1][1]			) - d(matrix[1][0]			) * d(matrix[0][1]			)			)
            if determinant == 0:
                  raise ValueError('''This matrix has no inverse.'''			)

            # Creates a copy of the matrix with swapped positions of the elements
            lowerCAmelCase					:	Tuple       =   [[0.0, 0.0], [0.0, 0.0]]
            lowerCAmelCase,      lowerCAmelCase					:	Optional[int]       =   matrix[1][1], matrix[0][0]
            lowerCAmelCase,      lowerCAmelCase					:	List[Any]       =   -matrix[1][0], -matrix[0][1]

            # Calculate the inverse of the matrix
            return [
                [(float(d(_snake_case			)			) / determinant) or 0.0 for n in row] for row in swapped_matrix
            ]
      elif (
          len(_snake_case			) == 3
          and len(matrix[0]			) == 3
          and len(matrix[1]			) == 3
          and len(matrix[2]			) == 3
      ):
            # Calculate the determinant of the matrix using Sarrus rule
            lowerCAmelCase					:	str       =   float(
                (
                    (d(matrix[0][0]			) * d(matrix[1][1]			) * d(matrix[2][2]			))
                    + (d(matrix[0][1]			) * d(matrix[1][2]			) * d(matrix[2][0]			))
                    + (d(matrix[0][2]			) * d(matrix[1][0]			) * d(matrix[2][1]			))
                )
                - (
                    (d(matrix[0][2]			) * d(matrix[1][1]			) * d(matrix[2][0]			))
                    + (d(matrix[0][1]			) * d(matrix[1][0]			) * d(matrix[2][2]			))
                    + (d(matrix[0][0]			) * d(matrix[1][2]			) * d(matrix[2][1]			))
                )			)
            if determinant == 0:
                  raise ValueError('''This matrix has no inverse.'''			)

            # Creating cofactor matrix
            lowerCAmelCase					:	List[Any]       =   [
                [d(0.0			), d(0.0			), d(0.0			)],
                [d(0.0			), d(0.0			), d(0.0			)],
                [d(0.0			), d(0.0			), d(0.0			)],
            ]
            lowerCAmelCase					:	List[Any]       =   (d(matrix[1][1]			) * d(matrix[2][2]			)) - (
                d(matrix[1][2]			) * d(matrix[2][1]			)
            )
            lowerCAmelCase					:	int       =   -(
                (d(matrix[1][0]			) * d(matrix[2][2]			)) - (d(matrix[1][2]			) * d(matrix[2][0]			))
            )
            lowerCAmelCase					:	str       =   (d(matrix[1][0]			) * d(matrix[2][1]			)) - (
                d(matrix[1][1]			) * d(matrix[2][0]			)
            )
            lowerCAmelCase					:	str       =   -(
                (d(matrix[0][1]			) * d(matrix[2][2]			)) - (d(matrix[0][2]			) * d(matrix[2][1]			))
            )
            lowerCAmelCase					:	Optional[Any]       =   (d(matrix[0][0]			) * d(matrix[2][2]			)) - (
                d(matrix[0][2]			) * d(matrix[2][0]			)
            )
            lowerCAmelCase					:	Any       =   -(
                (d(matrix[0][0]			) * d(matrix[2][1]			)) - (d(matrix[0][1]			) * d(matrix[2][0]			))
            )
            lowerCAmelCase					:	Union[str, Any]       =   (d(matrix[0][1]			) * d(matrix[1][2]			)) - (
                d(matrix[0][2]			) * d(matrix[1][1]			)
            )
            lowerCAmelCase					:	int       =   -(
                (d(matrix[0][0]			) * d(matrix[1][2]			)) - (d(matrix[0][2]			) * d(matrix[1][0]			))
            )
            lowerCAmelCase					:	Optional[Any]       =   (d(matrix[0][0]			) * d(matrix[1][1]			)) - (
                d(matrix[0][1]			) * d(matrix[1][0]			)
            )

            # Transpose the cofactor matrix (Adjoint matrix)
            lowerCAmelCase					:	Optional[Any]       =   array(_snake_case			)
            for i in range(3			):
                  for j in range(3			):
                        lowerCAmelCase					:	Dict       =   cofactor_matrix[j][i]

        # Inverse of the matrix using the formula (1/determinant) * adjoint matrix
            lowerCAmelCase					:	Optional[Any]       =   array(_snake_case			)
            for i in range(3			):
                  for j in range(3			):
                        inverse_matrix[i][j] /= d(_snake_case			)

        # Calculate the inverse of the matrix
            return [[float(d(_snake_case			)			) or 0.0 for n in row] for row in inverse_matrix]
      raise ValueError('''Please provide a matrix of size 2x2 or 3x3.'''			)






"""simple docstring"""





def      _snake_case						(						_snake_case				:			int ,   _snake_case				:			int			):
      return base * power(_snake_case ,   (exponent - 1)			) if exponent else 1


if __name__ == "__main__":
 print('''Raise base to the power of exponent using recursion...''')
 snake_case__		:     Union[str, Any]    				=				int(input('''Enter the base: ''').strip())
 snake_case__		:     Optional[Any]    				=				int(input('''Enter the exponent: ''').strip())
 snake_case__		:     Any    				=				power(base, abs(exponent))
 if exponent < 0:  # power() does not properly deal w/ negative exponents
  snake_case__		:     Dict    				=				1 / result
 print(f"""{base} to the power of {exponent} is {result}""")


