def set_unitary(self, V): """Parse input and set the unitary operator attributes. This also sets up the potential function attributes in the process. """ if isinstance(V, str): try: if V.strip().replace(".", "").replace("-", "").replace("e", "").isnumeric(): self.V_name = "" self.V_latex = str(np.round(float(V), 2)) if float(V) == 0: V = 1e-30 V_f = float(V) * np.ones([self.N]) self.U_t = UnitaryOperator1D(np.copy(V_f)) self.V_x = 0.0 * V_f else: V_f = scale(float(V) * np.ones([self.N]), 15) self.V_x = V_f self.U_t = UnitaryOperator1D(np.copy(V_f)) self.V_latex = "%sk" % (self.V_latex) if V_f[0] > 0\ else " %sk" % (self.V_latex) self.V_params = {} self.V_base = None else: V = V.replace("^", "**") f = Function(V, "x") self.V = lambda x: f(x, *f.get_tupled_default_values()) self.V_x = scale(self.V(self.x), 15) self.V_name = str(f) self.V_latex = "$" + f.multiply_latex_string("k") + "$" self.U_t = UnitaryOperator1D(self.V) self.V_base = f self.V_params = f.get_enumerated_default_values() except (TypeError, AttributeError, SyntaxError, ValueError, NameError) as E: print(E) elif isinstance(V, np.ndarray): self.V_params = {} self.V_base = None self.V = None self.V_x = scale(V, 15) self.V_name = "V(x)" self.V_latex = "$V(x)$" self.U_t = UnitaryOperator1D(V) else: print("Unable to parse input") if hasattr(self, "lines"): self.update_draw_potential()
def set_wavefunction(self, psi, normalize=True): """Parse input to set the wavefunction attributes. """ if isinstance(psi, str): try: if psi.strip().replace(".", "").replace("-", "").replace("e", "").isnumeric(): psi_x = float(psi) * np.ones([self.N]) self.psi_name = psi self.psi_latex = "$%s$" % psi self.psi = Wavefunction1D(psi_x) self._msg = "$\psi(x, 0) =$ %s" % self.psi_latex self._msg_i = 45 if normalize: self.psi.normalize() self.psi_base = None self.psi_params = {} else: psi = psi.replace("^", "**") f = Function(psi, "x") self.psi_base = f psi_func = lambda x: f(x, *f.get_tupled_default_values()) self.psi_name = str(f) self.psi_latex = "$" + f.latex_repr + "$" self.psi = Wavefunction1D(psi_func) self.psi_params = f.get_enumerated_default_values() self._msg = r"$\psi(x, 0) =$ %s" % self.psi_latex self._msg_i = 45 if normalize: self.psi.normalize() except (TypeError, AttributeError, SyntaxError, ValueError, NameError) as E: print(E) elif isinstance(psi, np.ndarray): # self.psi_base = None # self.psi_params = {} self.psi = Wavefunction1D(psi) self.psi_name = "wavefunction" self.psi_latex = "$\psi(x)$" if normalize: self.psi.normalize() else: print("Unable to parse input")