code: import numpy as np
  import matplotlib.pyplot as plt
  from one_a import one_a
  from one_b import one_b
  from one_c import one_c
  from one_d import one_d
  from one_e import one_e
  
  
  def random_generator(seed, m=2 ** 64 - 1, a=2349543, c=913842, a1=21, a2=35, a3=4, a4=4294957665):
      """
          Generates psuedorandom numbers with a combination of (M)LCC, 64 bit shift, and MWC
      :param seed: Seed to use
      :param m: Determines period of the MLCC
      :param a: For the MLCC
      :param c: For the MLCC
      :param a1: For the first bit shift
      :param a2: For the second bit shift
      :param a3: For the third bit shift
      :param a4: For the MWC
      :return:
      """
  
      # First linear congruential generator
      # While true, so the generator never stops making new numbers
      # This is used to make sure teh XOR shift is 64 bit
      bit_64 = 0xffffffffffffffff
      while True:
          # This is MLCC part
          generated_number = (a * seed + c) % m
          # Now bit shift
          generated_number = generated_number ^ (generated_number >> a1) & bit_64
          generated_number = generated_number ^ (generated_number << a2) & bit_64
          generated_number = generated_number ^ (generated_number >> a3) & bit_64
  
          # Now MWC part
          mwc_out = a4 * (generated_number & (2 ** 32 - 1)) + (generated_number >> 32)
  
          seed = mwc_out  # set the seed to a new number, so a different number generated next time
          mwc_out = mwc_out / m
  
          if mwc_out > 1.:
              # Have to make it between 1 and 0, so mod 1. makes sure its between 0 and 1 now
              close_to_final = mwc_out % 1.
          else:
              close_to_final = mwc_out
  
          yield close_to_final
  
  
  def all_one(rand_gen):
      one_a(rand_gen)
      plt.cla()
      one_b(rand_gen)
      plt.cla()
      one_c(rand_gen)
      plt.cla()
      one_d(rand_gen)
      plt.cla()
      one_e(rand_gen)
      plt.cla()
  
apis: matplotlib.pyplot.cla