Skip to content

Commit fcff3af

Browse files
do we have backwards compatbility
1 parent 1103e5d commit fcff3af

File tree

1 file changed

+127
-25
lines changed

1 file changed

+127
-25
lines changed

tidy3d/plugins/smatrix/component_modelers/terminal.py

Lines changed: 127 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
from __future__ import annotations
44

5-
import os
65
from typing import Optional, Union
76

87
import numpy as np
98
import pydantic.v1 as pd
109

1110
from tidy3d.components.base import cached_property
11+
from tidy3d.components.data.data_array import DataArray, FreqDataArray
12+
from tidy3d.components.data.monitor_data import MonitorData
13+
from tidy3d.components.data.sim_data import SimulationData
1214
from tidy3d.components.geometry.utils_2d import snap_coordinate_to_grid
15+
from tidy3d.components.microwave.data.monitor_data import AntennaMetricsData
1316
from tidy3d.components.monitor import DirectivityMonitor
1417
from tidy3d.components.simulation import Simulation
1518
from tidy3d.components.source.time import GaussianPulse
@@ -323,32 +326,131 @@ def run(self, path_dir: str = DEFAULT_DATA_DIR):
323326
from tidy3d.plugins.smatrix.data.data import SMatrixData, TerminalComponentModelerData
324327

325328
_ = self.get_path_dir(path_dir)
326-
_ = self._upload_terminal_modeler()
329+
# _ = self._upload_terminal_modeler()
327330
batch_data = self._construct_smatrix()
328331
smatrix_data = SMatrixData(batch_data=batch_data)
329332
return TerminalComponentModelerData(simulation=self, data=(smatrix_data,))
330333

331-
@cached_property
332-
def _terminal_modeler_path(self) -> str:
333-
"""Where we store the for this :class:`TerminalComponentModeler` instance after the run."""
334-
return os.path.join(self.path_dir, "tcp_" + str(hash(self)) + ".hdf5")
335-
336-
def _upload_terminal_modeler(self):
337-
# TODO properly refactor, plugins data types should not have web methods.
338-
from tidy3d.web.api.container import Job
339-
340-
# first try loading the terminal_component_modeler from file, if it exists
341-
terminal_modeler_path = self._terminal_modeler_path
342-
343-
if os.path.exists(terminal_modeler_path):
344-
return Job.from_file(fname=terminal_modeler_path)
345-
346-
return Job(
347-
simulation=self,
348-
task_name=self.name,
349-
folder_name=self.folder_name,
350-
callback_url=self.callback_url,
351-
verbose=self.verbose,
352-
solver_version=self.solver_version,
353-
simulation_type="microwave",
334+
##### Backwards compatibility methods #####
335+
336+
def compute_power_wave_amplitudes_at_each_port(
337+
self, port_reference_impedances: PortDataArray, sim_data: SimulationData
338+
) -> tuple[PortDataArray, PortDataArray]:
339+
from tidy3d.plugins.smatrix.data.data import SMatrixData, TerminalComponentModelerData
340+
341+
a = SMatrixData(a=self.batch_data)
342+
data = TerminalComponentModelerData(
343+
simulation=self, data=a
344+
).compute_power_wave_amplitudes_at_each_port(
345+
port_reference_impedances=port_reference_impedances, sim_data=sim_data
346+
)
347+
return data
348+
349+
def _monitor_data_at_port_amplitude(
350+
self,
351+
port: TerminalPortType,
352+
sim_data: SimulationData,
353+
monitor_data: MonitorData,
354+
a_port: Union[FreqDataArray, complex],
355+
) -> MonitorData:
356+
from tidy3d.plugins.smatrix.data.data import SMatrixData, TerminalComponentModelerData
357+
358+
a = SMatrixData(a=self.batch_data)
359+
data = TerminalComponentModelerData(
360+
simulation=self, data=a
361+
)._monitor_data_at_port_amplitude(
362+
port=port, sim_data=sim_data, monitor_data=monitor_data, a_port=a_port
354363
)
364+
return data
365+
366+
def get_antenna_metrics_data(
367+
self,
368+
port_amplitudes: Optional[dict[str, complex]] = None,
369+
monitor_name: Optional[str] = None,
370+
) -> AntennaMetricsData:
371+
from tidy3d.plugins.smatrix.data.data import SMatrixData, TerminalComponentModelerData
372+
373+
a = SMatrixData(a=self.batch_data)
374+
data = TerminalComponentModelerData(simulation=self, data=a).get_antenna_metrics_data(
375+
port_amplitudes=port_amplitudes, monitor_name=monitor_name
376+
)
377+
return data
378+
379+
@staticmethod
380+
def _check_port_impedance_sign(Z_numpy: np.ndarray):
381+
from tidy3d.plugins.smatrix.utils import _check_port_impedance_sign
382+
383+
return _check_port_impedance_sign(Z_numpy)
384+
385+
@cached_property
386+
def port_reference_impedances(self) -> PortDataArray:
387+
from tidy3d.plugins.smatrix.data.data import SMatrixData, TerminalComponentModelerData
388+
389+
a = SMatrixData(a=self.batch_data)
390+
data = TerminalComponentModelerData(simulation=self, data=a).port_reference_impedances
391+
return data
392+
393+
@staticmethod
394+
def s_to_z(
395+
s_matrix: TerminalPortDataArray, reference: Union[complex, PortDataArray]
396+
) -> DataArray:
397+
from tidy3d.plugins.smatrix.utils import s_to_z
398+
399+
return s_to_z(s_matrix=s_matrix, reference=reference)
400+
401+
@staticmethod
402+
def ab_to_s(
403+
a_matrix: TerminalPortDataArray, b_matrix: TerminalPortDataArray
404+
) -> TerminalPortDataArray:
405+
from tidy3d.plugins.smatrix.utils import ab_to_s
406+
407+
return ab_to_s(a_matrix=a_matrix, b_matrix=b_matrix)
408+
409+
@staticmethod
410+
def compute_power_delivered_by_port(
411+
port: Union[LumpedPort, CoaxialLumpedPort], sim_data: SimulationData
412+
) -> FreqDataArray:
413+
from tidy3d.plugins.smatrix.utils import compute_power_delivered_by_port
414+
415+
return compute_power_delivered_by_port(port=port, sim_data=sim_data)
416+
417+
@staticmethod
418+
def compute_power_wave_amplitudes(
419+
port: Union[LumpedPort, CoaxialLumpedPort], sim_data: SimulationData
420+
) -> tuple[FreqDataArray, FreqDataArray]:
421+
from tidy3d.plugins.smatrix.utils import compute_power_wave_amplitudes
422+
423+
return compute_power_wave_amplitudes(port=port, sim_data=sim_data)
424+
425+
@staticmethod
426+
def compute_port_VI(
427+
port_out: TerminalPortType, sim_data: SimulationData
428+
) -> tuple[FreqDataArray, FreqDataArray]:
429+
from tidy3d.plugins.smatrix.utils import compute_port_VI
430+
431+
return compute_port_VI(port_out=port_out, sim_data=sim_data)
432+
433+
# @cached_property
434+
# def _terminal_modeler_path(self) -> str:
435+
# """Where we store the for this :class:`TerminalComponentModeler` instance after the run."""
436+
# return os.path.join(self.path_dir, "tcp_" + str(hash(self)) + ".hdf5")
437+
#
438+
# def _upload_terminal_modeler(self):
439+
# # TODO properly refactor, plugins data types should not have web methods.
440+
# from tidy3d.web.api.container import Job
441+
#
442+
# # first try loading the terminal_component_modeler from file, if it exists
443+
# terminal_modeler_path = self._terminal_modeler_path
444+
#
445+
# if os.path.exists(terminal_modeler_path):
446+
# return Job.from_file(fname=terminal_modeler_path)
447+
#
448+
# return Job(
449+
# simulation=self,
450+
# task_name=self.name,
451+
# folder_name=self.folder_name,
452+
# callback_url=self.callback_url,
453+
# verbose=self.verbose,
454+
# solver_version=self.solver_version,
455+
# simulation_type="microwave",
456+
# )

0 commit comments

Comments
 (0)