refactor: Prepare for deeper refactor
parent
ad548b8f03
commit
514b49160e
|
@ -14,21 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# oscillode Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""A visual DSL for electromagnetic simulation design and analysis implemented as a Blender node editor."""
|
||||
|
||||
from . import assets, node_trees, operators, preferences, registration
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from . import geonodes
|
||||
|
||||
BL_REGISTER = [
|
||||
|
|
|
@ -14,29 +14,12 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Provides for the linking and/or appending of geometry nodes trees from vendored libraries included in Blender maxwell."""
|
||||
|
||||
import enum
|
||||
from pathlib import Path
|
||||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell import contracts as ct
|
||||
from blender_maxwell.utils import logger
|
||||
|
||||
|
@ -401,7 +384,7 @@ class GeoNodesToStructureNode(bpy.types.Operator):
|
|||
####################
|
||||
def invoke(
|
||||
self, context: bpy.types.Context, _: bpy.types.Event
|
||||
) -> set[ct.BLOperatorStatus]:
|
||||
) -> ct.BLOperatorStatus:
|
||||
"""Commences the drag-and-drop of a GeoNodes asset.
|
||||
|
||||
- Starts the modal timer, which listens for a mouse-release event.
|
||||
|
|
|
@ -14,21 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Independent constants and types, which represent a kind of 'social contract' governing communication between all components of the addon."""
|
||||
|
||||
from . import addon
|
||||
from .bl import (
|
||||
|
@ -53,13 +39,18 @@ from .bl import (
|
|||
PropName,
|
||||
SocketName,
|
||||
)
|
||||
from .bl_types import BLEnumStrEnum
|
||||
from .icons import Icon
|
||||
from .mobj_types import ManagedObjType
|
||||
from .node_tree_types import (
|
||||
NodeTreeType,
|
||||
)
|
||||
from .operator_types import (
|
||||
OperatorType,
|
||||
)
|
||||
from .panel_types import (
|
||||
PanelType,
|
||||
)
|
||||
from .unit_systems import UNITS_BLENDER, UNITS_TIDY3D
|
||||
|
||||
__all__ = [
|
||||
'addon',
|
||||
|
@ -80,12 +71,16 @@ __all__ = [
|
|||
'BLSpaceType',
|
||||
'KeymapItemDef',
|
||||
'ManagedObjName',
|
||||
'ManagedObjType',
|
||||
'PresetName',
|
||||
'PropName',
|
||||
'SocketName',
|
||||
'BLEnumStrEnum',
|
||||
'Icon',
|
||||
'BLInstance',
|
||||
'InstanceID',
|
||||
'NodeTreeType',
|
||||
'OperatorType',
|
||||
'PanelType',
|
||||
'UNITS_BLENDER',
|
||||
'UNITS_TIDY3D',
|
||||
]
|
||||
|
|
|
@ -62,8 +62,8 @@ def operator(
|
|||
raise ValueError(msg)
|
||||
|
||||
# Run Operator
|
||||
operator = getattr(getattr(bpy.ops, NAME), operator_name)
|
||||
operator(*operator_args, **operator_kwargs)
|
||||
bl_operator = getattr(getattr(bpy.ops, NAME), operator_name)
|
||||
bl_operator(*operator_args, **operator_kwargs)
|
||||
## TODO: Can't we constrain 'name' to be an OperatorType somehow?
|
||||
|
||||
|
||||
|
|
|
@ -14,21 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Explicit type annotations for Blender objects, making it easier to guarantee correctness in communications with Blender."""
|
||||
|
||||
import typing as typ
|
||||
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import typing as typ
|
||||
|
||||
|
||||
####################
|
||||
# - Blender Enum (w/EnumProperty support)
|
||||
####################
|
||||
class BLEnumStrEnum(typ.Protocol):
|
||||
@staticmethod
|
||||
def to_name(value: typ.Self) -> str: ...
|
||||
|
||||
@staticmethod
|
||||
def to_icon(value: typ.Self) -> str: ...
|
|
@ -14,26 +14,14 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Provides an enum that semantically constrains the use of icons throughout the addon."""
|
||||
|
||||
import enum
|
||||
|
||||
|
||||
class Icon(enum.StrEnum):
|
||||
"""Identifiers for icons used throughout this addon."""
|
||||
|
||||
# Node Tree
|
||||
SimNodeEditor = 'MOD_SIMPLEDEFORM'
|
||||
|
|
@ -30,12 +30,16 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Provides identifiers for objects in Blender that are managed on behalf of the user, for use by the addon, in order to provide a safe and streamlined integration of more complex data representations that flow between the addon and Blender."""
|
||||
|
||||
import enum
|
||||
|
||||
from blender_maxwell.utils import blender_type_enum
|
||||
|
||||
|
||||
class ManagedObjType(blender_type_enum.BlenderTypeEnum):
|
||||
"""Identifiers for 'managed objects', which encapsulates a particular Blender object and provides alternative semantics more suited to the needs of this addon."""
|
||||
|
||||
ManagedBLImage = enum.auto()
|
||||
|
||||
ManagedBLCollection = enum.auto()
|
|
@ -0,0 +1,28 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Provides identifiers for node trees defined by this addon."""
|
||||
|
||||
import enum
|
||||
|
||||
from oscillode.utils import blender_type_enum
|
||||
|
||||
|
||||
@blender_type_enum.append_cls_name_to_values
|
||||
class NodeTreeType(blender_type_enum.BlenderTypeEnum):
|
||||
"""Identifiers for addon-defined node trees."""
|
||||
|
||||
MaxwellSim = enum.auto()
|
|
@ -14,27 +14,12 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Defines Operator Types as an enum, making it easy for any part of the addon to refer to any operator."""
|
||||
"""Provides identifiers for Blender operators defined by this addon."""
|
||||
|
||||
import enum
|
||||
|
||||
from ..utils import blender_type_enum
|
||||
from oscillode.utils import blender_type_enum
|
||||
|
||||
from .addon import NAME as ADDON_NAME
|
||||
|
||||
|
||||
|
|
|
@ -14,27 +14,11 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Defines Panel Types as an enum, making it easy for any part of the addon to refer to any panel."""
|
||||
|
||||
import enum
|
||||
|
||||
from blender_maxwell.nodeps.utils import blender_type_enum
|
||||
from oscillode.utils import blender_type_enum
|
||||
|
||||
from .addon import NAME as ADDON_NAME
|
||||
|
||||
|
|
|
@ -14,23 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Specifies unit systems for use in the node tree.
|
||||
"""Provides particular pre-defined unit systems for use by the addon.
|
||||
|
||||
Attributes:
|
||||
UNITS_BLENDER: A unit system that serves as a reasonable default for the a 3D workspace that interprets the results of electromagnetic simulations.
|
||||
|
@ -45,7 +29,7 @@ import typing as typ
|
|||
import sympy.physics.units as spu
|
||||
from frozendict import frozendict
|
||||
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
|
||||
####################
|
||||
# - Unit Systems
|
|
@ -14,29 +14,10 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Provides various useful managed objects, which enables the clean and safe use of objects external to this addon."""
|
||||
|
||||
from .base import ManagedObj
|
||||
|
||||
# from .managed_bl_empty import ManagedBLEmpty
|
||||
from .managed_bl_image import ManagedBLImage
|
||||
|
||||
# from .managed_bl_collection import ManagedBLCollection
|
||||
# from .managed_bl_object import ManagedBLObject
|
||||
from .managed_bl_mesh import ManagedBLMesh
|
||||
|
||||
# from .managed_bl_volume import ManagedBLVolume
|
||||
|
@ -44,13 +25,8 @@ from .managed_bl_modifier import ManagedBLModifier
|
|||
|
||||
__all__ = [
|
||||
'ManagedObj',
|
||||
#'ManagedBLEmpty',
|
||||
'ManagedBLImage',
|
||||
#'ManagedBLCollection',
|
||||
#'ManagedBLObject',
|
||||
'ManagedBLMesh',
|
||||
#'ManagedBLVolume',
|
||||
'ManagedBLModifier',
|
||||
]
|
||||
|
||||
## REMEMBER: Add the appropriate entry to the bl_cache.DECODER
|
|
@ -0,0 +1,125 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Provides the base protocol on which all ManagedObjs are derived, as well as explicit protocols describing common features supported by some `ManagedObjs`."""
|
||||
|
||||
import abc
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
|
||||
from .. import contracts as ct
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
||||
class ManagedObj(typ.Protocol):
|
||||
"""A weak name-based reference to some kind of object external to this software.
|
||||
|
||||
While the object doesn't have to come from Blender's `bpy.types`, that is the driving motivation for this class: To encapsulate access to the powerful visual tools granted by Blender's 3D viewport, image editor, and UI.
|
||||
Through extensive trial-and-error, this transparently-cached immediate-mode interface has emerged as the best compromise.
|
||||
|
||||
While not suited to all use cases, the `ManagedObj` paradigm is ideal for the common situation of 'node ownership of external logic'.
|
||||
For example, a plotting node needs access to its own image buffer; however, for it to be displayable, that image buffer must be owned by Blender.
|
||||
This is where `ManagedObj` provides the ability of the plotting node to "loosely own" a particular Blender image, which both allows the user to see/interact with the image as a typical Blender image, but also allows the node to drive ex. lifecycle (like removing the image plot when the node is deleted).
|
||||
|
||||
This approach of loose name-coupling is not perfect. To name a few examples:
|
||||
|
||||
- A particular challenge is that of identifying and namespacing managed datablocks. The user may, for example, change the name of an object - and what do we do then? Is generating new data under the now-vacant name a feature? Or is it a systematic memory leak backed by dangling fake-owned datablocks?
|
||||
- The precise definition of "loose ownership" is itself a matter of taste. Stronger ownership presumptions allow for stronger guarantees and simpler caching - but at the cost of more brittle breaks when the underlying objects are manipulated in ways we don't expect.
|
||||
- `.blend` persistance is not the default when it comes to certain Blender objects, which raises deeper UX questions about how opinionated we should be about where users put data.
|
||||
- Solving this doesn't help actually deal with data. There's a lot of very specific nuance in every single data pipeline, and that complexity is only added to watever this approach incurs.
|
||||
|
||||
This abstract base class serves to provide a few of the most basic of commonly-available operations.
|
||||
In particular, implementations of `dump_as_msgspec`/`parse_as_msgspec` are enforced, for use with `oscillode.utils.serialize`.
|
||||
This way, ex. opening a `.blend` file will allow a newly-deserialized `ManagedObj` to re-attach transparently to the also-persisted underlying datablock.
|
||||
|
||||
Parameters:
|
||||
managed_obj_type: Enum identifier indicating which of the `ct.ManagedObjType` the instance should declare itself as.
|
||||
"""
|
||||
|
||||
managed_obj_type: ct.ManagedObjType
|
||||
|
||||
@abc.abstractmethod
|
||||
def __init__(self, name: ct.ManagedObjName, prev_name: str | None = None):
|
||||
"""Initializes the managed object with a unique name.
|
||||
|
||||
Use `prev_name` to indicate that the managed object will initially be avaiable under `prev_name`, but that it should be renamed to `name`.
|
||||
"""
|
||||
|
||||
####################
|
||||
# - Properties
|
||||
####################
|
||||
@property
|
||||
@abc.abstractmethod
|
||||
def name(self) -> str:
|
||||
"""Retrieve the name of the managed object."""
|
||||
|
||||
@name.setter
|
||||
@abc.abstractmethod
|
||||
def name(self, value: str) -> None:
|
||||
"""Retrieve the name of the managed object."""
|
||||
|
||||
####################
|
||||
# - Methods
|
||||
####################
|
||||
@abc.abstractmethod
|
||||
def free(self) -> None:
|
||||
"""Cleanup the resources managed by the managed object."""
|
||||
|
||||
@abc.abstractmethod
|
||||
def hide_preview(self) -> None:
|
||||
"""Hide any active preview of the managed object, if it exists, and if such an operation makes sense."""
|
||||
|
||||
####################
|
||||
# - Serialization
|
||||
####################
|
||||
def dump_as_msgspec(self) -> serialize.NaiveRepresentation:
|
||||
"""Bijectively transform this managed object into a 'naive representation' that uses only basic Python types, which may be serialized cleanly."""
|
||||
return [
|
||||
serialize.TypeID.ManagedObj,
|
||||
self.__class__.__name__,
|
||||
self.name,
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def parse_as_msgspec(obj: serialize.NaiveRepresentation) -> typ.Self:
|
||||
"""Bijectively construct an instance of this managed object from the 'naive representation', which may have been deserialized into."""
|
||||
return next(
|
||||
subclass(obj[2])
|
||||
for subclass in ManagedObj.__subclasses__()
|
||||
if subclass.__name__ == obj[1]
|
||||
)
|
||||
|
||||
|
||||
####################
|
||||
# - Support Flags
|
||||
####################
|
||||
class SupportsBlenderSelect(typ.Protocol):
|
||||
"""Protocol guaranteeing the ability to select the object in Blender."""
|
||||
|
||||
def bl_select(self) -> None:
|
||||
"""Select the managed object in Blender."""
|
||||
|
||||
|
||||
class Supportsreview(typ.Protocol):
|
||||
"""Protocol guaranteeing support for previewing the object."""
|
||||
|
||||
def show_preview(self) -> None:
|
||||
"""Shows a preview of the managed object."""
|
||||
|
||||
def hide_preview(self) -> None:
|
||||
"""Hide any active preview of the managed object, if it exists."""
|
|
@ -32,12 +32,12 @@
|
|||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
MANAGED_COLLECTION_NAME = 'BLMaxwell'
|
||||
PREVIEW_COLLECTION_NAME = 'BLMaxwell Visible'
|
||||
MANAGED_COLLECTION_NAME = 'Oscillode'
|
||||
PREVIEW_COLLECTION_NAME = 'Oscillode Visible'
|
||||
|
||||
|
||||
####################
|
|
@ -14,23 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Declares `ManagedBLImage`."""
|
||||
"""Declares an object encapsulating access to a Blender image datablock from this addon."""
|
||||
|
||||
import time
|
||||
import typing as typ
|
||||
|
@ -39,15 +23,17 @@ import bpy
|
|||
import matplotlib.axis as mpl_ax
|
||||
import numpy as np
|
||||
|
||||
from blender_maxwell.utils import image_ops, logger
|
||||
from oscillode.utils import image_ops, logger
|
||||
|
||||
from .. import contracts as ct
|
||||
from . import base
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
AREA_TYPE = 'IMAGE_EDITOR'
|
||||
SPACE_TYPE = 'IMAGE_EDITOR'
|
||||
AREA_TYPE: ct.BLSpaceType = (
|
||||
'IMAGE_EDITOR' ##TODO: Is SpaceType different than AreaType?
|
||||
)
|
||||
SPACE_TYPE: ct.BLSpaceType = 'IMAGE_EDITOR'
|
||||
|
||||
|
||||
####################
|
||||
|
@ -60,7 +46,7 @@ class ManagedBLImage(base.ManagedObj):
|
|||
name: The name of the image.
|
||||
"""
|
||||
|
||||
managed_obj_type = ct.ManagedObjType.ManagedBLImage
|
||||
managed_obj_type: str = ct.ManagedObjType.ManagedBLImage
|
||||
_bl_image_name: str
|
||||
|
||||
def __init__(self, name: str, prev_name: str | None = None):
|
||||
|
@ -186,6 +172,7 @@ class ManagedBLImage(base.ManagedObj):
|
|||
####################
|
||||
# - Methods
|
||||
####################
|
||||
## TODO: Rename to show_preview()
|
||||
def bl_select(self) -> None:
|
||||
"""Selects the image by loading it into an on-screen UI area/space.
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import contextlib
|
||||
|
||||
import bmesh
|
||||
|
@ -37,7 +21,7 @@ import bpy
|
|||
import jax
|
||||
import numpy as np
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
from .. import contracts as ct
|
||||
from . import base
|
|
@ -14,31 +14,17 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""A managed Blender modifier, associated with some Blender object."""
|
||||
|
||||
## TODO: Make a common core for modifier manipulation, then specify each modifier as a seperate ManagedObj.
|
||||
|
||||
import typing as typ
|
||||
|
||||
import bpy
|
||||
import jax
|
||||
import numpy as np
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
from .. import bl_socket_map
|
||||
from .. import contracts as ct
|
||||
|
@ -170,6 +156,8 @@ def write_modifier(
|
|||
# - ManagedObj
|
||||
####################
|
||||
class ManagedBLModifier(base.ManagedObj):
|
||||
"""Manages a particular modifier attached to a Blender mesh also managed by this construction."""
|
||||
|
||||
managed_obj_type = ct.ManagedObjType.ManagedBLModifier
|
||||
_modifier_name: str | None = None
|
||||
twin_bl_mesh: ManagedBLMesh | None = None
|
|
@ -14,32 +14,13 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Declares `ManagedBLText`."""
|
||||
|
||||
import time
|
||||
import typing as typ
|
||||
|
||||
import bpy
|
||||
import matplotlib.axis as mpl_ax
|
||||
import numpy as np
|
||||
|
||||
from blender_maxwell.utils import image_ops, logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
from .. import contracts as ct
|
||||
from . import base
|
||||
|
@ -54,10 +35,10 @@ SPACE_TYPE = 'IMAGE_EDITOR'
|
|||
# - Managed BL Image
|
||||
####################
|
||||
class ManagedBLText(base.ManagedObj):
|
||||
"""Represents a Blender Image datablock, encapsulating various useful interactions with it.
|
||||
"""Represents a Blender text datablock, encapsulating various useful interactions with it.
|
||||
|
||||
Attributes:
|
||||
name: The name of the image.
|
||||
name: The name of the text datablock.
|
||||
"""
|
||||
|
||||
managed_obj_type = ct.ManagedObjType.ManagedBLText
|
|
@ -46,6 +46,8 @@ from . import sockets
|
|||
|
||||
log = _logger.get(__name__)
|
||||
|
||||
## TODO: Coordinate w/refactor of managed modifiers; for example, the contents of this file would be ideally specified as the implementation of a Protocol, for the particular case of this node tree.
|
||||
|
||||
|
||||
####################
|
||||
# - Blender -> Socket Def(s)
|
||||
|
|
|
@ -38,6 +38,9 @@ import nodeitems_utils
|
|||
from . import contracts as ct
|
||||
from .nodes import BL_NODES
|
||||
|
||||
## TODO: Completely refactor this file, and rename it to reflect that it doesn't define or implement any categories - it simply, dumbly, implements the menu.
|
||||
## - Actually; we could delete this file by refactoring it, implementing the logic in a utils/ module, then running the dangling registration as a rote-registration matter in __init__.py.
|
||||
|
||||
DYNAMIC_SUBMENU_REGISTRATIONS = []
|
||||
|
||||
|
||||
|
@ -117,7 +120,7 @@ BL_REGISTER = [*DYNAMIC_SUBMENU_REGISTRATIONS] ## Must be run after, right now.
|
|||
|
||||
|
||||
def menu_draw(self, context):
|
||||
if context.space_data.tree_type == ct.TreeType.MaxwellSim.value:
|
||||
if context.space_data.tree_type == ct.NodeTreeType.MaxwellSim.value:
|
||||
for nodeitem_or_submenu in BL_NODE_CATEGORIES:
|
||||
if isinstance(nodeitem_or_submenu, str):
|
||||
submenu_id = nodeitem_or_submenu
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from blender_maxwell.contracts import (
|
||||
UNITS_BLENDER,
|
||||
UNITS_TIDY3D,
|
||||
BLClass,
|
||||
BLColorRGBA,
|
||||
BLEnumElement,
|
||||
|
@ -45,8 +47,11 @@ from blender_maxwell.contracts import (
|
|||
BLPropFlag,
|
||||
BLRegionType,
|
||||
BLSpaceType,
|
||||
Icon,
|
||||
KeymapItemDef,
|
||||
ManagedObjName,
|
||||
ManagedObjType,
|
||||
NodeTreeType,
|
||||
OperatorType,
|
||||
PanelType,
|
||||
PresetName,
|
||||
|
@ -72,8 +77,6 @@ from .flow_kinds import (
|
|||
ValueFlow,
|
||||
)
|
||||
from .flow_signals import FlowSignal
|
||||
from .icons import Icon
|
||||
from .mobj_types import ManagedObjType
|
||||
from .node_types import NodeType
|
||||
from .sim_types import (
|
||||
BoundCondType,
|
||||
|
@ -90,8 +93,6 @@ from .sim_types import (
|
|||
)
|
||||
from .socket_colors import SOCKET_COLORS
|
||||
from .socket_types import SocketType
|
||||
from .tree_types import TreeType
|
||||
from .unit_systems import UNITS_BLENDER, UNITS_TIDY3D
|
||||
|
||||
__all__ = [
|
||||
'BLClass',
|
||||
|
@ -108,16 +109,17 @@ __all__ = [
|
|||
'BLPropFlag',
|
||||
'BLRegionType',
|
||||
'BLSpaceType',
|
||||
'Icon',
|
||||
'KeymapItemDef',
|
||||
'ManagedObjName',
|
||||
'ManagedObjType',
|
||||
'NodeTreeType',
|
||||
'OperatorType',
|
||||
'PanelType',
|
||||
'PresetName',
|
||||
'PropName',
|
||||
'SocketName',
|
||||
'addon',
|
||||
'Icon',
|
||||
'TreeType',
|
||||
'SocketType',
|
||||
'SOCKET_COLORS',
|
||||
'SOCKET_SHAPES',
|
||||
|
@ -139,7 +141,6 @@ __all__ = [
|
|||
'manual_amp_time',
|
||||
'NodeCategory',
|
||||
'NODE_CAT_LABELS',
|
||||
'ManagedObjType',
|
||||
'FlowEvent',
|
||||
'ArrayFlow',
|
||||
'CapabilitiesFlow',
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
## TODO: Unify w/category_types.py
|
||||
|
||||
from .category_types import NodeCategory as NC # noqa: N817
|
||||
|
||||
NODE_CAT_LABELS = {
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
|
||||
from blender_maxwell.utils import blender_type_enum
|
||||
|
|
|
@ -14,23 +14,9 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Socket base colors for Maxwell Sim sockets."""
|
||||
|
||||
from .socket_types import SocketType as ST
|
||||
from .socket_types import SocketType as ST # noqa: N817
|
||||
|
||||
## TODO: Don't just presume sRGB.
|
||||
SOCKET_COLORS = {
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
|
||||
from blender_maxwell.utils import blender_type_enum
|
||||
|
@ -37,6 +21,8 @@ from blender_maxwell.utils import blender_type_enum
|
|||
|
||||
@blender_type_enum.append_cls_name_to_values
|
||||
class SocketType(blender_type_enum.BlenderTypeEnum):
|
||||
"""Identifiers for valid sockets in Maxwell Sim node trees."""
|
||||
|
||||
Expr = enum.auto()
|
||||
|
||||
# Base
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
|
||||
from blender_maxwell.utils import blender_type_enum
|
||||
|
||||
|
||||
@blender_type_enum.append_cls_name_to_values
|
||||
class TreeType(blender_type_enum.BlenderTypeEnum):
|
||||
MaxwellSim = enum.auto()
|
|
@ -1,111 +0,0 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import abc
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
|
||||
from .. import contracts as ct
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
||||
class ManagedObj(abc.ABC):
|
||||
"""A weak name-based reference to some kind of object external to this software.
|
||||
|
||||
While the object doesn't have to come from Blender's `bpy.types`, that is admittedly the driving motivation for this class: To encapsulate access to the powerful visual tools granted by Blender's 3D viewport, image editor, and UI.
|
||||
Through extensive testing, the functionality of an implicitly-cached, semi-strictly immediate-mode interface, demanding only a weakly-referenced name as persistance, has emerged (with all of the associated tradeoffs).
|
||||
|
||||
While not suited to all use cases, the `ManagedObj` paradigm is perfect for many situations where a node needs to "loosely own" something external and non-trivial.
|
||||
Intriguingly, the precise definition of "loose" has grown to vary greatly between subclasses, as it ends of demonstrating itself to be a matter of taste more than determinism.
|
||||
|
||||
This abstract base class serves to provide a few of the most basic of commonly-available - especially the `dump_as_msgspec`/`parse_as_msgspec` methods that allow it to be persisted using `blender_maxwell.utils.serialize`.
|
||||
|
||||
Parameters:
|
||||
managed_obj_type: Enum identifier indicating which of the `ct.ManagedObjType` the instance should declare itself as.
|
||||
"""
|
||||
|
||||
managed_obj_type: ct.ManagedObjType
|
||||
|
||||
@abc.abstractmethod
|
||||
def __init__(self, name: ct.ManagedObjName, prev_name: str | None = None):
|
||||
"""Initializes the managed object with a unique name.
|
||||
|
||||
Use `prev_name` to indicate that the managed object will initially be avaiable under `prev_name`, but that it should be renamed to `name`.
|
||||
"""
|
||||
|
||||
####################
|
||||
# - Properties
|
||||
####################
|
||||
@property
|
||||
@abc.abstractmethod
|
||||
def name(self) -> str:
|
||||
"""Retrieve the name of the managed object."""
|
||||
|
||||
@name.setter
|
||||
@abc.abstractmethod
|
||||
def name(self, value: str) -> None:
|
||||
"""Retrieve the name of the managed object."""
|
||||
|
||||
####################
|
||||
# - Methods
|
||||
####################
|
||||
@abc.abstractmethod
|
||||
def free(self) -> None:
|
||||
"""Cleanup the resources managed by the managed object."""
|
||||
|
||||
@abc.abstractmethod
|
||||
def bl_select(self) -> None:
|
||||
"""Select the managed object in Blender, if such an operation makes sense."""
|
||||
|
||||
@abc.abstractmethod
|
||||
def hide_preview(self) -> None:
|
||||
"""Hide any active preview of the managed object, if it exists, and if such an operation makes sense."""
|
||||
|
||||
####################
|
||||
# - Serialization
|
||||
####################
|
||||
def dump_as_msgspec(self) -> serialize.NaiveRepresentation:
|
||||
return [
|
||||
serialize.TypeID.ManagedObj,
|
||||
self.__class__.__name__,
|
||||
self.name,
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def parse_as_msgspec(obj: serialize.NaiveRepresentation) -> typ.Self:
|
||||
return next(
|
||||
subclass(obj[2])
|
||||
for subclass in ManagedObj.__subclasses__()
|
||||
if subclass.__name__ == obj[1]
|
||||
)
|
|
@ -1,32 +0,0 @@
|
|||
# oscillode
|
||||
# Copyright (C) 2024 oscillode Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
|
@ -14,33 +14,17 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# TODO: Factor this stuff into a dedicated utils/ module, so that this particular node tree becomes simple (aka. the deathly complicated logic is factored out, and can be ex. unit tested all on its own).
|
||||
## - Then this file can focus on what is special about a Maxwell Sim node tree, as opposed to the lower-level details of how we've chosen to structure our node trees in general.
|
||||
## - Right now there may not be a distinction. And there may never be. But it's a healthy way to think about the problem.
|
||||
|
||||
import contextlib
|
||||
import functools
|
||||
import queue
|
||||
import typing as typ
|
||||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
from blender_maxwell.utils import logger
|
||||
|
||||
from . import contracts as ct
|
||||
from .managed_objs.managed_bl_image import ManagedBLImage
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
@ -320,7 +304,7 @@ class MaxwellSimTree(bpy.types.NodeTree):
|
|||
In general, only one `MaxwellSimTree` should be active at a time.
|
||||
"""
|
||||
|
||||
bl_idname = ct.TreeType.MaxwellSim.value
|
||||
bl_idname = ct.NodeTreeType.MaxwellSim.value
|
||||
bl_label = 'Maxwell Sim Editor'
|
||||
bl_icon = ct.Icon.SimNodeEditor
|
||||
|
||||
|
@ -552,7 +536,8 @@ def populate_missing_persistence(_) -> None:
|
|||
for node_tree in [
|
||||
_node_tree
|
||||
for _node_tree in bpy.data.node_groups
|
||||
if _node_tree.bl_idname == ct.TreeType.MaxwellSim.value and _node_tree.is_active
|
||||
if _node_tree.bl_idname == ct.NodeTreeType.MaxwellSim.value
|
||||
and _node_tree.is_active
|
||||
]:
|
||||
log.debug(
|
||||
'%s: Regenerating Dynamic Field Persistance for NodeTree nodes/sockets',
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from . import (
|
||||
analysis,
|
||||
inputs,
|
||||
|
|
|
@ -1196,7 +1196,7 @@ class MaxwellSimNode(bpy.types.Node, bl_instance.BLInstance):
|
|||
Returns:
|
||||
Whether or not the node can be instantiated within the given node tree.
|
||||
"""
|
||||
return node_tree.bl_idname == ct.TreeType.MaxwellSim.value
|
||||
return node_tree.bl_idname == ct.NodeTreeType.MaxwellSim
|
||||
|
||||
def init(self, _: bpy.types.Context) -> None:
|
||||
"""Initialize the node instance, including ID, name, socket, presets, and the execution of any `on_value_changed` methods with the `run_on_init` keyword set.
|
||||
|
|
|
@ -146,7 +146,8 @@ def update_scene_node_after_frame_changed(
|
|||
for node_tree in [
|
||||
_node_tree
|
||||
for _node_tree in bpy.data.node_groups
|
||||
if _node_tree.bl_idname == ct.TreeType.MaxwellSim.value and _node_tree.is_active
|
||||
if _node_tree.bl_idname == ct.NodeTreeType.MaxwellSim.value
|
||||
and _node_tree.is_active
|
||||
]:
|
||||
for node in [
|
||||
_node
|
||||
|
|
|
@ -385,7 +385,7 @@ class ExprBLSocket(base.MaxwellSimSocket):
|
|||
####################
|
||||
lazy_range_name: sim_symbols.SimSymbolName = bl_cache.BLField(
|
||||
sim_symbols.SimSymbolName.Expr
|
||||
)
|
||||
) ## TODO: Delete (...what is it for?)
|
||||
output_name: sim_symbols.SimSymbolName = bl_cache.BLField(
|
||||
sim_symbols.SimSymbolName.Constant
|
||||
)
|
||||
|
@ -989,6 +989,7 @@ class ExprBLSocket(base.MaxwellSimSocket):
|
|||
####################
|
||||
# - FlowKind: Func (w/Params if Constant)
|
||||
####################
|
||||
## TODO: Consider some way of checking compatibility between the three.
|
||||
@bl_cache.cached_bl_property(depends_on={'output_sym'})
|
||||
def lazy_func(self) -> ct.FuncFlow:
|
||||
"""Returns a lazy value that computes the expression returned by `self.value`.
|
||||
|
@ -1076,6 +1077,7 @@ class ExprBLSocket(base.MaxwellSimSocket):
|
|||
####################
|
||||
# - FlowKind: Capabilities
|
||||
####################
|
||||
## TODO: Rename to 'capabilities_when_linked'
|
||||
def linked_capabilities(self, info: ct.InfoFlow) -> ct.CapabilitiesFlow:
|
||||
"""When this socket is linked as an output socket, expose these capabilities instead of querying `self.capabilities`.
|
||||
|
||||
|
|
|
@ -14,21 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Blender operators that ship with Oscillode."""
|
||||
|
||||
from . import connect_viewer
|
||||
|
||||
|
|
|
@ -14,74 +14,98 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Operator allowing the user to use the conventional CTRL+SHIFT+LMB to connect arbitrary node outputs to either an existing, or a new, viewer node."""
|
||||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell import contracts as ct
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode import contracts as ct
|
||||
from oscillode.node_trees.maxwell_sim_nodes.contracts import node_types
|
||||
from oscillode.utils import logger
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
||||
class ConnectViewerNode(bpy.types.Operator):
|
||||
"""Connecting the viewer node to the active node in a Maxwell Sim node tree, as defined by selection and mouse-cursor location.
|
||||
|
||||
If there is no active viewer node, then one is created.
|
||||
"""
|
||||
|
||||
bl_idname = ct.OperatorType.ConnectViewerNode
|
||||
bl_label = 'Connect Viewer to Active'
|
||||
bl_description = 'Connect active node to Viewer Node'
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
bl_options = frozenset({'REGISTER', 'UNDO'})
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
def poll(cls, context: bpy.types.Context) -> bool:
|
||||
"""Require the active space to be a Maxwell Sim node tree defined by this addon.
|
||||
|
||||
Notes:
|
||||
Run by Blender when determining whether the operator can run.
|
||||
|
||||
Returns:
|
||||
Whether the operator can run.
|
||||
"""
|
||||
space = context.space_data
|
||||
return (
|
||||
space.type == 'NODE_EDITOR'
|
||||
and space.node_tree is not None
|
||||
and space.node_tree.bl_idname == 'MaxwellSimTreeType'
|
||||
and space.node_tree.bl_idname == ct.NodeTreeType.MaxwellSim
|
||||
)
|
||||
|
||||
def invoke(self, context, event):
|
||||
def invoke(
|
||||
self, context: bpy.types.Context, event: bpy.types.Event
|
||||
) -> ct.BLOperatorStatus:
|
||||
"""Require the active space to be a particular node tree defined by this addon.
|
||||
|
||||
Notes:
|
||||
Run by Blender when determining whether the operator can run.
|
||||
|
||||
Returns:
|
||||
Whether the operator can run.
|
||||
"""
|
||||
node_tree = context.space_data.node_tree
|
||||
|
||||
# Retrieve Mouse Location
|
||||
mlocx = event.mouse_region_x
|
||||
mlocy = event.mouse_region_y
|
||||
|
||||
# Select Node at Location
|
||||
## - Deselect all other nodes.
|
||||
bpy.ops.node.select(
|
||||
extend=False,
|
||||
location=(mlocx, mlocy),
|
||||
)
|
||||
select_node = context.selected_nodes[0]
|
||||
selected_node = context.selected_nodes[0]
|
||||
|
||||
# Find Viewer Node...
|
||||
for node in node_tree.nodes:
|
||||
if node.bl_idname == 'ViewerNodeType':
|
||||
# TODO: Support multiple viewer nodes.
|
||||
if hasattr(node, 'node_type') and node.node_type is node_types.Viewer:
|
||||
viewer_node = node
|
||||
break
|
||||
else:
|
||||
viewer_node = node_tree.nodes.new('ViewerNodeType')
|
||||
viewer_node.location.x = select_node.location.x + 250
|
||||
viewer_node.location.y = select_node.location.y
|
||||
select_node.select = False
|
||||
|
||||
new_link = True
|
||||
# ...OR: Create Viewer Node
|
||||
else:
|
||||
# TODO: Place viewer where it doesn't overlap other nodes.
|
||||
viewer_node = node_tree.nodes.new(node_types.Viewer.value)
|
||||
viewer_node.location.x = selected_node.location.x + 250
|
||||
viewer_node.location.y = selected_node.location.y
|
||||
selected_node.select = False
|
||||
|
||||
# Remove Input Links from Viewer
|
||||
## - Unless the selected node is already linked to the viewer.
|
||||
should_create_new_link = True
|
||||
for link in viewer_node.inputs[0].links:
|
||||
if link.from_node.name == select_node.name:
|
||||
new_link = False
|
||||
if link.from_node.name == selected_node.name:
|
||||
should_create_new_link = False
|
||||
continue
|
||||
node_tree.links.remove(link)
|
||||
|
||||
if new_link:
|
||||
node_tree.links.new(select_node.outputs[0], viewer_node.inputs[0])
|
||||
# Create Link from Selected Node to Viewer
|
||||
if should_create_new_link:
|
||||
node_tree.links.new(selected_node.outputs[0], viewer_node.inputs[0])
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
|
|
|
@ -18,8 +18,6 @@
|
|||
|
||||
Attributes:
|
||||
_ADDON_KEYMAP: Addon-specific keymap used to register operator hotkeys.
|
||||
DELAYED_REGISTRATIONS: Currently pending registration operations, which can be realized with `run_delayed_registration()`.
|
||||
|
||||
REG__CLASSES: Currently registered Blender classes.
|
||||
_REGISTERED_HOTKEYS: Currently registered Blender keymap items.
|
||||
"""
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Defines a sane interface to the Tidy3D cloud, as constructed by reverse-engineering the official open-source `tidy3d` client library.
|
||||
|
||||
- SimulationTask: <https://github.com/flexcompute/tidy3d/blob/453055e89dcff6d619597120b47817e996f1c198/tidy3d/web/core/task_core.py>
|
||||
|
@ -48,7 +32,7 @@ import bpy
|
|||
import tidy3d as td
|
||||
import tidy3d.web as td_web
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Package providing various tools to handle cached data on Blender objects, especially nodes and node socket classes."""
|
||||
|
||||
from ..keyed_cache import KeyedCache, keyed_cache
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements various key caches on instances of Blender objects, especially nodes and sockets."""
|
||||
|
||||
import contextlib
|
||||
|
@ -39,8 +23,8 @@ import typing as typ
|
|||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell import contracts as ct
|
||||
from blender_maxwell.utils import bl_instance, logger
|
||||
from oscillode import contracts as ct
|
||||
from oscillode.utils import bl_instance, logger
|
||||
|
||||
from .bl_prop import BLProp
|
||||
from .bl_prop_type import BLPropType
|
||||
|
@ -202,11 +186,12 @@ class BLField:
|
|||
name: The name of the attribute that an instance of descriptor was assigned to.
|
||||
"""
|
||||
prop_type = inspect.get_annotations(owner).get(name)
|
||||
bl_prop_type = BLPropType.from_type(prop_type)
|
||||
self.bl_prop = BLProp(
|
||||
name=name,
|
||||
prop_info=self.prop_info,
|
||||
prop_type=prop_type,
|
||||
bl_prop_type=BLPropType.from_type(prop_type),
|
||||
bl_prop_type=bl_prop_type,
|
||||
)
|
||||
|
||||
# Initialize Field on BLClass
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Defines `BLProp`, a high-level wrapper for interacting with Blender properties."""
|
||||
|
||||
import dataclasses
|
||||
|
@ -50,7 +34,7 @@ log = logger.get(__name__)
|
|||
####################
|
||||
@dataclasses.dataclass(kw_only=True, frozen=True)
|
||||
class BLProp:
|
||||
"""A high-level wrapper encapsulating access to a Blender property.
|
||||
"""A mid-level representation of a Blender property, which implements unsafe requests from flexible high-level fields using cache operations and normalized Blender type operations.
|
||||
|
||||
Attributes:
|
||||
name: The name of the Blender property, as one uses it.
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Defines `BLPropType`, which provides stronger lower-level interfaces for interacting with data that can be conformed to work with Blender properties."""
|
||||
|
||||
import builtins
|
||||
|
@ -43,9 +27,9 @@ from pathlib import Path
|
|||
import bpy
|
||||
import numpy as np
|
||||
|
||||
from blender_maxwell import contracts as ct
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
from blender_maxwell.utils.staticproperty import staticproperty
|
||||
from oscillode import contracts as ct
|
||||
from oscillode.utils import logger, serialize
|
||||
from oscillode.utils.staticproperty import staticproperty
|
||||
|
||||
from .signal import Signal
|
||||
|
||||
|
@ -106,7 +90,7 @@ def _is_bl_id_struct(T: type) -> bool: # noqa: N803
|
|||
# - Blender Property Type
|
||||
####################
|
||||
class BLPropType(enum.StrEnum):
|
||||
"""A type identifier which can be directly associated with a Blender property.
|
||||
"""A low-level identifier that maps directly to Blender property types.
|
||||
|
||||
For general use, the higher-level interface `BLProp` is more appropriate.
|
||||
|
||||
|
|
|
@ -14,29 +14,13 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements various key caches on instances of Blender objects, especially nodes and sockets."""
|
||||
|
||||
import contextlib
|
||||
import inspect
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import bl_instance, logger, serialize
|
||||
from oscillode.utils import bl_instance, logger, serialize
|
||||
|
||||
from .bl_prop import BLProp
|
||||
from .bl_prop_type import BLPropType
|
||||
|
|
|
@ -14,29 +14,13 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements various key caches on instances of Blender objects, especially nodes and sockets."""
|
||||
|
||||
## TODO: Note that persist=True on cached_bl_property may cause a draw method to try and write to a Blender property, which Blender disallows.
|
||||
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import bl_instance, logger
|
||||
from oscillode.utils import bl_instance, logger
|
||||
|
||||
from .signal import Signal
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import uuid
|
||||
|
||||
|
|
|
@ -14,30 +14,14 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import typing as typ
|
||||
import uuid
|
||||
from types import MappingProxyType
|
||||
|
||||
import bpy
|
||||
|
||||
from blender_maxwell.utils import bl_cache, logger
|
||||
from blender_maxwell.utils.keyed_cache import keyed_cache
|
||||
from oscillode.utils import bl_cache, logger
|
||||
from oscillode.utils.keyed_cache import keyed_cache
|
||||
|
||||
InstanceID: typ.TypeAlias = str ## Stringified UUID4
|
||||
|
||||
|
|
|
@ -24,8 +24,6 @@ import bpy
|
|||
import jax
|
||||
import numpy as np
|
||||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from .array import ArrayFlow
|
||||
from .capabilities import CapabilitiesFlow
|
||||
from .flow_kinds import FlowKind
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import base64
|
||||
import functools
|
||||
import io
|
||||
|
@ -38,14 +22,13 @@ import typing as typ
|
|||
import jax
|
||||
import jax.numpy as jnp
|
||||
import jaxtyping as jtyp
|
||||
import numpy as np
|
||||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.jaxarray import JaxArrayBytes
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.jaxarray import JaxArrayBytes
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import dataclasses
|
||||
import typing as typ
|
||||
from types import MappingProxyType
|
|
@ -14,21 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
# TODO: Consider moving this to the new math system.
|
||||
|
||||
import typing as typ
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import typing as typ
|
||||
|
|
@ -14,30 +14,14 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import functools
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.contracts import BLEnumElement
|
||||
from blender_maxwell.utils import logger
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.staticproperty import staticproperty
|
||||
from oscillode.contracts import BLEnumElement
|
||||
from oscillode.utils import logger
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.staticproperty import staticproperty
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import typing as typ
|
||||
|
|
@ -36,10 +36,10 @@ import typing as typ
|
|||
|
||||
import pydantic as pyd
|
||||
|
||||
from blender_maxwell.utils import logger, sim_symbols
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.frozendict import FrozenDict, frozendict
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger, sim_symbols
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.frozendict import FrozenDict, frozendict
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
from .array import ArrayFlow
|
||||
from .lazy_range import RangeFlow
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
r"""Implements the core of the math system via `FuncFlow`, which allows high-performance, fully-expressive workflows with data that can be "very large", and/or whose input parameters are not yet fully known.
|
||||
|
||||
# Introduction
|
||||
|
@ -235,17 +219,16 @@ But above all, we hope that this math system is fun, practical, and maybe even i
|
|||
|
||||
import functools
|
||||
import typing as typ
|
||||
from types import MappingProxyType
|
||||
|
||||
import jax
|
||||
import jaxtyping as jtyp
|
||||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger, sim_symbols
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.frozendict import FrozenDict, frozendict
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger, sim_symbols
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.frozendict import FrozenDict, frozendict
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
from .array import ArrayFlow
|
||||
from .info import InfoFlow
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import functools
|
||||
import typing as typ
|
||||
|
@ -39,10 +23,10 @@ import jaxtyping as jtyp
|
|||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger, sim_symbols
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.frozendict import frozendict
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger, sim_symbols
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.frozendict import frozendict
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
from .array import ArrayFlow
|
||||
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import functools
|
||||
import typing as typ
|
||||
from fractions import Fraction
|
||||
|
@ -39,10 +23,10 @@ import jaxtyping as jtyp
|
|||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger, sim_symbols
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.frozendict import FrozenDict, frozendict
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger, sim_symbols
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.frozendict import FrozenDict, frozendict
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
from .array import ArrayFlow
|
||||
from .expr_info import ExprInfo
|
|
@ -14,28 +14,12 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import typing as typ
|
||||
|
||||
import bpy
|
||||
import pydantic as pyd
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
IMAGE_AREA_TYPE = 'IMAGE_EDITOR'
|
||||
IMAGE_SPACE_TYPE = 'IMAGE_EDITOR'
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements a `pydantic`-compatible field, `FrozenDict`, which encapsulates a `frozendict` in a serializable way, with semantics identical to `dict`."""
|
||||
|
||||
import typing as typ
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Useful image processing operations for use in the addon."""
|
||||
|
||||
import enum
|
||||
|
@ -45,9 +29,9 @@ import matplotlib.figure
|
|||
import seaborn as sns
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell import contracts as ct
|
||||
from blender_maxwell.utils import logger
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from oscillode import contracts as ct
|
||||
from oscillode.utils import logger
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
|
||||
sns.set_theme()
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements a `pydantic`-compatible field, `JaxArray`, which encapsulates a `jax.Array` in a serializable way."""
|
||||
|
||||
import base64
|
||||
|
@ -42,6 +26,9 @@ import numpy as np
|
|||
import pydantic as pyd
|
||||
from pydantic_core import core_schema as pyd_core_schema
|
||||
|
||||
# TODO: It's possible this is all pointless.
|
||||
# Is https://github.com/p2p-ld/numpydantic our lord and savior?
|
||||
|
||||
|
||||
####################
|
||||
# - Simple JAX Array
|
||||
|
|
|
@ -14,27 +14,11 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import functools
|
||||
import inspect
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
from oscillode.utils import logger, serialize
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
|
|
@ -23,7 +23,8 @@ from pathlib import Path
|
|||
import rich.console
|
||||
import rich.logging
|
||||
import rich.traceback
|
||||
from blender_maxwell import contracts as ct
|
||||
|
||||
from oscillode import contracts as ct
|
||||
|
||||
from ..services import init_settings
|
||||
|
||||
|
|
|
@ -14,21 +14,10 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Provides a Least Recently Used cache for methods, which uses a weak reference to `self` to attach the cache to the object.
|
||||
|
||||
This is a specialized construct to be used carefully and sparsely, when other tradeoffs have failed. Misuse can have serious consequences.
|
||||
"""
|
||||
|
||||
import functools
|
||||
import weakref
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Access `scipy.constants` using `sympy` units.
|
||||
|
||||
Notes:
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""A fast, robust `msgspec`-based serialization tool providing for string-based persistance of many objects.
|
||||
|
||||
Blender provides for strong persistence guarantees based on its `bpy.types.Property` system.
|
||||
|
@ -69,7 +53,6 @@ import typing as typ
|
|||
import uuid
|
||||
|
||||
import msgspec
|
||||
import numpy as np
|
||||
import sympy as sp
|
||||
import tidy3d as td
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Declares a useful, flexible symbolic representation."""
|
||||
|
||||
from .common import (
|
||||
|
@ -114,4 +98,12 @@ __all__ = [
|
|||
'int_min'
|
||||
'mk_interval'
|
||||
'unicode_superscript',
|
||||
'SimSymbolName',
|
||||
'SimSymbol',
|
||||
'float_max',
|
||||
'float_min',
|
||||
'int_max',
|
||||
'int_min',
|
||||
'mk_interval',
|
||||
'unicode_superscript',
|
||||
]
|
||||
|
|
|
@ -14,29 +14,13 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import typing as typ
|
||||
|
||||
import sympy as sp
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from oscillode.utils import logger
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
|
||||
from .name import SimSymbolName
|
||||
from .sim_symbol import SimSymbol
|
||||
|
@ -210,6 +194,7 @@ class CommonSimSymbol(enum.StrEnum):
|
|||
),
|
||||
)
|
||||
|
||||
## TODO: Optimize; SimSymbol is constructed an enormous amount of times!
|
||||
return {
|
||||
CSS.Index: SimSymbol(
|
||||
sym_name=self.name,
|
||||
|
|
|
@ -14,27 +14,11 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import enum
|
||||
import string
|
||||
import typing as typ
|
||||
|
||||
from blender_maxwell.utils import logger
|
||||
from oscillode.utils import logger
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Implements `SimSymbol`, a convenient representation of a symbolic variable suiteable for use when describing various mathematical and numerical interfaces."""
|
||||
|
||||
import functools
|
||||
|
@ -45,10 +29,10 @@ import sympy as sp
|
|||
import sympy.stats as sps
|
||||
from sympy.tensor.array.expressions import ArraySymbol
|
||||
|
||||
from blender_maxwell.utils import logger, serialize
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
from blender_maxwell.utils.frozendict import frozendict
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from oscillode.utils import logger, serialize
|
||||
from oscillode.utils import sympy_extra as spux
|
||||
from oscillode.utils.frozendict import frozendict
|
||||
from oscillode.utils.lru_method import method_lru
|
||||
|
||||
from .name import SimSymbolName
|
||||
from .utils import unicode_superscript
|
||||
|
@ -95,7 +79,7 @@ class SimSymbol(pyd.BaseModel):
|
|||
physical_type: spux.PhysicalType = spux.PhysicalType.NonPhysical
|
||||
|
||||
# Units
|
||||
## -> 'None' indicates that no particular unit has yet been chosen.
|
||||
## -> 'None' indicates that no particular unit has (yet) been chosen.
|
||||
## -> When 'self.physical_type' is NonPhysical, _no unit_ can be chosen.
|
||||
unit: spux.Unit | None = None
|
||||
|
||||
|
@ -768,7 +752,8 @@ class SimSymbol(pyd.BaseModel):
|
|||
) -> typ.Self | None:
|
||||
"""Deduce a `SimSymbol` that matches the output of a given expression (and unit expression).
|
||||
|
||||
This is an essential method, allowing for the ded
|
||||
This is an essential method, allowing arbitrary expressions to be assigned a correct symbolic representation.
|
||||
It is also a heuristic method of parsing, which does its best to interpret the expression - but does not guarantee the expected transcription in all cases.
|
||||
|
||||
Notes:
|
||||
`PhysicalType` **cannot be set** from an expression in the generic sense.
|
||||
|
|
|
@ -14,22 +14,6 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
from fractions import Fraction
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ import dataclasses
|
|||
import enum
|
||||
import functools
|
||||
import typing as typ
|
||||
from fractions import Fraction
|
||||
from pathlib import Path
|
||||
|
||||
import jax.numpy as jnp
|
||||
|
@ -45,13 +44,13 @@ import numpy as np
|
|||
import polars as pl
|
||||
import pydantic as pyd
|
||||
import tidy3d as td
|
||||
|
||||
from blender_maxwell.contracts import BLEnumElement
|
||||
from blender_maxwell.services import tdcloud
|
||||
from blender_maxwell.utils import logger, sim_symbols
|
||||
from blender_maxwell.utils import sympy_extra as spux
|
||||
|
||||
from .flow_kinds.info import InfoFlow
|
||||
## TODO: Use a Protocol interface from data_pipelines/
|
||||
|
||||
log = logger.get(__name__)
|
||||
|
|
@ -14,21 +14,7 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# blender_maxwell
|
||||
# Copyright (C) 2024 blender_maxwell Project Contributors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""Provides a '@staticproperty', which is like '@property', but static. It can be very useful in specific situations."""
|
||||
|
||||
|
||||
class staticproperty(property): # noqa: N801
|
||||
|
|
|
@ -49,9 +49,8 @@ import jax
|
|||
import jax.numpy as jnp
|
||||
import pydantic as pyd
|
||||
import sympy as sp
|
||||
from sympy.sets.setexpr import SetExpr
|
||||
|
||||
from blender_maxwell.utils.lru_method import method_lru
|
||||
from sympy.sets.setexpr import SetExpr
|
||||
|
||||
from .. import logger
|
||||
from .math_type import MathType as MT # noqa: N817
|
||||
|
|
|
@ -170,6 +170,7 @@ ignore = [
|
|||
"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!
|
||||
#"RUF012", # ruff misunderstands which ClassVars are actually mutable.
|
||||
|
||||
# Line Length - Controversy Incoming
|
||||
## Hot Take: Let the Formatter Worry about Line Length
|
||||
|
|
Loading…
Reference in New Issue