Skip to content

Commit

Permalink
Merge branch 'main' into ic_mode
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcapodi78 authored Apr 18, 2024
2 parents 98b3018 + a9f3c41 commit f934a48
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 75 deletions.
8 changes: 4 additions & 4 deletions pyaedt/aedt_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,8 @@ def _log_on_dekstop(self, message_type, message_text, level=None, proj_name=None
if not level:
level = "Design"

assert level in message_levels, "Message level must be `Design', 'Project', or 'Global'."
if level not in message_levels:
raise ValueError("Message level must be 'Design', 'Project', or 'Global'.")

if self._log_on_desktop and self._desktop:
if not proj_name and message_levels[level] > 0:
Expand All @@ -590,9 +591,8 @@ def _log_on_dekstop(self, message_type, message_text, level=None, proj_name=None
des_name = des_name[des_name.find(";") + 1 :]
try:
self._desktop.AddMessage(proj_name, des_name, message_type, message_text)

except Exception: # pragma: no cover
pass
self._global.info("Failed to add desktop message.")

def _log_on_handler(self, message_type, message_text, *args, **kwargs):
message_text = str(message_text)
Expand Down Expand Up @@ -660,7 +660,7 @@ def clear_messages(self, proj_name=None, des_name=None, level=2):
try:
self._desktop.ClearMessages(proj_name, des_name, level)
except Exception: # pragma: no cover
pass
self._global.info("Failed to clear desktop messages.")

@property
def non_graphical(self):
Expand Down
73 changes: 31 additions & 42 deletions pyaedt/application/Analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
from pyaedt.modules.SolveSweeps import SetupProps

if is_linux and is_ironpython:
import subprocessdotnet as subprocess
import subprocessdotnet as subprocess # nosec
else:
import subprocess
import subprocess # nosec


class Analysis(Design, object):
Expand Down Expand Up @@ -290,10 +290,11 @@ def active_setup(self):
def active_setup(self, setup_name):
setup_list = self.existing_analysis_setups
if setup_list:
assert setup_name in setup_list, "Invalid setup name {}".format(setup_name)
if setup_name not in setup_list:
raise ValueError("Setup name {} is invalid.".format(setup_name))
self._setup = setup_name
else:
raise AttributeError("No setup defined")
raise AttributeError("No setup is defined.")

@property
def existing_analysis_sweeps(self):
Expand Down Expand Up @@ -711,7 +712,7 @@ def export_results(
self.post.oreportsetup.ExportToFile(str(report_name), export_path)
self.logger.info("Export Data: {}".format(export_path))
except Exception:
pass
self.logger.info("Failed to export to file.")
exported_files.append(export_path)

if touchstone_format == "MagPhase":
Expand Down Expand Up @@ -950,19 +951,18 @@ def _get_native_data(self):
data_vals = [data_vals]
for ds in data_vals:
try:
component_name = "undefined"
if isinstance(ds, (OrderedDict, dict)):
boundaries.append(
NativeComponentObject(
self,
ds["NativeComponentDefinitionProvider"]["Type"],
ds["BasicComponentInfo"]["ComponentName"],
ds,
)
)
component_type = ds["NativeComponentDefinitionProvider"]["Type"]
component_name = ds["BasicComponentInfo"]["ComponentName"]
native_component_object = NativeComponentObject(self, component_type, component_name, ds)
boundaries.append(native_component_object)
except Exception:
pass
msg = "Failed to add native component object."
msg_end = "." if component_name == "undefined" else "(named {}).".format(component_name)
self.logger.debug(msg + msg_end)
except Exception:
pass
self.logger.debug("Failed to add native component object.")
return boundaries

class AvailableVariations(object):
Expand Down Expand Up @@ -1504,7 +1504,8 @@ def get_output_variable(self, variable, solution=None):
>>> oDesign.GetNominalVariation
>>> oModule.GetOutputVariableValue
"""
assert variable in self.output_variables, "Output variable {} does not exist.".format(variable)
if variable not in self.output_variables:
raise KeyError("Output variable {} does not exist.".format(variable))
nominal_variation = self.odesign.GetNominalVariation()
if solution is None:
solution = self.existing_analysis_sweeps[0]
Expand Down Expand Up @@ -1698,11 +1699,9 @@ def analyze_setup(
name = line.strip().split("=")[1]
break
if name:
try:
self.set_registry_key(r"Desktop/ActiveDSOConfigurations/" + self.design_type, name)
success = self.set_registry_key(r"Desktop/ActiveDSOConfigurations/" + self.design_type, name)
if success:
set_custom_dso = True
except Exception:
pass
elif num_gpu or num_tasks or num_cores:
config_name = "pyaedt_config"
source_name = os.path.join(self.pyaedt_dir, "misc", "pyaedt_local_config.acf")
Expand Down Expand Up @@ -1776,10 +1775,10 @@ def analyze_setup(
self.set_registry_key(r"Desktop/ActiveDSOConfigurations/" + self.design_type, config_name)
set_custom_dso = True
except Exception:
pass
self.logger.info("Failed to set registry from file {}.".format(target_name))
if not name:
try:
self.logger.info("Solving all design setups")
self.logger.info("Solving all design setups.")
if self.desktop_class.aedt_version_id > "2023.1":
self.odesign.AnalyzeAll(blocking)
else:
Expand Down Expand Up @@ -1924,25 +1923,16 @@ def solve_in_batch(
if os.path.exists(queue_file_completed):
os.unlink(queue_file_completed)

if is_linux and settings.use_lsf_scheduler:
options = [
"-ng",
"-BatchSolve",
"-machinelist",
"list={}:{}:{}:90%:1".format(machine, num_tasks, num_cores),
"-Monitor",
]
if num_tasks == -1:
options.append("-distributed")
options.append("-auto")
else:
options = [
"-ng",
"-BatchSolve",
"-machinelist",
"list={}:{}:{}:90%:1".format(machine, num_tasks, num_cores),
"-Monitor",
]
options = [
"-ng",
"-BatchSolve",
"-machinelist",
"list={}:{}:{}:90%:1".format(machine, num_tasks, num_cores),
"-Monitor",
]
if is_linux and settings.use_lsf_scheduler and num_tasks == -1:
options.append("-distributed")
options.append("-auto")
if setup_name and design_name:
options.append(
"{}:{}:{}".format(
Expand Down Expand Up @@ -1988,7 +1978,6 @@ def solve_in_batch(
DETACHED_PROCESS = 0x00000008
subprocess.Popen(batch_run, creationflags=DETACHED_PROCESS)
self.logger.info("Batch job launched.")

else:
subprocess.Popen(batch_run)
self.logger.info("Batch job finished.")
Expand Down
3 changes: 2 additions & 1 deletion pyaedt/application/Analysis3D.py
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,8 @@ def flatten_3d_components(self, component_name=None, purge_history=True, passwor
if isinstance(component_name, str):
component_name = [component_name]
for cmp in component_name:
assert cmp in self.modeler.user_defined_component_names, "Component Definition not found."
if cmp not in self.modeler.user_defined_component_names:
raise ValueError("Component definition was not found for '{}'.".format(cmp))

for cmp in component_name:
comp = self.modeler.user_defined_components[cmp]
Expand Down
50 changes: 24 additions & 26 deletions pyaedt/application/Design.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ def boundaries(self):
if k not in self._boundaries:
self._boundaries[k] = BoundaryObject(self, k, boundarytype=v)
except Exception:
pass
self.logger.info("Failed to design boundary object.")
return list(self._boundaries.values())

@property
Expand Down Expand Up @@ -520,8 +520,9 @@ def project_properties(self):
try:
settings._project_properties[os.path.normpath(self.project_file)] = load_entire_aedt_file(file_path)
except Exception:
pass
self._logger.info("aedt file load time {}".format(time.time() - start))
self._logger.info("Failed to load AEDT file.")
else:
self._logger.info("Time to load AEDT file: {}.".format(time.time() - start))
if os.path.normpath(self.project_file) in settings._project_properties:
return settings._project_properties[os.path.normpath(self.project_file)]
return {}
Expand Down Expand Up @@ -621,7 +622,8 @@ def design_name(self, new_name):
]:
time.sleep(timestep)
timeout -= timestep
assert timeout >= 0
if timeout < 0:
raise RuntimeError("Timeout reached while checking design renaming.")

@property
def design_list(self):
Expand Down Expand Up @@ -1128,9 +1130,8 @@ def oproject(self, proj_name=None):
self._add_handler()
self.logger.info("Project %s set to active.", pname)
elif os.path.exists(project):
assert not is_project_locked(
project
), "Project is locked. Close or remove the lock before proceeding."
if is_project_locked(project):
raise RuntimeError("Project is locked. Close or remove the lock before proceeding.")
self.logger.info("aedt project found. Loading it.")
self._oproject = self.odesktop.OpenProject(project)
self._add_handler()
Expand All @@ -1154,9 +1155,8 @@ def oproject(self, proj_name=None):
self._add_handler()
self.logger.info("Project %s set to active.", pname)
else:
assert not is_project_locked(
proj_name
), "Project is locked. Close or remove the lock before proceeding."
if is_project_locked(proj_name):
raise RuntimeError("Project is locked. Close or remove the lock before proceeding.")
self._oproject = self.odesktop.OpenProject(proj_name)
self._add_handler()
self.logger.info("Project %s has been opened.", self._oproject.GetName())
Expand Down Expand Up @@ -2246,7 +2246,7 @@ def _get_boundaries_data(self):
)
)
except Exception:
pass
self.logger.debug("Failed to retrieve boundary data from 'BoundarySetup'.")
if self.design_properties and "MaxwellParameterSetup" in self.design_properties:
for ds in self.design_properties["MaxwellParameterSetup"]["MaxwellParameters"]:
try:
Expand All @@ -2264,7 +2264,7 @@ def _get_boundaries_data(self):
)
)
except Exception:
pass
self.logger.debug("Failed to retrieve boundary data from 'MaxwellParameterSetup'.")
if self.design_properties and "ModelSetup" in self.design_properties:
if "MotionSetupList" in self.design_properties["ModelSetup"]:
for ds in self.design_properties["ModelSetup"]["MotionSetupList"]:
Expand All @@ -2282,7 +2282,7 @@ def _get_boundaries_data(self):
)
)
except Exception:
pass
self.logger.debug("Failed to retrieve boundary data from 'ModelSetup'.")
if self.design_type in ["HFSS 3D Layout Design"]:
for port in self.oboundary.GetAllPortsList():
bound = self._update_port_info(port)
Expand Down Expand Up @@ -2361,7 +2361,7 @@ def _get_project_datasets(self):
]
datasets[ds] = self._get_ds_data(ds, data)
except Exception:
pass
self.logger.debug("Failed to retrieve project data sets.")
return datasets

@pyaedt_function_handler()
Expand All @@ -2373,7 +2373,7 @@ def _get_design_datasets(self):
data = self.design_properties["ModelSetup"]["DesignDatasets"]["DatasetDefinitions"][ds]["Coordinates"]
datasets[ds] = self._get_ds_data(ds, data)
except Exception:
pass
self.logger.debug("Failed to retrieve design data sets.")
return datasets

@pyaedt_function_handler()
Expand Down Expand Up @@ -3298,9 +3298,9 @@ def insert_design(self, design_name=None, solution_type=None):
)

def _insert_design(self, design_type, design_name=None):
assert design_type in self.design_solutions.design_types, "Invalid design type for insert: {}".format(
design_type
)
if design_type not in self.design_solutions.design_types:
raise ValueError("Design type of insert '{}' is invalid.".format(design_type))

# self.save_project() ## Commented because it saves a Projectxxx.aedt when launched on an empty Desktop
unique_design_name = self._generate_unique_design_name(design_name)

Expand Down Expand Up @@ -3705,7 +3705,8 @@ def delete_project(self, project_name):
>>> oDesktop.DeleteProject
"""
assert self.project_name != project_name, "You cannot delete the active project."
if self.project_name == project_name:
raise ValueError("You cannot delete the active project.")
self.odesktop.DeleteProject(project_name)
return True

Expand Down Expand Up @@ -3932,13 +3933,10 @@ def _assert_consistent_design_type(self, des_name):
self._odesign = self._oproject.SetActiveDesign(des_name)
dtype = self._odesign.GetDesignType()
if dtype != "RMxprt":
assert dtype == self._design_type, "Error: Specified design is not of type {}.".format(
self._design_type
)
else:
assert ("RMxprtSolution" == self._design_type) or (
"ModelCreation" == self._design_type
), "Error: Specified design is not of type {}.".format(self._design_type)
if dtype != self._design_type:
raise ValueError("Specified design is not of type {}.".format(self._design_type))
elif self._design_type not in {"RMxprtSolution", "ModelCreation"}:
raise ValueError("Specified design is not of type {}.".format(self._design_type))
return True
elif ":" in des_name:
try:
Expand Down
3 changes: 3 additions & 0 deletions pyaedt/desktop.py
Original file line number Diff line number Diff line change
Expand Up @@ -1491,6 +1491,9 @@ def release_desktop(self, close_projects=True, close_on_exit=True):
if not result:
self.logger.error("Error releasing desktop.")
return False
self.logger._desktop_class = None
self.logger._oproject = None
self.logger._odesign = None
if close_on_exit:
self.logger.info("Desktop has been released and closed.")
else:
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ doc = [
#"scikit-learn",
"scikit-rf>=0.30.0,<0.33",
"Sphinx==5.3.0; python_version == '3.7'",
"Sphinx>=7.1.0,<7.3; python_version > '3.7'",
"Sphinx>=7.1.0,<7.4; python_version > '3.7'",
"sphinx-autobuild==2021.3.14; python_version == '3.7'",
"sphinx-autobuild==2021.3.14; python_version == '3.8'",
"sphinx-autobuild==2024.4.16; python_version > '3.8'",
Expand All @@ -108,7 +108,7 @@ doc-noexamples = [
"numpydoc>=1.5.0,<1.8",
# "recommonmark",
"Sphinx==5.3.0; python_version == '3.7'",
"Sphinx>=7.1.0,<7.3; python_version > '3.7'",
"Sphinx>=7.1.0,<7.4; python_version > '3.7'",
"sphinx-autobuild==2021.3.14; python_version == '3.7'",
"sphinx-autobuild==2021.3.14; python_version == '3.8'",
"sphinx-autobuild==2024.4.16; python_version > '3.8'",
Expand Down

0 comments on commit f934a48

Please sign in to comment.