fix: Extract fixes incl. draw, array-copy on export.

main
Sofus Albert Høgsbro Rose 2024-04-24 19:06:15 +02:00
parent 785995117e
commit badadfbfc2
Signed by: so-rose
GPG Key ID: AD901CB0F3701434
3 changed files with 22 additions and 8 deletions

View File

@ -109,6 +109,7 @@ ignore = [
"ERA001", # 'Commented-out code' seems to be just about anything to ruff
"F722", # jaxtyping uses type annotations that ruff sees as "syntax error"
"N806", # Sometimes we like using types w/uppercase in functions, sue me
"RUF001", # We use a lot of unicode, yes, on purpose!
# Line Length - Controversy Incoming
## Hot Take: Let the Formatter Worry about Line Length

View File

@ -1,9 +1,11 @@
"""Declares `ExtractDataNode`."""
import enum
import typing as typ
import bpy
import jax
import jax.numpy as jnp
import numpy as np
import sympy.physics.units as spu
import tidy3d as td
@ -246,9 +248,17 @@ class ExtractDataNode(base.MaxwellSimNode):
row = col.row()
box = row.box()
grid = box.grid_flow(row_major=True, columns=2, even_columns=True)
for monitor_name, monitor_type in self.sim_data_monitor_nametype.items():
grid.label(text=monitor_name)
grid.label(text=monitor_type)
if has_sim_data:
for (
monitor_name,
monitor_type,
) in self.sim_data_monitor_nametype.items():
grid.label(text=monitor_name)
grid.label(text=monitor_type.replace('Data', ''))
elif has_monitor_data:
for component_name in self.monitor_data_components:
grid.label(text=component_name)
grid.label(text=self.monitor_data_type)
####################
# - Events
@ -319,6 +329,7 @@ class ExtractDataNode(base.MaxwellSimNode):
"""Compute `Data:Array` by querying an array-like attribute of `Monitor Data`, then constructing an `ct.ArrayFlow`.
Uses the internal `xarray` data returned by Tidy3D.
By using `np.array` on the `.data` attribute of the `xarray`, instead of the usual JAX array constructor, we should save a (possibly very big) copy.
Notes:
The attribute to query is read directly from `self.extract_filter`.
@ -335,8 +346,7 @@ class ExtractDataNode(base.MaxwellSimNode):
xarray_data = getattr(
input_sockets['Monitor Data'], props['extract_filter']
)
return ct.ArrayFlow(values=jnp.array(xarray_data.data), unit=None)
## TODO: Try np.array instead, as it removes a copy, while still (I believe) being JIT-compatible.
return ct.ArrayFlow(values=np.array(xarray_data.data), unit=None)
return ct.FlowSignal.FlowPending
@ -373,6 +383,11 @@ class ExtractDataNode(base.MaxwellSimNode):
kind=ct.FlowKind.Params,
)
def compute_data_params(self) -> ct.ParamsFlow:
"""Declare an empty `Data:Params`, to indicate the start of a function-composition pipeline.
Returns:
A completely empty `ParamsFlow`, ready to be composed.
"""
return ct.ParamsFlow()
@events.computes_output_socket(

View File

@ -375,7 +375,6 @@ class CachedBLProperty:
return
if value == Signal.InvalidateCache:
log.critical('![%s] Invalidating %s', str(bl_instance), str(self))
self._invalidate_cache(bl_instance)
return
@ -577,7 +576,6 @@ class BLField:
Thus, whenever the user wants the items in the enum to update, they must manually set the descriptor attribute to the value `Signal.ResetEnumItems`.
"""
if self._enum_cb_cache.get(_self.instance_id) is None:
log.critical('REGEN ENUM')
# Retrieve Dynamic Enum Items
enum_items = self._enum_cb(_self, context)