Skip to content

Moved libcosimc loading to _internal.py #16

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions hatch_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ def initialize(self, version: str, build_data: dict[str, Any]) -> None:
frame = frame_info.frame
module = inspect.getmodule(frame)
if module and module.__name__.startswith("hatchling.build") and "config_settings" in frame.f_locals:
config_settings = frame.f_locals["config_settings"]
config_settings = frame.f_locals["config_settings"] or {}

package_list = config_settings.get("CONAN_BUILD")
if package_list:
build_packages = " ".join([f"-b {p}/*" for p in package_list.split(",")])
else:
build_packages = "-b missing"

assert os.system(f"conan install . -u {build_packages} -of build --format json --out-file graph.json") == 0, (
"Conan install failed"
)
assert (
os.system(f"conan install . -u {build_packages} -of build --format json -b b2/* --out-file graph.json") == 0
), "Conan install failed"

if "CONAN_UPLOAD_OSP" in os.environ:
print("Uploading packages..")
Expand Down
9 changes: 4 additions & 5 deletions src/libcosimpy/CosimAlgorithm.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
from dataclasses import dataclass
from typing import Optional

from . import CosimLibrary
from ._internal import wrap_function, get_last_error_message
from ._internal import wrap_function, get_last_error_message, libcosimc

if typing.TYPE_CHECKING:
from ctypes import _Pointer # pyright: ignore[reportPrivateUsage]
Expand Down Expand Up @@ -69,7 +68,7 @@ def __init__(
)

self.__ecco_add_power_bond = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_ecco_add_power_bond",
argtypes=[POINTER(CosimAlgorithm), c_int, c_uint32, c_uint32, c_int, c_uint32, c_uint32],
restype=c_int,
Expand All @@ -78,7 +77,7 @@ def __init__(
@classmethod
def create_ecco_algorithm(cls, param: EccoParams) -> CosimAlgorithm:
ecco_algorithm_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_ecco_algorithm_create",
argtypes=[
c_double,
Expand Down Expand Up @@ -156,7 +155,7 @@ def __del__(self):
# Release object in C when object is removed (if pointer exists)
if self.__ptr is not None:
algorithm_destroy = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_algorithm_destroy",
argtypes=[POINTER(CosimAlgorithm)],
restype=c_int,
Expand Down
70 changes: 35 additions & 35 deletions src/libcosimpy/CosimExecution.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
)
from typing import Optional

from . import CosimConstants, CosimEnums, CosimLibrary, CosimManipulator, CosimObserver, CosimSlave
from ._internal import wrap_function
from . import CosimConstants, CosimEnums, CosimManipulator, CosimObserver, CosimSlave
from ._internal import wrap_function, libcosimc, get_last_error_message
from .CosimAlgorithm import CosimAlgorithm

if typing.TYPE_CHECKING:
Expand Down Expand Up @@ -57,55 +57,55 @@ def __init__(self, create_key: object = None, execution_ptr: Optional[CosimExecu
self.__execution_status_ptr = pointer(self.execution_status)

self.__multiple_steps = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_step",
argtypes=[POINTER(CosimExecution), c_int64],
restype=None,
)
self.__add_local_slave = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_add_slave",
argtypes=[POINTER(CosimExecution), POINTER(CosimSlave.CosimLocalSlave)],
restype=c_int,
)
self.__simulate_until = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_simulate_until",
argtypes=[POINTER(CosimExecution), c_int64],
restype=c_int,
)
self.__stop = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_stop",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
)
self.__enable_real_time_simulation = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_enable_real_time_simulation",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
)
self.__disable_real_time_simulation = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_disable_real_time_simulation",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
)
self.__real_time_factor_target = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_real_time_factor_target",
argtypes=[POINTER(CosimExecution), c_double],
restype=c_int,
)
self.__steps_to_monitor = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_steps_to_monitor",
argtypes=[POINTER(CosimExecution), c_int],
restype=c_int,
)
self.__add_manipulator = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_add_manipulator",
argtypes=[
POINTER(CosimExecution),
Expand All @@ -114,31 +114,31 @@ def __init__(self, create_key: object = None, execution_ptr: Optional[CosimExecu
restype=c_int,
)
self.__add_observer = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_add_observer",
argtypes=[POINTER(CosimExecution), POINTER(CosimObserver.CosimObserver)],
restype=c_int,
)
self.__status = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_get_status",
argtypes=[POINTER(CosimExecution), POINTER(CosimExecutionStatus)],
restype=c_int,
)
self.__slave_num_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_slave_get_num_variables",
argtypes=[POINTER(CosimExecution), c_int],
restype=c_int,
)
self.__num_modified_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_get_num_modified_variables",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
)
self.__load_scenario = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_load_scenario",
argtypes=[
POINTER(CosimExecution),
Expand All @@ -148,55 +148,55 @@ def __init__(self, create_key: object = None, execution_ptr: Optional[CosimExecu
restype=c_int,
)
self.__real_initial = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_real_initial_value",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_double],
restype=c_int,
)
self.__integer_initial = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_integer_initial_value",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_int],
restype=c_int,
)

self.__boolean_initial = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_boolean_initial_value",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_bool],
restype=c_int,
)

self.__string_initial = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_set_string_initial_value",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_char_p],
restype=c_int,
)

self.__connect_real_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_connect_real_variables",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_int, c_uint32],
restype=c_int,
)

self.__connect_int_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_connect_integer_variables",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_int, c_uint32],
restype=c_int,
)

self.__connect_string_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_connect_string_variables",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_int, c_uint32],
restype=c_int,
)

self.__connect_boolean_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_connect_boolean_variables",
argtypes=[POINTER(CosimExecution), c_int, c_uint32, c_int, c_uint32],
restype=c_int,
Expand All @@ -210,7 +210,7 @@ def from_algorithm(cls, algorithm: CosimAlgorithm):
:return: CosimExecution object
"""
execution_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_create_with_algorithm",
argtypes=[c_int64, POINTER(CosimAlgorithm)],
restype=POINTER(CosimExecution),
Expand Down Expand Up @@ -243,7 +243,7 @@ def from_step_size(cls, step_size: int | float):
assert step_size > 0, "Step size must be a positive and non-zero integer"

execution_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_create",
argtypes=[c_int64, c_int64],
restype=POINTER(CosimExecution),
Expand All @@ -260,7 +260,7 @@ def from_osp_config_file(cls, osp_path: str):
:return: CosimExecution object
"""
osp_execution_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_osp_config_execution_create",
argtypes=[c_char_p, c_bool, c_int64],
restype=POINTER(CosimExecution),
Expand All @@ -272,7 +272,7 @@ def from_osp_config_file(cls, osp_path: str):

execution_ptr = osp_execution_create(encoded_osp_path, False, 0)

assert execution_ptr, "Unable to create execution from path. Please check if path is correct."
assert execution_ptr, f"Unable to create execution from path: {get_last_error_message()}"

return cls(cls.__create_key, execution_ptr)

Expand All @@ -288,7 +288,7 @@ def from_ssp_file(cls, ssp_path: str, step_size: Optional[int | float] = None):
if step_size is None:
# Create simulation without defined step size
ssp_execution_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_ssp_execution_create",
argtypes=[c_char_p, c_bool, c_int64],
restype=POINTER(CosimExecution),
Expand All @@ -309,7 +309,7 @@ def from_ssp_file(cls, ssp_path: str, step_size: Optional[int | float] = None):

# Create simulation with defined step size
ssp_fixed_step_execution_create = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_ssp_fixed_step_execution_create",
argtypes=[c_char_p, c_bool, c_int64, c_int64],
restype=POINTER(CosimExecution),
Expand All @@ -327,7 +327,7 @@ def num_slaves(self):
:return: int Number of currently connected slaves
"""
execution_get_num_slaves = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_get_num_slaves",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
Expand All @@ -341,7 +341,7 @@ def start(self):
:return: bool Successful start of execution
"""
execution_start = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_start",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
Expand Down Expand Up @@ -468,7 +468,7 @@ def slave_infos(self):
slave_count = self.num_slaves()
slave_infos_list = (CosimSlave.CosimSlaveInfo * slave_count)()
slave_infos = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_get_slave_infos",
argtypes=[
POINTER(CosimExecution),
Expand Down Expand Up @@ -521,7 +521,7 @@ def slave_variables(self, slave_index: int):
slave_variables_count = self.num_slave_variables(slave_index)
slave_variables_list = (CosimSlave.CosimSlaveVariableDescription * slave_variables_count)()
slave_variables = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_slave_get_variables",
argtypes=[
POINTER(CosimExecution),
Expand Down Expand Up @@ -675,7 +675,7 @@ def __del__(self):
# Release object in C when object is removed (if pointer exists)
if self.__ptr is not None:
execution_destroy = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_execution_destroy",
argtypes=[POINTER(CosimExecution)],
restype=c_int,
Expand Down
17 changes: 0 additions & 17 deletions src/libcosimpy/CosimLibrary.py

This file was deleted.

5 changes: 2 additions & 3 deletions src/libcosimpy/CosimLogging.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from ctypes import c_int
from ._internal import wrap_function
from . import CosimLibrary
from ._internal import wrap_function, libcosimc

from enum import Enum

Expand All @@ -25,7 +24,7 @@ def log_output_level(log_level: CosimLogLevel):
:param CosimLogLevel log_level:
"""
log_output_level_set = wrap_function(
lib=CosimLibrary.lib,
lib=libcosimc(),
funcname="cosim_log_set_output_level",
argtypes=[c_int],
restype=None,
Expand Down
Loading