diff --git a/tidy3d/plugins/dispersion/fit_fast.py b/tidy3d/plugins/dispersion/fit_fast.py index 71e99bda2..2bbe49a7c 100644 --- a/tidy3d/plugins/dispersion/fit_fast.py +++ b/tidy3d/plugins/dispersion/fit_fast.py @@ -149,10 +149,12 @@ class FastFitterData(AdvancedFastFitterParam): title="eps_inf", description="Value of ``eps_inf``.", ) - poles: ArrayComplex1D = Field( + poles: Optional[ArrayComplex1D] = Field( None, title="Pole frequencies in eV", description="Pole frequencies in eV" ) - residues: ArrayComplex1D = Field(None, title="Residues in eV", description="Residues in eV") + residues: Optional[ArrayComplex1D] = Field( + None, title="Residues in eV", description="Residues in eV" + ) passivity_optimized: Optional[bool] = Field( False, @@ -188,7 +190,11 @@ def _generate_initial_poles(cls, val, values): """Generate initial poles.""" if val is not None: return val - if values["logspacing"] is None or values["smooth"] is None: + if ( + values.get("logspacing") is None + or values.get("smooth") is None + or values.get("num_poles") is None + ): return None omega = values["omega"] num_poles = values["num_poles"] @@ -211,7 +217,7 @@ def _generate_initial_residues(cls, val, values): """Generate initial residues.""" if val is not None: return val - poles = values["poles"] + poles = values.get("poles") if poles is None: return None return np.zeros(len(poles)) @@ -675,6 +681,11 @@ def fit( Best fitting result: (dispersive medium, weighted RMS error). """ + if max_num_poles < min_num_poles: + raise ValidationError( + "Dispersion fitter cannot have 'max_num_poles' less than 'min_num_poles'." + ) + omega = PoleResidue.angular_freq_to_eV(PoleResidue.Hz_to_angular_freq(self.freqs[::-1])) eps = self.eps_data[::-1]