






def     _snake_case    (__lowercase):

   # bit count represents no. of bits in the gray code
   if bit_count < 0:
      raise ValueError('The given input must be positive')

   # get the generated string sequence
   UpperCamelCase_									=     gray_code_sequence_string(__lowercase)
   #
   # convert them to integers
   for i in range(len(__lowercase)):
      UpperCamelCase_									=     int(sequence[i]    ,      2)

   return sequence






def     _snake_case    (__lowercase):

   # The approach is a recursive one
   # Base case achieved when either n = 0 or n=1
   if bit_count == 0:
      return ["0"]

   if bit_count == 1:
      return ["0", "1"]

   UpperCamelCase_									=     1 << bit_count  # defines the length of the sequence
   # 1<< n is equivalent to 2^n

   # recursive answer will generate answer for n-1 bits
   UpperCamelCase_									=     gray_code_sequence_string(bit_count - 1)

   UpperCamelCase_									=     []

   # append 0 to first half of the smaller sequence generated
   for i in range(seq_len // 2):
      UpperCamelCase_									=     '0' + smaller_sequence[i]
      sequence.append(__lowercase)

   # append 1 to second half ... start from the end of the list
   for i in reversed(range(seq_len // 2)):
      UpperCamelCase_									=     '1' + smaller_sequence[i]
      sequence.append(__lowercase)

   return sequence


if __name__ == "__main__":
 import doctest

 doctest.testmod()













from sympy import diff, lambdify, symbols
from sympy.functions import *  # noqa: F403






def     _snake_case    (__lowercase    ,      __lowercase    ,      __lowercase = "x"    ,      __lowercase = 10**-10    ,      __lowercase = 1    ,      ):
   UpperCamelCase_									=     symbols(__lowercase)
   UpperCamelCase_									=     lambdify(__lowercase    ,      __lowercase)
   UpperCamelCase_									=     lambdify(__lowercase    ,      diff(__lowercase    ,      __lowercase))

   UpperCamelCase_									=     starting_point

   while True:
      if diff_function(__lowercase) != 0:
         UpperCamelCase_									=     prev_guess - multiplicity * func(__lowercase) / diff_function(
             __lowercase)
      else:
         raise ZeroDivisionError('Could not find root') from None

      # Precision is checked by comparing the difference of consecutive guesses
      if abs(next_guess - prev_guess) < precision:
         return next_guess

      UpperCamelCase_									=     next_guess


# Let's Execute
if __name__ == "__main__":
 # Find root of trigonometric function
 # Find value of pi
 print(f'The root of sin(x) = 0 is {newton_raphson("sin(x)", 2)}')

 # Find root of polynomial
 # Find fourth Root of 5
 print(f'The root of x**4 - 5 = 0 is {newton_raphson("x**4 -5", 0.4 +5J)}')

 # Find value of e
 print(
     """The root of log(y) - 1 = 0 is """,
     f'{newton_raphson("log(y) - 1", 2, variable="y")}',
 )

 # Exponential Roots
 print(
     """The root of exp(x) - 1 = 0 is""",
     f'{newton_raphson("exp(x) - 1", 1_0, precision=0.005)}',
 )

 # Find root of cos(x)
 print(f'The root of cos(x) = 0 is {newton_raphson("cos(x)", 0)}')





