




import numpy as np
from numpy import floataa
from numpy.typing import NDArray




def        __SCREAMING_SNAKE_CASE (	lowercase_       ,  lowercase_   )							->						NDArray[floataa]:

    """simple docstring"""


    __UpperCamelCase		,   __UpperCamelCase			=    np.shape(lowercase_   )

    __UpperCamelCase			=    np.zeros((rows, 1)       ,  dtype=lowercase_   )
    for row in reversed(range(lowercase_   )   ):
        __UpperCamelCase			=    0
        for col in range(row + 1       ,  lowercase_   ):
            total += coefficients[row, col] * x[col]

        __UpperCamelCase			=    (vector[row] - total) / coefficients[row, row]

    return x




def        __SCREAMING_SNAKE_CASE (	lowercase_       ,  lowercase_   )							->						NDArray[floataa]:

    """simple docstring"""


    __UpperCamelCase		,   __UpperCamelCase			=    np.shape(lowercase_   )
    if rows != columns:
        return np.array(()       ,  dtype=lowercase_   )

    # augmented matrix
    __UpperCamelCase			=    np.concatenate((coefficients, vector)       ,  axis=1   )
    __UpperCamelCase			=    augmented_mat.astype('''float64'''   )

    # scale the matrix leaving it triangular
    for row in range(rows - 1   ):
        __UpperCamelCase			=    augmented_mat[row, row]
        for col in range(row + 1       ,  lowercase_   ):
            __UpperCamelCase			=    augmented_mat[col, row] / pivot
            augmented_mat[col, :] -= factor * augmented_mat[row, :]

    __UpperCamelCase			=    retroactive_resolution(
        augmented_mat[:, 0:columns]       ,  augmented_mat[:, columns : columns + 1]   )

    return x


if __name__ == "__main__":
 import doctest

 doctest.testmod()









def      snake_case__							(  lowerCAmelCase_,       lowerCAmelCase_     ):





     """simple docstring"""







     if not isinstance(lowerCAmelCase_,       lowerCAmelCase_     ):
          raise TypeError('plaintext must be a string'     )
     if not isinstance(lowerCAmelCase_,       lowerCAmelCase_     ):
          raise TypeError('key must be a string'     )

     if not plaintext:
          raise ValueError('plaintext is empty'     )
     if not key:
          raise ValueError('key is empty'     )

     key += plaintext
     SCREAMING_SNAKE_CASE 		=plaintext.lower()
     SCREAMING_SNAKE_CASE 		=key.lower()
     SCREAMING_SNAKE_CASE 		=0
     SCREAMING_SNAKE_CASE 		=0
     SCREAMING_SNAKE_CASE 		=''
     while plaintext_iterator < len(lowerCAmelCase_     ):
          if (
              ord(plaintext[plaintext_iterator]     ) < 97
              or ord(plaintext[plaintext_iterator]     ) > 122
          ):
               ciphertext += plaintext[plaintext_iterator]
               plaintext_iterator += 1
          elif ord(key[key_iterator]     ) < 97 or ord(key[key_iterator]     ) > 122:
               key_iterator += 1
          else:
               ciphertext += chr(
                   (
                       (ord(plaintext[plaintext_iterator]     ) - 97 + ord(key[key_iterator]     ))
                       - 97
                   )
                   % 26
                   + 97     )
               key_iterator += 1
               plaintext_iterator += 1
     return ciphertext







def      snake_case__							(  lowerCAmelCase_,       lowerCAmelCase_     ):





     """simple docstring"""







     if not isinstance(lowerCAmelCase_,       lowerCAmelCase_     ):
          raise TypeError('ciphertext must be a string'     )
     if not isinstance(lowerCAmelCase_,       lowerCAmelCase_     ):
          raise TypeError('key must be a string'     )

     if not ciphertext:
          raise ValueError('ciphertext is empty'     )
     if not key:
          raise ValueError('key is empty'     )

     SCREAMING_SNAKE_CASE 		=key.lower()
     SCREAMING_SNAKE_CASE 		=0
     SCREAMING_SNAKE_CASE 		=0
     SCREAMING_SNAKE_CASE 		=''
     while ciphertext_iterator < len(lowerCAmelCase_     ):
          if (
              ord(ciphertext[ciphertext_iterator]     ) < 97
              or ord(ciphertext[ciphertext_iterator]     ) > 122
          ):
               plaintext += ciphertext[ciphertext_iterator]
          else:
               plaintext += chr(
                   (ord(ciphertext[ciphertext_iterator]     ) - ord(key[key_iterator]     )) % 26
                   + 97     )
               key += chr(
                   (ord(ciphertext[ciphertext_iterator]     ) - ord(key[key_iterator]     )) % 26
                   + 97     )
               key_iterator += 1
          ciphertext_iterator += 1
     return plaintext


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 _lowerCamelCase							=int(input("Type 1 to encrypt or 2 to decrypt:"))
 if operation == 1:
  _lowerCamelCase							=input("Typeplaintext to be encrypted:\n")
  _lowerCamelCase							=input("Type the key:\n")
  print(encrypt(plaintext, key))
 elif operation == 2:
  _lowerCamelCase							=input("Type the ciphertext to be decrypted:\n")
  _lowerCamelCase							=input("Type the key:\n")
  print(decrypt(ciphertext, key))
 decrypt("jsqqs avvwo", "coffee")

