meow package#
MEOW: Modeling of Eigenmodes and Overlaps in Waveguides
Subpackages#
Submodules#
meow array tools for pydantic models
- class SerializedArray[source]#
Bases:
BaseModel
Show JSON schema
{ "title": "SerializedArray", "type": "object", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ] }
- attribute values: list[Any] [Required]#
- attribute shape: tuple[int, ...] [Required]#
- attribute dtype: str [Required]#
the pydantic base model all other models are based on
- class ModelMetaclass(cls_name, bases, namespace, __pydantic_generic_metadata__=None, __pydantic_reset_parent_namespace__=True, _create_model_module=None, **kwargs)[source]#
Bases:
ModelMetaclass
- Parameters:
cls_name (str)
bases (tuple[type[Any], ...])
namespace (dict[str, Any])
__pydantic_generic_metadata__ (PydanticGenericMetadata | None)
__pydantic_reset_parent_namespace__ (bool)
_create_model_module (str | None)
kwargs (Any)
- Return type:
type
- class BaseModel[source]#
Bases:
BaseModel
Show JSON schema
{ "title": "BaseModel", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" } } }
- Fields:
- attribute type: str = ''#
- Validated by:
_validate_field_type
_validate_model
- classmethod model_validate(obj, *, strict=None, from_attributes=None, context=None)[source]#
Validate a pydantic model instance.
- Parameters:
obj (Any) – The object to validate.
strict (bool | None) – Whether to enforce types strictly.
from_attributes (bool | None) – Whether to extract data from object attributes.
context (dict[str, Any] | None) – Additional context to pass to the validator.
- Raises:
ValidationError – If the object could not be validated.
- Returns:
The validated model instance.
- classmethod model_validate_json(json_data, *, strict=None, context=None)[source]#
Usage docs: https://docs.pydantic.dev/2.10/concepts/json/#json-parsing
Validate the given JSON data against the Pydantic model.
- Parameters:
json_data (str | bytes | 'bytearray') – The JSON data to validate.
strict (bool | None) – Whether to enforce types strictly.
context (dict[str, Any] | None) – Extra variables to pass to the validator.
- Returns:
The validated Pydantic model.
- Raises:
ValidationError – If json_data is not a JSON string or the object could not be validated.
- model_post_init(context, /)#
This function is meant to behave like a BaseModel method to initialise private attributes.
It takes context as an argument since that’s what pydantic-core passes when calling it.
- Parameters:
self (BaseModel) – The BaseModel instance.
context (Any) – The context.
- Return type:
None
an EME Cell
- class Cell[source]#
Bases:
BaseModel
A Cell defines an interval in z (the direction of propagation) within the simulation domain. The intersecting Structure3Ds are discretized by a given mesh at the center of the Cell
Show JSON schema
{ "title": "Cell", "description": "A Cell defines an interval in z (the direction of propagation) within\nthe simulation domain. The intersecting Structure3Ds are discretized by\na given mesh at the center of the Cell", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "structures": { "description": "the 3D structures which will be sliced by the cell", "items": { "$ref": "#/$defs/Structure3D" }, "title": "Structures", "type": "array" }, "mesh": { "$ref": "#/$defs/Mesh2D", "description": "the mesh to discretize the structures with" }, "z_min": { "description": "the starting z-coordinate of the cell", "title": "Z Min", "type": "number" }, "z_max": { "description": "the ending z-coordinate of the cell", "title": "Z Max", "type": "number" } }, "$defs": { "Box": { "description": "A Box is a simple rectangular cuboid", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" }, "z_min": { "description": "the minimum z-value of the box", "title": "Z Min", "type": "number" }, "z_max": { "description": "the maximum z-value of the box", "title": "Z Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max", "z_min", "z_max" ], "title": "Box", "type": "object" }, "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "Mesh2D": { "description": "a ``Mesh2D`` describes how a ``Structure3D`` is discritized into a ``Cell`` or ``CrossSection``", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x": { "description": "x-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "y": { "description": "y-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "angle_phi": { "default": 0.0, "description": "Azimuth angle of the propagation axis in the plane orthogonal to the mesh.", "title": "Angle Phi", "type": "number" }, "angle_theta": { "default": 0.0, "description": "Polar angle of the propagation axis from the injection axis.", "title": "Angle Theta", "type": "number" }, "bend_radius": { "default": NaN, "description": "A curvature radius for simulation of waveguide bends. Tidy3D: Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.", "title": "Bend Radius", "type": "number" }, "bend_axis": { "default": 0, "description": "Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if ``bend_radius`` is not ``None``. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, the ``bend_axis`` is always 1 (the global z axis).", "enum": [ 0, 1 ], "title": "Bend Axis", "type": "integer" }, "num_pml": { "default": [ 0, 0 ], "description": "Number of standard pml layers to add in the two tangential axes.", "maxItems": 2, "minItems": 2, "prefixItems": [ { "minimum": 0, "type": "integer" }, { "minimum": 0, "type": "integer" } ], "title": "Num Pml", "type": "array" }, "ez_interfaces": { "default": false, "description": "when enabled, the meshing algorithm will throw away any index values at the interfaces which are not on even (Ez) half-grid locations. Enabling this should result in more symmetric modes.", "title": "Ez Interfaces", "type": "boolean" } }, "required": [ "x", "y" ], "title": "Mesh2D", "type": "object" }, "Prism": { "description": "A prism is a 2D Polygon extruded along a certain axis direction ('x', 'y', or 'z').", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "poly": { "description": "the 2D array (Nx2) with polygon vertices", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "h_min": { "description": "the start height of the extrusion", "title": "H Min", "type": "number" }, "h_max": { "description": "the end height of the extrusion", "title": "H Max", "type": "number" }, "axis": { "default": "y", "description": "the axis along which the polygon will be extruded ('x', 'y', or 'z').", "enum": [ "x", "y", "z" ], "title": "Axis", "type": "string" } }, "required": [ "poly", "h_min", "h_max" ], "title": "Prism", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "Structure3D": { "description": "a `Structure3D` is an association between a `Geometry3D` and a `Material`", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the structure", "title": "Material" }, "geometry": { "anyOf": [ { "$ref": "#/$defs/Box" }, { "$ref": "#/$defs/Prism" } ], "description": "the geometry of the structure", "title": "Geometry" }, "mesh_order": { "default": 5, "description": "the mesh order of the structure", "title": "Mesh Order", "type": "integer" } }, "required": [ "material", "geometry" ], "title": "Structure3D", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "structures", "mesh", "z_min", "z_max" ] }
- Fields:
- attribute structures: list[Structure3D] [Required]#
the 3D structures which will be sliced by the cell
- Validated by:
_validate_model
- attribute mesh: Mesh2D [Required]#
the mesh to discretize the structures with
- Validated by:
_validate_model
- attribute z_min: float [Required]#
the starting z-coordinate of the cell
- Validated by:
_validate_model
- attribute z_max: float [Required]#
the ending z-coordinate of the cell
- Validated by:
_validate_model
- property z#
- property length#
- property materials#
- property structures_2d: list[Structure2D]#
- property m_full#
- create_cells(structures, mesh, Ls, z_min=0.0)[source]#
easily create multiple Cell objects given a Mesh and a collection of cell lengths
- Parameters:
structures (list[Structure3D])
Ls (Annotated[ndarray, GetPydanticSchema(get_pydantic_core_schema=~meow.array._get_ndarray_core_schema, get_pydantic_json_schema=~meow.array._get_ndarray_json_schema), PlainSerializer(func=~meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), BeforeValidator(func=~meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), AfterValidator(func=~meow.array._coerce_immutable), AfterValidator(func=functools.partial(<function _coerce_dim at 0x7f43f7981940>, ndim=1)), AfterValidator(func=functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='float64'))])
z_min (float)
- Return type:
list[Cell]
A CrossSection
- class CrossSection[source]#
Bases:
BaseModel
A CrossSection is created from the association of a Cell with an Environment, which uniquely defines the refractive index everywhere.
Show JSON schema
{ "title": "CrossSection", "description": "A `CrossSection` is created from the association of a `Cell` with an `Environment`,\nwhich uniquely defines the refractive index everywhere.", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "structures": { "description": "the 2D structures in the CrossSection", "items": { "$ref": "#/$defs/Structure2D" }, "title": "Structures", "type": "array" }, "mesh": { "$ref": "#/$defs/Mesh2D", "description": "the mesh to discretize the structures with" }, "env": { "$ref": "#/$defs/Environment", "description": "the environment for which the cross section was calculated" } }, "$defs": { "Environment": { "additionalProperties": true, "description": "An environment contains all variables that don't depend on the\ngeometry/structure itself such as most commonly wavelength and temperature.", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "wl": { "default": 1.5, "description": "the wavelength of the environment", "title": "Wl", "type": "number" }, "T": { "default": 25.0, "description": "the temperature of the environment", "title": "T", "type": "number" } }, "title": "Environment", "type": "object" }, "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "Mesh2D": { "description": "a ``Mesh2D`` describes how a ``Structure3D`` is discritized into a ``Cell`` or ``CrossSection``", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x": { "description": "x-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "y": { "description": "y-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "angle_phi": { "default": 0.0, "description": "Azimuth angle of the propagation axis in the plane orthogonal to the mesh.", "title": "Angle Phi", "type": "number" }, "angle_theta": { "default": 0.0, "description": "Polar angle of the propagation axis from the injection axis.", "title": "Angle Theta", "type": "number" }, "bend_radius": { "default": NaN, "description": "A curvature radius for simulation of waveguide bends. Tidy3D: Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.", "title": "Bend Radius", "type": "number" }, "bend_axis": { "default": 0, "description": "Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if ``bend_radius`` is not ``None``. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, the ``bend_axis`` is always 1 (the global z axis).", "enum": [ 0, 1 ], "title": "Bend Axis", "type": "integer" }, "num_pml": { "default": [ 0, 0 ], "description": "Number of standard pml layers to add in the two tangential axes.", "maxItems": 2, "minItems": 2, "prefixItems": [ { "minimum": 0, "type": "integer" }, { "minimum": 0, "type": "integer" } ], "title": "Num Pml", "type": "array" }, "ez_interfaces": { "default": false, "description": "when enabled, the meshing algorithm will throw away any index values at the interfaces which are not on even (Ez) half-grid locations. Enabling this should result in more symmetric modes.", "title": "Ez Interfaces", "type": "boolean" } }, "required": [ "x", "y" ], "title": "Mesh2D", "type": "object" }, "Rectangle": { "description": "a Rectangle", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max" ], "title": "Rectangle", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "Structure2D": { "description": "a `Structure2D` is an association between a `Geometry2D` and a `Material`", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the structure", "title": "Material" }, "geometry": { "$ref": "#/$defs/Rectangle", "description": "the geometry of the structure" }, "mesh_order": { "default": 5, "description": "the mesh order of the structure", "title": "Mesh Order", "type": "integer" } }, "required": [ "material", "geometry" ], "title": "Structure2D", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "structures", "mesh", "env" ] }
- Fields:
- attribute structures: list[Structure2D] [Required]#
the 2D structures in the CrossSection
- Validated by:
_validate_model
- attribute mesh: Mesh2D [Required]#
the mesh to discretize the structures with
- Validated by:
_validate_model
- attribute env: Environment [Required]#
the environment for which the cross section was calculated
- Validated by:
_validate_model
- classmethod from_cell(*, cell, env)[source]#
- Parameters:
cell (Cell)
env (Environment)
- property materials#
- property n_full#
- property nx#
- property ny#
- property nz#
one place to gather your environment settings
- class Environment[source]#
Bases:
BaseModel
An environment contains all variables that don’t depend on the geometry/structure itself such as most commonly wavelength and temperature.
Show JSON schema
{ "title": "Environment", "description": "An environment contains all variables that don't depend on the\ngeometry/structure itself such as most commonly wavelength and temperature.", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "wl": { "default": 1.5, "description": "the wavelength of the environment", "title": "Wl", "type": "number" }, "T": { "default": 25.0, "description": "the temperature of the environment", "title": "T", "type": "number" } }, "additionalProperties": true }
- Fields:
type ()
- attribute wl: float = 1.5#
the wavelength of the environment
- Validated by:
_validate_model
- attribute T: float = 25.0#
the temperature of the environment
- Validated by:
_validate_model
GDS Extrusions
- class GdsExtrusionRule[source]#
Bases:
BaseModel
a GdsExtrusionRule describes a single extrusion rule. Multiple of such rules can later be associated with a gds layer tuple.
Show JSON schema
{ "title": "GdsExtrusionRule", "description": "a `GdsExtrusionRule` describes a single extrusion rule.\nMultiple of such rules can later be associated with a gds layer tuple.", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the extrusion", "title": "Material" }, "h_min": { "description": "the extrusion starting height", "title": "H Min", "type": "number" }, "h_max": { "description": "the extrusion ending height", "title": "H Max", "type": "number" }, "buffer": { "default": 0.0, "description": "an extra buffer (=grow or shrink) operation applied to the polygon", "title": "Buffer", "type": "number" }, "mesh_order": { "default": 5.0, "description": "the mesh order of the resulting `Structure3D`", "title": "Mesh Order", "type": "integer" } }, "$defs": { "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "material", "h_min", "h_max" ] }
- Fields:
- attribute material: IndexMaterial | SampledMaterial | TidyMaterial [Required]#
the material of the extrusion
- Validated by:
_validate_model
- attribute h_min: float [Required]#
the extrusion starting height
- Validated by:
_validate_model
- attribute h_max: float [Required]#
the extrusion ending height
- Validated by:
_validate_model
- attribute buffer: float = 0.0#
an extra buffer (=grow or shrink) operation applied to the polygon
- Validated by:
_validate_model
- attribute mesh_order: int = 5.0#
the mesh order of the resulting Structure3D
- Validated by:
_validate_model
- extrude_gds(cell, extrusions)[source]#
extrude a gds cell given a dictionary of extruson rules
- Parameters:
cell – a gdspy or gdstk Cell to extrude
extrusions (dict[tuple[int, int], list[GdsExtrusionRule]]) – the extrusion rules to use (if not given, the example extrusions will be used.)
meow geometries
- class Geometry2DBase[source]#
Bases:
BaseModel
Show JSON schema
{ "title": "Geometry2DBase", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" } } }
- Fields:
- model_post_init(context, /)#
We need to both initialize private attributes and call the user-defined model_post_init method.
- Parameters:
self (BaseModel)
context (Any)
- Return type:
None
- attribute type: str = ''#
- Validated by:
_validate_field_type
_validate_model
- class Rectangle[source]#
Bases:
Geometry2DBase
a Rectangle
Show JSON schema
{ "title": "Rectangle", "description": "a Rectangle", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max" ] }
- Fields:
- attribute x_min: float [Required]#
the minimum x-value of the box
- Validated by:
_validate_model
- attribute x_max: float [Required]#
the maximum x-value of the box
- Validated by:
_validate_model
- attribute y_min: float [Required]#
the minimum y-value of the box
- Validated by:
_validate_model
- attribute y_max: float [Required]#
the maximum y-value of the box
- Validated by:
_validate_model
- class Geometry3DBase[source]#
Bases:
BaseModel
Show JSON schema
{ "title": "Geometry3DBase", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" } } }
- Fields:
- model_post_init(context, /)#
We need to both initialize private attributes and call the user-defined model_post_init method.
- Parameters:
self (BaseModel)
context (Any)
- Return type:
None
- attribute type: str = ''#
- Validated by:
_validate_field_type
_validate_model
- class Box[source]#
Bases:
Geometry3DBase
A Box is a simple rectangular cuboid
Show JSON schema
{ "title": "Box", "description": "A Box is a simple rectangular cuboid", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" }, "z_min": { "description": "the minimum z-value of the box", "title": "Z Min", "type": "number" }, "z_max": { "description": "the maximum z-value of the box", "title": "Z Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max", "z_min", "z_max" ] }
- Fields:
- attribute x_min: float [Required]#
the minimum x-value of the box
- Validated by:
_validate_model
- attribute x_max: float [Required]#
the maximum x-value of the box
- Validated by:
_validate_model
- attribute y_min: float [Required]#
the minimum y-value of the box
- Validated by:
_validate_model
- attribute y_max: float [Required]#
the maximum y-value of the box
- Validated by:
_validate_model
- attribute z_min: float [Required]#
the minimum z-value of the box
- Validated by:
_validate_model
- attribute z_max: float [Required]#
the maximum z-value of the box
- Validated by:
_validate_model
- class Prism[source]#
Bases:
Geometry3DBase
A prism is a 2D Polygon extruded along a certain axis direction (‘x’, ‘y’, or ‘z’).
Show JSON schema
{ "title": "Prism", "description": "A prism is a 2D Polygon extruded along a certain axis direction ('x', 'y', or 'z').", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "poly": { "description": "the 2D array (Nx2) with polygon vertices", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "h_min": { "description": "the start height of the extrusion", "title": "H Min", "type": "number" }, "h_max": { "description": "the end height of the extrusion", "title": "H Max", "type": "number" }, "axis": { "default": "y", "description": "the axis along which the polygon will be extruded ('x', 'y', or 'z').", "enum": [ "x", "y", "z" ], "title": "Axis", "type": "string" } }, "required": [ "poly", "h_min", "h_max" ] }
- Fields:
- attribute poly: Annotated[NDArray, Shape(-1, 2), DType('float64')] [Required]#
the 2D array (Nx2) with polygon vertices
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’float64’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute h_min: float [Required]#
the start height of the extrusion
- Validated by:
_validate_model
- attribute h_max: float [Required]#
the end height of the extrusion
- Validated by:
_validate_model
- attribute axis: AxisDirection = 'y'#
the axis along which the polygon will be extruded (‘x’, ‘y’, or ‘z’).
- Validated by:
_validate_model
- integrate_interpolate_2d(x, y, data, extent=None)[source]#
First the data on the given grid is interpolated and then integrated using scipy.dblquad. This procedure is best suited if one wants to integrate over a (small) region of interest that can be placed at off-grid positions
Meow Materials
- class MaterialBase[source]#
Bases:
BaseModel
a Material defines the refractive index of a Structure3D within an Environment.
Show JSON schema
{ "title": "MaterialBase", "description": "a `Material` defines the refractive index of a `Structure3D` within an `Environment`.", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" } }, "required": [ "name" ] }
- Fields:
type ()
- attribute name: str [Required]#
the name of the material
- Validated by:
_validate_model
- attribute meta: dict[str, Any] [Optional]#
metadata for the material
- Validated by:
_validate_model
- class TidyMaterial[source]#
Bases:
MaterialBase
Show JSON schema
{ "title": "TidyMaterial", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ] }
- Fields:
meta ()
type ()
- attribute name: str [Required]#
The material name as also used by tidy3d
- Validated by:
_validate_model
- attribute variant: str [Required]#
The material variant as also used by tidy3d
- Validated by:
_validate_model
- class IndexMaterial[source]#
Bases:
MaterialBase
Show JSON schema
{ "title": "IndexMaterial", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ] }
- Fields:
meta ()
name ()
type ()
- attribute n: float [Required]#
the refractive index of the material
- Validated by:
_validate_model
- class SampledMaterial[source]#
Bases:
MaterialBase
Show JSON schema
{ "title": "SampledMaterial", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ] }
- Fields:
meta ()
n (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
name ()
params (dict[str, Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
type ()
- attribute n: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='float64'))] [Required]#
the complex refractive index of the material
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’float64’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
validate_params_length
- attribute params: dict[str, ~typing.Annotated[~numpy.ndarray, ~pydantic.types.GetPydanticSchema(get_pydantic_core_schema=~meow.array._get_ndarray_core_schema, get_pydantic_json_schema=~meow.array._get_ndarray_json_schema), ~pydantic.functional_serializers.PlainSerializer(func=~meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), ~pydantic.functional_validators.BeforeValidator(func=~meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), ~pydantic.functional_validators.AfterValidator(func=~meow.array._coerce_immutable), ~pydantic.functional_validators.AfterValidator(func=functools.partial(<function _coerce_dim at 0x7f43f7981940>, ndim=1)), ~pydantic.functional_validators.AfterValidator(func=functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='float64'))]] [Required]#
the wavelength over which the refractive index is defined.
- Validated by:
_validate_model
validate_params_length
a 2D Mesh
- class Mesh2D[source]#
Bases:
BaseModel
a
Mesh2D
describes how aStructure3D
is discritized into aCell
orCrossSection
Show JSON schema
{ "title": "Mesh2D", "description": "a ``Mesh2D`` describes how a ``Structure3D`` is discritized into a ``Cell`` or ``CrossSection``", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x": { "description": "x-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "y": { "description": "y-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "angle_phi": { "default": 0.0, "description": "Azimuth angle of the propagation axis in the plane orthogonal to the mesh.", "title": "Angle Phi", "type": "number" }, "angle_theta": { "default": 0.0, "description": "Polar angle of the propagation axis from the injection axis.", "title": "Angle Theta", "type": "number" }, "bend_radius": { "default": NaN, "description": "A curvature radius for simulation of waveguide bends. Tidy3D: Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.", "title": "Bend Radius", "type": "number" }, "bend_axis": { "default": 0, "description": "Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if ``bend_radius`` is not ``None``. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, the ``bend_axis`` is always 1 (the global z axis).", "enum": [ 0, 1 ], "title": "Bend Axis", "type": "integer" }, "num_pml": { "default": [ 0, 0 ], "description": "Number of standard pml layers to add in the two tangential axes.", "maxItems": 2, "minItems": 2, "prefixItems": [ { "minimum": 0, "type": "integer" }, { "minimum": 0, "type": "integer" } ], "title": "Num Pml", "type": "array" }, "ez_interfaces": { "default": false, "description": "when enabled, the meshing algorithm will throw away any index values at the interfaces which are not on even (Ez) half-grid locations. Enabling this should result in more symmetric modes.", "title": "Ez Interfaces", "type": "boolean" } }, "required": [ "x", "y" ] }
- Fields:
- attribute x: Annotated[NDArray, Dim(1), DType('float64')] [Required]#
x-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’float64’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute y: Annotated[NDArray, Dim(1), DType('float64')] [Required]#
y-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’float64’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute angle_phi: float = 0.0#
Azimuth angle of the propagation axis in the plane orthogonal to the mesh.
- Validated by:
_validate_model
- attribute angle_theta: float = 0.0#
Polar angle of the propagation axis from the injection axis.
- Validated by:
_validate_model
- attribute bend_radius: Annotated[float, BeforeValidator(lambda x: np.nan if x is None else x)] = nan#
A curvature radius for simulation of waveguide bends. Tidy3D: Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.
- Constraints:
func = <function <lambda> at 0x7f43e30c94e0>
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute bend_axis: Literal[0, 1] = 0#
Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if
bend_radius
is notNone
. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, thebend_axis
is always 1 (the global z axis).- Validated by:
_validate_model
- attribute num_pml: tuple[NonNegativeInt, NonNegativeInt] = (0, 0)#
Number of standard pml layers to add in the two tangential axes.
- Validated by:
_validate_model
- attribute ez_interfaces: bool = False#
when enabled, the meshing algorithm will throw away any index values at the interfaces which are not on even (Ez) half-grid locations. Enabling this should result in more symmetric modes.
- Validated by:
_validate_model
- property dx#
dx at Hz locations, i.e. center of the 2D cell
- property dy#
dy at Hz locations, i.e. center of the 2D cell
- property x_#
x at Hz locations, i.e. center of the 2D cell
- property y_#
y at Hz locations, i.e. center of the 2D cell
- property x_full#
x at half-integer locations
- property y_full#
y at half-integer locations
- property XY_full#
X and Y at half-integer locations
- property X_full#
X at half-integer locations
- property Y_full#
Y at half-integer locations
- property Xx#
X at Ex locations
- property Yx#
Y at Ex locations
- property Xy#
X at Ey locations
- property Yy#
Y at Ey locations
- property Xz#
X at Ez locations
- property Yz#
Y at Ez locations
- property Xz_#
X at Hz locations
- property Yz_#
Y at Hz locations
An EigenMode
- class Mode[source]#
Bases:
BaseModel
A Mode contains the field information for a given CrossSection.
Show JSON schema
{ "title": "Mode", "description": "A `Mode` contains the field information for a given `CrossSection`.", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "neff": { "description": "the effective index of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "cs": { "$ref": "#/$defs/CrossSection", "description": "the index cross section for which the mode was calculated" }, "Ex": { "description": "the Ex-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "Ey": { "description": "the Ey-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "Ez": { "description": "the Ez-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "Hx": { "description": "the Hx-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "Hy": { "description": "the Hy-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "Hz": { "description": "the Hz-fields of the mode", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "interpolation": { "default": "", "description": "To which 2D Yee-location the fields are interpolated to.", "enum": [ "Ex", "Ey", "Ez", "Hz", "" ], "title": "Interpolation", "type": "string" } }, "$defs": { "CrossSection": { "description": "A `CrossSection` is created from the association of a `Cell` with an `Environment`,\nwhich uniquely defines the refractive index everywhere.", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "structures": { "description": "the 2D structures in the CrossSection", "items": { "$ref": "#/$defs/Structure2D" }, "title": "Structures", "type": "array" }, "mesh": { "$ref": "#/$defs/Mesh2D", "description": "the mesh to discretize the structures with" }, "env": { "$ref": "#/$defs/Environment", "description": "the environment for which the cross section was calculated" } }, "required": [ "structures", "mesh", "env" ], "title": "CrossSection", "type": "object" }, "Environment": { "additionalProperties": true, "description": "An environment contains all variables that don't depend on the\ngeometry/structure itself such as most commonly wavelength and temperature.", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "wl": { "default": 1.5, "description": "the wavelength of the environment", "title": "Wl", "type": "number" }, "T": { "default": 25.0, "description": "the temperature of the environment", "title": "T", "type": "number" } }, "title": "Environment", "type": "object" }, "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "Mesh2D": { "description": "a ``Mesh2D`` describes how a ``Structure3D`` is discritized into a ``Cell`` or ``CrossSection``", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x": { "description": "x-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "y": { "description": "y-coordinates of the mesh (Ez locations, i.e. corners of the 2D cell)", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "angle_phi": { "default": 0.0, "description": "Azimuth angle of the propagation axis in the plane orthogonal to the mesh.", "title": "Angle Phi", "type": "number" }, "angle_theta": { "default": 0.0, "description": "Polar angle of the propagation axis from the injection axis.", "title": "Angle Theta", "type": "number" }, "bend_radius": { "default": NaN, "description": "A curvature radius for simulation of waveguide bends. Tidy3D: Can be negative, in which case the mode plane center has a smaller value than the curvature center along the tangential axis perpendicular to the bend axis.", "title": "Bend Radius", "type": "number" }, "bend_axis": { "default": 0, "description": "Index into the two tangential axes defining the normal to the plane in which the bend lies. This must be provided if ``bend_radius`` is not ``None``. For example, for a ring in the global xy-plane, and a mode plane in either the xz or the yz plane, the ``bend_axis`` is always 1 (the global z axis).", "enum": [ 0, 1 ], "title": "Bend Axis", "type": "integer" }, "num_pml": { "default": [ 0, 0 ], "description": "Number of standard pml layers to add in the two tangential axes.", "maxItems": 2, "minItems": 2, "prefixItems": [ { "minimum": 0, "type": "integer" }, { "minimum": 0, "type": "integer" } ], "title": "Num Pml", "type": "array" }, "ez_interfaces": { "default": false, "description": "when enabled, the meshing algorithm will throw away any index values at the interfaces which are not on even (Ez) half-grid locations. Enabling this should result in more symmetric modes.", "title": "Ez Interfaces", "type": "boolean" } }, "required": [ "x", "y" ], "title": "Mesh2D", "type": "object" }, "Rectangle": { "description": "a Rectangle", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max" ], "title": "Rectangle", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "Structure2D": { "description": "a `Structure2D` is an association between a `Geometry2D` and a `Material`", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the structure", "title": "Material" }, "geometry": { "$ref": "#/$defs/Rectangle", "description": "the geometry of the structure" }, "mesh_order": { "default": 5, "description": "the mesh order of the structure", "title": "Mesh Order", "type": "integer" } }, "required": [ "material", "geometry" ], "title": "Structure2D", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "neff", "cs", "Ex", "Ey", "Ez", "Hx", "Hy", "Hz" ] }
- Fields:
Ex (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
Ey (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
Ez (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
Hx (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
Hy (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
Hz (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
neff (Annotated[numpy.ndarray, pydantic.types.GetPydanticSchema(get_pydantic_core_schema=meow.array._get_ndarray_core_schema, get_pydantic_json_schema=meow.array._get_ndarray_json_schema), pydantic.functional_serializers.PlainSerializer(func=meow.array._serialize_ndarray, return_type=PydanticUndefined, when_used=always), pydantic.functional_validators.BeforeValidator(func=meow.array._validate_ndarray, json_schema_input_type=PydanticUndefined), pydantic.functional_validators.AfterValidator(func=meow.array._coerce_immutable), pydantic.functional_validators.AfterValidator(func=functools.partial(
type ()
- attribute neff: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the effective index of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute cs: CrossSection [Required]#
the index cross section for which the mode was calculated
- Validated by:
_validate_model
- attribute Ex: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Ex-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute Ey: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Ey-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute Ez: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Ez-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute Hx: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Hx-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute Hy: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Hy-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute Hz: partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype='complex128'))] [Required]#
the Hz-fields of the mode
- Constraints:
get_pydantic_core_schema = <function _get_ndarray_core_schema at 0x7f43f7981da0>
get_pydantic_json_schema = <function _get_ndarray_json_schema at 0x7f43f7981e40>
func = functools.partial(<function _coerce_dtype at 0x7f43f7981a80>, dtype=’complex128’)
return_type = PydanticUndefined
when_used = always
json_schema_input_type = PydanticUndefined
- Validated by:
_validate_model
- attribute interpolation: Literal['Ex', 'Ey', 'Ez', 'Hz', ''] = ''#
To which 2D Yee-location the fields are interpolated to.
- Validated by:
_validate_model
- property te_fraction#
the TE polarization fraction of the mode.
- property Px#
- property Py#
- property Pz#
- property A#
mode area
- property env#
- property mesh#
- inner_product(mode1, mode2)[source]#
the inner product of a Mode with another Mode is uniquely defined.
- inner_product_conj(mode1, mode2)[source]#
the inner product of a Mode with another Mode is uniquely defined.
- electric_energy_density(mode)[source]#
get the electric energy density contained in a Mode
- Parameters:
mode (Mode)
- Return type:
ndarray[tuple[int, int], dtype[float64]]
- electric_energy(mode)[source]#
get the electric energy contained in a Mode
- Parameters:
mode (Mode)
- Return type:
float
- magnetic_energy_density(mode)[source]#
get the magnetic energy density contained in a Mode
- Parameters:
mode (Mode)
- Return type:
ndarray[tuple[int, int], dtype[float64]]
- magnetic_energy(mode)[source]#
get the magnetic energy contained in a Mode
- Parameters:
mode (Mode)
- Return type:
float
- energy_density(mode)[source]#
get the energy density contained in a Mode
- Parameters:
mode (Mode)
- Return type:
ndarray[tuple[int, int], dtype[float64]]
- is_pml_mode(mode, threshold)[source]#
check whether a mode can be considered a PML mode.
- Parameters:
mode – the mode to classify as PML mode or not.
pml_mode_threshold – If the mode has more than pml_mode_threshold part of its energy in the PML, it will be removed.
- Returns:
whether the mode is a PML mode or not
- Return type:
bool
- te_fraction(mode)[source]#
the TE polarization fraction of the Mode
- Parameters:
mode (Mode)
- Return type:
float
a Structure is a combination of a Geometry with a material (and an optional mesh order)
- Structure(*, material: IndexMaterial | SampledMaterial | TidyMaterial, geometry: Rectangle, mesh_order: int = DEFAULT_MESH_ORDER) Structure2D [source]#
- Structure(*, material: IndexMaterial | SampledMaterial | TidyMaterial, geometry: Box | Prism, mesh_order: int = DEFAULT_MESH_ORDER) Structure3D
- class Structure2D[source]#
Bases:
BaseModel
a Structure2D is an association between a Geometry2D and a Material
Show JSON schema
{ "title": "Structure2D", "description": "a `Structure2D` is an association between a `Geometry2D` and a `Material`", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the structure", "title": "Material" }, "geometry": { "$ref": "#/$defs/Rectangle", "description": "the geometry of the structure" }, "mesh_order": { "default": 5, "description": "the mesh order of the structure", "title": "Mesh Order", "type": "integer" } }, "$defs": { "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "Rectangle": { "description": "a Rectangle", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max" ], "title": "Rectangle", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "material", "geometry" ] }
- Fields:
- attribute material: Material [Required]#
the material of the structure
- Validated by:
_validate_model
- attribute geometry: Geometry2D [Required]#
the geometry of the structure
- Validated by:
_validate_model
- attribute mesh_order: int = 5#
the mesh order of the structure
- Validated by:
_validate_model
- class Structure3D[source]#
Bases:
BaseModel
a Structure3D is an association between a Geometry3D and a Material
Show JSON schema
{ "title": "Structure3D", "description": "a `Structure3D` is an association between a `Geometry3D` and a `Material`", "type": "object", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "material": { "anyOf": [ { "$ref": "#/$defs/IndexMaterial" }, { "$ref": "#/$defs/SampledMaterial" }, { "$ref": "#/$defs/TidyMaterial" } ], "description": "the material of the structure", "title": "Material" }, "geometry": { "anyOf": [ { "$ref": "#/$defs/Box" }, { "$ref": "#/$defs/Prism" } ], "description": "the geometry of the structure", "title": "Geometry" }, "mesh_order": { "default": 5, "description": "the mesh order of the structure", "title": "Mesh Order", "type": "integer" } }, "$defs": { "Box": { "description": "A Box is a simple rectangular cuboid", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "x_min": { "description": "the minimum x-value of the box", "title": "X Min", "type": "number" }, "x_max": { "description": "the maximum x-value of the box", "title": "X Max", "type": "number" }, "y_min": { "description": "the minimum y-value of the box", "title": "Y Min", "type": "number" }, "y_max": { "description": "the maximum y-value of the box", "title": "Y Max", "type": "number" }, "z_min": { "description": "the minimum z-value of the box", "title": "Z Min", "type": "number" }, "z_max": { "description": "the maximum z-value of the box", "title": "Z Max", "type": "number" } }, "required": [ "x_min", "x_max", "y_min", "y_max", "z_min", "z_max" ], "title": "Box", "type": "object" }, "IndexMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the refractive index of the material", "title": "N", "type": "number" } }, "required": [ "name", "n" ], "title": "IndexMaterial", "type": "object" }, "Prism": { "description": "A prism is a 2D Polygon extruded along a certain axis direction ('x', 'y', or 'z').", "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "poly": { "description": "the 2D array (Nx2) with polygon vertices", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "h_min": { "description": "the start height of the extrusion", "title": "H Min", "type": "number" }, "h_max": { "description": "the end height of the extrusion", "title": "H Max", "type": "number" }, "axis": { "default": "y", "description": "the axis along which the polygon will be extruded ('x', 'y', or 'z').", "enum": [ "x", "y", "z" ], "title": "Axis", "type": "string" } }, "required": [ "poly", "h_min", "h_max" ], "title": "Prism", "type": "object" }, "SampledMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "the name of the material", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "n": { "description": "the complex refractive index of the material", "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "title": "SerializedArray", "type": "object" }, "params": { "additionalProperties": { "properties": { "values": { "items": {}, "title": "Values", "type": "array" }, "shape": { "items": { "type": "integer" }, "title": "Shape", "type": "array" }, "dtype": { "title": "Dtype", "type": "string" } }, "required": [ "values", "shape", "dtype" ], "type": "object" }, "description": "the wavelength over which the refractive index is defined.", "title": "Params", "type": "object" } }, "required": [ "name", "n", "params" ], "title": "SampledMaterial", "type": "object" }, "TidyMaterial": { "properties": { "type": { "default": "", "title": "Type", "type": "string" }, "name": { "description": "The material name as also used by tidy3d", "title": "Name", "type": "string" }, "meta": { "description": "metadata for the material", "title": "Meta", "type": "object" }, "variant": { "description": "The material variant as also used by tidy3d", "title": "Variant", "type": "string" } }, "required": [ "name", "variant" ], "title": "TidyMaterial", "type": "object" } }, "required": [ "material", "geometry" ] }
- Fields:
- attribute material: Material [Required]#
the material of the structure
- Validated by:
_validate_model
- attribute geometry: Geometry3D [Required]#
the geometry of the structure
- Validated by:
_validate_model
- attribute mesh_order: int = 5#
the mesh order of the structure
- Validated by:
_validate_model
Visualizations for common meow-datatypes
- visualize(obj, **kwargs)[source]#
visualize any meow object
- Parameters:
obj (Any) – the meow object to visualize
**kwargs (Any) – extra configuration to visualize the object
Note
Most meow objects have a ._visualize method. Check out its help to see which kwargs are accepted.
- vis(obj, **kwargs)#
visualize any meow object
- Parameters:
obj (Any) – the meow object to visualize
**kwargs (Any) – extra configuration to visualize the object
Note
Most meow objects have a ._visualize method. Check out its help to see which kwargs are accepted.