tidy3d.plugins.dispersion.AdvancedFastFitterParam
tidy3d.plugins.dispersion.AdvancedFastFitterParam#
- class tidy3d.plugins.dispersion.AdvancedFastFitterParam#
Bases:
tidy3d.components.base.Tidy3dBaseModel
Advanced fast fitter parameters.
- Parameters
loss_bounds (Tuple[float, float] = (0, inf)) – Bounds (lower, upper) on Im[eps]. Default corresponds to only passivity. A lower bound of 0 or greater ensures passivity. To fit a gain medium without additional constraints, use
loss_bounds=(-np.inf, np.inf)
. Increasing the lower bound could help with simulation stability. A finite upper bound may be helpful when fitting lossless materials. In this case, consider also increasing the weight for fitting the imaginary part.weights (Optional[Tuple[NonNegativeFloat, NonNegativeFloat]] = None) – Weights (real, imag) in objective function for fitting. The weights are applied to the real and imaginary parts of the permittivity epsilon. The weights will be rescaled together so they average to 1. If
None
, the weights are calculated according to the typical value of the real and imaginary part, so that the relative error in the real and imaginary part of the fit should be comparable. More precisely, the RMS valuerms
of the real and imaginary parts are calculated, and the default weights are 1 / max(rms
,RMS_MIN
). Changing this can be helpful if fitting either the real or imaginary part is more important than the other.show_progress (bool = True) – Whether to show progress bar during fitter run.
show_unweighted_rms (bool = False) – Whether to show unweighted RMS error in addition to the default weighted RMS error. Requires
td.config.logging_level = "INFO"
.relaxed (Optional[bool] = None) – Whether to use relaxed fitting algorithm, which has better pole relocation properties. If
None
, will try both original and relaxed algorithms.smooth (Optional[bool] = None) – Whether to use real starting poles, which can help when fitting smooth data. If
None
, will try both real and complex starting poles.logspacing (Optional[bool] = None) – Whether to space the poles logarithmically. If
None
, will try both log and linear spacing.num_iters (PositiveInt = 20) – Number of iterations of the fitting algorithm. Make this smaller to speed up fitter, or make it larger to try to improve fit.
passivity_num_iters (PositiveInt = 50) – Number of loss bounds enforcement iterations of the fitting algorithm. Make this smaller to speed up fitter. There will be a warning if this value is too small. To fit a gain medium, use the
loss_bounds
parameter instead.slsqp_constraint_scale (PositiveFloat = 1e+35) – Passivity constraint is weighted relative to fit quality by this factor, before running passivity optimization using the SLSQP algorithm. There will be a warning if this value is too small.
Show JSON schema
{ "title": "AdvancedFastFitterParam", "description": "Advanced fast fitter parameters.\n\nParameters\n----------\nloss_bounds : Tuple[float, float] = (0, inf)\n Bounds (lower, upper) on Im[eps]. Default corresponds to only passivity. A lower bound of 0 or greater ensures passivity. To fit a gain medium without additional constraints, use ``loss_bounds=(-np.inf, np.inf)``. Increasing the lower bound could help with simulation stability. A finite upper bound may be helpful when fitting lossless materials. In this case, consider also increasing the weight for fitting the imaginary part.\nweights : Optional[Tuple[NonNegativeFloat, NonNegativeFloat]] = None\n Weights (real, imag) in objective function for fitting. The weights are applied to the real and imaginary parts of the permittivity epsilon. The weights will be rescaled together so they average to 1. If ``None``, the weights are calculated according to the typical value of the real and imaginary part, so that the relative error in the real and imaginary part of the fit should be comparable. More precisely, the RMS value ``rms`` of the real and imaginary parts are calculated, and the default weights are 1 / max(``rms``, ``RMS_MIN``). Changing this can be helpful if fitting either the real or imaginary part is more important than the other.\nshow_progress : bool = True\n Whether to show progress bar during fitter run.\nshow_unweighted_rms : bool = False\n Whether to show unweighted RMS error in addition to the default weighted RMS error. Requires ``td.config.logging_level = \"INFO\"``.\nrelaxed : Optional[bool] = None\n Whether to use relaxed fitting algorithm, which has better pole relocation properties. If ``None``, will try both original and relaxed algorithms.\nsmooth : Optional[bool] = None\n Whether to use real starting poles, which can help when fitting smooth data. If ``None``, will try both real and complex starting poles.\nlogspacing : Optional[bool] = None\n Whether to space the poles logarithmically. If ``None``, will try both log and linear spacing.\nnum_iters : PositiveInt = 20\n Number of iterations of the fitting algorithm. Make this smaller to speed up fitter, or make it larger to try to improve fit.\npassivity_num_iters : PositiveInt = 50\n Number of loss bounds enforcement iterations of the fitting algorithm. Make this smaller to speed up fitter. There will be a warning if this value is too small. To fit a gain medium, use the ``loss_bounds`` parameter instead.\nslsqp_constraint_scale : PositiveFloat = 1e+35\n Passivity constraint is weighted relative to fit quality by this factor, before running passivity optimization using the SLSQP algorithm. There will be a warning if this value is too small.", "type": "object", "properties": { "loss_bounds": { "title": "Loss bounds", "description": "Bounds (lower, upper) on Im[eps]. Default corresponds to only passivity. A lower bound of 0 or greater ensures passivity. To fit a gain medium without additional constraints, use ``loss_bounds=(-np.inf, np.inf)``. Increasing the lower bound could help with simulation stability. A finite upper bound may be helpful when fitting lossless materials. In this case, consider also increasing the weight for fitting the imaginary part.", "default": [ 0, Infinity ], "type": "array", "minItems": 2, "maxItems": 2, "items": [ { "type": "number" }, { "type": "number" } ] }, "weights": { "title": "Weights", "description": "Weights (real, imag) in objective function for fitting. The weights are applied to the real and imaginary parts of the permittivity epsilon. The weights will be rescaled together so they average to 1. If ``None``, the weights are calculated according to the typical value of the real and imaginary part, so that the relative error in the real and imaginary part of the fit should be comparable. More precisely, the RMS value ``rms`` of the real and imaginary parts are calculated, and the default weights are 1 / max(``rms``, ``RMS_MIN``). Changing this can be helpful if fitting either the real or imaginary part is more important than the other.", "type": "array", "minItems": 2, "maxItems": 2, "items": [ { "type": "number", "minimum": 0 }, { "type": "number", "minimum": 0 } ] }, "show_progress": { "title": "Show progress bar", "description": "Whether to show progress bar during fitter run.", "default": true, "type": "boolean" }, "show_unweighted_rms": { "title": "Show unweighted RMS", "description": "Whether to show unweighted RMS error in addition to the default weighted RMS error. Requires ``td.config.logging_level = \"INFO\"``.", "default": false, "type": "boolean" }, "relaxed": { "title": "Relaxed", "description": "Whether to use relaxed fitting algorithm, which has better pole relocation properties. If ``None``, will try both original and relaxed algorithms.", "type": "boolean" }, "smooth": { "title": "Smooth", "description": "Whether to use real starting poles, which can help when fitting smooth data. If ``None``, will try both real and complex starting poles.", "type": "boolean" }, "logspacing": { "title": "Log spacing", "description": "Whether to space the poles logarithmically. If ``None``, will try both log and linear spacing.", "type": "boolean" }, "num_iters": { "title": "Number of iterations", "description": "Number of iterations of the fitting algorithm. Make this smaller to speed up fitter, or make it larger to try to improve fit.", "default": 20, "exclusiveMinimum": 0, "type": "integer" }, "passivity_num_iters": { "title": "Number of loss bounds enforcement iterations", "description": "Number of loss bounds enforcement iterations of the fitting algorithm. Make this smaller to speed up fitter. There will be a warning if this value is too small. To fit a gain medium, use the ``loss_bounds`` parameter instead.", "default": 50, "exclusiveMinimum": 0, "type": "integer" }, "slsqp_constraint_scale": { "title": "Scale factor for SLSQP", "description": "Passivity constraint is weighted relative to fit quality by this factor, before running passivity optimization using the SLSQP algorithm. There will be a warning if this value is too small.", "default": 1e+35, "exclusiveMinimum": 0, "type": "number" }, "type": { "title": "Type", "default": "AdvancedFastFitterParam", "enum": [ "AdvancedFastFitterParam" ], "type": "string" } }, "additionalProperties": false }
- attribute logspacing: Optional[bool] = None#
Whether to space the poles logarithmically. If
None
, will try both log and linear spacing.
- attribute loss_bounds: Tuple[float, float] = (0, inf)#
Bounds (lower, upper) on Im[eps]. Default corresponds to only passivity. A lower bound of 0 or greater ensures passivity. To fit a gain medium without additional constraints, use
loss_bounds=(-np.inf, np.inf)
. Increasing the lower bound could help with simulation stability. A finite upper bound may be helpful when fitting lossless materials. In this case, consider also increasing the weight for fitting the imaginary part.- Validated by
_max_loss_geq_min_loss
- attribute num_iters: pydantic.types.PositiveInt = 20#
Number of iterations of the fitting algorithm. Make this smaller to speed up fitter, or make it larger to try to improve fit.
- Constraints
exclusiveMinimum = 0
- attribute passivity_num_iters: pydantic.types.PositiveInt = 50#
Number of loss bounds enforcement iterations of the fitting algorithm. Make this smaller to speed up fitter. There will be a warning if this value is too small. To fit a gain medium, use the
loss_bounds
parameter instead.- Constraints
exclusiveMinimum = 0
- attribute relaxed: Optional[bool] = None#
Whether to use relaxed fitting algorithm, which has better pole relocation properties. If
None
, will try both original and relaxed algorithms.
- attribute show_progress: bool = True#
Whether to show progress bar during fitter run.
- attribute show_unweighted_rms: bool = False#
Whether to show unweighted RMS error in addition to the default weighted RMS error. Requires
td.config.logging_level = "INFO"
.
- attribute slsqp_constraint_scale: pydantic.types.PositiveFloat = 1e+35#
Passivity constraint is weighted relative to fit quality by this factor, before running passivity optimization using the SLSQP algorithm. There will be a warning if this value is too small.
- Constraints
exclusiveMinimum = 0
- attribute smooth: Optional[bool] = None#
Whether to use real starting poles, which can help when fitting smooth data. If
None
, will try both real and complex starting poles.
- attribute weights: Tuple[pydantic.types.NonNegativeFloat, pydantic.types.NonNegativeFloat] = None#
Weights (real, imag) in objective function for fitting. The weights are applied to the real and imaginary parts of the permittivity epsilon. The weights will be rescaled together so they average to 1. If
None
, the weights are calculated according to the typical value of the real and imaginary part, so that the relative error in the real and imaginary part of the fit should be comparable. More precisely, the RMS valuerms
of the real and imaginary parts are calculated, and the default weights are 1 / max(rms
,RMS_MIN
). Changing this can be helpful if fitting either the real or imaginary part is more important than the other.- Validated by
_weights_average_to_one
- classmethod add_type_field() None #
Automatically place “type” field with model name in the model field dictionary.
- classmethod construct(_fields_set: Optional[SetStr] = None, **values: Any) Model #
Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values
- copy(**kwargs) tidy3d.components.base.Tidy3dBaseModel #
Copy a Tidy3dBaseModel. With
deep=True
as default.
- dict(*, include: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, exclude: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, by_alias: bool = False, skip_defaults: Optional[bool] = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny #
Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.
- classmethod dict_from_file(fname: str, group_path: Optional[str] = None) dict #
Loads a dictionary containing the model from a .yaml, .json, or .hdf5 file.
- Parameters
fname (str) – Full path to the .yaml or .json file to load the
Tidy3dBaseModel
from.group_path (str, optional) – Path to a group inside the file to use as the base level.
- Returns
A dictionary containing the model.
- Return type
dict
Example
>>> simulation = Simulation.from_file(fname='folder/sim.json')
- classmethod dict_from_hdf5(fname: str, group_path: str = '', custom_decoders: Optional[List[Callable]] = None) dict #
Loads a dictionary containing the model contents from a .hdf5 file.
- Parameters
fname (str) – Full path to the .hdf5 file to load the
Tidy3dBaseModel
from.group_path (str, optional) – Path to a group inside the file to selectively load a sub-element of the model only.
custom_decoders (List[Callable]) – List of functions accepting (fname: str, group_path: str, model_dict: dict, key: str, value: Any) that store the value in the model dict after a custom decoding.
- Returns
Dictionary containing the model.
- Return type
dict
Example
>>> sim_dict = Simulation.dict_from_hdf5(fname='folder/sim.hdf5')
- classmethod dict_from_json(fname: str) dict #
Load dictionary of the model from a .json file.
- Parameters
fname (str) – Full path to the .json file to load the
Tidy3dBaseModel
from.- Returns
A dictionary containing the model.
- Return type
dict
Example
>>> sim_dict = Simulation.dict_from_json(fname='folder/sim.json')
- classmethod dict_from_yaml(fname: str) dict #
Load dictionary of the model from a .yaml file.
- Parameters
fname (str) – Full path to the .yaml file to load the
Tidy3dBaseModel
from.- Returns
A dictionary containing the model.
- Return type
dict
Example
>>> sim_dict = Simulation.dict_from_yaml(fname='folder/sim.yaml')
- classmethod from_file(fname: str, group_path: Optional[str] = None, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel #
Loads a
Tidy3dBaseModel
from .yaml, .json, or .hdf5 file.- Parameters
fname (str) – Full path to the .yaml or .json file to load the
Tidy3dBaseModel
from.group_path (str, optional) – Path to a group inside the file to use as the base level. Only for
.hdf5
files. Starting / is optional.**parse_obj_kwargs – Keyword arguments passed to either pydantic’s
parse_obj
function when loading model.
- Returns
An instance of the component class calling load.
- Return type
Tidy3dBaseModel
Example
>>> simulation = Simulation.from_file(fname='folder/sim.json')
- classmethod from_hdf5(fname: str, group_path: str = '', custom_decoders: Optional[List[Callable]] = None, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel #
Loads
Tidy3dBaseModel
instance to .hdf5 file.- Parameters
fname (str) – Full path to the .hdf5 file to load the
Tidy3dBaseModel
from.group_path (str, optional) – Path to a group inside the file to selectively load a sub-element of the model only. Starting / is optional.
custom_decoders (List[Callable]) – List of functions accepting (fname: str, group_path: str, model_dict: dict, key: str, value: Any) that store the value in the model dict after a custom decoding.
**parse_obj_kwargs – Keyword arguments passed to pydantic’s
parse_obj
method.
Example
>>> simulation = Simulation.from_file(fname='folder/sim.hdf5')
- classmethod from_json(fname: str, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel #
Load a
Tidy3dBaseModel
from .json file.- Parameters
fname (str) – Full path to the .json file to load the
Tidy3dBaseModel
from.- Returns
Tidy3dBaseModel
– An instance of the component class calling load.**parse_obj_kwargs – Keyword arguments passed to pydantic’s
parse_obj
method.
Example
>>> simulation = Simulation.from_json(fname='folder/sim.json')
- classmethod from_orm(obj: Any) Model #
- classmethod from_yaml(fname: str, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel #
Loads
Tidy3dBaseModel
from .yaml file.- Parameters
fname (str) – Full path to the .yaml file to load the
Tidy3dBaseModel
from.**parse_obj_kwargs – Keyword arguments passed to pydantic’s
parse_obj
method.
- Returns
An instance of the component class calling from_yaml.
- Return type
Tidy3dBaseModel
Example
>>> simulation = Simulation.from_yaml(fname='folder/sim.yaml')
- classmethod generate_docstring() str #
Generates a docstring for a Tidy3D mode and saves it to the __doc__ of the class.
- classmethod get_sub_model(group_path: str, model_dict: dict | list) dict #
Get the sub model for a given group path.
- get_submodels_by_hash() Dict[int, List[Union[str, Tuple[str, int]]]] #
Return a dictionary of this object’s sub-models indexed by their hash values.
- static get_tuple_group_name(index: int) str #
Get the group name of a tuple element.
- static get_tuple_index(key_name: str) int #
Get the index into the tuple based on its group name.
- help(methods: bool = False) None #
Prints message describing the fields and methods of a
Tidy3dBaseModel
.- Parameters
methods (bool = False) – Whether to also print out information about object’s methods.
Example
>>> simulation.help(methods=True)
- json(*, include: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, exclude: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, by_alias: bool = False, skip_defaults: Optional[bool] = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Optional[Callable[[Any], Any]] = None, models_as_dict: bool = True, **dumps_kwargs: Any) unicode #
Generate a JSON representation of the model, include and exclude arguments as per dict().
encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().
- classmethod parse_file(path: Union[str, pathlib.Path], *, content_type: unicode = None, encoding: unicode = 'utf8', proto: pydantic.parse.Protocol = None, allow_pickle: bool = False) Model #
- classmethod parse_obj(obj: Any) Model #
- classmethod parse_raw(b: Union[str, bytes], *, content_type: unicode = None, encoding: unicode = 'utf8', proto: pydantic.parse.Protocol = None, allow_pickle: bool = False) Model #
- classmethod schema(by_alias: bool = True, ref_template: unicode = '#/definitions/{model}') DictStrAny #
- classmethod schema_json(*, by_alias: bool = True, ref_template: unicode = '#/definitions/{model}', **dumps_kwargs: Any) unicode #
- to_file(fname: str) None #
Exports
Tidy3dBaseModel
instance to .yaml, .json, or .hdf5 file- Parameters
fname (str) – Full path to the .yaml or .json file to save the
Tidy3dBaseModel
to.
Example
>>> simulation.to_file(fname='folder/sim.json')
- to_hdf5(fname: str, custom_encoders: Optional[List[Callable]] = None) None #
Exports
Tidy3dBaseModel
instance to .hdf5 file.- Parameters
fname (str) – Full path to the .hdf5 file to save the
Tidy3dBaseModel
to.custom_encoders (List[Callable]) – List of functions accepting (fname: str, group_path: str, value: Any) that take the
value
supplied and write it to the hdf5fname
atgroup_path
.
Example
>>> simulation.to_hdf5(fname='folder/sim.hdf5')
- to_json(fname: str) None #
Exports
Tidy3dBaseModel
instance to .json file- Parameters
fname (str) – Full path to the .json file to save the
Tidy3dBaseModel
to.
Example
>>> simulation.to_json(fname='folder/sim.json')
- to_yaml(fname: str) None #
Exports
Tidy3dBaseModel
instance to .yaml file.- Parameters
fname (str) – Full path to the .yaml file to save the
Tidy3dBaseModel
to.
Example
>>> simulation.to_yaml(fname='folder/sim.yaml')
- classmethod tuple_to_dict(tuple_values: tuple) dict #
How we generate a dictionary mapping new keys to tuple values for hdf5.
- classmethod update_forward_refs(**localns: Any) None #
Try to update ForwardRefs on fields based on this Model, globalns and localns.
- updated_copy(**kwargs) tidy3d.components.base.Tidy3dBaseModel #
Make copy of a component instance with
**kwargs
indicating updated field values.
- classmethod validate(value: Any) Model #