Skip to content

Commit 9f9ae94

Browse files
frederikschubertflexyaugenst-flex
authored andcommitted
resolve circular dependencies
1 parent 1617bc7 commit 9f9ae94

10 files changed

Lines changed: 96 additions & 79 deletions

File tree

tidy3d/components/material/solver_types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
SemiconductorMedium,
1111
)
1212
from tidy3d.components.material.tcad.heat import ThermalSpecType
13-
from tidy3d.components.medium.types import MediumType, MediumType3D
13+
from tidy3d.components.medium import MediumType, MediumType3D
1414

1515
OpticalMediumType = MediumType
1616
ElectricalMediumType = MediumType

tidy3d/components/material/tcad/charge.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import pydantic.v1 as pd
88

99
from tidy3d.components.data.data_array import SpatialDataArray
10-
from tidy3d.components.medium.base import AbstractMedium
10+
from tidy3d.components.medium import AbstractMedium
1111
from tidy3d.components.tcad.doping import DopingBoxType
1212
from tidy3d.components.tcad.types import (
1313
BandGapNarrowingModelType,

tidy3d/components/medium/__init__.py

Lines changed: 9 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33

44
from __future__ import annotations
55

6-
from typing import Union
7-
86
from .nonlinear import (
97
KerrNonlinearity,
108
NonlinearModel,
119
NonlinearSpec,
1210
NonlinearSusceptibility,
1311
TwoPhotonAbsorption,
1412
)
15-
from .base import AbstractMedium
16-
from .dispersionless import Medium, PECMedium, CustomMedium, CustomIsotropicMedium
13+
from .base import AbstractMedium, AbstractCustomMedium
14+
from .dispersionless import Medium, PECMedium, CustomMedium, PEC
1715
from .anisotropic import (
1816
AnisotropicMedium,
1917
CustomAnisotropicMedium,
@@ -39,54 +37,17 @@
3937
LossyMetalMedium,
4038
SurfaceImpedanceFitterParam,
4139
)
42-
from .medium_2d import Medium2D
43-
from .perturbation import PerturbationMedium, PerturbationPoleResidue
44-
45-
46-
NonlinearModelType = Union[NonlinearSusceptibility, TwoPhotonAbsorption, KerrNonlinearity]
47-
IsotropicUniformMediumType = Union[
48-
Medium, LossyMetalMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, PECMedium
49-
]
50-
IsotropicCustomMediumType = Union[
51-
CustomPoleResidue,
52-
CustomSellmeier,
53-
CustomLorentz,
54-
CustomDebye,
55-
CustomDrude,
56-
]
57-
IsotropicCustomMediumInternalType = Union[IsotropicCustomMediumType, CustomIsotropicMedium]
58-
IsotropicMediumType = Union[IsotropicCustomMediumType, IsotropicUniformMediumType]
59-
MediumType3D = Union[
60-
Medium,
61-
AnisotropicMedium,
62-
PECMedium,
63-
PoleResidue,
64-
Sellmeier,
65-
Lorentz,
66-
Debye,
67-
Drude,
68-
FullyAnisotropicMedium,
69-
CustomMedium,
70-
CustomPoleResidue,
71-
CustomSellmeier,
72-
CustomLorentz,
73-
CustomDebye,
74-
CustomDrude,
75-
CustomAnisotropicMedium,
76-
PerturbationMedium,
77-
PerturbationPoleResidue,
78-
LossyMetalMedium,
79-
]
80-
MediumType = Union[MediumType3D, Medium2D, AnisotropicMediumFromMedium2D]
81-
82-
PEC = PECMedium(name="PEC")
83-
PEC2D = Medium2D(ss=PEC, tt=PEC)
40+
from .medium_2d import Medium2D, MediumType, MediumType3D, PEC2D
41+
from .perturbation import PerturbationMedium, PerturbationPoleResidue, AbstractPerturbationMedium
8442

43+
AnisotropicMedium.update_forward_refs()
8544

8645
__all__ = [
8746
"PEC",
8847
"PEC2D",
8948
"AbstractMedium",
49+
"AbstractCustomMedium",
50+
"AbstractPerturbationMedium",
9051
"AnisotropicMedium",
9152
"AnisotropicMediumFromMedium2D",
9253
"CustomAnisotropicMedium",
@@ -106,6 +67,8 @@
10667
"LossyMetalMedium",
10768
"Medium",
10869
"Medium2D",
70+
"MediumType",
71+
"MediumType3D",
10972
"NonlinearModel",
11073
"NonlinearSpec",
11174
"NonlinearSusceptibility",

tidy3d/components/medium/anisotropic.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424

2525
from .base import AbstractCustomMedium, AbstractMedium
2626
from .dispersionless import CustomMedium, Medium, PECMedium
27+
from .types import (
28+
IsotropicCustomMediumInternalType,
29+
IsotropicCustomMediumType,
30+
IsotropicUniformMediumType,
31+
)
2732
from .utils import ensure_freq_in_range
2833

2934

tidy3d/components/medium/base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from tidy3d.exceptions import ValidationError
3939
from tidy3d.log import log
4040

41+
from .nonlinear import NonlinearModel, NonlinearSpec, NonlinearSusceptibility
4142
from .utils import ensure_freq_in_range
4243

4344

@@ -223,6 +224,8 @@ def is_custom(self) -> bool:
223224
@cached_property
224225
def is_fully_anisotropic(self) -> bool:
225226
"""Whether the medium is fully anisotropic."""
227+
from .anisotropic import FullyAnisotropicMedium
228+
226229
return isinstance(self, FullyAnisotropicMedium)
227230

228231
@cached_property

tidy3d/components/medium/dispersionless.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,8 @@ def _medium(self):
752752
"""Internal representation in the form of
753753
either `CustomIsotropicMedium` or `CustomAnisotropicMedium`.
754754
"""
755+
from .anisotropic import CustomAnisotropicMediumInternal
756+
755757
self_dict = self.dict(exclude={"type", "eps_dataset"})
756758
# isotropic
757759
if self.eps_dataset is None:
@@ -1235,3 +1237,7 @@ def _derivative_field_cmp(
12351237
vjp_array = vjp_array.reshape(eps_data.shape)
12361238

12371239
return vjp_array
1240+
1241+
1242+
PECMedium.update_forward_refs()
1243+
PEC = PECMedium(name="PEC")

tidy3d/components/medium/medium_2d.py

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,54 @@
1212
from tidy3d.exceptions import ValidationError
1313
from tidy3d.log import log
1414

15-
from .anisotropic import AnisotropicMedium, AnisotropicMediumFromMedium2D
15+
from .anisotropic import (
16+
AnisotropicMedium,
17+
AnisotropicMediumFromMedium2D,
18+
CustomAnisotropicMedium,
19+
FullyAnisotropicMedium,
20+
)
1621
from .base import AbstractMedium
17-
from .dispersionless import Medium, PECMedium
18-
from .dispersive import PoleResidue
22+
from .dispersionless import PEC, CustomMedium, Medium, PECMedium
23+
from .dispersive import (
24+
CustomDebye,
25+
CustomDrude,
26+
CustomLorentz,
27+
CustomPoleResidue,
28+
CustomSellmeier,
29+
Debye,
30+
Drude,
31+
Lorentz,
32+
PoleResidue,
33+
Sellmeier,
34+
)
1935
from .dispersive_abc import DispersiveMedium
36+
from .lossy_metal import LossyMetalMedium
37+
from .perturbation import PerturbationMedium, PerturbationPoleResidue
38+
from .types import IsotropicUniformMediumType
2039
from .utils import ensure_freq_in_range
2140

41+
MediumType3D = Union[
42+
Medium,
43+
AnisotropicMedium,
44+
PECMedium,
45+
PoleResidue,
46+
Sellmeier,
47+
Lorentz,
48+
Debye,
49+
Drude,
50+
FullyAnisotropicMedium,
51+
CustomMedium,
52+
CustomPoleResidue,
53+
CustomSellmeier,
54+
CustomLorentz,
55+
CustomDebye,
56+
CustomDrude,
57+
CustomAnisotropicMedium,
58+
PerturbationMedium,
59+
PerturbationPoleResidue,
60+
LossyMetalMedium,
61+
]
62+
2263

2364
class Medium2D(AbstractMedium):
2465
"""2D diagonally anisotropic medium.
@@ -421,3 +462,7 @@ def is_comp_pec_2d(self, comp: Axis, axis: Axis):
421462
ax_coord=Medium(), plane_coords=self.elements.values(), axis=axis
422463
)
423464
return isinstance(elements_3d[comp], PECMedium)
465+
466+
467+
MediumType = Union[MediumType3D, Medium2D, AnisotropicMediumFromMedium2D]
468+
PEC2D = Medium2D(ss=PEC, tt=PEC)

tidy3d/components/medium/nonlinear.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@
1313
from tidy3d.log import log
1414

1515
from .constants import NONLINEAR_DEFAULT_NUM_ITERS, NONLINEAR_MAX_NUM_ITERS
16-
from .dispersionless import Medium
17-
from .dispersive import DispersiveMedium
1816

1917
if TYPE_CHECKING:
20-
from . import NonlinearModelType
2118
from .base import AbstractMedium
2219

2320

@@ -27,6 +24,8 @@ class NonlinearModel(ABC, Tidy3dBaseModel):
2724

2825
def _validate_medium_type(self, medium: AbstractMedium):
2926
from .base import AbstractCustomMedium
27+
from .dispersionless import Medium
28+
from .dispersive import DispersiveMedium
3029

3130
"""Check that the model is compatible with the medium."""
3231
if isinstance(medium, AbstractCustomMedium):
@@ -516,6 +515,9 @@ def complex_fields(self) -> bool:
516515
return self.use_complex_fields
517516

518517

518+
NonlinearModelType = Union[NonlinearSusceptibility, TwoPhotonAbsorption, KerrNonlinearity]
519+
520+
519521
class NonlinearSpec(ABC, Tidy3dBaseModel):
520522
"""Abstract specification for adding nonlinearities to a medium.
521523

tidy3d/components/medium/perturbation.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
from tidy3d.exceptions import SetupError
2121

2222
from .base import AbstractCustomMedium, AbstractMedium
23-
from .dispersionless import Medium
24-
from .dispersive import PoleResidue
23+
from .dispersionless import CustomMedium, Medium
24+
from .dispersive import CustomPoleResidue, PoleResidue
25+
from .dispersive_abc import DispersiveMedium
2526

2627

2728
class AbstractPerturbationMedium(ABC, Tidy3dBaseModel):

tidy3d/components/medium/types.py

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
from typing import Union
22

3-
NonlinearModelType = Union[NonlinearSusceptibility, TwoPhotonAbsorption, KerrNonlinearity]
3+
from .dispersionless import CustomIsotropicMedium, Medium, PECMedium
4+
from .dispersive import (
5+
CustomDebye,
6+
CustomDrude,
7+
CustomLorentz,
8+
CustomPoleResidue,
9+
CustomSellmeier,
10+
Debye,
11+
Drude,
12+
Lorentz,
13+
PoleResidue,
14+
Sellmeier,
15+
)
16+
from .lossy_metal import LossyMetalMedium
17+
418
IsotropicUniformMediumType = Union[
519
Medium, LossyMetalMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, PECMedium
620
]
@@ -13,25 +27,3 @@
1327
]
1428
IsotropicCustomMediumInternalType = Union[IsotropicCustomMediumType, CustomIsotropicMedium]
1529
IsotropicMediumType = Union[IsotropicCustomMediumType, IsotropicUniformMediumType]
16-
MediumType3D = Union[
17-
Medium,
18-
AnisotropicMedium,
19-
PECMedium,
20-
PoleResidue,
21-
Sellmeier,
22-
Lorentz,
23-
Debye,
24-
Drude,
25-
FullyAnisotropicMedium,
26-
CustomMedium,
27-
CustomPoleResidue,
28-
CustomSellmeier,
29-
CustomLorentz,
30-
CustomDebye,
31-
CustomDrude,
32-
CustomAnisotropicMedium,
33-
PerturbationMedium,
34-
PerturbationPoleResidue,
35-
LossyMetalMedium,
36-
]
37-
MediumType = Union[MediumType3D, Medium2D, AnisotropicMediumFromMedium2D]

0 commit comments

Comments
 (0)