
import math
import unittest


def 			UpperCamelCase					(    __lowerCamelCase     : int    ):
       assert isinstance(__lowerCamelCase				,					__lowerCamelCase    ) and (
           number >= 0
       ), "'number' must been an int and positive"

       if 1 < number < 4:
              # 2 and 3 are primes
              return True
       elif number < 2 or number % 2 == 0 or number % 3 == 0:
              # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes
              return False

       # All primes number are in format of 6k +/- 1
       for i in range(5				,					int(math.sqrt(__lowerCamelCase    ) + 1    )				,					6    ):
              if number % i == 0 or number % (i + 2) == 0:
                     return False
       return True






class   UpperCAmelCase		(						unittest.TestCase ):



   def 				_SCREAMING_SNAKE_CASE   (self		:					Optional[Any] )		->	Any:


          '''simple docstring'''


          self.assertTrue(is_prime(2 ) )
          self.assertTrue(is_prime(3 ) )
          self.assertTrue(is_prime(5 ) )
          self.assertTrue(is_prime(7 ) )
          self.assertTrue(is_prime(11 ) )
          self.assertTrue(is_prime(13 ) )
          self.assertTrue(is_prime(17 ) )
          self.assertTrue(is_prime(19 ) )
          self.assertTrue(is_prime(23 ) )
          self.assertTrue(is_prime(29 ) )



   def 				_SCREAMING_SNAKE_CASE   (self		:					int )		->	List[str]:


          '''simple docstring'''


          with self.assertRaises(snake_case__ ):
                 is_prime(-19 )
          self.assertFalse(
              is_prime(0 )    ,						"Zero doesn't have any positive factors, primes must have exactly two."    ,						)
          self.assertFalse(
              is_prime(1 )    ,						"One only has 1 positive factor, primes must have exactly two."    ,						)
          self.assertFalse(is_prime(2 * 2 ) )
          self.assertFalse(is_prime(2 * 3 ) )
          self.assertFalse(is_prime(3 * 3 ) )
          self.assertFalse(is_prime(3 * 5 ) )
          self.assertFalse(is_prime(3 * 5 * 7 ) )


if __name__ == "__main__":
   unittest.main()








'''simple docstring'''






from __future__ import annotations

from decimal import Decimal

from numpy import array


def 		_A     (    A__      ):






 """simple docstring"""



 __lowercase							  = Decimal

 # Check if the provided matrix has 2 rows and 2 columns
 # since this implementation only works for 2x2 matrices
 if len(A__      ) == 2 and len(matrix[0]      ) == 2 and len(matrix[1]      ) == 2:
  # Calculate the determinant of the matrix
  __lowercase							  = 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
  __lowercase							  = [[0.0, 0.0], [0.0, 0.0]]
  __lowercase  ,	__lowercase							  = matrix[1][1], matrix[0][0]
  __lowercase  ,	__lowercase							  = -matrix[1][0], -matrix[0][1]

  # Calculate the inverse of the matrix
  return [
      [(float(d(A__      )      ) / determinant) or 0.0 for n in row] for row in swapped_matrix
  ]
 elif (
     len(A__      ) == 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
  __lowercase							  = 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
  __lowercase							  = [
      [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      )],
  ]
  __lowercase							  = (d(matrix[1][1]      ) * d(matrix[2][2]      )) - (
      d(matrix[1][2]      ) * d(matrix[2][1]      )
  )
  __lowercase							  = -(
      (d(matrix[1][0]      ) * d(matrix[2][2]      )) - (d(matrix[1][2]      ) * d(matrix[2][0]      ))
  )
  __lowercase							  = (d(matrix[1][0]      ) * d(matrix[2][1]      )) - (
      d(matrix[1][1]      ) * d(matrix[2][0]      )
  )
  __lowercase							  = -(
      (d(matrix[0][1]      ) * d(matrix[2][2]      )) - (d(matrix[0][2]      ) * d(matrix[2][1]      ))
  )
  __lowercase							  = (d(matrix[0][0]      ) * d(matrix[2][2]      )) - (
      d(matrix[0][2]      ) * d(matrix[2][0]      )
  )
  __lowercase							  = -(
      (d(matrix[0][0]      ) * d(matrix[2][1]      )) - (d(matrix[0][1]      ) * d(matrix[2][0]      ))
  )
  __lowercase							  = (d(matrix[0][1]      ) * d(matrix[1][2]      )) - (
      d(matrix[0][2]      ) * d(matrix[1][1]      )
  )
  __lowercase							  = -(
      (d(matrix[0][0]      ) * d(matrix[1][2]      )) - (d(matrix[0][2]      ) * d(matrix[1][0]      ))
  )
  __lowercase							  = (d(matrix[0][0]      ) * d(matrix[1][1]      )) - (
      d(matrix[0][1]      ) * d(matrix[1][0]      )
  )

  # Transpose the cofactor matrix (Adjoint matrix)
  __lowercase							  = array(A__      )
  for i in range(3      ):
   for j in range(3      ):
    __lowercase							  = cofactor_matrix[j][i]

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

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

