def __init__(self, target_eigenvalue, init_state_vect, dgl_coefficients, domain): if not all([isinstance(state, (int, float, long)) for state in init_state_vect]) \ and len(init_state_vect) == 4 and isinstance(init_state_vect, (list, tuple)): raise TypeError if not len(dgl_coefficients) == 3 and isinstance(dgl_coefficients, (list, tuple)) \ and all([callable(coef) or isinstance(coef, (int, float, long)) for coef in dgl_coefficients]): raise TypeError if not isinstance(domain, (np.ndarray, list)) \ or not all([isinstance(num, (int, long, float)) for num in domain]): raise TypeError if isinstance(target_eigenvalue, complex): self._eig_val_real = target_eigenvalue.real self._eig_val_imag = target_eigenvalue.imag elif isinstance(target_eigenvalue, (int, long, float)): self._eig_val_real = target_eigenvalue self._eig_val_imag = 0. else: raise TypeError self._init_state_vect = init_state_vect self._a2, self._a1, self._a0 = [ut._convert_to_function(coef) for coef in dgl_coefficients] self._domain = domain state_vect = self._transform_eigenfunction() self._transf_eig_func_real, self._transf_d_eig_func_real = state_vect[0:2] self._transf_eig_func_imag, self._transf_d_eig_func_imag = state_vect[2:4] Function.__init__(self, self._phi, nonzero=(domain[0], domain[-1]), derivative_handles=[self._d_phi])
def __init__(self, omega, param, spatial_domain, norm_fac=1.): self._omega = omega self._param = param self.norm_fac = norm_fac a2, a1, a0, _, _ = self._param self._eta = -a1 / 2. / a2 Function.__init__(self, self._phi, nonzero=spatial_domain, derivative_handles=[self._d_phi, self._dd_phi])
def __init__(self, function, M, b, l, scale_func=None, nested_lambda=False): if not callable(function): raise TypeError if not isinstance(M, np.ndarray) or len(M.shape) != 2 or np.diff(M.shape) != 0 or M.shape[0]%1 != 0: raise TypeError if not all([isinstance(num, (int, long, float)) for num in [b, l]]): raise TypeError self.function = function self.M = M self.b = b self.l = l if scale_func == None: self.scale_func = lambda z: 1 else: self.scale_func = scale_func self.n = int(M.shape[0]/2) self.l0 = l/self.n self.z_disc = np.array([(i+1)*self.l0 for i in range(self.n)]) if not nested_lambda: # iteration mode Function.__init__(self, self._call_transformed_func, nonzero=(0, l), derivative_handles=[]) else: # nested lambda mode self.x_func_vec = list() for i in range(self.n): self.x_func_vec.append(AddMulFunction( partial(lambda z, k: self.scale_func(k*self.l0 + z)*self.function(k*self.l0 + z), k=i))) for i in range(self.n): self.x_func_vec.append(AddMulFunction( partial(lambda z, k: self.scale_func(self.l - k*self.l0 - z)*self.function(self.l - k*self.l0 - z), k=i))) self.y_func_vec = np.dot(self.x_func_vec, np.transpose(M)) Function.__init__(self, self._call_transformed_func_vec, nonzero=(0, l), derivative_handles=[])
def __init__(self, om, param, spatial_domain, phi_0=1): self._om = om self._param = param self.phi_0 = phi_0 Function.__init__(self, self._phi, nonzero=spatial_domain, derivative_handles=[self._d_phi, self._dd_phi])