def __init__(self, seed=None, g=None, n=None, Lambda=None, mu=None):
    if seed is None:
      # initialization of these values directly is useful for testing purposes.
      if not (g and n and Lambda and mu):
        raise ValueError('If seed is set to none then g, n, Lambda and mu'
                         ' need to be provided.')
      self.n = n
      self.nsquare = n * n
      self.g = g
      self.__lambda = Lambda
      self.__mu = mu
      return
    if not isinstance(seed, str):
      raise ValueError('Expected string type data for seed, but got: %s' %
                       type(seed))
    if not seed:
      raise ValueError('Provided seed cannot be empty')
    prg = ccrypto.PRG(seed)
    n_len = 0
    while n_len != N_LENGTH:
      p = number.GetPrime(HALF_N_LENGTH, prg.GetNextBytes)
      q = number.GetPrime(HALF_N_LENGTH, prg.GetNextBytes)
      self.n = p * q
      n_len = len(bin(self.n)) - 2  # take 2 out for '0b' prefix
    self.nsquare = self.n * self.n
    # Simpler paillier variant with g=n+1 results in lamda equal to phi
    # and mu is phi inverse mod n.
    self.g = self.n + 1
    phi_n = (p-1) * (q-1)
    self.__lambda = phi_n
    self.__mu = number.Inverse(phi_n, self.n)
With an exception instance, iterate over its super classes (by mro)
dataset/ETHPy150Open google/encrypted-bigquery-client/src/paillier.py/Paillier.__init__--crossover with--dataset/ETHPy150Open kmike/tornado-slacker/slacker/serialization.py/find_nearest_pickleable_exception