From a7d9f68fa8e22fbb3ddac59e7502e4566794a255 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 11:37:26 +0100 Subject: [PATCH 01/43] Replace os.path import_schematic Improve coverage import_schematic --- .../workflows/circuit/import_schematic.py | 44 ++++++++++++------- tests/system/solvers/test_45_workflows.py | 14 +++++- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index a084d4de468..6ded95592fc 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -20,7 +20,8 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os.path + +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import Circuit @@ -57,7 +58,7 @@ def frontend(): # pragma: no cover master.title(extension_description) # Load the logo for the main window - icon_path = os.path.join(ansys.aedt.core.workflows.__path__[0], "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -78,7 +79,7 @@ def frontend(): # pragma: no cover def browse_asc_folder(): inital_dir = text.get("1.0", tkinter.END).strip() filename = filedialog.askopenfilename( - initialdir=os.path.dirname(inital_dir) if inital_dir else "/", + initialdir=Path(initial_dir).parent if inital_dir else "/", title="Select configuration file", filetypes=(("LTSPice file", "*.asc"), ("Spice file", "*.cir *.sp"), ("Qcv file", "*.qcv")), ) @@ -105,18 +106,28 @@ def callback(): def main(extension_args): - asc_file = extension_args["asc_file"] - if not os.path.exists(asc_file): - raise Exception("Error. File doesn't exists.") - cir = Circuit(design=os.path.split(asc_file)[-1][:-4]) - if asc_file.endswith(".asc"): - cir.create_schematic_from_asc_file(asc_file) - elif asc_file.endswith(".sp") or asc_file.endswith(".cir"): - cir.create_schematic_from_netlist(asc_file) - elif asc_file.endswith(".qcv"): - cir.create_schematic_from_mentor_netlist(asc_file) + asc_file = Path(extension_args["asc_file"]) + if not asc_file.exists(): + raise Exception("File does not exist.") + + app = ansys.aedt.core.Desktop( + new_desktop=False, + version=version, + port=port, + aedt_process_id=aedt_process_id, + student_version=is_student, + ) + + cir = Circuit(design=asc_file.stem) + + if asc_file.suffix == ".asc": + cir.create_schematic_from_asc_file(str(asc_file)) + elif asc_file.suffix in {".sp", ".cir"}: + cir.create_schematic_from_netlist(str(asc_file)) + elif asc_file.suffix == ".qcv": + cir.create_schematic_from_mentor_netlist(str(asc_file)) if not extension_args["is_test"]: # pragma: no cover - cir.release_desktop(False, False) + app.release_desktop(False, False) return True @@ -130,5 +141,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index 016aef68a55..d3fcefdc05a 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -513,10 +513,22 @@ def test_14_power_map_creation_ipk(self, local_scratch, add_app): def test_15_import_asc(self, local_scratch, add_app): aedtapp = add_app("Circuit", application=ansys.aedt.core.Circuit) - file_path = os.path.join(local_path, "example_models", "T21", "butter.asc") + from ansys.aedt.core.workflows.circuit.import_schematic import main + file_path = os.path.join(local_path, "example_models", "T21", "butter.asc") + assert main({"is_test": True, "asc_file": file_path}) + + file_path = os.path.join(local_path, "example_models", "T21", "netlist_small.cir") + assert main({"is_test": True, "asc_file": file_path}) + + file_path = os.path.join(local_path, "example_models", "T21", "Schematic1.qcv") assert main({"is_test": True, "asc_file": file_path}) + + file_path_invented = os.path.join(local_path, "example_models", "T21", "butter_invented.asc") + with pytest.raises(Exception) as execinfo: + main({"is_test": True, "asc_file": file_path_invented}) + assert execinfo.args[0] == "File does not exist." aedtapp.close_project() @pytest.mark.skipif(is_linux, reason="Not supported in Linux.") From 00b498e38a6858e7482a8c9517c03499eda64307 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 12:00:09 +0100 Subject: [PATCH 02/43] New style import_schematic --- .../workflows/circuit/import_schematic.py | 28 +++++++++++++------ .../core/workflows/hfss/choke_designer.py | 4 +-- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index 6ded95592fc..9e4c4a10d50 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -39,7 +39,7 @@ # Extension batch arguments extension_arguments = {"asc_file": ""} -extension_description = "Import schematic to Circuit." +extension_description = "Import schematic to Circuit" def frontend(): # pragma: no cover @@ -50,13 +50,17 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("750x250") + master.geometry("650x150") master.title(extension_description) + # Detect if user close the UI + master.flag = False + # Load the logo for the main window icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) @@ -67,10 +71,13 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + theme.apply_light_theme(style) + master.theme = "light" var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) + label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") var2.set("Browse file:") label2.grid(row=0, column=0, pady=10) text = tkinter.Text(master, width=40, height=1) @@ -85,23 +92,26 @@ def browse_asc_folder(): ) text.insert(tkinter.END, filename) - b1 = tkinter.Button(master, text="...", width=10, command=browse_asc_folder) + b1 = ttk.Button(master, text="...", width=10, command=browse_asc_folder, style="PyAEDT.TButton") b1.grid(row=0, column=2, pady=10) def callback(): + master.flag = True master.asc_path_ui = text.get("1.0", tkinter.END).strip() master.destroy() - b3 = tkinter.Button(master, text="Ok", width=40, command=callback) + b3 = ttk.Button(master, text="Ok", width=40, command=callback, style="PyAEDT.TButton") b3.grid(row=1, column=1, pady=10, padx=10) tkinter.mainloop() asc_file_ui = getattr(master, "asc_path_ui", extension_arguments["asc_file"]) - output_dict = { - "asc_file": asc_file_ui, - } + output_dict = {} + if master.flag: + output_dict = { + "asc_file": asc_file_ui, + } return output_dict diff --git a/src/ansys/aedt/core/workflows/hfss/choke_designer.py b/src/ansys/aedt/core/workflows/hfss/choke_designer.py index 0bd442fa66c..46a9a9f5262 100644 --- a/src/ansys/aedt/core/workflows/hfss/choke_designer.py +++ b/src/ansys/aedt/core/workflows/hfss/choke_designer.py @@ -83,7 +83,7 @@ # Extension batch arguments extension_arguments = {"choke_config": {}} -extension_description = "Choke Designer in HFSS" +extension_description = "Choke Designer" def frontend(): # pragma: no cover @@ -102,7 +102,7 @@ def frontend(): # pragma: no cover master.geometry("900x800") - master.title("Choke Designer") + master.title(extension_description) # Detect if user close the UI master.flag = False From 4c60bcb6d1fdfcc8dc0c1bcf3d89343e6ca83d9a Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 14:19:48 +0100 Subject: [PATCH 03/43] New style import_schematic --- .../workflows/circuit/import_schematic.py | 44 ++++++++++++++++--- .../core/workflows/hfss/choke_designer.py | 2 + src/ansys/aedt/core/workflows/misc.py | 2 +- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index 9e4c4a10d50..822bd9c6920 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -44,6 +44,7 @@ def frontend(): # pragma: no cover + from pathlib import Path # Make sure Path is imported import tkinter from tkinter import filedialog from tkinter import ttk @@ -53,12 +54,10 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("650x150") - master.title(extension_description) - # Detect if user close the UI + # Detect if user closes the UI master.flag = False # Load the logo for the main window @@ -73,20 +72,25 @@ def frontend(): # pragma: no cover style = ttk.Style() theme = ExtensionTheme() + # Apply light theme initially theme.apply_light_theme(style) master.theme = "light" + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) + var2 = tkinter.StringVar() label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") var2.set("Browse file:") - label2.grid(row=0, column=0, pady=10) + label2.grid(row=0, column=0, pady=10, padx=10) text = tkinter.Text(master, width=40, height=1) text.grid(row=0, column=1, pady=10, padx=5) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) def browse_asc_folder(): inital_dir = text.get("1.0", tkinter.END).strip() filename = filedialog.askopenfilename( - initialdir=Path(initial_dir).parent if inital_dir else "/", + initialdir=Path(inital_dir).parent if inital_dir else "/", title="Select configuration file", filetypes=(("LTSPice file", "*.asc"), ("Spice file", "*.cir *.sp"), ("Qcv file", "*.qcv")), ) @@ -95,12 +99,40 @@ def browse_asc_folder(): b1 = ttk.Button(master, text="...", width=10, command=browse_asc_folder, style="PyAEDT.TButton") b1.grid(row=0, column=2, pady=10) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + text.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=1, column=2, pady=10, padx=10) # Place it in the second row, third column + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button(button_frame, text="\u263D", command=toggle_theme, style="PyAEDT.TButton") + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): master.flag = True master.asc_path_ui = text.get("1.0", tkinter.END).strip() master.destroy() - b3 = ttk.Button(master, text="Ok", width=40, command=callback, style="PyAEDT.TButton") + b3 = ttk.Button(master, text="Import", width=40, command=callback, style="PyAEDT.TButton") b3.grid(row=1, column=1, pady=10, padx=10) tkinter.mainloop() diff --git a/src/ansys/aedt/core/workflows/hfss/choke_designer.py b/src/ansys/aedt/core/workflows/hfss/choke_designer.py index 46a9a9f5262..c97ab6d3e08 100644 --- a/src/ansys/aedt/core/workflows/hfss/choke_designer.py +++ b/src/ansys/aedt/core/workflows/hfss/choke_designer.py @@ -269,10 +269,12 @@ def toggle_theme(): master.theme = "light" def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) theme.apply_light_theme(style) change_theme_button.config(text="\u263D") def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) theme.apply_dark_theme(style) change_theme_button.config(text="\u2600") diff --git a/src/ansys/aedt/core/workflows/misc.py b/src/ansys/aedt/core/workflows/misc.py index 943b41e0eba..25e3531f563 100644 --- a/src/ansys/aedt/core/workflows/misc.py +++ b/src/ansys/aedt/core/workflows/misc.py @@ -103,7 +103,7 @@ def __init__(self): "radiobutton_selected": "#E0E0E0", # Color when selected "radiobutton_unselected": "#FFFFFF", # Color when unselected "pane_bg": "#F0F0F0", # Background for PanedWindow - "sash_color": "#C0C0C0", # Color for sash (separator) in PanedWindo + "sash_color": "#C0C0C0", # Color for sash (separator) in PanedWindow } self.dark = { From 45e76c9d5ff3ce8a8388bafa984b7de81303d0c5 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 14:27:27 +0100 Subject: [PATCH 04/43] Add documentation --- doc/source/User_guide/extensions.rst | 15 +++++++++++ .../circuit/import_schematic.rst | 25 ++++++++++++++++++ .../pyaedt_extensions_doc/circuit/index.rst | 11 ++++++++ .../extensions/import_schematic_ui.png | Bin 0 -> 4836 bytes 4 files changed, 51 insertions(+) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/circuit/index.rst create mode 100644 doc/source/_static/extensions/import_schematic_ui.png diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 8c1ddb02ba0..8bc7f3f3a48 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -112,6 +112,21 @@ They are small automated workflow with a simple UI. Import a CSV file containing sources layout and power dissipation information. +Circuit extensions +~~~~~~~~~~~~~~~~~~ + +Pre-installed extensions are available at Circuit level. +They are small automated workflow with a simple UI. + +.. grid:: 2 + + .. grid-item-card:: Schematic import + :link: pyaedt_extensions_doc/icepak/create_power_map + :link-type: doc + :margin: 2 2 0 0 + + Import different schematic files (.asc, .sp, .cir, .qcv) into Circuit. + .. toctree:: :hidden: :maxdepth: 1 diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst new file mode 100644 index 00000000000..c649a6c7e54 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst @@ -0,0 +1,25 @@ +Import schematic +================ + +Import different schematic files (.asc, .sp, .cir, .qcv) into Circuit. + +You can access the extension from the icon created on the **Automation** tab using the Extension Manager. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/import_schematic_ui.png + :width: 800 + :alt: Import schematic UI + + +The available argument is: ``asc_file``. + +The ``asc_file`` parameter is the schematic file. + +You can also launch the extension user interface from the terminal. An example can be found here: + + +.. toctree:: + :maxdepth: 2 + + ../commandline \ No newline at end of file diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/index.rst new file mode 100644 index 00000000000..9a7397697df --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/index.rst @@ -0,0 +1,11 @@ +Circuit extensions +================== + +.. grid:: 2 + + .. grid-item-card:: Import schematic + :link: import_schematic + :link-type: doc + :margin: 2 2 0 0 + + Import different schematic files (.asc, .sp, .cir, .qcv) into Circuit. diff --git a/doc/source/_static/extensions/import_schematic_ui.png b/doc/source/_static/extensions/import_schematic_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..eebc6fc87fcb4873560832eeaaa37a663a6586e0 GIT binary patch literal 4836 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 literal 0 HcmV?d00001 From f11b415b380f426ece63f56ac99b3d8a2e25c4ee Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 14:29:39 +0100 Subject: [PATCH 05/43] No cover choke case --- src/ansys/aedt/core/workflows/hfss/choke_designer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ansys/aedt/core/workflows/hfss/choke_designer.py b/src/ansys/aedt/core/workflows/hfss/choke_designer.py index c97ab6d3e08..be48f2a8139 100644 --- a/src/ansys/aedt/core/workflows/hfss/choke_designer.py +++ b/src/ansys/aedt/core/workflows/hfss/choke_designer.py @@ -411,7 +411,7 @@ def main(extension_args): ] # Add second winding ports if it exists - if second_winding_list: + if second_winding_list: # pragma: no cover port_position_list.extend( [ # Second winding start position From 5ca7b16fd19704e417b4597e6b07fea65c912d82 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 15:32:44 +0100 Subject: [PATCH 06/43] Add push excitation extension --- doc/source/User_guide/extensions.rst | 17 ++- .../pyaedt_extensions_doc/hfss/index.rst | 7 ++ .../hfss/push_excitation.rst | 25 +++++ .../hfss3dlayout/index.rst | 7 ++ .../hfss3dlayout/push_excitation.rst | 25 +++++ .../_static/extensions/push_excitation.png | Bin 0 -> 8037 bytes .../hfss/push_excitation_from_file.py | 105 ++++++++++++++---- .../push_excitation_from_file_3dl.py | 101 +++++++++++++---- src/ansys/aedt/core/workflows/misc.py | 23 ++++ 9 files changed, 264 insertions(+), 46 deletions(-) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst create mode 100644 doc/source/_static/extensions/push_excitation.png diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 8bc7f3f3a48..181ab933cec 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -79,6 +79,13 @@ They are small automated workflow with a simple UI. Generate arbitrary wave ports in HFSS. + .. grid-item-card:: Push excitation from file + :link: pyaedt_extensions_doc/hfss3dlayout/push_excitation + :link-type: doc + :margin: 2 2 0 0 + + Edit a source from file data in HFSS 3D Layout. + HFSS extensions ~~~~~~~~~~~~~~~ @@ -95,6 +102,13 @@ They are small automated workflow with a simple UI. Design a choke and import it in HFSS. + .. grid-item-card:: Push excitation from file + :link: pyaedt_extensions_doc/hfss/push_excitation + :link-type: doc + :margin: 2 2 0 0 + + Edit a source from file data in HFSS. + Icepak extensions ~~~~~~~~~~~~~~~~~ @@ -121,7 +135,7 @@ They are small automated workflow with a simple UI. .. grid:: 2 .. grid-item-card:: Schematic import - :link: pyaedt_extensions_doc/icepak/create_power_map + :link: pyaedt_extensions_doc/circuit/import_schematic :link-type: doc :margin: 2 2 0 0 @@ -135,6 +149,7 @@ They are small automated workflow with a simple UI. pyaedt_extensions_doc/hfss3dlayout/index pyaedt_extensions_doc/hfss/index pyaedt_extensions_doc/icepak/index + pyaedt_extensions_doc/circuit/index Open source toolkits diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/index.rst index 461b8930112..c80a0b99976 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/index.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/index.rst @@ -9,3 +9,10 @@ HFSS extensions :margin: 2 2 0 0 Design a choke and import it in HFSS. + + .. grid-item-card:: Push excitation from file + :link: push_excitation + :link-type: doc + :margin: 2 2 0 0 + + Edit a source from file data in HFSS. diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst new file mode 100644 index 00000000000..d91f2cfc206 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst @@ -0,0 +1,25 @@ +Push excitation from file +========================= + +Push excitation from a CSV file in HFSS. + +You can access the extension from the icon created on the **Automation** tab using the Extension Manager. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/push_excitation.png + :width: 800 + :alt: Push excitation UI + + +The available arguments are: ``choice`` and ``file_path``. + +The ``choice`` parameter is the name of the excitation to push. + +You can also launch the extension user interface from the terminal. An example can be found here: + + +.. toctree:: + :maxdepth: 2 + + ../commandline \ No newline at end of file diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst index d6fbb5d07a8..e2cae79e821 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst @@ -16,3 +16,10 @@ HFSS 3D Layout extensions :margin: 2 2 0 0 Generate arbitrary wave ports in HFSS + + .. grid-item-card:: Push excitation from file + :link: push_excitation + :link-type: doc + :margin: 2 2 0 0 + + Edit a source from file data in HFSS. diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst new file mode 100644 index 00000000000..1c2472f99c7 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst @@ -0,0 +1,25 @@ +Push excitation from file +========================= + +Push excitation from a CSV file in HFSS 3D Layout. + +You can access the extension from the icon created on the **Automation** tab using the Extension Manager. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/push_excitation.png + :width: 800 + :alt: Push excitation UI + + +The available arguments are: ``choice`` and ``file_path``. + +The ``choice`` parameter is the name of the excitation to push. + +You can also launch the extension user interface from the terminal. An example can be found here: + + +.. toctree:: + :maxdepth: 2 + + ../commandline \ No newline at end of file diff --git a/doc/source/_static/extensions/push_excitation.png b/doc/source/_static/extensions/push_excitation.png new file mode 100644 index 0000000000000000000000000000000000000000..711c3b5df98239ddfdb1b8aa8e96e75bfee85910 GIT binary patch literal 8037 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 E03jD9J^%m! literal 0 HcmV?d00001 diff --git a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py index d2283e5fa74..ac37207eed2 100644 --- a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py +++ b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os.path +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import Hfss @@ -50,6 +50,7 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme # Get ports app = ansys.aedt.core.Desktop( @@ -61,6 +62,12 @@ def frontend(): # pragma: no cover ) active_project = app.active_project() + + if not active_project: + app.logger.error("No active project.") + output_dict = {} + return output_dict + active_design = app.active_design() project_name = active_project.GetName() @@ -79,12 +86,15 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - master.geometry("700x150") + master.geometry("850x200") - master.title("Assign push excitation to port from transient data") + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(ansys.aedt.core.workflows.__path__[0], "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -93,23 +103,33 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) + label = ttk.Label(master, textvariable=var, style="PyAEDT.TLabel") + var.set("Choose a port:") - label.grid(row=0, column=0, pady=10) - combo = ttk.Combobox(master, width=30) + label.grid(row=0, column=0, pady=10, padx=10) + combo = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo["values"] = port_selection combo.current(0) combo.grid(row=0, column=1, pady=10, padx=5) combo.focus_set() var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) + label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") + var2.set("Browse file:") - label2.grid(row=1, column=0, pady=10) + label2.grid(row=1, column=0, pady=10, padx=10) text = tkinter.Text(master, width=50, height=1) text.grid(row=1, column=1, pady=10, padx=5) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) def browseFiles(): filename = filedialog.askopenfilename( @@ -119,39 +139,70 @@ def browseFiles(): ) text.insert(tkinter.END, filename) - b1 = tkinter.Button(master, text="...", width=10, command=browseFiles) - b1.grid(row=3, column=0) + b1 = ttk.Button(master, text="...", width=20, command=browseFiles, style="PyAEDT.TButton") b1.grid(row=1, column=2, pady=10) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + text.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=2, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.choice_ui = combo.get() master.file_path_ui = text.get("1.0", tkinter.END).strip() master.destroy() - b = tkinter.Button(master, text="Ok", width=40, command=callback) + b = ttk.Button(master, text="Push Excitation", width=40, command=callback, style="PyAEDT.TButton") b.grid(row=2, column=1, pady=10) tkinter.mainloop() - file_path_ui = getattr(master, "file_path_ui", extension_arguments["file_path"]) + file_path_ui = Path(getattr(master, "file_path_ui", extension_arguments["file_path"])) choice_ui = getattr(master, "choice_ui", extension_arguments["choice"]) - if not file_path_ui or not os.path.isfile(file_path_ui): + if not file_path_ui.is_file(): app.logger.error("File does not exist.") if not choice_ui: app.logger.error("Excitation not found.") hfss.release_desktop(False, False) - - output_dict = {"choice": choice_ui, "file_path": file_path_ui} - + output_dict = {} + if master.flag and str(file_path_ui): + output_dict = {"choice": choice_ui, "file_path": str(file_path_ui)} return output_dict def main(extension_args): choice = extension_args["choice"] - file_path = extension_args["file_path"] + file_path = Path(extension_args["file_path"]) app = ansys.aedt.core.Desktop( new_desktop=False, @@ -162,17 +213,24 @@ def main(extension_args): ) active_project = app.active_project() + + if not active_project: # pragma: no cover + app.logger.error("No active project.") + active_design = app.active_design() + if not active_design: # pragma: no cover + app.logger.error("No active design.") + project_name = active_project.GetName() design_name = active_design.GetName() hfss = Hfss(project_name, design_name) - if not os.path.isfile(file_path): # pragma: no cover + if not file_path.is_file(): # pragma: no cover app.logger.error("File does not exist.") elif choice: - hfss.edit_source_from_file(assignment=choice, input_file=file_path, is_time_domain=True) + hfss.edit_source_from_file(assignment=choice, input_file=str(file_path), is_time_domain=True) app.logger.info("Excitation assigned correctly.") else: app.logger.error("Failed to select a port.") @@ -192,5 +250,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py index b8157f1e3ae..122c2a8a495 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os.path +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import Hfss3dLayout @@ -50,6 +50,7 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme # Get ports app = ansys.aedt.core.Desktop( @@ -61,6 +62,12 @@ def frontend(): # pragma: no cover ) active_project = app.active_project() + + if not active_project: + app.logger.error("No active project.") + output_dict = {} + return output_dict + active_design = app.active_design() project_name = active_project.GetName() @@ -85,12 +92,12 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - master.geometry("700x150") + master.geometry("850x200") - master.title("Assign push excitation to port from transient data") + master.title(extension_description) # Load the logo for the main window - icon_path = os.path.join(ansys.aedt.core.workflows.__path__[0], "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -99,23 +106,33 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) + label = ttk.Label(master, textvariable=var, style="PyAEDT.TLabel") + var.set("Choose a port:") - label.grid(row=0, column=0, pady=10) - combo = ttk.Combobox(master, width=30) + label.grid(row=0, column=0, pady=10, padx=10) + combo = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo["values"] = port_selection combo.current(0) combo.grid(row=0, column=1, pady=10, padx=5) combo.focus_set() var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) + label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") + var2.set("Browse file:") - label2.grid(row=1, column=0, pady=10) + label2.grid(row=1, column=0, pady=10, padx=10) text = tkinter.Text(master, width=50, height=1) text.grid(row=1, column=1, pady=10, padx=5) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) def browseFiles(): filename = filedialog.askopenfilename( @@ -125,24 +142,55 @@ def browseFiles(): ) text.insert(tkinter.END, filename) - b1 = tkinter.Button(master, text="...", width=10, command=browseFiles) - b1.grid(row=3, column=0) + b1 = ttk.Button(master, text="...", width=20, command=browseFiles, style="PyAEDT.TButton") b1.grid(row=1, column=2, pady=10) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + text.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=2, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.choice_ui = combo.get() master.file_path_ui = text.get("1.0", tkinter.END).strip() master.destroy() - b = tkinter.Button(master, text="Ok", width=40, command=callback) + b = ttk.Button(master, text="Push Excitation", width=40, command=callback, style="PyAEDT.TButton") b.grid(row=2, column=1, pady=10) tkinter.mainloop() - file_path_ui = getattr(master, "file_path_ui", extension_arguments["file_path"]) + file_path_ui = Path(getattr(master, "file_path_ui", extension_arguments["file_path"])) choice_ui = getattr(master, "choice_ui", extension_arguments["choice"]) - if not file_path_ui or not os.path.isfile(file_path_ui): + if not file_path_ui.is_file(): app.logger.error("File does not exist.") if not choice_ui: @@ -150,14 +198,15 @@ def callback(): hfss_3dl.release_desktop(False, False) - output_dict = {"choice": choice_ui, "file_path": file_path_ui} - + output_dict = {} + if master.flag and str(file_path_ui): + output_dict = {"choice": choice_ui, "file_path": str(file_path_ui)} return output_dict def main(extension_args): choice = extension_args["choice"] - file_path = extension_args["file_path"] + file_path = Path(extension_args["file_path"]) app = ansys.aedt.core.Desktop( new_desktop=False, @@ -168,8 +217,15 @@ def main(extension_args): ) active_project = app.active_project() + + if not active_project: # pragma: no cover + app.logger.error("No active project.") + active_design = app.active_design() + if not active_design: # pragma: no cover + app.logger.error("No active design.") + project_name = active_project.GetName() if active_design.GetDesignType() in ["HFSS 3D Layout Design"]: @@ -181,12 +237,12 @@ def main(extension_args): hfss_3dl = Hfss3dLayout(project_name, design_name) - if not os.path.isfile(file_path): # pragma: no cover + if not file_path.is_file(): # pragma: no cover app.logger.error("File does not exist.") elif choice: hfss_3dl.edit_source_from_file( source=choice, - input_file=file_path, + input_file=str(file_path), is_time_domain=True, ) app.logger.info("Excitation assigned correctly.") @@ -208,5 +264,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) diff --git a/src/ansys/aedt/core/workflows/misc.py b/src/ansys/aedt/core/workflows/misc.py index 25e3531f563..e384cbb331e 100644 --- a/src/ansys/aedt/core/workflows/misc.py +++ b/src/ansys/aedt/core/workflows/misc.py @@ -104,6 +104,10 @@ def __init__(self): "radiobutton_unselected": "#FFFFFF", # Color when unselected "pane_bg": "#F0F0F0", # Background for PanedWindow "sash_color": "#C0C0C0", # Color for sash (separator) in PanedWindow + "combobox_bg": "#FFFFFF", # Matches widget_bg + "combobox_arrow_bg": "#E6E6E6", # Matches button_bg + "combobox_arrow_fg": "#000000", # Matches text + "combobox_readonly_bg": "#F0F0F0", # Matches tab_bg_inactive } self.dark = { @@ -126,6 +130,10 @@ def __init__(self): "radiobutton_selected": "#45494A", # Color when selected "radiobutton_unselected": "#313335", # Color when unselected "pane_bg": "#2E2E2E", # Background for PanedWindow + "combobox_bg": "#313335", # Matches widget_bg + "combobox_arrow_bg": "#606060", # Matches button_hover_bg + "combobox_arrow_fg": "#FFFFFF", # Matches text + "combobox_readonly_bg": "#2E2E2E", # Matches pane_bg } # Set default font @@ -200,6 +208,21 @@ def _apply_theme(self, style, colors): background=[("selected", colors["radiobutton_selected"]), ("!selected", colors["radiobutton_unselected"])], ) + # Apply the colors and font to the style for Combobox + style.configure( + "PyAEDT.TCombobox", + fieldbackground=colors["combobox_bg"], + background=colors["combobox_arrow_bg"], + foreground=colors["text"], + font=self.default_font, + arrowcolor=colors["combobox_arrow_fg"], + ) + style.map( + "PyAEDT.TCombobox", + fieldbackground=[("readonly", colors["combobox_readonly_bg"])], + foreground=[("readonly", colors["text"])], + ) + def __string_to_bool(v): # pragma: no cover """Change string to bool.""" From 3d5ac01baa4232a4bdf02fb5cd152b980392730c Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 15:36:51 +0100 Subject: [PATCH 07/43] Add push excitation extension --- .../workflows/hfss3dlayout/push_excitation_from_file_3dl.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py index 122c2a8a495..6cc554cedea 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py @@ -96,6 +96,9 @@ def frontend(): # pragma: no cover master.title(extension_description) + # Detect if user closes the UI + master.flag = False + # Load the logo for the main window icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) From 8ede5665fc3eeca122b4a4b70030418b954264c7 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 15:45:59 +0100 Subject: [PATCH 08/43] Modify varstring --- .../aedt/core/workflows/circuit/import_schematic.py | 5 ++--- .../core/workflows/hfss/push_excitation_from_file.py | 11 ++++------- .../hfss3dlayout/push_excitation_from_file_3dl.py | 11 ++++------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index 822bd9c6920..0fa571b2a8d 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -79,10 +79,9 @@ def frontend(): # pragma: no cover # Set background color of the window (optional) master.configure(bg=theme.light["widget_bg"]) - var2 = tkinter.StringVar() - label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") - var2.set("Browse file:") + label2 = ttk.Label(master, text="Browse file:", style="PyAEDT.TLabel") label2.grid(row=0, column=0, pady=10, padx=10) + text = tkinter.Text(master, width=40, height=1) text.grid(row=0, column=1, pady=10, padx=5) text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) diff --git a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py index ac37207eed2..23d42ed063a 100644 --- a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py +++ b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py @@ -112,21 +112,18 @@ def frontend(): # pragma: no cover # Set background color of the window (optional) master.configure(bg=theme.light["widget_bg"]) - var = tkinter.StringVar() - label = ttk.Label(master, textvariable=var, style="PyAEDT.TLabel") - - var.set("Choose a port:") + label = ttk.Label(master, text="Choose a port:", style="PyAEDT.TLabel") label.grid(row=0, column=0, pady=10, padx=10) + combo = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo["values"] = port_selection combo.current(0) combo.grid(row=0, column=1, pady=10, padx=5) combo.focus_set() - var2 = tkinter.StringVar() - label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") - var2.set("Browse file:") + label2 = ttk.Label(master, text="Browse file:", style="PyAEDT.TLabel") label2.grid(row=1, column=0, pady=10, padx=10) + text = tkinter.Text(master, width=50, height=1) text.grid(row=1, column=1, pady=10, padx=5) text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py index 6cc554cedea..90c8a7cccc0 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py @@ -118,21 +118,18 @@ def frontend(): # pragma: no cover # Set background color of the window (optional) master.configure(bg=theme.light["widget_bg"]) - var = tkinter.StringVar() - label = ttk.Label(master, textvariable=var, style="PyAEDT.TLabel") - - var.set("Choose a port:") + label = ttk.Label(master, text="Choose a port:", style="PyAEDT.TLabel") label.grid(row=0, column=0, pady=10, padx=10) + combo = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo["values"] = port_selection combo.current(0) combo.grid(row=0, column=1, pady=10, padx=5) combo.focus_set() - var2 = tkinter.StringVar() - label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") - var2.set("Browse file:") + label2 = ttk.Label(master, text="Browse file:", style="PyAEDT.TLabel") label2.grid(row=1, column=0, pady=10, padx=10) + text = tkinter.Text(master, width=50, height=1) text.grid(row=1, column=1, pady=10, padx=5) text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) From 11c3a2466984d36f3c460d8d778a187889cf0e49 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 16:20:36 +0100 Subject: [PATCH 09/43] Fix cutout UI --- .../core/workflows/hfss3dlayout/cutout.py | 143 ++++++++++++------ src/ansys/aedt/core/workflows/misc.py | 23 +++ 2 files changed, 121 insertions(+), 45 deletions(-) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py index bbd0d4044ed..e320cf659d7 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import Hfss3dLayout @@ -51,6 +51,13 @@ def frontend(): # pragma: no cover + import tkinter + from tkinter import ttk + + import PIL.Image + import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme + app = ansys.aedt.core.Desktop( new_desktop=False, version=version, @@ -75,20 +82,18 @@ def frontend(): # pragma: no cover objs_net = {} for net in h3d.oeditor.GetNets(): objs_net[net] = h3d.modeler.objects_by_net(net) - import tkinter - from tkinter import ttk - - import PIL.Image - import PIL.ImageTk master = tkinter.Tk() - master.geometry("700x450") + master.geometry("850x350") + + master.title(extension_description) - master.title("Advanced Cutout") + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(os.path.dirname(ansys.aedt.core.workflows.__file__), "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -97,16 +102,22 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 10)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) + + label = ttk.Label(master, text="Cutout Type:", style="PyAEDT.TLabel") + label.grid(row=0, column=0, pady=10, padx=10) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Cutout Type:") - label.grid(row=0, column=0, pady=10) - combo = ttk.Combobox(master, width=40) # Set the width of the combobox + combo = ttk.Combobox(master, width=40, style="PyAEDT.TCombobox") # Set the width of the combobox combo["values"] = ("ConvexHull", "Bounding", "Conforming") combo.current(0) - combo.grid(row=0, column=1, pady=10) + combo.grid(row=0, column=1, pady=10, padx=10) combo.focus_set() master.signal_ui = [i for i in h3d.modeler.signal_nets.keys()] @@ -139,40 +150,77 @@ def apply_reference(): var3.set("Empty selection. Select nets from layout and retry.") var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2, relief=tkinter.RAISED) + label2 = ttk.Label(master, textvariable=var2, style="PyAEDT.TLabel") var2.set("Select") - label2.grid(row=1, column=2, pady=10) - b_sig = tkinter.Button(master, text="Select signal nets in layout and Apply", width=40, command=apply_signal) - b_sig.grid(row=1, column=1, pady=10) + label2.grid(row=1, column=2, pady=10, padx=10) + + b_sig = ttk.Button( + master, text="Select signal nets in layout and Apply", width=40, command=apply_signal, style="PyAEDT.TButton" + ) + b_sig.grid(row=1, column=1, pady=10, padx=10) + var3 = tkinter.StringVar() - label3 = tkinter.Label(master, textvariable=var3, relief=tkinter.RAISED) + label3 = ttk.Label(master, textvariable=var3, style="PyAEDT.TLabel") var3.set("Select") - label3.grid(row=2, column=2, pady=10) - b_ref = tkinter.Button(master, text="Apply Reference Nets", width=40, command=apply_reference) + label3.grid(row=2, column=2, pady=10, padx=10) + + b_ref = ttk.Button(master, text="Apply Reference Nets", width=40, command=apply_reference, style="PyAEDT.TButton") b_ref.grid(row=2, column=1, pady=10) - var_exp = tkinter.StringVar() - label_exp = tkinter.Label(master, textvariable=var_exp) - var_exp.set("Expansion factor(mm):") - label_exp.grid(row=3, column=0, pady=10) + label_exp = ttk.Label(master, text="Expansion factor (mm):", style="PyAEDT.TLabel") + label_exp.grid(row=3, column=0, pady=10, padx=10) + expansion = tkinter.Text(master, width=20, height=1) + expansion.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) expansion.insert(tkinter.END, "3") - expansion.grid(row=3, column=1, pady=10, padx=5) - var_disj = tkinter.StringVar() - label_disj = tkinter.Label(master, textvariable=var_disj) - var_disj.set("Fix disjoint nets:") + expansion.grid(row=3, column=1, pady=10, padx=10) + + label_disj = ttk.Label(master, text="Fix disjoint nets:", style="PyAEDT.TLabel") label_disj.grid(row=4, column=0, pady=10) + disjoint_check = tkinter.IntVar() - check2 = tkinter.Checkbutton(master, width=30, variable=disjoint_check) - check2.grid(row=4, column=1, pady=10, padx=5) + check2 = ttk.Checkbutton(master, variable=disjoint_check, style="PyAEDT.TCheckbutton") + check2.grid(row=4, column=1, pady=10) + + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + expansion.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + expansion.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=6, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) def callback(): + master.flag = True master.choice_ui = combo.get() master.disjoints_ui = True if disjoint_check.get() == 1 else False master.expansion_ui = expansion.get("1.0", tkinter.END).strip() master.destroy() - b = tkinter.Button(master, text="Create Cutout", width=40, command=callback) + b = ttk.Button(master, text="Create Cutout", width=40, command=callback, style="PyAEDT.TButton") b.grid(row=6, column=1, pady=10) tkinter.mainloop() @@ -182,15 +230,16 @@ def callback(): expansion_ui = getattr(master, "expansion_ui", extension_arguments["expansion_factor"]) signal_ui = getattr(master, "signal_ui", extension_arguments["signals"]) reference_ui = getattr(master, "reference_ui", extension_arguments["reference"]) - - output_dict = { - "choice": choice_ui, - "signals": signal_ui, - "reference": reference_ui, - "expansion_factor": expansion_ui, - "fix_disjoints": disjoints_ui, - } + output_dict = {} app.release_desktop(False, False) + if master.flag: + output_dict = { + "choice": choice_ui, + "signals": signal_ui, + "reference": reference_ui, + "expansion_factor": expansion_ui, + "fix_disjoints": disjoints_ui, + } return output_dict @@ -242,7 +291,10 @@ def main(extension_args): if disjoint: edb.nets.find_and_fix_disjoint_nets(reference) edb.close_edb() - h3d = Hfss3dLayout(new_path) + + # Open layout in HFSS 3D Layout + Hfss3dLayout(new_path) + if not extension_args["is_test"]: # pragma: no cover app.logger.info("Project generated correctly.") app.release_desktop(False, False) @@ -259,5 +311,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) diff --git a/src/ansys/aedt/core/workflows/misc.py b/src/ansys/aedt/core/workflows/misc.py index e384cbb331e..c2cbe4d9caa 100644 --- a/src/ansys/aedt/core/workflows/misc.py +++ b/src/ansys/aedt/core/workflows/misc.py @@ -108,6 +108,10 @@ def __init__(self): "combobox_arrow_bg": "#E6E6E6", # Matches button_bg "combobox_arrow_fg": "#000000", # Matches text "combobox_readonly_bg": "#F0F0F0", # Matches tab_bg_inactive + "checkbutton_bg": "#FFFFFF", # Matches widget_bg + "checkbutton_fg": "#000000", # Matches text + "checkbutton_indicator_bg": "#D9D9D9", # Matches button_hover_bg + "checkbutton_active_bg": "#B8B8B8", # Matches button_active_bg } self.dark = { @@ -134,6 +138,10 @@ def __init__(self): "combobox_arrow_bg": "#606060", # Matches button_hover_bg "combobox_arrow_fg": "#FFFFFF", # Matches text "combobox_readonly_bg": "#2E2E2E", # Matches pane_bg + "checkbutton_bg": "#313335", # Matches widget_bg + "checkbutton_fg": "#FFFFFF", # Matches text + "checkbutton_indicator_bg": "#2E2E2E", # Matches pane_bg + "checkbutton_active_bg": "#45494A", # Matches radiobutton_selected } # Set default font @@ -223,6 +231,21 @@ def _apply_theme(self, style, colors): foreground=[("readonly", colors["text"])], ) + # Style for Checkbutton + style.configure( + "PyAEDT.TCheckbutton", + background=colors["checkbutton_bg"], + foreground=colors["checkbutton_fg"], + font=self.default_font, + indicatorcolor=colors["checkbutton_indicator_bg"], + focuscolor=colors["checkbutton_active_bg"], # For focus/active state + ) + style.map( + "PyAEDT.TCheckbutton", + background=[("active", colors["checkbutton_active_bg"])], + indicatorcolor=[("selected", colors["checkbutton_indicator_bg"])], + ) + def __string_to_bool(v): # pragma: no cover """Change string to bool.""" From e370267dc8f9ba9789e24597672da85ee1f59211 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 16:22:37 +0100 Subject: [PATCH 10/43] Uncomment cutout test --- tests/system/solvers/test_45_workflows.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index d3fcefdc05a..baa18a04340 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -440,10 +440,6 @@ def test_10_push_excitation_3dl(self, local_scratch, desktop): # assert h3d.design_datasets h3d.close_project(h3d.project_name) - @pytest.mark.skipif( - TEST_REVIEW_FLAG, - reason="Test under review in 2024.2", - ) def test_11_cutout(self, add_app, local_scratch): from ansys.aedt.core.workflows.hfss3dlayout.cutout import main From 11fe261c6135600a85ab205f994144518ef26468 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 16:28:17 +0100 Subject: [PATCH 11/43] Update cutout documentation --- doc/source/User_guide/extensions.rst | 7 +++++ .../hfss3dlayout/cutout.rst | 24 ++++++++++++++++++ .../hfss3dlayout/index.rst | 13 +++++++--- doc/source/_static/extensions/cutout_ui.png | Bin 0 -> 13784 bytes 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst create mode 100644 doc/source/_static/extensions/cutout_ui.png diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 181ab933cec..dd461f93266 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -86,6 +86,13 @@ They are small automated workflow with a simple UI. Edit a source from file data in HFSS 3D Layout. + .. grid-item-card:: Cutout + :link: pyaedt_extensions_doc/hfss3dlayout/cutout + :link-type: doc + :margin: 2 2 0 0 + + Advanced layout cutout. + HFSS extensions ~~~~~~~~~~~~~~~ diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst new file mode 100644 index 00000000000..9f60588ef4a --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -0,0 +1,24 @@ +Cutout +====== + +You can cutout the layout using PyEDB features. + +The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/cutout_ui.png + :width: 800 + :alt: Parametrize Layout UI + + +The available arguments are: ``choice``, ``signals``, ``reference``, +``expansion_factor``, and ``fix_disjoints``. + +The extension user interface can also be launched from the terminal. An example can be found here: + + +.. toctree:: + :maxdepth: 2 + + ../commandline diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst index e2cae79e821..a483f4c0ab3 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst @@ -17,9 +17,16 @@ HFSS 3D Layout extensions Generate arbitrary wave ports in HFSS - .. grid-item-card:: Push excitation from file - :link: push_excitation + .. grid-item-card:: Push excitation from file + :link: push_excitation + :link-type: doc + :margin: 2 2 0 0 + + Edit a source from file data in HFSS. + + .. grid-item-card:: Cutout + :link: cutout :link-type: doc :margin: 2 2 0 0 - Edit a source from file data in HFSS. + Advanced layout cutout. diff --git a/doc/source/_static/extensions/cutout_ui.png b/doc/source/_static/extensions/cutout_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..5687b4097a2fa9ae2dec8314ce4f9d0456bb298b GIT binary patch literal 13784 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 Date: Mon, 9 Dec 2024 16:41:18 +0100 Subject: [PATCH 12/43] Remove os --- src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py index e320cf659d7..183c9d1244f 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py @@ -259,17 +259,17 @@ def main(extension_args): active_project = app.active_project() active_design = app.active_design() - aedb_path = os.path.join(active_project.GetPath(), active_project.GetName() + ".aedb") - new_path = aedb_path[:-5] + generate_unique_name("_cutout", n=2) + ".aedb" - edb = Edb(aedb_path, active_design.GetName().split(";")[1], edbversion=version) - edb.save_edb_as(new_path) + aedb_path = Path(active_project.GetPath()) / f"{active_project.GetName()}.aedb" + new_path = aedb_path.with_stem(aedb_path.stem + generate_unique_name("_cutout", n=2)) + edb = Edb(str(aedb_path), active_design.GetName().split(";")[1], edbversion=version) + edb.save_edb_as(str(new_path)) edb.cutout( signal_list=signal, reference_list=reference, extent_type=choice, expansion_size=float(expansion) / 1000, use_round_corner=False, - output_aedb_path=new_path, + output_aedb_path=str(new_path), open_cutout_at_end=True, use_pyaedt_cutout=True, number_of_threads=4, @@ -293,7 +293,7 @@ def main(extension_args): edb.close_edb() # Open layout in HFSS 3D Layout - Hfss3dLayout(new_path) + Hfss3dLayout(str(new_path)) if not extension_args["is_test"]: # pragma: no cover app.logger.info("Project generated correctly.") From 8262125bb1fc2857a2b26b2d045b46d99b00c5c2 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Mon, 9 Dec 2024 17:15:11 +0100 Subject: [PATCH 13/43] Export layout extension --- doc/source/User_guide/extensions.rst | 7 ++ .../hfss3dlayout/export_layout.rst | 23 ++++ .../hfss3dlayout/index.rst | 7 ++ .../_static/extensions/export_layout_ui.png | Bin 0 -> 7974 bytes .../workflows/hfss3dlayout/export_layout.py | 112 ++++++++++++------ tests/system/solvers/test_45_workflows.py | 4 - 6 files changed, 114 insertions(+), 39 deletions(-) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst create mode 100644 doc/source/_static/extensions/export_layout_ui.png diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index dd461f93266..cd8740ed864 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -93,6 +93,13 @@ They are small automated workflow with a simple UI. Advanced layout cutout. + .. grid-item-card:: Export layout + :link: pyaedt_extensions_doc/hfss3dlayout/export_layout + :link-type: doc + :margin: 2 2 0 0 + + Export layout. + HFSS extensions ~~~~~~~~~~~~~~~ diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst new file mode 100644 index 00000000000..43c31da8ff5 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst @@ -0,0 +1,23 @@ +Export layout +============= + +Export layout. + +The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/export_layout_ui.png + :width: 800 + :alt: Export Layout UI + + +The available arguments are: ``ipc_ui``, ``confg_ui``, and ``bom_ui``. + +The extension user interface can also be launched from the terminal. An example can be found here: + + +.. toctree:: + :maxdepth: 2 + + ../commandline diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst index a483f4c0ab3..9a14775c78a 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst @@ -30,3 +30,10 @@ HFSS 3D Layout extensions :margin: 2 2 0 0 Advanced layout cutout. + + .. grid-item-card:: Export layout + :link: export_layout + :link-type: doc + :margin: 2 2 0 0 + + Export layout. diff --git a/doc/source/_static/extensions/export_layout_ui.png b/doc/source/_static/extensions/export_layout_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6cbbc70ccff775afd0882eaf8daae3c82fc667 GIT binary patch literal 7974 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 Date: Mon, 9 Dec 2024 17:27:29 +0100 Subject: [PATCH 14/43] Export layout extension --- src/ansys/aedt/core/workflows/circuit/import_schematic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index 0fa571b2a8d..db392245208 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -43,8 +43,6 @@ def frontend(): # pragma: no cover - - from pathlib import Path # Make sure Path is imported import tkinter from tkinter import filedialog from tkinter import ttk From 00802af540f4d2fcb1f96d8132f16deebeedefa8 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:19:37 +0100 Subject: [PATCH 15/43] Fix typo --- doc/source/User_guide/extensions.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index cd8740ed864..01243ab941e 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -20,7 +20,7 @@ Project extensions ~~~~~~~~~~~~~~~~~~ Pre-installed extensions are available at project level so they are available for all AEDT applications. -They are small automated workflow with a simple UI. +They are small automated workflows with a simple UI. .. grid:: 2 @@ -60,7 +60,7 @@ HFSS 3D Layout extensions ~~~~~~~~~~~~~~~~~~~~~~~~~ Pre-installed extensions are available at HFSS 3D Layout level. -They are small automated workflow with a simple UI. +They are small automated workflows with a simple UI. .. grid:: 2 @@ -105,7 +105,7 @@ HFSS extensions ~~~~~~~~~~~~~~~ Pre-installed extensions are available at HFSS level. -They are small automated workflow with a simple UI. +They are small automated workflows with a simple UI. .. grid:: 2 @@ -128,7 +128,7 @@ Icepak extensions ~~~~~~~~~~~~~~~~~ Pre-installed extensions are available at Icepak level. -They are small automated workflow with a simple UI. +They are small automated workflows with a simple UI. .. grid:: 2 @@ -144,7 +144,7 @@ Circuit extensions ~~~~~~~~~~~~~~~~~~ Pre-installed extensions are available at Circuit level. -They are small automated workflow with a simple UI. +They are small automated workflows with a simple UI. .. grid:: 2 From c309c481e8ed539ce3f3d210753df2e6e8238d33 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:28:02 +0100 Subject: [PATCH 16/43] Improve documentation --- .../circuit/import_schematic.rst | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst index c649a6c7e54..e33839b2058 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst @@ -12,12 +12,43 @@ The following image shows the extension user interface: :alt: Import schematic UI -The available argument is: ``asc_file``. +Supported File Types +-------------------- -The ``asc_file`` parameter is the schematic file. +The following schematic file formats are supported: +- **.asc**: LTSpice schematic files +- **.sp**: SPICE netlist files +- **.cir**: Circuit schematic files +- **.qcv**: QCV-specific files -You can also launch the extension user interface from the terminal. An example can be found here: +Each file type can be imported using the user interface or through the command line. +Ensure that the file exists at the specified path and is properly formatted. +Using the Extension +-------------------- + +1. Open the **Automation** tab in the Circuit interface. +2. Locate and click the **Import Schematic** icon under the Extension Manager. +3. In the user interface: + - Browse for a supported schematic file by clicking the "..." button. + - Select the file and ensure its path appears in the text field. + - Click **Import** to load the schematic into Circuit. +4. Toggle between light and dark themes using the button in the bottom-right corner. + + +Command Line +------------ + +You can also launch the extension directly from the terminal. + +The script accepts the following argument: + +- ``**asc_file**``: + Specifies the path to the schematic file to be imported. + The file must exist and should have one of the supported extensions. + Example: `"C:/schematics/example.asc"` + +Use the following command syntax: .. toctree:: :maxdepth: 2 From 9cd0e4bd76087fb62627f33b8adf002265713e00 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:36:25 +0100 Subject: [PATCH 17/43] Improve documentation choke --- .../circuit/import_schematic.rst | 31 +++++----- .../hfss/choke_designer.rst | 61 +++++++++++++++++-- 2 files changed, 71 insertions(+), 21 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst index e33839b2058..6015622b023 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst @@ -12,19 +12,7 @@ The following image shows the extension user interface: :alt: Import schematic UI -Supported File Types --------------------- - -The following schematic file formats are supported: -- **.asc**: LTSpice schematic files -- **.sp**: SPICE netlist files -- **.cir**: Circuit schematic files -- **.qcv**: QCV-specific files - -Each file type can be imported using the user interface or through the command line. -Ensure that the file exists at the specified path and is properly formatted. - -Using the Extension +Using the extension -------------------- 1. Open the **Automation** tab in the Circuit interface. @@ -36,7 +24,7 @@ Using the Extension 4. Toggle between light and dark themes using the button in the bottom-right corner. -Command Line +Command line ------------ You can also launch the extension directly from the terminal. @@ -53,4 +41,17 @@ Use the following command syntax: .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline + + +Supported file types +-------------------- + +The following schematic file formats are supported: +- **.asc**: LTSpice schematic files +- **.sp**: SPICE netlist files +- **.cir**: Circuit schematic files +- **.qcv**: QCV-specific files + +Each file type can be imported using the user interface or through the command line. +Ensure that the file exists at the specified path and is properly formatted. \ No newline at end of file diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst index e13a30cf3d6..21f8f489686 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst @@ -1,9 +1,10 @@ Choke designer ============== -You can design a choke in HFSS. +The **Choke designer** extension enables users to create and customize choke configurations and export the generated +geometry to HFSS. -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +You can access the extension from the icon created on the Automation tab using the Extension Manager. The following image shows the extension user interface: @@ -12,14 +13,62 @@ The following image shows the extension user interface: :alt: Choke Designer UI -The available argument is: ``choke_config``. +Supported features +------------------- -The ``choke_config`` parameter is a dictionary with choke configuration file content. See more information: :ref:`choke-file`. +The extension supports: -You can also launch the extension user interface from the terminal. An example can be found here: +- Configuring choke parameters including core dimensions, windings, layers, and material properties. +- Exporting designs to HFSS. +- Saving and loading configurations as JSON files. +- Switching between light and dark themes in the user interface. +Using the Extension +-------------------- + +1. Open the **Automation** tab in the Circuit interface. +2. Locate and click the **Choke Designer** icon under the Extension Manager. +3. In the user interface: + - Adjust configuration parameters in the **Left Panel** using radio buttons for options such as number of windings and layer types. + - Modify detailed parameters for the core and windings in the **Right Panel** under respective tabs. + - Use the buttons at the bottom to: + - Save the current configuration as a `.json` file. + - Load an existing configuration file. + - Toggle between light and dark themes. +4. To export to HFSS, click **Export to HFSS**. Ensure that parameters are valid before exporting. +5. Adjust the settings for light or dark theme using the toggle button in the bottom-right corner. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. + +Supported arguments include: + +- **choke_config**: Specifies the path to a `.json` file containing choke configuration parameters. + +Use the following syntax to run the extension: + .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline + + +Example configuration file +-------------------------- + +Here is an example of a choke configuration in JSON format: :ref:`choke-file`. + +Ensure the parameters are valid before importing. + + +Validation rules +---------------- + +- The outer radius must be greater than the inner radius for the core and windings. +- Heights and wire diameters must be positive. + +The user interface provides detailed feedback on validation errors in the form of message boxes. From c3d3a992602f718c8bc62239458df762e98d9570 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:47:54 +0100 Subject: [PATCH 18/43] Improve documentation cutout --- .../circuit/import_schematic.rst | 3 +- .../hfss/choke_designer.rst | 11 +++-- .../hfss/push_excitation.rst | 42 ++++++++++++++--- .../hfss3dlayout/cutout.rst | 46 +++++++++++++++++-- 4 files changed, 85 insertions(+), 17 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst index 6015622b023..aa67be111cc 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst @@ -3,7 +3,8 @@ Import schematic Import different schematic files (.asc, .sp, .cir, .qcv) into Circuit. -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +The extension provides a graphical user interface for configuration, +or it can be used in batch mode via command line arguments. The following image shows the extension user interface: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst index 21f8f489686..fddeb30a124 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst @@ -4,7 +4,8 @@ Choke designer The **Choke designer** extension enables users to create and customize choke configurations and export the generated geometry to HFSS. -You can access the extension from the icon created on the Automation tab using the Extension Manager. +The extension provides a graphical user interface for configuration, +or it can be used in batch mode via command line arguments. The following image shows the extension user interface: @@ -24,13 +25,13 @@ The extension supports: - Switching between light and dark themes in the user interface. -Using the Extension +Using the extension -------------------- -1. Open the **Automation** tab in the Circuit interface. -2. Locate and click the **Choke Designer** icon under the Extension Manager. +1. Open the **Automation** tab in the HFSS interface. +2. Locate and click the **Choke designer** icon under the Extension Manager. 3. In the user interface: - - Adjust configuration parameters in the **Left Panel** using radio buttons for options such as number of windings and layer types. + - Adjust configuration parameters in the **Left panel** using radio buttons for options such as number of windings and layer types. - Modify detailed parameters for the core and windings in the **Right Panel** under respective tabs. - Use the buttons at the bottom to: - Save the current configuration as a `.json` file. diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst index d91f2cfc206..3c134063c3a 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst @@ -1,9 +1,20 @@ Push excitation from file ========================= -Push excitation from a CSV file in HFSS. +The **push excitation from file** extension allows users to assign a time-domain excitation to a port in an HFSS design +by importing data from a file. -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +The extension provides a graphical user interface (GUI) for configuration, +or it can be used in batch mode via command line arguments. + +Features +-------- + +- Automatically detects and lists available ports in the active HFSS design. +- Allows users to browse and select a time-domain excitation file. +- Supports both light and dark themes for the GUI. +- Assigns excitations programmatically using a batch-mode interface. +- Validates file paths and port selections to ensure proper configuration. The following image shows the extension user interface: @@ -12,14 +23,33 @@ The following image shows the extension user interface: :alt: Push excitation UI -The available arguments are: ``choice`` and ``file_path``. +Using the extension +-------------------- + +1. Open the **Automation** tab in the HFSS interface. +2. Locate and click the **push excitation from file** icon under the Extension Manager. +3. The main window displays the following elements: + - **Port selection**: A dropdown menu to select the desired port from the HFSS design. + - **File browser**: A text box and button to select the excitation file. + - **Push excitation button**: A button to assign the excitation to the selected port. + - **Theme toggle**: A button to switch between light and dark themes. +3. Click **Push excitation** after selecting the port and file to apply the configuration. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. -The ``choice`` parameter is the name of the excitation to push. +Supported arguments include: -You can also launch the extension user interface from the terminal. An example can be found here: +- **file_path**: Path to the excitation file. +- **choice**: Name of the port to assign the excitation. +- **is_batch**: Boolean flag to enable batch mode. +Use the following syntax to run the extension: .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index 9f60588ef4a..b1df01d8420 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -1,9 +1,19 @@ Cutout ====== -You can cutout the layout using PyEDB features. +The **Layout cutout** extension allows users to create cutouts in HFSS 3D Layout designs based on selected nets. -The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. +The extension provides a graphical user interface (GUI) for configuration, +or it can be used in batch mode via command line arguments. + + +Features +-------- + +- Provides an intuitive user interface for selecting nets, defining the cutout type, and adjusting parameters such as expansion factor. +- Supports batch processing for automated execution via command line arguments. +- Customizable options for fixing disjoint nets, selecting the cutout type, and applying expansion factors. +- Integration with Ansys EDB for layout cutout creation and post-processing. The following image shows the extension user interface: @@ -12,11 +22,37 @@ The following image shows the extension user interface: :alt: Parametrize Layout UI -The available arguments are: ``choice``, ``signals``, ``reference``, -``expansion_factor``, and ``fix_disjoints``. +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS interface. +2. Locate and click the **Layout Cutout** icon under the Extension Manager. +3. The main window displays the following elements: + - **Cutout type**: A dropdown menu to select the desired cutout type (e.g., ConvexHull, Bounding, Conforming). + - **Signal nets**: A button to apply selected signal nets from the layout. + - **Reference nets**: A button to apply selected reference nets. + - **Expansion factor**: A text box to define the expansion factor for the cutout (in mm). + - **Fix disjoint nets**: A checkbox to enable or disable fixing of disjoint nets. + +4. Select the desired options and click **Create Cutout** to generate the cutout. + + +Command Line +------------ + +The extension can also be used directly via the command line for batch processing. + +Supported arguments include: + -The extension user interface can also be launched from the terminal. An example can be found here: +- **choice**: Type of cutout to apply (e.g., "ConvexHull"). +- **signals**: List of signal nets to use for the cutout. +- **reference**: List of reference nets to use for the cutout. +- **expansion_factor**: Expansion factor in mm for the cutout. +- **fix_disjoints**: Boolean flag to enable or disable fixing of disjoint nets. +- **is_batch**: Boolean flag to enable batch mode. +Use the following syntax to run the extension: .. toctree:: :maxdepth: 2 From 9840578564faa4068fe7c8cd9216eb07da751542 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:52:12 +0100 Subject: [PATCH 19/43] Improve documentation export layout --- .../hfss3dlayout/cutout.rst | 2 +- .../hfss3dlayout/export_layout.rst | 45 +++++++++++++++++-- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index b1df01d8420..42f9ba0b455 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -25,7 +25,7 @@ The following image shows the extension user interface: Using the extension ------------------- -1. Open the **Automation** tab in the HFSS interface. +1. Open the **Automation** tab in the HFSS 3D Layout interface. 2. Locate and click the **Layout Cutout** icon under the Extension Manager. 3. The main window displays the following elements: - **Cutout type**: A dropdown menu to select the desired cutout type (e.g., ConvexHull, Bounding, Conforming). diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst index 43c31da8ff5..95443cb8e8f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst @@ -1,9 +1,22 @@ Export layout ============= -Export layout. +The **Layout exporter** extension allows users to export various design data from an HFSS 3D Layout, such as IPC2581, +Bill of materials (BOM), and configuration files. -The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. +The extension provides a graphical user interface for configuration, +or it can be used in batch mode via command line arguments. + + +Features +-------- + +- Allows users to select and export data in multiple formats: IPC2581, BOM, and configuration files. +- Automatically detects the active project and design in AEDT. +- Provides a user-friendly GUI to configure export options. +- Supports both light and dark themes for the GUI. +- Enables batch processing for automation or command-line integration. +- Validates user input for file paths and selected options. The following image shows the extension user interface: @@ -11,10 +24,34 @@ The following image shows the extension user interface: :width: 800 :alt: Export Layout UI +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS 3D Layout interface. +2. Locate and click the **Layout Cutout** icon under the Extension Manager. +3. Users can select from the following options: + - **Export IPC2581**: Checkbox to export the layout data as IPC2581. + - **Export Configuration**: Checkbox to export the configuration file. + - **Export BOM**: Checkbox to export the Bill of Materials (BOM). + - **Theme toggle**: Button to switch between light and dark themes. +4. Once the options are selected, click the **Export** button to generate the respective files. +5. The selected files are saved in the same directory as the AEDB project. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. + +Supported arguments include: + -The available arguments are: ``ipc_ui``, ``confg_ui``, and ``bom_ui``. +- **export_ipc**: Boolean flag to export the IPC2581 file. +- **export_configuration**: Boolean flag to export the configuration file. +- **export_bom**: Boolean flag to export the BOM file. +- **is_batch**: Boolean flag to enable batch mode (useful for automated workflows). -The extension user interface can also be launched from the terminal. An example can be found here: +Use the following syntax to run the extension: .. toctree:: From 974d6f6c47904cccc9e6d58245ee19bc5fc6f18f Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 08:53:33 +0100 Subject: [PATCH 20/43] Improve documentation push excitation --- .../hfss3dlayout/push_excitation.rst | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst index 1c2472f99c7..7e68510d982 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst @@ -1,9 +1,20 @@ Push excitation from file ========================= -Push excitation from a CSV file in HFSS 3D Layout. +The **push excitation from file** extension allows users to assign a time-domain excitation to a port in an HFSS design +by importing data from a file. -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +The extension provides a graphical user interface (GUI) for configuration, +or it can be used in batch mode via command line arguments. + +Features +-------- + +- Automatically detects and lists available ports in the active HFSS design. +- Allows users to browse and select a time-domain excitation file. +- Supports both light and dark themes for the GUI. +- Assigns excitations programmatically using a batch-mode interface. +- Validates file paths and port selections to ensure proper configuration. The following image shows the extension user interface: @@ -12,14 +23,33 @@ The following image shows the extension user interface: :alt: Push excitation UI -The available arguments are: ``choice`` and ``file_path``. +Using the extension +-------------------- + +1. Open the **Automation** tab in the HFSS 3D Layout interface. +2. Locate and click the **push excitation from file** icon under the Extension Manager. +3. The main window displays the following elements: + - **Port selection**: A dropdown menu to select the desired port from the HFSS design. + - **File browser**: A text box and button to select the excitation file. + - **Push excitation button**: A button to assign the excitation to the selected port. + - **Theme toggle**: A button to switch between light and dark themes. +3. Click **Push excitation** after selecting the port and file to apply the configuration. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. -The ``choice`` parameter is the name of the excitation to push. +Supported arguments include: -You can also launch the extension user interface from the terminal. An example can be found here: +- **file_path**: Path to the excitation file. +- **choice**: Name of the port to assign the excitation. +- **is_batch**: Boolean flag to enable batch mode. +Use the following syntax to run the extension: .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline From ea2e9b8c8c7c91a061f3df2c167c94f04f615d96 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 09:22:11 +0100 Subject: [PATCH 21/43] Improve documentation export to 3d Add theme to UI --- doc/source/User_guide/extensions.rst | 7 ++ .../hfss3dlayout/cutout.rst | 1 - .../hfss3dlayout/export_3d.rst | 49 +++++++++++ .../hfss3dlayout/index.rst | 7 ++ .../_static/extensions/export_3d_ui.png | Bin 0 -> 5002 bytes .../workflows/hfss3dlayout/export_to_3d.py | 80 +++++++++++++----- 6 files changed, 124 insertions(+), 20 deletions(-) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst create mode 100644 doc/source/_static/extensions/export_3d_ui.png diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 01243ab941e..df340801808 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -100,6 +100,13 @@ They are small automated workflows with a simple UI. Export layout. + .. grid-item-card:: Export to 3D + :link: pyaedt_extensions_doc/hfss3dlayout/export_3d + :link-type: doc + :margin: 2 2 0 0 + + Export layout to 3D. + HFSS extensions ~~~~~~~~~~~~~~~ diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index 42f9ba0b455..4cd575d80da 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -33,7 +33,6 @@ Using the extension - **Reference nets**: A button to apply selected reference nets. - **Expansion factor**: A text box to define the expansion factor for the cutout (in mm). - **Fix disjoint nets**: A checkbox to enable or disable fixing of disjoint nets. - 4. Select the desired options and click **Create Cutout** to generate the cutout. diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst new file mode 100644 index 00000000000..0efc2246561 --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst @@ -0,0 +1,49 @@ +Export to 3D +============ + +The **Export to 3D** extension allows users to export their HFSS 3D Layout designs into various formats including HFSS, +Q3D, Maxwell 3D, and Icepak, keeping the net names. + +The extension provides a graphical user interface (GUI) for configuration, +or it can be used in batch mode via command line arguments. + + +Features +-------- + +- **Support for various export formats**: Choose from `HFSS`, `Q3D`, `Maxwell 3D`, and `Icepak` export options. +- **User interface**: A simple user interface for selecting the desired export option. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/export_3d_ui.png + :width: 800 + :alt: Parametrize Layout UI + + +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS 3D Layout interface. +2. Locate and click the **Export to 3D** icon under the Extension Manager. +3. The main window displays a label, a combobox to choose an export option, and a button to initiate the export. +3. Click **Export** to export the design. + + +Command Line +------------ + +The extension can also be used directly via the command line for batch processing. + +Supported arguments include: + +- **choice**: The export option to choose (`"Export to HFSS"`, `"Export to Q3D"`, `"Export to Maxwell 3D"`, +or `"Export to Icepak"`). +- **is_batch**: Boolean flag to indicate if the extension should run in batch mode. + +Use the following syntax to run the extension: + +.. toctree:: + :maxdepth: 2 + + ../commandline diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst index 9a14775c78a..df3d2bc7852 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/index.rst @@ -37,3 +37,10 @@ HFSS 3D Layout extensions :margin: 2 2 0 0 Export layout. + + .. grid-item-card:: Export to 3D + :link: export_3d + :link-type: doc + :margin: 2 2 0 0 + + Export layout to 3D. diff --git a/doc/source/_static/extensions/export_3d_ui.png b/doc/source/_static/extensions/export_3d_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..161396c48bca0f329448a158a8c4dc4ed51c1e4a GIT binary patch literal 5002 zcmcIocQl+^yMGZS(Gm_$5JwUu%8;lbj2^v2i55hZi72DZh|v-xB8Ws6%qSTo$`GOt zLG&_uONI!ejR|Hjy6c>?*8T2X>s#l3|J*Bojno04B7ynPiT-qc)<@UI z9{||e{%kaz&>|NA;QT{ROWop$0|_7Q!%qn9++0VVsY?FCmsh&N?uw^S-MkVFYhUeK zjy53{ZE4b^``g`onRDm$%zFe=K4iW&z>B&nqXW!hOqEh;Elw^E{TBToMtYD2UH`Se zHlo9~Gx2E`$=YkzN$?rRw|WuoZn}SCF zx1G9*0AN|LJV*&~e0)fCQEwCkAO7ELC zv}ob!V@Y+F_&CY25L||!vdQuK5=5v=1yIu_9pwkRw4r&r(L9dn{zIX*h12(8V~~Z0 z+3a$=sesurtMGB}Qp2HKYEmH|Au%)DrQs${A>nM$<~rs^sfvlDd-mIR@6vY*+R8{ae@{g0PMWnzGd|2s+q?QHAGVT^ALIgOOk)!GINHPv{Rsfeh zw%OF`us4^maB9i(63vu`n#p1E@Ziv!9(3~wvE|c!3WX9ou{k;4Mm|u%!%fV#l$!kx zNb0+UU{=6XEJjO1-fLPY%>m&);M$ui9;r08$m}>NngHHmw`t*FK>iw0`a}C}u2nIp z_PJwX<;~Ef5dSw)RCtIj$D(gbvXsQ`^ak@I_Cj%N7V6-Br9Efe;KVl{#3*4v;u7fBQWtAscA8%0;qaBV3^Bl2L=`t-fi70`p zlx>1avsX=GsWfS4lz>!SW8Ha26yPH{#J$d3@r_0vzdjr>H|gy?@iml(&Ts@MtimlOX-Bki z`4~-H{t`2;6qkfKkYRDz-fq6cBtV&}_04bGS@nQ3f3ZCuX2oS&F8><~*0E?4y%Ukp zJ@xfs481er3JPQQhQhJ5U?_1p#yWoV$!Bsqv8+a?2(2llG>*QUFMGqgxzt?50dbQl zZ}5^M$#(4yOQfl$F46t>7kLNC0zAlI#n$h_$7H3$P zAL`==J!4PNG<2({u)0;8#?n~M@i42xdswp@!Y@DzUU1|C055y^+j{xu4~kM*u<2Qx zIErxUOFgf0uP0|?#}{ZZ-mM^8TQIc7EDu)o ze7BW?D>U+s873a2@i^#uw9~37etmc|h*+vXx>s#pXiN|LXw;-9j%H~R4yP{CFAa2g zoP?Af_LQZy$7Uzd&oW2gC?1AHNfEgw_qm`U1>^O(VlLIWZoYM-F}EwzwUnqTJ~Q`6 zQS)BYMnyD5BG*pjK)ZQ(CSIXA@TJO;irZ+X_nq3EldWgPr+It%Cq|aWeea;{F}xu| zW%`%ad%5lnEm_S~h)uw_c`0;H%?9~!+u+6!PG-4{rs**d`*A-RIwr>BbxTgpp6h#b z8g%#-!;F34(X&Q!54%@48FT@`(|a&`ELXQsb8OCWlhb9!hVn5HpUNAGcvCncmqbz( z4~cXpCvhCMuH2ua2dq)DyULhG1uOwNi)cC|OCGUGi2O8UHn9sF3f@Re$cQGwkIiX; zHzsv-CIpk~&G*11DvsQZyp_A^fo_j)HZV&7fJNphFP~-}g)MDbAWMCj<{w~gZ$H=( z0DJ(D3h-2h=|6;u2aW%Fl-Uw;f=<}0 zr;WZ`h!W_5!qsg1c)Y3UQc2kD>Kh-nf5dGmbfPgbmF77XVKGg z)Ls8wb;*C9xdKoe`>@=7;>%FFaeRfx*Kac^ZGuiP%b| z&lwfqyp|3Sy zZu>`zRY!L^Zrb2H65Jgmy5z^RkCi?R-0j7X{g|aO zHTu)yVq1xh$p-Y=_59l-v|<yxn7gMxgRV6(Wa!R|UP_|4EBKl!d$jIs=wG|;= z)~5UO=3ZBujId<>#iR83=&ew%v_669tb4mi z8V}aoXmas-irz@v@Ctdw{0Hn+aO76IQS9Se^Qq4px40QObwXL+rp`SfcMyLClb+aK zfJKbEb{K8K`K9*gXT^dKGG%PT5b1FH#kvfzM4yn(=@sl=W3EYcg5?B;YuswbOGSY#i;)`Ktd;B$%BW7jmigoNpR+;#oqOM+<&Ha zyaxIL!j-%`sQD?_qybM`F2Ij?9AJYY)+PB%!?s?2ABWX|)c@SW@nYtMNk~sBVBKrn zyr&wQOP!ng*(84wcr27_<@)=G9X)bsN)AvHzJLG#$oapa_ulhXRjwFHGeKVb@C65qyQ9Qc#eB;Rp0z4%*4}53A0{4)6^V9u$Kli$iG8snb^H zRwiyw*-1&?76hHTe{~;fN@V1n_g)W8&Q~Ut5@g0a2Xsb+6>h#7jJ9f1byNhBf6ukL zSt&i3I7FI|exM&2?;`H`z3QoF+U!FWG$_Bl?8_r7cXBNf$=!f4Vh}zJFgKM_RZAja zGL70OJX~*AKOZ`rG1b^-#b!}qlqpZJH^nkxEuHB^n0~ud`7v##`{vXPHOEHb@_T%6 z61G6rWp!3cnm>TL9lHf9=;-C$cR8@0jh5sr;nqi#TYAh zxRjt4Tehv*nzCY8V`;VRAjtdBs>@~t zsWol*pv&5tTY5X%i)ozNgT?zQf}O`9g@p8&V!RV!xk>GmfAqB>L+6kRVxf(aT;+FH zU}hP`PSBnR(|CsaO@28DR|fuPR!2-&Ij4IC2~%U+tx>B!;gu``J-Rg^1htfNk*~kl z@iAdveZs#hND=bN7}=VaMojL21_V-vYQ3J1oigFYDF67YuOIpfC2I3A|8zd_25Zwso*!Baby?0MJy0q=gbpT2)qb~4TV;mObAH6?_xKXUF-w&W0eMmNm{^P=otj(*fLoxi^_3Ihus zyt}h-fzQmpEul+y1RRtjvv!!3NN3OZ-nR=L%LeNjea1J^`BQeI{?7ZWCH@a}d5yA5 z-BbF4IxukoHEep(qO7k!Jh2i7N+eI;P{7s|9}6np5+36yP8zr^*CilFsyG|8^|Y&r zaagm+eb(P^*0`a90uJ(aOo~(Hs2*5!*?s$VOX-vOFPXVVVtQ3A6Qc-~IR**3QtWo@ zpm?;f$S38B$wV2$H>|KY-88r&{JZFo{YPJaggSol4rkFkIgerbd#p4##a?H%ELmiv zK3I+eVFLrc+&wiDsZsqlpSF^>wP%@)ksm?-(?{>hLy&L%V@1HlBP$I7fV#59O(O5!;RRwz;*LYw}(YO3mJ7k8BEBK-aLHCHrTyA zOW_JM)oN1z%opn!C7org$gPzf67_`WH!!;gk zp|XwR^G+>Dz%(DuKaSn4=bXV8-=XsSl$x*$2txVSwf<7XY*u$>%#nQy=v<)0z<^=( zPW_b{zJN84lubU8@6LGCsG*VbQfNylON&ZiOI?Et;?$;BO3ezg^V(kWrhYGEd>?kz zAfWZ)xD-xd4Pks5CPEF=s$M>5GsM6Yj_}`)?+)Hd?UO2b#~uc^J(b;Wzt#V$7Dnfy zFa;j)Gyn4V(~MTNfKt#lIIY~U{8_$X(ZKMI!Fo8a{Y4E||A#35U%q~Qbuj=N#O-5W z2Q^;uXAn|_5E>P+|0WXAM{Pz<%l1!(7{HLHxv0usaF`xJgI#Ses(F!JO-X~@x=?l( ucrUK=L-eoX-Jt*H@5w*X2mfXA35p|rdHMY<>C^fdpr>uDRi^PE;=cd|;>?-= literal 0 HcmV?d00001 diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py b/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py index 3202a6d5de1..78a5afc8844 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os +from pathlib import Path import ansys.aedt.core import ansys.aedt.core.workflows.hfss3dlayout @@ -38,7 +38,7 @@ # Extension batch arguments extension_arguments = {"choice": "Export to HFSS"} -extension_description = "Export layout to 3D Modeler" +extension_description = "Export to 3D" suffixes = {"Export to HFSS": "HFSS", "Export to Q3D": "Q3D", "Export to Maxwell 3D": "M3D", "Export to Icepak": "IPK"} @@ -50,15 +50,19 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("400x150") + master.geometry("450x150") - master.title("Export to 3D") + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(os.path.dirname(ansys.aedt.core.workflows.__file__), "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -67,33 +71,70 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 10)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window + master.configure(bg=theme.light["widget_bg"]) + + label = ttk.Label(master, text="Choose an option:", relief=tkinter.RAISED, style="PyAEDT.TLabel") + label.grid(row=0, column=0, columnspan=2, pady=10) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var, relief=tkinter.RAISED) - var.set("Choose an option:") - label.pack(pady=10) - combo = ttk.Combobox(master, width=40) # Set the width of the combobox + combo = ttk.Combobox(master, width=40, style="PyAEDT.TCombobox") # Set the width of the combobox combo["values"] = ("Export to HFSS", "Export to Q3D", "Export to Maxwell 3D", "Export to Icepak") combo.current(0) - combo.pack(pady=10) + combo.grid(row=1, column=0, columnspan=2, pady=10) combo.focus_set() + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=2, column=1, pady=10, padx=10, sticky="ew") + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.choice_ui = combo.get() master.destroy() - b = tkinter.Button(master, text="Export", width=40, command=callback) - b.pack(pady=10) + b = ttk.Button(master, text="Export", width=20, command=callback, style="PyAEDT.TButton") + b.grid(row=2, column=0, pady=10, padx=10) tkinter.mainloop() choice_ui = getattr(master, "choice_ui", extension_arguments["choice"]) - output_dict = { - "choice": choice_ui, - } + output_dict = {} + if master.flag: + output_dict = { + "choice": choice_ui, + } return output_dict @@ -163,5 +204,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) From 25a1aa11e182a15c62bbf2bcc1263d72d33a8dad Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 10:21:22 +0100 Subject: [PATCH 22/43] Generate arbitrary wave port --- .../hfss3dlayout/cutout.rst | 2 +- .../generate_arbitrary_wave_ports.py | 136 ++++++++++++------ 2 files changed, 95 insertions(+), 43 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index 4cd575d80da..d62edb9bf83 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -36,7 +36,7 @@ Using the extension 4. Select the desired options and click **Create Cutout** to generate the cutout. -Command Line +Command line ------------ The extension can also be used directly via the command line for batch processing. diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py b/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py index 90363289d98..ad3cfeb29de 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os +from pathlib import Path import time from tkinter import filedialog from tkinter import messagebox @@ -52,18 +52,22 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("680x220") + master.geometry("1000x220") - master.minsize(680, 220) - master.maxsize(680, 220) + master.minsize(1000, 220) + master.maxsize(1000, 220) - master.title("Arbitrary wave-port generator") + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(os.path.dirname(ansys.aedt.core.workflows.__file__), "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -72,13 +76,19 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 10)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) work_dir_path = tkinter.StringVar() source_file_path = tkinter.StringVar() mounting_side_variable = tkinter.StringVar() import_edb_variable = tkinter.BooleanVar() - # import_3d_component_variable = tkinter.BooleanVar() def browse_workdir_call_back(): work_dir_path.set(filedialog.askdirectory()) @@ -97,33 +107,36 @@ def browse_source_file_call_back(): source_file.insert("end", source_file_path.get()) # Working directory - var1 = tkinter.StringVar() - label_work_dir = tkinter.Label(master, textvariable=var1) - var1.set("Working directory") + label_work_dir = ttk.Label(master, text="Working directory", style="PyAEDT.TLabel") label_work_dir.grid(row=0, column=0, pady=10) + work_dir = tkinter.Text(master, width=60, height=1) + work_dir.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + # work_dir.setvar(work_dir_path, "") work_dir.grid(row=0, column=1, pady=10, padx=5) - work_dir_button = tkinter.Button(master, text="Browse", command=browse_workdir_call_back) + work_dir_button = ttk.Button(master, text="Browse", command=browse_workdir_call_back, style="PyAEDT.TButton") work_dir_button.grid(row=0, column=2, sticky="E") # source layout - var2 = tkinter.StringVar() - label_source = tkinter.Label(master, textvariable=var2) - var2.set("Source layout") + label_source = ttk.Label(master, text="Source layout", style="PyAEDT.TLabel") label_source.grid(row=1, column=0, pady=10) + source_file = tkinter.Text(master, width=60, height=1) + source_file.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) source_file.setvar(source_file_path.get(), "") source_file.grid(row=1, column=1, pady=10, padx=5) - source_file_button = tkinter.Button(master, text="Browse", command=browse_source_file_call_back) + + source_file_button = ttk.Button(master, text="Browse", command=browse_source_file_call_back, style="PyAEDT.TButton") source_file_button.grid(row=1, column=2, sticky="E") # mounting side - var3 = tkinter.StringVar() - label_combobox = tkinter.Label(master, textvariable=var3) - var3.set("Mounting side") + label_combobox = ttk.Label(master, text="Mounting side", style="PyAEDT.TLabel") label_combobox.grid(row=2, column=0) - mounting_side_combo_box = ttk.Combobox(master=master, width=10, textvariable=mounting_side_variable) + + mounting_side_combo_box = ttk.Combobox( + master=master, width=10, textvariable=mounting_side_variable, style="PyAEDT.TCombobox" + ) mounting_side_combo_box["values"] = ("top", "bottom") mounting_side_combo_box.grid(row=3, column=0, padx=5, pady=10) mounting_side_combo_box.set("top") @@ -131,11 +144,45 @@ def browse_source_file_call_back(): # checkbox import EDB import_edb_variable.set(True) - ttk.Checkbutton(master=master, text="Import EDB", variable=import_edb_variable).grid( + ttk.Checkbutton(master=master, text="Import EDB", variable=import_edb_variable, style="PyAEDT.TCheckbutton").grid( row=3, column=1, padx=5, pady=10 ) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + source_file.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + work_dir.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + source_file.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + work_dir.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=4, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.working_path_ui = work_dir.get("1.0", tkinter.END).strip() master.source_path_ui = source_file.get("1.0", tkinter.END).strip() master.mounting_side_ui = mounting_side_combo_box.get() @@ -143,8 +190,8 @@ def callback(): master.destroy() # execute button - execute_button = tkinter.Button(master=master, text="Generate", command=callback) - execute_button.grid(row=4, column=0, padx=5, pady=10) + execute_button = ttk.Button(master=master, text="Generate", command=callback, width=20, style="PyAEDT.TButton") + execute_button.grid(row=4, column=0, padx=10, pady=10) tkinter.mainloop() @@ -152,25 +199,28 @@ def callback(): source_path_ui = getattr(master, "source_path_ui", extension_arguments["source_path"]) mounting_side_ui = getattr(master, "mounting_side_ui", extension_arguments["mounting_side"]) - output_dict = { - "working_path": working_path_ui, - "source_path": source_path_ui, - "mounting_side": mounting_side_ui, - } + output_dict = {} + if master.flag: + output_dict = { + "working_path": working_path_ui, + "source_path": source_path_ui, + "mounting_side": mounting_side_ui, + } return output_dict def main(extension_args): - working_dir = extension_args["working_path"] - edb_file = extension_args["source_path"] + working_dir = Path(extension_args["working_path"]) + edb_file = Path(extension_args["source_path"]) mounting_side_variable = extension_args["mounting_side"] - edb_project = os.path.join(working_dir, "arbitrary_wave_port.aedb") - out_3d_project = os.path.join(working_dir, "output_3d.aedt") - component_3d_file = os.path.join(working_dir, "wave_port.a3dcomp") - if os.path.exists(working_dir): - if len(os.listdir(working_dir)) > 0: # pragma: no cover + edb_project = working_dir / "arbitrary_wave_port.aedb" + out_3d_project = working_dir / "output_3d.aedt" + component_3d_file = working_dir / "wave_port.a3dcomp" + + if working_dir.exists(): + if len(list(working_dir.iterdir())) > 0: # pragma: no cover res = messagebox.askyesno( title="Warning", message="The selected working directory is not empty, " @@ -182,7 +232,7 @@ def main(extension_args): edb = Edb(edbpath=rf"{edb_file}", edbversion=version) if not edb.create_model_for_arbitrary_wave_ports( - temp_directory=working_dir, mounting_side=mounting_side_variable, output_edb=edb_project + temp_directory=str(working_dir), mounting_side=mounting_side_variable, output_edb=str(edb_project) ): messagebox.showerror( "EDB model failure", @@ -202,13 +252,13 @@ def main(extension_args): student_version=is_student, ) - hfss3d = Hfss3dLayout(project=edb_project, version=version) + hfss3d = Hfss3dLayout(project=str(edb_project), version=version) setup = hfss3d.create_setup("wave_ports") - setup.export_to_hfss(file_fullname=out_3d_project, keep_net_name=True) + setup.export_to_hfss(file_fullname=str(out_3d_project), keep_net_name=True) time.sleep(1) hfss3d.close_project() - hfss = Hfss(projectname=out_3d_project, specified_version=version, new_desktop_session=False) + hfss = Hfss(projectname=str(out_3d_project), specified_version=version, new_desktop_session=False) hfss.solution_type = "Modal" # Deleting dielectric objects @@ -233,8 +283,8 @@ def main(extension_args): hfss.wave_port(assignment=sheet.id, reference="GND", terminals_rename=False) # create 3D component - hfss.save_project(file_name=out_3d_project) - hfss.modeler.create_3dcomponent(input_file=component_3d_file) + hfss.save_project(file_name=str(out_3d_project)) + hfss.modeler.create_3dcomponent(input_file=str(component_3d_file)) hfss.logger.info( f"3D component with arbitrary wave ports has been generated. " f"You can import the file located in working directory {working_dir}" @@ -256,4 +306,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - main(args) + main(args) + else: + main(args) From 1690142ffea119231fad2b28a68e50c4bb70d7ad Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 10:27:11 +0100 Subject: [PATCH 23/43] Generate arbitrary wave port documentation --- .../hfss3dlayout/arbitrary_wave_port.rst | 51 +++++++++++++++--- .../extensions/arbitrary_waveport_ui.png | Bin 0 -> 11259 bytes 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 doc/source/_static/extensions/arbitrary_waveport_ui.png diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst index 367cbcf796a..a48d8e57390 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst @@ -1,7 +1,21 @@ -Parametrize Layout -================== +Arbitrary wave port +=================== -This extension is used to generate arbitrary wave ports. +This extension automates the creation of arbitrary wave ports for PCB layouts or other design files. + +Features +-------- + +- Provides an intuitive user interface for selecting nets, defining the cutout type, and adjusting parameters such as expansion factor. +- Supports batch processing for automated execution via command line arguments. +- Customizable options for fixing disjoint nets, selecting the cutout type, and applying expansion factors. +- Integration with Ansys EDB for layout cutout creation and post-processing. + +The following image shows the extension user interface: + +.. image:: ../../../_static/extensions/arbitrary_wave_port_ui.png + :width: 800 + :alt: Arbitrary Wave Port Creator UI It assumes that oblong voids are explicit and some pad-stack instances are inside to define terminal. After defining the working directory and the source file used for creating wave ports, the combobox for defining @@ -17,15 +31,36 @@ only folders are displayed since EDB is an AEDB folder. The tool also supports other format, when the user does not check `Import EDB` box, the following file formats are available: odb++, brd, mcm, or zip are allowed. -The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. -The available arguments are: ``working_path``, ``source_path``, ``mounting_side``. +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS 3D Layout interface. +2. Locate and click the **Layout Cutout** icon under the Extension Manager. +3. The main window displays the following elements: + - **Working directory**: A text box to specify the directory where output files will be saved. + - **Source layout**: A text box to specify the source layout design file (e.g., PCB files). + - **Mounting side**: A dropdown menu to select the mounting side (top or bottom) for the wave port. + - **Import EDB**: A checkbox to enable or disable the import of EDB files for the layout. + - **Theme toggle**: A button to switch between light and dark modes for the UI. +4. Select the desired options and click **Generate** to create the wave ports and the corresponding 3D component. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. -``working_path`` and ``source_path`` define the working path and ECAD project path. -``mounting_side`` defines the port orientation in the layout. +Supported arguments include: -The extension user interface can also be launched from the terminal. An example can be found here: +- **working_path**: The directory where output files are saved. +- **source_path**: The path to the source layout design file. +- **mounting_side**: The side to mount the wave port on ("top" or "bottom"). +- **import_edb**: Boolean flag to enable or disable EDB import. +- **is_batch**: Boolean flag to enable batch mode (skip GUI). +- **is_test**: Boolean flag to enable or disable test mode. +Use the following syntax to run the extension: .. toctree:: :maxdepth: 2 diff --git a/doc/source/_static/extensions/arbitrary_waveport_ui.png b/doc/source/_static/extensions/arbitrary_waveport_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..51eabdc460b391fd185a7ce9c8c2761984cb819f GIT binary patch literal 11259 zcmd6NcT|(xwr>;_6#*3y=_=9$M5zMORHUOKMY@e9Bp{(f2#BJB^d>cQwo;`eK!AX# z^ezOF(4-Sc=mAoA348Bz&v@saci$c3jyK*Pgq5{czBT7sbItjizxjQ5V5H4@lIJ7< z0ASVCxoZpnFyZL!)#JzLpXEBPd z>sWvR0Jav!-=S8wKVAR;5;3}WHBEeNSH|32t$iBi*N9j0DWjb$Qr6z$ zcFR!h?wryyzToze(Nd&F?Ny+gzPOaL44F*pA^P?xfqx39sC{kS2+9ua-3QO*0VydH zB$CQ!b=q1q=OMbV0043+hJ50n<=uaeh15!<*4TV~RMxPTn#Od{y=7JNNO87WFn_k3 z@xo;NjTCJ3z7cIxT}>DPO4%~W zJ9yCPB9QLxl+|T7=|Cg3ovn&dysDCkk|cD0kz~J!f|!k~P&Ab&FsPIuZS`HZzZ+Dq zgCSv7b;Ig6mUX<{zU9@#ov*czJ|_ecz_55}=x!&do3=_NLhb5M>zuX3c$lZlH``q* z(SFfUJziVD?|X@}!B`U&6L?Q;lq9{L>32~isPj_oCAa;B$~i|ZwE^TcVk+}a2s;i4 zU)cV6nDmx~Yi1Bes|wsIvh#9z*|6Rru}<0O?fm?x5SMy&%uMpUa9TG;{R%_%CfZs9 z5psWTZ*N9OaQD3x$M$#tv7J3=l}QP*S7lYH?vxcotDT=|e%|`>Hpu}CKWoJiROE3- zEyjP4BBx?vkfosRHfE6GUXnlSutsRvo+m3-L4BUfNkSLy2*yp&wh^H2?J=JT$a=S1 z5Ln37B^bStb0c7_K4@SHdfBaPS- z*sBWe6Z!0ubEtUUcb*Tb!hu6-va1%g_Ce!vc(?IlosP)lf)%VSFKKRgc-R#W4+BZv zU?>N8f_fiDz_Mb$!1Hc-JsPJFf$M^eH0bQu9ZnUt+U*J2U^J!+PMR6q-%?z!<4fWt z`sXH2P(#?;vhTc`VYf<1aKSHyva5-qb|aN&Tj*IAJ94T`*%X$2k}huPn6`e0e0o`F zDP{|{Pnn;Mu%qN;>=S%YE>^W$fyDZaC>zq(Xh>I*)B@a785rF;>)|om!5JWxKT)w` zzqGNjvAz}!#Swgn4J1s^5&!yLR9G)c8w!I_W<<9GgPiM8s7yuwhJ{A|OgqYNF7LFS zWIbV|?a{JD@@_8_)Vn*czVA1UYmW0*g_gf;Qhx`<@w(MNMa}d%@!lJ$7H#WY00j^yDk3cL&tW|07KaG<%E%O?J4+?a{LDrgj0_K~wHWKBOafo~3VS`Ktt2VU zm}!+#dSO`VzQ=Uf?tZuaVYw>jg~9UtW+h9rQcXjqJi&3w^@6E~cT$hlJBe2jilz(@ z+AX;Ph3J7T<+6DCkw-M5Z3DVXp*vIW6kq2IK;)K>E;cw%ZaTjonobN-pn7QhupzS8 z?c842C@m}Nj1|&ep6{PrA(kC7XL96IwIynj2BifzZ{~-Xh1NjX#tNPe7q%{PUGTR{ zQY^BrG_LL|dYc;*4Ar`QFqdMDt1G!K5jdjvc26I%tjobufb(q@hZl`XGK~$#;)@+M)id zpHyxG1#0A9>}8uQ241JUlqeKjO*nQ(-Q8JdkXmhDf2KLB;LyX+Jfr5mqSt7a@n`~i zd>k|%N;%DaYJ?|stFpSfdUUo1zer{7T<~fLTFioJqaLr4&`BWH^;etzH0qud)gQ=8 zZSFmTE7-i*Kr`DM&w(CmoZK_FgA5&W-_P8Nh?(SKr|m6NvJFg!LhtRpy}Jr_dCyGO z=OUc5CiVnU^zl6bN$H8tbhX|IQnYs$+Fgv5(kn_ZOU8|cpii^V{px+kBx4cVv`L#a z_~({)4Vu4}`T+$~k{8+(SnOX_fvMh3fK%{`S2@Hh9~9%0F{hFzJ_cu>9QjL1$#W-+PucSkXx!_uF(>gfzXjndl%lP& zU+D8?cK9KWOm(8%g#pij)g@+}7;ty!bm3-U*i_B1IqOTe#@zy|FPx`5(vAkIXVKP^ zQN_IHxAu5StKV47S94nTa@XH$!0*~`D({xe!*;tImpvLBPoKM$oa9bM_xBOiMe}== zec2z@NfG=O=lj*8Cu@H%aIrS4jcRVGAxlZf<6>0DOE+KEs)4C|3_Vg|QPKHjv@hC~ zA%x0_yDe~{_Z=UnzAE;{eXd<~_1%Eo&2~GTr9QGpWn4wJim8&Mvf1ubhg5CiNe55< zn=98oO8ZIBal;zCxOYX>*$%{`hw@X88oZSZj ze_S$(W(PfLZm!)F@KkSLZxB_5L5=dCnp#bTwrVfF!px5dt{V213HQ+)i+oh`VdgFV z<@;4oLl|5@n|uwgw#WDSl7ervzb!OP?LI0Ir{04y=Y-g5?%}rh=Nl)poSPw3@DAnB z$`WLI(r@~h;UI(>@T>Q1pu>T}oh;JzPh{^lm_waMhWWNl-Ju0Dm-M$d=Kju>h=`=kP$v%>Hm0-^>GHd#mbD;>dQ;u@?Bi z>_Xj~Cv|UYqJo=FoV=n5(x87agkT2C{8D5&-t;?ps zfJOi(DPG}OMg#DK#P`wP{h+zceOU3JapI!;0Sbr#{FfcUCO_Oa4u13`x$he*qor~9 zI0J+M09S&W{_0q0IcNm@VSTN0V57HASgwe`EEs1XGM#km2#7IvFe=8(?1aGULinwtXFTR-0q$(94n*V`i!b(|U1I|gN)CAoNj^DZLSN^%{jhHMvnr;1 zH(*GsdMjio>1ioa6vjn=l*Y63y#k53+S3J(WGV^X-=gHSCXIYvXz7{T4@r^D%939A z`aaeJa|t~SH0=^;_s$#hIO`!}`nk=dM~aZ5;w30DLOPGT#Sn@q-^Kcx4N?SscrgD} z><5lF1Z@Ag5G3^l>P7y=jqKr}oGz}4fqwL*(Sda9QzC@wisDZ~d-vf;&I6rRoOmhl zQ*9OJU_!5mCg9B}P_Itm?pI^Byrtju=PIZkGCsz8mBO_=PBdHOO;KU+U6D@+Ah-9+ z=O>fHT`as2GaEEDAqT?}_Y(nC30S-Bpgr`5q$k+*oyZlMJav85m*%AyC5~h@!$H17 zlUDtHch2ULM=B`Q^`3?PT37^2gM&?ZJv6P?>#jOR!6g_!2T_;uNsu zPu7n=m6{aa__X9|S;12Edbp0`Jxuq$j7TKc;qD2`m)BY#b7IG)R?#r7#;0{Uk4VWW~wjt*ls`CtXud}io4-FSPpr1 zTZVUDW^gmOi_P>7A`Dm=@zKr$+khcKxa-ocxTm$1Xae(>EzMdkN!1xv`pP$z=+Xi; zE8>enf_juvEc+&X)P7Z@uc$8`Z5QK^q?R|B+AS{6eBANFNxbzbA-ee8Ks@a^b9|## zydV3Ai)ic3sb1p*(Jm@8(Ga6;-=6-5-1Zw5)D7|iSVmKc#uCP_hPH;CAcPPOxp3K+ zCM4cPVi`_l1h@Vs{dm;{yyvrLO6L+F3Kx)mtevv=yY$rF&89K5R01+`6zH&@=jEB?I~}Q-L%jPvhs_ zbjtxgxb_Jzb^n$P@YRH9s))P3@`$+=vlh#ns!6z0aAhavg20JL|Br%U8L5z8xGdlg zR_4yV+w<=EtHVpC;OeIz6lO5eEK8&9H;fk4swiru_mPle*C?1EqF1J7I={MknPqdC zPWkLUMn0>#^Dtd09gVImXH11_sBc~-(()N-q@2&95EG@7{GkUe|B%F|cm~s*rW5D~ z*N@^;#3q*^n@TRJ2yLJ9p0MCPnN-9qWvgIibCbOSot7ARZv&F!ci1N&s|-E?#j-m$ z19^;jPq;TUs zH~bVIsbjF(i-Hm6CJyx30DGqsqCbx!dz zKcQ~fRE9e%SFh$@^Z;Y?nlas1ReL?wlq>>E#X3{S`Q2ge{D&a@+YZ5z9YpwURR9$VW zsIV1JyeOry70W3(!8TIG86evF{p%s0i0k}{XDJRKd~HF#kX2l5^Tw3k!CsNWw-HID zLLq9{Gr-pGyc|Fw)&SQO-(3Mzt1{k@rrb;}B?l3if!(Cm?;Y*a{Tmm?B|0cx<7)X27AdJS$ZoZehpk12$ljSQ$aFd929un0 zKKj0mAkO!8#Fzy@1ImLYhldy3@WJ+?hwUdKJcd=SUoTHdis|iGcCFs8R{VsikaYP_ zi-JMyAD7Ex-Kp?~2jfB$JjC!SU;I-`OS&ZpI+Zq+lzcG`C+4nLS{uGD8cRxx>-biF zB0Xq-*484$I#Ew3H|yw3!RFB8ql>H!+h1PQeh!yBl{QUP`_*un#k*~-O{Ikiqn-Rc zAT$};6>ea(bOZYcEFkMwCT8^|>WgjVeaoN9TsW{tnZqDDXqPzE7&*TbIccP%#IOPB z?;nkWJpXXjM<65zhaY|~Y%urnYh}~*qr_RW@GoplpNG23*)uCgeDnwPCY~Vm!%456 z3e_W6ZBG*opA1359GGA1S$e^!mreVP>PJ+zZH7gBktBP>M|#j<5AWI`ZmI>Z@7AZQ zK`>JEh<*j189;aic2f8YadZ}yp=O7(M(a1Wc`GQtIsH5rZXkXRT1(-&4VWCRa*CnM zY)^Q5udfZC#D+Dp8HkB8k_-3XGd0A7?S~d86YT4PbT~!0~ z44~ELaUACpx9wL-)+;@qZFg(IQN1aDhCTqu`Wq9yrz4YSH5{W4fYbaF4FS$-OdjC0 zi--R1Xv%VC%qV~7*;iG{+&GieSN!{!q0j*aY7)4b+*z?nsRW(q{z7hkcO|~PMwtC? z7}NLef5S6?zeoNCIRCz5Rp2jlHtS)LlnEV{%C_)Q--&r4!;P4^^w-+{4tu(b0W}j+ z+1w?l`fHuiwz1mp1i&u;Kz2csL0el09FJU@&v=lKg8SgV6^JgXj*c44hfc`>+Iji; zz38Vz$0$Ktd+r=HA#a=})fjXQ-Q(&EtCDcjbA7JI>6@oH$k-V`P3XViPRlFqT=rKI z<4l}*Zn&f+lKk#%4>F5IEtioQ$gVHuN2T`cLVwL-LRT>|qg;qt-97E%C%vt3Nt3&+ z?=}kGPQBhNs1rubZMOi$I&|EcyBQJ8N!e!FV-X`?d;Zh4$OwbIVHInjo_&x*_viVNh#;=E`mGocB)#vUK4z%C!WAh?0S5gulpU5-6dViV2@-S+@3@386EB695XNJO+N`Nvvq?iO@?6KEXlT{9&tJBD9M`9 zaFlyoOx-S~=d0)QR*+cxi1oW-%yi-1>H0A2=BKuqms|BMbD5L}R+SJh~Cw`FfuNg6|qq(n_H0wYwf~JC*S*1^uFa` z$IQ6V5N9RywAtfMnTNN2cl7pt7|T24?__qYfa zjTXA@6X9gpIf~Yr#2~s%y0a;GlmH8$Dv4k7(ItFR!tZ%;EHcmdUY{YQS2kl*_H%9l z2}Ldx6`6&JyVxx2>u9S?-#X0i#`}DfrV_cPy5R{uEiwon?95Zo6k0HP`szT+hpOHJ zm2XqkhqA%NiCRS%mma)CPnuYIA}#(En)S_0om{=NX-gg4tgy9BTbi_Bl!4(13{OTZZ3RzucBWngv=t{YmNX6m0g`x{)bWBo8m zmZYD?I;DJgFJ}d%diu*HxA$&zI_{oE=wcNFvxD^%79by|u&S}XrAEMvUd*=}n5 zryzrawBZ4-D}9bCIV+!hpXUJco<>V?5aWahP4MSRR=0yj)5|(bHgE6HAvYXlm!1h8 z9E#g~;I~KfY0~dt%1zL=GoQUT*JGqcuzb@1(SN?E5#jsrUYD9o;Lokt;l8WJsmO(% zYLVUM5#&7s%Lz`RPB-b~0Jn2ZLz0M>& zDV{h!UrNqr0O;VkN?)_EDhwGLy2XTm--B8)ORAg^Biklaj)#PVbXUCzG;?q)qLwu@ z|4OpA(C?yBmnB+WmyCwt5i4)k1$Kvh&GUX(u@4Tcx4j}aH4|G(aue__MS9QUw#iD^ z#vTdyM=Y;6t{=h`)*wQK`Zo@cP| z&XGEO;^6v(6iv?x=fH~>r>A1vysLAQTNC0Zw&%Bx*$?*h1Tg4= zV3BjOdb|DE6;fm46$Vz?XJFg5W3&7!S7z7rJ)}Id(9u?u=Kci!1xcBuT2*rqoHlm6 z^=;(pxPq@{y<&(di93})X3=E`vK?Wfr9#V*cY?vO#ed*~z-()~j=|y+MVMWUT|57^#c=1C< zyZ|g8JM1IjB$y}+vA^&qG;weJ3o>kz2O-Z5bx+3wf^acLrm9p6X+lSm6B%(P zSB1xReQNk_t?2>y3rCSw$hFH1{h6g8U7#qN04~H zW?&kh-~+zTpi2AkU8#2){$}YQvCfXd%9&zbneXqzYnXyRUYqmgLzf!lF zf@15=_DZU#@N|-*(+EMTZS}U+Rn80sk0JHhiD&F~HmTmT*nj?UMpvpm$76ewq^{kn zhhv#gXA?}rn9FwoqFQj+3d5jB$g+dC3qM8zjRne{s;G)&@WOPXx#8KU@zw#CyjEq! zhOjUo*fPbFWMPqU?nZBT-vND>Nk=)tV{~T8)WRzQlcQqSrnlejgtLjK_;Gv}HD{ux zfMx8zeLmOY=2Bixrw%^W4I*I6$;AnDh;R&ULh|Lv?3PMxQnM#?wHtmIe`Zr;-re6a zz_pwUjOvf!!@41}UCzyZ_-eeMmJgvzZ$uBYU1p3uXliE1t%&BUTgCXPAH{gA2Yv3w z(n*CY^l0YV*VNeE#HXwsa8G&6HFrrskSmiF_@hh$?HDDdqT6f{3ds5q47rk zTZmbR*$g#R}3(4`?8{Rf5$GdbbB+6=PSNa~dncK@0Wg{^Yb+$@= z(`d2w$94W{D*3HlmJE4i?^$A+cCxOo4USDgf*3gf7}2UgEA5~HfD z6mFAo?Haa)F9MKK6Sd;}^(96rfkNnV`z5SICF8;dn+@`WSYfnyK`hUo8}kr~*p8ha zxR&ea*;nSdlW5VP{Cb32@#bSoWdpIYDE~&fV_r#qh<>wouR1!sR!e;I*xqw4?JKJA zcK#7`x|U_7jo|WR@^RiSd56nFxoBG<(P(Ybje2zA4@5cx?P?S`$2QsUZ@S!6=6M_w zHQq4UAk&FY#z{!T7a5QK5j#Ave3biIq%H<@zjH`-yr_{Uo}+=4b!$AJ1|hAOFFX}O z8(}1g$JdmlNZYbrVPq>(Y1_<_vDcfm_XiGlopS^#LlJk`z7bEVtJs@ohHRGazdP?XL5LGU10~L? zZj>n!ZwPseH_5%wg0p_V&ods2vjcaMBWqEyIcd=k`E*mr6EBu} zBKG?gu!;npEz(45FAE@8^)CHMd^eSiv~wSU#SgL@x63NxMTy}H*QMkK2mYu+juqEH z%th_<(MJ|*e(_hLMs0o$yrCzAImdBHyGO&^<_}G3^f&V(QtJeE;;_7zR&pz9!tGFrT`tg z_q^O@LTdM!FH%*cBdH9HZG~{Bvl9jx=}q78yoR&yWsm627w{|3@4FhK1o~4>RA(>& z`qq!*e!iz3{Yf#7RX{cEpl%G2wL12XimgVNEK5H$TzCZAGZ{MpNKK(3ly|_$lMVCv z&xfR8J$lY`r@3jWRQb?2L!SKc6Y5gn95G@1#-g>mJ({Iu`_qHBaJsX6eTqz`GsTa3 zc`@zjj-^5mzBOEIaVSw0vE*sQV}u8tgNhRnr?y>oH;gaX#(Yk+akrl zBDurqLSs*9VJG%8Dsp93438OFt)rAiKG%TpTt|7n-zlNjf`XeMSh`RA?ZAFq{RRDY z@*Tk(<~?U)bk9tA0OYNLknXsYo6p-awW0Myxg2%vF1 z1lyrI;qKm7m2R+0yeN-K$R7X?pp>io&F@=XQ!Znx17grBHLQU0iJhk^7wY0o$>GJn z1Dh#Z{nDcH4RBaOQ2c%Kj#%4XdRU58apj)?{t$gpoRHYw%1h=gof@VW$t>xMv>Vn2 zInfs6_t=bW;DZA{pC~m(wI<`>Cvz(fH>u6;`zX_G{H$K{A^8ZQ0hjgdRc`2uHE(WJ z4*uGDF`;oIdFcGzp(9&k1#U~%NoV;aL678N>;Qlm9TH7y?EToUtC&s5n`#eA8SD@* z3G*o1KMB!HORETt9QApLSNqH$P}>1{8!rT6?# zq(J-Qoa6%b#^7Usi;||b9CjPTzsqZ#4N$T!qTu1400<)J0xa^W^qXc!CGQIMjLxqT zB7f3u?4ZqUlV-Wf+H&ti*UAHePXqbALlOZe0U9p3Zv(I%GMtZ|(F<$z$nc;O;f_!S zP7(Yk^+BI+RJk)Xi8xKsL!43PF@m|RpH?PyO&uxh+Iq)spShO)Dhci^<98S7!w0Mq zAnvZ*qVm7L6>K&?e~9XHDYl8agm_QFFYo^+$`wmK|Ej!rv|YAMpql}^F&g#>WmWeW|O z1kR>3il9q(2ZgzlPbj_GEdKDj``N=Dw(dGV#zgYNKVo|goPv%J{D&Q9U?NHOO>b7f zs-TP^kx(v!1wv}#rPPm%xVL;37269F^;A?p?86^%|9+bXx+YNK92^4lkVFeJwYKm! zoL^f~G%j>_{dV5gd2jTG`v-ryN;gQA)Q$wkURL(5A8VftN&8}_R8p` zN~s5IsNHIYB+EzDT{-H~1VdDY>*`I;FLvGyW6+_-&`VX!w+&O3@xn~T-2qhgf$t@_GUuMCdg=-+^|cD!{NlzHM%T}{Kh z)g-6zG}ti~Yw9^&^Sq>U%RaV?y7k-pSI#ZfuaY*?6S126r&;R;nJR9rZQhfpI!PGx zmK3!S(Xc~s`|!>mhny)FOLj!QxYc(~P|YpI9C_E)S##u0vW z%D7wx5gyAQvjS>&VJvF-bjq_&Pk5tV;FhC$FR6MEFmGSF+uoAUzHjiUrr`t7nuQ@$ zx$F^wVS?RB#WSRI@GM%{&?VNpufibx{gL&O*KUy+8A89fte8zva-i26X5Q052XJJI zuEx&h?)v@c~?H<+Sv^3smiz1Y){G>9HBAqyekBh_wC!-?- zW&cL`Yc`!6>z+chL#nOz8VY#XvEYo%=hQl-mm0U33b0;jBavi=f-z#OSSJwOLNLc> zRlKW+7_|LpBkoS+Wu{ge7mw&b37OwD>wAIk&_jq8@UKlIofq(TyH|Ckv96w%#L(>G ziRLUryf;|L-R-s=)oTUAsF{vH7pTro-Wmnf6y*m2C1iiM;cx=ig+5mn6=m(oh(p8+ z#OmjmAAx?qVb;Fh!s~lVxPTg;Keb*K*e9(&@wqRDV7%clEIW8#Z=!{|{!f?gABi?S zp=fF@P|CuGNRLj0v@tn(1qt*)xftkf+FFC*1ZEg)-XF@oT;_d0;#5vJz> z437Zt^~<8e$&~#mTohQ-aPr#Ur2r?JF?O{pDF#0oMGrpLph;Sr-I%@r;8ZsgY-hxd z2%_UZdV1+E=kDSn5Pbb0B@f0HWb Date: Tue, 10 Dec 2024 10:55:18 +0100 Subject: [PATCH 24/43] Layout parametrization --- .../workflows/hfss3dlayout/parametrize_edb.py | 138 +++++++++++------- 1 file changed, 89 insertions(+), 49 deletions(-) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py b/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py index ab7cd9413fd..b448a2a031a 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import Hfss3dLayout @@ -75,26 +75,30 @@ def frontend(): # pragma: no cover active_project = app.active_project() active_project_path = active_project.GetPath() active_project_name = active_project.GetName() - aedb_path = os.path.join(active_project_path, active_project_name + ".aedb") + aedb_path = Path(active_project_path) / (active_project_name + ".aedb") active_design_name = app.active_design().GetName().split(";")[1] app.release_desktop(False, False) - edb = Edb(aedb_path, active_design_name, edbversion=version) + edb = Edb(str(aedb_path), active_design_name, edbversion=version) import tkinter from tkinter import ttk import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("900x600") + master.geometry("1100x700") - master.title("Parametrize Layout") + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(os.path.dirname(ansys.aedt.core.workflows.__file__), "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -103,82 +107,83 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 10)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) - var9 = tkinter.StringVar() - label9 = tkinter.Label(master, textvariable=var9) - var9.set("New project name: ") + label9 = ttk.Label(master, text="New project name: ", style="PyAEDT.TLabel") label9.grid(row=0, column=0, pady=10) + project_name = tkinter.Entry(master, width=30) + project_name.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) project_name.insert(tkinter.END, generate_unique_name(active_project_name, n=2)) project_name.grid(row=0, column=1, pady=10, padx=5) - var10 = tkinter.StringVar() - label10 = tkinter.Label(master, textvariable=var10) - var10.set("Use relative parameters: ") + label10 = ttk.Label(master, text="Use relative parameters: ", style="PyAEDT.TLabel") label10.grid(row=0, column=2, pady=10) + relative = tkinter.IntVar() - check5 = tkinter.Checkbutton(master, width=30, variable=relative) + check5 = ttk.Checkbutton(master, variable=relative, style="PyAEDT.TCheckbutton") check5.grid(row=0, column=3, pady=10, padx=5) relative.set(default_values["relative"]) - var1 = tkinter.StringVar() - label1 = tkinter.Label(master, textvariable=var1) - var1.set("Parametrize Layers:") + label1 = ttk.Label(master, text="Parametrize Layers:", style="PyAEDT.TLabel") label1.grid(row=1, column=0, pady=10) + layers = tkinter.IntVar() - check1 = tkinter.Checkbutton(master, width=30, variable=layers) + check1 = ttk.Checkbutton(master, variable=layers, style="PyAEDT.TCheckbutton") check1.grid(row=1, column=1, pady=10, padx=5) layers.set(default_values["layer"]) - var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) - var2.set("Parametrize Materials:") + label2 = ttk.Label(master, text="Parametrize Materials:", style="PyAEDT.TLabel") label2.grid(row=1, column=2, pady=10) + materials = tkinter.IntVar() - check2 = tkinter.Checkbutton(master, width=30, variable=materials) + check2 = ttk.Checkbutton(master, variable=materials, style="PyAEDT.TCheckbutton") check2.grid(row=1, column=3, pady=10, padx=5) materials.set(default_values["material"]) - var3 = tkinter.StringVar() - label3 = tkinter.Label(master, textvariable=var3) - var3.set("Parametrize Padstacks:") + label3 = ttk.Label(master, text="Parametrize Padstacks:", style="PyAEDT.TLabel") label3.grid(row=2, column=0, pady=10) + padstacks = tkinter.IntVar() - check3 = tkinter.Checkbutton(master, width=30, variable=padstacks) + check3 = ttk.Checkbutton(master, variable=padstacks, style="PyAEDT.TCheckbutton") check3.grid(row=2, column=1, pady=10, padx=5) padstacks.set(default_values["padstacks"]) - var5 = tkinter.StringVar() - label5 = tkinter.Label(master, textvariable=var5) - var5.set("Extend Polygons (mm): ") + label5 = ttk.Label(master, text="Extend Polygons (mm): ", style="PyAEDT.TLabel") label5.grid(row=3, column=0, pady=10) + polygons = tkinter.Entry(master, width=30) + polygons.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) polygons.insert(tkinter.END, "0") polygons.grid(row=3, column=1, pady=10, padx=5) - var6 = tkinter.StringVar() - label6 = tkinter.Label(master, textvariable=var6) - var6.set("Extend Voids (mm): ") + label6 = ttk.Label(master, text="Extend Voids (mm): ", style="PyAEDT.TLabel") label6.grid(row=3, column=2, pady=10) voids = tkinter.Entry(master, width=30) + voids.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) voids.insert(tkinter.END, "0") voids.grid(row=3, column=3, pady=10, padx=5) - var7 = tkinter.StringVar() - label7 = tkinter.Label(master, textvariable=var7) - var7.set("Parametrize Nets:") + label7 = ttk.Label(master, text="Parametrize Nets:", style="PyAEDT.TLabel") label7.grid(row=4, column=0, pady=10) + nets = tkinter.IntVar() - check4 = tkinter.Checkbutton(master, width=30, variable=nets) + check4 = ttk.Checkbutton(master, variable=nets, style="PyAEDT.TCheckbutton") check4.grid(row=4, column=1, pady=10, padx=5) nets.set(default_values["nets"]) - var8 = tkinter.StringVar() - label8 = tkinter.Label(master, textvariable=var8) - var8.set("Select Nets(None for all):") + label8 = ttk.Label(master, text="Select Nets(None for all):", style="PyAEDT.TLabel") label8.grid(row=4, column=2, pady=10) + net_list = tkinter.Listbox(master, height=20, width=30, selectmode=tkinter.MULTIPLE) + net_list.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) net_list.grid(row=4, column=3, pady=5) idx = 1 @@ -186,7 +191,41 @@ def frontend(): # pragma: no cover net_list.insert(idx, net) idx += 1 - master.flag = False + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + polygons.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + project_name.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + voids.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + net_list.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + polygons.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + project_name.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + voids.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + net_list.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=5, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) def callback(): master.flag = True @@ -203,7 +242,7 @@ def callback(): master.net_list_ui.append(net_list.get(i)) master.destroy() - b = tkinter.Button(master, text="Create Parametric Model", width=40, command=callback) + b = ttk.Button(master, text="Create Parametric Model", width=40, command=callback, style="PyAEDT.TButton") b.grid(row=5, column=1, pady=10) edb.close_edb() @@ -221,7 +260,7 @@ def callback(): relative_ui = getattr(master, "relative_ui", extension_arguments["relative_parametric"]) output_dict = { - "aedb_path": os.path.join(active_project_path, active_project_name + ".aedb"), + "aedb_path": str(Path(active_project_path) / (active_project_name + ".aedb")), "design_name": active_design_name, "parametrize_layers": layers_ui, "parametrize_materials": materials_ui, @@ -251,6 +290,7 @@ def main(extension_arguments): relative_ui = extension_arguments.get("relative_parametric", True) design_name_ui = extension_arguments.get("design_name", "") aedb_path_ui = extension_arguments.get("aedb_path", "") + if not aedb_path_ui: app = ansys.aedt.core.Desktop( new_desktop=False, @@ -261,19 +301,19 @@ def main(extension_arguments): ) active_project = app.active_project() active_design = app.active_design() - aedb_path_ui = os.path.join(active_project.GetPath(), active_project.GetName() + ".aedb") + aedb_path_ui = Path(active_project.GetPath()) / (active_project.GetName() + ".aedb") design_name_ui = active_design.GetName().split(";")[1] - edb = Edb(aedb_path_ui, design_name_ui, edbversion=version) + edb = Edb(str(aedb_path_ui), design_name_ui, edbversion=version) try: poly_ui = float(poly_ui) * 0.001 - except: + except Exception: # pragma: no cover poly_ui = None try: voids_ui = float(voids_ui) * 0.001 - except: + except Exception: # pragma: no cover voids_ui = None - new_project_aedb = os.path.join(os.path.dirname(aedb_path_ui), project_name_ui + ".aedb") + new_project_aedb = Path(aedb_path_ui).parent / (project_name_ui + ".aedb") edb.auto_parametrize_design( layers=layers_ui, materials=materials_ui, @@ -287,14 +327,14 @@ def main(extension_arguments): trace_net_filter=nets_filter_ui, use_single_variable_for_padstack_definitions=True, use_relative_variables=relative_ui, - output_aedb_path=new_project_aedb, + output_aedb_path=str(new_project_aedb), open_aedb_at_end=False, expand_polygons_size=poly_ui, expand_voids_size=voids_ui, ) edb.close_edb() if not extension_arguments["is_test"]: # pragma: no cover - h3d = Hfss3dLayout(new_project_aedb) + h3d = Hfss3dLayout(str(new_project_aedb)) h3d.logger.info("Project generated correctly.") h3d.release_desktop(False, False) return True From cd9288ff8e2503beb7dd3e647d1f09154bdc888a Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 10:59:06 +0100 Subject: [PATCH 25/43] Layout parametrization documentation --- .../hfss3dlayout/parametrize_edb.rst | 58 +++++++++++++----- doc/source/_static/extensions/parametrize.png | Bin 364036 -> 20287 bytes 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst index 80b760d35de..d68a242c275 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst @@ -1,10 +1,17 @@ Parametrize Layout ================== -You can parametrize stackup, materials, padstacks and traces of an existing 3D Layout design and also -and change the size of voids and polygons to conduct corner analysis. +The extension allows users to apply parametrization to layouts in HFSS 3D Layout designs. -The extension is accessible through the icon created by the Extension Manager in the **Automation** tab. +This includes layers, materials, padstacks, traces, and nets, providing a flexible way to create parametric models. + + +Features +-------- + +- **Graphical User Interface (GUI)**: Provides an intuitive interface to configure and apply parametrization to various design elements. +- **Customizable Parameters**: Allows users to parametrize layers, materials, padstacks, nets, and traces, with support for relative and absolute parameters. +- **Polygon and void expansion**: Supports the expansion of polygons and voids by a specified amount (in mm). The following image shows the extension user interface: @@ -13,20 +20,43 @@ The following image shows the extension user interface: :alt: Parametrize Layout UI -The available arguments are: ``aedb_path``, ``design_name``, ``parametrize_layers``, -``parametrize_materials``, ``parametrize_padstacks``, ``parametrize_traces``, ``nets_filter``, -``expansion_polygon_mm``, ``expansion_void_mm``, ``relative_parametric``, ``project_name``. +Using the extension +------------------- + +1. Open the **Automation** tab in the HFSS 3D Layout interface. +2. Locate and click the **Layout Parametrization** icon under the Extension Manager. +3. The main window displays the following elements: + - **Project Name**: A text box to specify the name for the new parametric project. + - **Use Relative Parameters**: A checkbox to enable or disable relative parameters for the design. + - **Parametrize Layers**: A checkbox to enable parametrization of layers in the layout. + - **Parametrize Materials**: A checkbox to enable parametrization of materials. + - **Parametrize Padstacks**: A checkbox to enable parametrization of padstacks. + - **Parametrize Traces**: A checkbox to enable parametrization of traces. + - **Extend Polygons (mm)**: A text box to define the expansion size for polygons in mm. + - **Extend Voids (mm)**: A text box to define the expansion size for voids in mm. + - **Select Nets**: A list box to select nets (or leave empty for all nets) that will be parametrized. +4. Select the desired options and click **Create Parametric Model** to generate the parametric model. + + +Command line +------------ -``aedb_path`` and ``design_name`` define the source aedb project. -``parametrize_layers``, ``parametrize_materials``, ``parametrize_padstacks``, ``parametrize_traces`` -define which part of the aedb has to be parametrized while the ``nets_filter`` defines which net has to be included. -``expansion_polygon_mm`` and ``expansion_void_mm`` define if and which value of expansion has to be applied on -polygons and voids. -``relative_parametric`` defines if the parameters have to be considered as a delta of the original value. -``project_name`` is the new project name. +Supported arguments include: -The extension user interface can also be launched from the terminal. An example can be found here: +- **aedb_path**: Path to the input AEDB file. +- **design_name**: Name of the design in the AEDB file. +- **parametrize_layers**: Boolean flag to enable parametrization of layers. +- **parametrize_materials**: Boolean flag to enable parametrization of materials. +- **parametrize_padstacks**: Boolean flag to enable parametrization of padstacks. +- **parametrize_traces**: Boolean flag to enable parametrization of traces. +- **nets_filter**: List of nets to apply parametrization to (leave empty for all nets). +- **expansion_polygon_mm**: Expansion size for polygons in mm. +- **expansion_void_mm**: Expansion size for voids in mm. +- **relative_parametric**: Boolean flag to apply relative parameters. +- **project_name**: Name for the new parametric project. +- **is_batch**: Boolean flag to enable batch mode. +Use the following syntax to run the extension: .. toctree:: :maxdepth: 2 diff --git a/doc/source/_static/extensions/parametrize.png b/doc/source/_static/extensions/parametrize.png index 5cf38be8c98009e6088a2ed4720c2affb618c198..fa062e92495e8f3d801034cd481106a76d93f01d 100644 GIT binary patch literal 20287 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 z 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 G7AA{)%)O0y6StfxN%|82Fc%H1 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 N| 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

rdJlYeu-5c2igf#8$<~iHfk{(k61wr; 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

#_;^y>Mk^j7ziod4CDR^c$~QF4ZmI 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

jH-=%*wK8W*m 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 EPt@?4y8r+H diff --git a/src/ansys/aedt/core/workflows/project/kernel_converter.py b/src/ansys/aedt/core/workflows/project/kernel_converter.py index 8adb60ef14e..9b6fc90e6e6 100644 --- a/src/ansys/aedt/core/workflows/project/kernel_converter.py +++ b/src/ansys/aedt/core/workflows/project/kernel_converter.py @@ -25,6 +25,7 @@ import logging import os.path +from pathlib import Path from ansys.aedt.core import Desktop from ansys.aedt.core import Hfss @@ -36,6 +37,7 @@ from ansys.aedt.core.generic.design_types import get_pyaedt_app from ansys.aedt.core.generic.filesystem import search_files from ansys.aedt.core.generic.general_methods import generate_unique_name +import ansys.aedt.core.workflows from ansys.aedt.core.workflows.misc import get_aedt_version from ansys.aedt.core.workflows.misc import get_arguments from ansys.aedt.core.workflows.misc import get_port @@ -59,50 +61,70 @@ def frontend(): # pragma: no cover from tkinter import filedialog from tkinter import ttk + import PIL.Image + import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme + master = tkinter.Tk() - master.geometry("750x250") + master.geometry("950x250") + + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False - master.title("Convert File from 22R2") + # Load the logo for the main window + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" + im = PIL.Image.open(icon_path) + photo = PIL.ImageTk.PhotoImage(im) + + # Set the icon for the main window + master.iconphoto(True, photo) # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) - var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) - var2.set("Browse file or folder:") + label2 = ttk.Label(master, text="Browse file or folder:", style="PyAEDT.TLabel") label2.grid(row=0, column=0, pady=10) text = tkinter.Text(master, width=40, height=1) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) text.grid(row=0, column=1, pady=10, padx=5) def edit_sols(self): sol["values"] = tuple(solutions_types[appl.get()].keys()) sol.current(0) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Password (Encrypted 3D Component Only):") + label = ttk.Label(master, text="Password (Encrypted 3D Component Only):", style="PyAEDT.TLabel") label.grid(row=1, column=0, pady=10) + pwd = tkinter.Entry(master, width=20, show="*") + pwd.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) pwd.insert(tkinter.END, "") pwd.grid(row=1, column=1, pady=10, padx=5) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Application (3D Component Only):") + label = ttk.Label(master, text="Application (3D Component Only):", style="PyAEDT.TLabel") label.grid(row=2, column=0, pady=10) - appl = ttk.Combobox(master, width=40, validatecommand=edit_sols) # Set the width of the combobox + + appl = ttk.Combobox( + master, width=40, validatecommand=edit_sols, style="PyAEDT.TCombobox" + ) # Set the width of the combobox appl["values"] = ("HFSS", "Q3D Extractor", "Maxwell 3D", "Icepak") appl.current(0) appl.bind("<>", edit_sols) appl.grid(row=2, column=1, pady=10, padx=5) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Solution (3D Component Only):") + label = ttk.Label(master, text="Solution (3D Component Only):", style="PyAEDT.TLabel") label.grid(row=3, column=0, pady=10) - sol = ttk.Combobox(master, width=40) # Set the width of the combobox + sol = ttk.Combobox(master, width=40, style="PyAEDT.TCombobox") # Set the width of the combobox sol["values"] = ttk.Combobox(master, width=40) # Set the width of the combobox sol["values"] = tuple(solutions_types["HFSS"].keys()) sol.current(0) @@ -116,10 +138,44 @@ def browseFiles(): ) text.insert(tkinter.END, filename) - b1 = tkinter.Button(master, text="...", width=10, command=browseFiles) + b1 = ttk.Button(master, text="...", width=10, command=browseFiles, style="PyAEDT.TButton") b1.grid(row=0, column=2, pady=10) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + theme.apply_light_theme(style) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + pwd.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + theme.apply_dark_theme(style) + text.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + pwd.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=5, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True applications = {"HFSS": 0, "Icepak": 1, "Maxwell 3D": 2, "Q3D Extractor": 3} master.password_ui = pwd.get() master.application_ui = applications[appl.get()] @@ -127,7 +183,7 @@ def callback(): master.file_path_ui = text.get("1.0", tkinter.END).strip() master.destroy() - b3 = tkinter.Button(master, text="Ok", width=40, command=callback) + b3 = ttk.Button(master, text="Ok", width=40, command=callback, style="PyAEDT.TButton") b3.grid(row=5, column=1, pady=10, padx=10) tkinter.mainloop() @@ -137,12 +193,14 @@ def callback(): solution_ui = getattr(master, "solution_ui", extension_arguments["solution"]) file_path_ui = getattr(master, "file_path_ui", extension_arguments["file_path"]) - output_dict = { - "password": password_ui, - "application": application_ui, - "solution": solution_ui, - "file_path": file_path_ui, - } + output_dict = {} + if master.flag: + output_dict = { + "password": password_ui, + "application": application_ui, + "solution": solution_ui, + "file_path": file_path_ui, + } return output_dict @@ -324,4 +382,6 @@ def convert(args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - convert(args) + convert(args) + else: + convert(args) From 8e375e993b25783706521d881d8fded8e32efb90 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 13:34:24 +0100 Subject: [PATCH 37/43] Add kernel picture --- .../_static/extensions/kernel_convert_ui.png | Bin 0 -> 12829 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/source/_static/extensions/kernel_convert_ui.png diff --git a/doc/source/_static/extensions/kernel_convert_ui.png b/doc/source/_static/extensions/kernel_convert_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..509be8f95d72b3eeb8be27a527962a2be6ee3bfb GIT binary patch literal 12829 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 Date: Wed, 11 Dec 2024 12:30:46 +0100 Subject: [PATCH 38/43] Update doc/source/User_guide/extensions.rst Co-authored-by: gmalinve <103059376+gmalinve@users.noreply.github.com> --- doc/source/User_guide/extensions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 4d254b31319..add4b9797ac 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -249,7 +249,7 @@ The Python script requires a common initial part to define the port and the vers active_project = app.active_project() active_design = app.active_design(active_project) - # no need to hardcode you application but get_pyaedt_app detects it for you + # no need to hardcode your application but get_pyaedt_app detects it for you aedtapp = ansys.aedt.core.get_pyaedt_app(design_name=active_design.GetName(), desktop=app) # your workflow From 21d1083117261c75adbace87376b3d0f7882b119 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 11 Dec 2024 12:33:41 +0100 Subject: [PATCH 39/43] Apply suggestions --- .../pyaedt_extensions_doc/hfss/choke_designer.rst | 8 +++----- .../pyaedt_extensions_doc/project/import_nastran.rst | 6 ++---- .../twinbuilder/convert_to_circuit.rst | 6 ++---- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst index c3f660bf9b5..1ede4b5e769 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst @@ -14,10 +14,8 @@ The following image shows the extension user interface: :alt: Choke Designer UI -Supported features -------------------- - -The extension supports: +Features +-------- - Configuring choke parameters including core dimensions, windings, layers, and material properties. - Exporting designs to HFSS. @@ -26,7 +24,7 @@ The extension supports: Using the extension --------------------- +------------------- 1. Open the **Automation** tab in the HFSS interface. 2. Locate and click the **Choke designer** icon under the Extension Manager. diff --git a/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst b/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst index 3c4065a13bd..b59f090e20c 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst @@ -13,10 +13,8 @@ The following image shows the extension user interface: :alt: Import Nastran UI -Supported features -------------------- - -The extension supports: +Features +-------- - Importing Nastran or STL files into AEDT. - Configuring the import process with options such as: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst index ec9f1425645..0f8e0901cb1 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst @@ -5,10 +5,8 @@ The extension allows users to create a circuit design from a Twin Builder design by mapping components from Twin Builder to circuit components. -Supported features ------------------- - -The extension supports: +Features +-------- - Mapping Twin Builder components to corresponding circuit components. From c698aed88dae5a3f2ca6737151f4fee7e571a65d Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 11 Dec 2024 12:33:51 +0100 Subject: [PATCH 40/43] Update doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst Co-authored-by: gmalinve <103059376+gmalinve@users.noreply.github.com> --- .../User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index c4aedcf2207..8e6583c628e 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -47,7 +47,7 @@ Supported arguments include: - **choice**: Type of cutout to apply ("ConvexHull"). - **signals**: List of signal nets to use for the cutout. - **reference**: List of reference nets to use for the cutout. -- **expansion factor**: Expansion factor in mm for the cutout. +- **expansion factor**: Expansion factor in "mm" for the cutout. - **fix disjoints**: Boolean flag to enable or disable fixing of disjoint nets. - **is batch**: Boolean flag to enable batch mode. From fa101a1a54b1190ebe6de73214a24395724f8af5 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 11 Dec 2024 12:41:47 +0100 Subject: [PATCH 41/43] Remove tkinter geometry --- src/ansys/aedt/core/workflows/circuit/import_schematic.py | 1 - src/ansys/aedt/core/workflows/hfss/choke_designer.py | 3 --- .../aedt/core/workflows/hfss/push_excitation_from_file.py | 3 --- src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py | 2 -- src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py | 3 --- src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py | 3 --- .../workflows/hfss3dlayout/generate_arbitrary_wave_ports.py | 3 --- src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py | 3 --- .../workflows/hfss3dlayout/push_excitation_from_file_3dl.py | 3 --- src/ansys/aedt/core/workflows/icepak/power_map_from_csv.py | 3 --- .../aedt/core/workflows/project/advanced_fields_calculator.py | 3 --- src/ansys/aedt/core/workflows/project/import_nastran.py | 3 --- src/ansys/aedt/core/workflows/project/kernel_converter.py | 3 --- 13 files changed, 36 deletions(-) diff --git a/src/ansys/aedt/core/workflows/circuit/import_schematic.py b/src/ansys/aedt/core/workflows/circuit/import_schematic.py index db392245208..c4ce40b1723 100644 --- a/src/ansys/aedt/core/workflows/circuit/import_schematic.py +++ b/src/ansys/aedt/core/workflows/circuit/import_schematic.py @@ -52,7 +52,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("650x150") master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss/choke_designer.py b/src/ansys/aedt/core/workflows/hfss/choke_designer.py index be48f2a8139..83488d92469 100644 --- a/src/ansys/aedt/core/workflows/hfss/choke_designer.py +++ b/src/ansys/aedt/core/workflows/hfss/choke_designer.py @@ -99,9 +99,6 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - - master.geometry("900x800") - master.title(extension_description) # Detect if user close the UI diff --git a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py index 23d42ed063a..d520e4911c9 100644 --- a/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py +++ b/src/ansys/aedt/core/workflows/hfss/push_excitation_from_file.py @@ -85,9 +85,6 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - - master.geometry("850x200") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py index 183c9d1244f..50be70465a9 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/cutout.py @@ -85,8 +85,6 @@ def frontend(): # pragma: no cover master = tkinter.Tk() - master.geometry("850x350") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py b/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py index 4c005a16d3f..7005670e901 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py @@ -51,9 +51,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("550x250") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py b/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py index 78a5afc8844..ae049bcddb1 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/export_to_3d.py @@ -53,9 +53,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("450x150") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py b/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py index ad3cfeb29de..20336329276 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/generate_arbitrary_wave_ports.py @@ -55,9 +55,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("1000x220") - master.minsize(1000, 220) master.maxsize(1000, 220) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py b/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py index b448a2a031a..c0b1e1409ef 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/parametrize_edb.py @@ -89,9 +89,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("1100x700") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py index 90c8a7cccc0..a86246c0f61 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/push_excitation_from_file_3dl.py @@ -91,9 +91,6 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - - master.geometry("850x200") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/icepak/power_map_from_csv.py b/src/ansys/aedt/core/workflows/icepak/power_map_from_csv.py index bfe0b600c2a..063b7d57205 100644 --- a/src/ansys/aedt/core/workflows/icepak/power_map_from_csv.py +++ b/src/ansys/aedt/core/workflows/icepak/power_map_from_csv.py @@ -77,9 +77,6 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - - master.geometry("800x150") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py b/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py index 303a49cadb7..933cc160f7a 100644 --- a/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py +++ b/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py @@ -105,9 +105,6 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - - master.geometry("800x200") - master.title(extension_description) # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/project/import_nastran.py b/src/ansys/aedt/core/workflows/project/import_nastran.py index f4a246af921..ad9aa187213 100644 --- a/src/ansys/aedt/core/workflows/project/import_nastran.py +++ b/src/ansys/aedt/core/workflows/project/import_nastran.py @@ -54,9 +54,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("950x250") - master.title("Import Nastran or STL file") # Detect if user closes the UI diff --git a/src/ansys/aedt/core/workflows/project/kernel_converter.py b/src/ansys/aedt/core/workflows/project/kernel_converter.py index 9b6fc90e6e6..665761423a3 100644 --- a/src/ansys/aedt/core/workflows/project/kernel_converter.py +++ b/src/ansys/aedt/core/workflows/project/kernel_converter.py @@ -66,9 +66,6 @@ def frontend(): # pragma: no cover from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - - master.geometry("950x250") - master.title(extension_description) # Detect if user closes the UI From de75ddd5c75fd2cd369ecc61d42f916b13d678b7 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 11 Dec 2024 14:25:59 +0100 Subject: [PATCH 42/43] Fix bug --- src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py b/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py index 7005670e901..288af100638 100644 --- a/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py +++ b/src/ansys/aedt/core/workflows/hfss3dlayout/export_layout.py @@ -109,13 +109,11 @@ def toggle_theme(): def set_light_theme(): master.configure(bg=theme.light["widget_bg"]) - expansion.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) theme.apply_light_theme(style) change_theme_button.config(text="\u263D") # Sun icon for light theme def set_dark_theme(): master.configure(bg=theme.dark["widget_bg"]) - expansion.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) theme.apply_dark_theme(style) change_theme_button.config(text="\u2600") # Moon icon for dark theme From 150591ed8372e72abdd4be7843ee7c6e6817f44e Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 11 Dec 2024 15:41:34 +0100 Subject: [PATCH 43/43] Update style --- src/ansys/aedt/core/workflows/project/import_nastran.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ansys/aedt/core/workflows/project/import_nastran.py b/src/ansys/aedt/core/workflows/project/import_nastran.py index ad9aa187213..e156e8fcd5b 100644 --- a/src/ansys/aedt/core/workflows/project/import_nastran.py +++ b/src/ansys/aedt/core/workflows/project/import_nastran.py @@ -170,10 +170,10 @@ def preview(): simplify_stl(master.file_path_ui, decimation=master.decimate_ui, preview=True) - b2 = ttk.Button(master, text="Preview", width=40, command=preview) + b2 = ttk.Button(master, text="Preview", width=40, command=preview, style="PyAEDT.TButton") b2.grid(row=5, column=0, pady=10, padx=10) - b3 = ttk.Button(master, text="Ok", width=40, command=callback) + b3 = ttk.Button(master, text="Ok", width=40, command=callback, style="PyAEDT.TButton") b3.grid(row=5, column=1, pady=10, padx=10) tkinter.mainloop()

4Ww>Q`u*v*E7uhQ$ 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 P{Qi72{wu+eZ!Y~4H(q)2 From 6c93771c6039ff73348dae5677dacec3a9e3d6bd Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 11:01:04 +0100 Subject: [PATCH 26/43] Add test --- tests/system/solvers/test_45_workflows.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index 8228b57d4e7..b8aaea1f3db 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -465,10 +465,6 @@ def test_12_export_layout(self, add_app, local_scratch): assert main({"is_test": True, "export_ipc": True, "export_configuration": True, "export_bom": True}) app.close_project() - @pytest.mark.skipif( - TEST_REVIEW_FLAG, - reason="Test under review in 2024.2", - ) def test_13_parametrize_layout(self, local_scratch): from ansys.aedt.core.workflows.hfss3dlayout.parametrize_edb import main From 1348288f5f9dc3b8fe4ce064c31537e107aa114d Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 11:22:45 +0100 Subject: [PATCH 27/43] Power map Icepak --- .../icepak/create_power_map.rst | 37 +++++++-- .../extensions/create_power_map_ui.png | Bin 3308 -> 0 bytes .../_static/extensions/power_map_ui.png | Bin 0 -> 5025 bytes .../workflows/icepak/power_map_from_csv.py | 78 ++++++++++++++---- 4 files changed, 90 insertions(+), 25 deletions(-) delete mode 100644 doc/source/_static/extensions/create_power_map_ui.png create mode 100644 doc/source/_static/extensions/power_map_ui.png diff --git a/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst b/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst index 583e440a892..d2d8e072f7a 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst @@ -1,29 +1,48 @@ Create power map ================ -You can import a CSV file containing sources layout and power dissipation information in to Icepak. - -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +The extension allows users to generate power maps for an Icepak design from a CSV file containing geometric +and source data. The following image shows the extension user interface: -.. image:: ../../../_static/extensions/create_power_map_ui.png +.. image:: ../../../_static/extensions/power_map_ui.png :width: 800 :alt: Create Power Map UI -The available argument is: ``file_path``. +Using the extension +------------------- -CSV file example: +1. Open the **Automation** tab in the Icepak interface. +2. Locate and click the **Power Map from File** icon under the Extension Manager. +3. The main window displays the following elements: + - **Browse file**: A button to open a file dialog and select the CSV file containing geometric and source data. + - **Theme toggle**: A button to switch between light and dark themes for the UI. + - **Create**: A button to initiate the power map creation process after selecting the CSV file. +4. Select the desired CSV file and click **Create** to generate the power maps. -:download:`CSV File example <../../../Resources/icepak_classic_powermap.csv>` +Command line +------------ +The extension can also be used directly via the command line for batch processing. +Supported arguments include: -You can also launch the extension user interface from the terminal. An example can be found here: +- **file_path**: The path to the CSV file that contains geometric and source data. +- **is_batch**: Boolean flag to enable batch mode (set to `True` for batch processing). +- **is_test**: Boolean flag to indicate if the operation is a test (set to `False` in production). +Use the following syntax to run the extension in batch mode: .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline + +Example configuration file +-------------------------- + +Here is an example of a power map file: + +:download:`CSV File example <../../../Resources/icepak_classic_powermap.csv>` diff --git a/doc/source/_static/extensions/create_power_map_ui.png b/doc/source/_static/extensions/create_power_map_ui.png deleted file mode 100644 index 4c1f7e0a61ec4cbd894be517ac57326b96c8e796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3308 zcmds4d00~U8b*`JaH}a&i_~T+l}K8wToOYwGq+4Ma{(=t%nkQ46vMIw)5_Gz^_KgF z=8EPLl9`cOnVJid3M#mwqPc*VX6)Yk%slfv^Y{JZEZ_Nk@Avzb_q@+J_s&@u%Yb%( z004lD$(d8<0RZs}qWcO-anV_D);vIT5eqnPYycp)K{z5q0*f?90st>!rB+>lB6}0= z%teutEbaRt*6f?>Dth>HppjjmwXb_%h>O1)z}Vl-%_rcBZy?%6QUsB{Y;p>Tx`v+Y zZ-|9-yS(DDg*s``T23J2a#vNc$7*M`NZi`J+bH4*^mF#Cjf7;+$*VS;FI;8GS7}aW zN-ZbPZ8b@FzIFG>2mmt6^thPU+sA52;l3lS#f%V6VRO_uK30TbUBhpUH`xZa9(N%00?C44`OP*idPl*_KE`N_%k| z2~@xQiN#?k6T;Sfl?aQj_2-Zgraq-M_JJCW^wgA;%*cd;OJ0`#`5@ucl>VwSA{jn1 z*F^O{Bv|;yo{quTTkIp?mo?ufcz$v#sK>8#4kd4^U0z7^cEFO={%{}&g)(%jk3 z$iShA;O||f3DSkQV@?|6C%f_Z>0$%m+NDEJ;qEVpmT4NU@G?brfy0p;BqcaBx9@@!m*bX^@fZ!%6H$n=$ zc)*Jk)`zRkvc=l>jqx5#&DIwMH!pMR{fx=QMZxUQ!|&s*2W62#MnU8hwYKc1q4`~* zMO`Hd#hU-BckyH_#}(!mL!0?XNO8FKq;6HzWJUZ)(w;&OxW_JXiuyjT={Rp$MOGIs zb|QTyd*GJ?I|dTEb=sS+=xV2fgiBOb-`aII#Qrr?>QaM{&x#GftO{tJ&+ZJ)F{SA8 z`JlEAw+afIJkgld6{FZ){)A3ja`nD5>6Bic0N%)RT~thJx#ZGMrWxmIk+VamnAP4{ zdettFC=>0DYD=wLrQ)M~UvTXMaBRm=8|6dY3Hz`JZi35)xX)r~*Tof|AA!Xc1M`VI`)yC$nEyrw?$ z>86Y+TZcC9{!4v*ffeMJh(a~lce;r?!xZH8rC{($GQ8Z^!P9c#LGsGyDj)cGt=S1X zndYdK5M_9Zn(Q&yRJ0U>?m4+pau{d6bi=Q->&EESlEJoDSt7cf;3W96X9_EAX1Mre zMxDGImLBQGW76T-mP)H*Jeu;Z_gKP@40 zK2~4+*Z6QOeQ3(b!Lsc6^$0BxGp21A96H^vG|yC|Ko)X{s$s3;sVB0$!K-C0tSY%R z?Jgfh#A?%KrELWBdEEAu3xcF5W?~1wop`&XAZq%Yx_2CdQC+7pRoCg)PfC`0?vF(~ zVMtX6gxgIP&C0^rMg_D5ExS6xqDS0<>oldtbk1g85B-~|4yI*fWiebkd3y-ltkLyx zJtZ?dVhCufq{^)e@bu@e{NxDbFzS$hsL*_;h8dzS&MWWh1WzP-IYz8cgne6v<)I4p zc6&=8&9uOtE4_X5O1*Q<8{U2%0cm9Grm!_q&98 zX+kAmJxv{N4-j)M&Q$>{oks#@vxoqe>7P}1-_q0K zBTy|(u*4U652=D%ieN|*NPL1+e%q!o8YF8D6k9OrZG^g<2Hxo+e@)FW86LAp(oK04%pB<72KAr^@zzr#}YCsrSSgN=Aty4R%p%?#7XXc{Gco3bIxO2e}CSNc>A0r z-txa{O6qE3LE`dO>$Oy}+kxGnZK}zIx3}_Cz{PJnQvDsxoA^cc;5!e@Z+gAybnd$? zKy9Yn{gJ0RK|_IV&B{J{u^rraZ%E~R6p)QAKZvNYws=Cyztt4apug;eJH-}IE2UQc zH%IIeOrhB(#@-D?TWB|kjj;{yy$HK|gf|;+9Up%|y?GM3*tjr@_|d_qbNSBGZ(ata z3(%96Ku^9rQ*iqAw<4IDs)*B+Y7F0mT)hg@-y&nHF@gB31D4QuzCNoWCo0_#c$1{& z?Gk@*SoOJ~H8LXXQDw>5->j(5@>E{cpK-9;`#$&U2h?U~%#WFf=mP&yBK;zDmZ=&+ z+WS2~2GQ_k3Rr?7ftrEjs=P`Afu*m%y#*5gu%+=~{JdNGf4&g@#Kymp`JX#bAL#+3 z0_R3r=iMU_P_5D#4S~$T=--Llm-qGUJ5ct9uQ#%Y6Pd(ct&s{bpwc){j2X~H3;Naq zs&yEAYcN+uSLBD<9F_5Br$t(ZL$_)R-y!zX9{IF&Wb=h>Gh-GypgUDuo?^fDr*^?Q zj{2hMr(>J&!B9#p>R~Dh=PF9(!Io$nU7dWy-edZQ%t1TiJMSXPJ zkx#fqaw%vlM~pJGxf;cm6_L2~Ep>n&jRf|X z0FASWm;0VjZc{!1VJQM3NyWB{b?1S{MHm8ODXV6{d! zky*!g&RhMRdj0c(|6fKZZXw_l1*@X1DWjU ztkLT?gwG$!R_X}ep|Lgi*YZhtUXy$}LAZoX4_n~mq$5J-$5<@ZaIC&?EF%`NIzy8~ zeETX`WD=(97KMqVk%qP*YUD=a+YKu{JJ~AN#*3=Z1OY!#*BLcvZZAYbnQ3y$2v~dC zK$(-j2U?8OV diff --git a/doc/source/_static/extensions/power_map_ui.png b/doc/source/_static/extensions/power_map_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..b457a5f248affb483c7641ac435d3f3d953c3f59 GIT binary patch literal 5025 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 Date: Tue, 10 Dec 2024 11:42:44 +0100 Subject: [PATCH 28/43] Update advanced fields calculator --- .../project/advanced_fields_calculator.py | 131 ++++++++++++------ 1 file changed, 86 insertions(+), 45 deletions(-) diff --git a/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py b/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py index 7ccd443f493..303a49cadb7 100644 --- a/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py +++ b/src/ansys/aedt/core/workflows/project/advanced_fields_calculator.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os.path +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import get_pyaedt_app @@ -41,7 +41,7 @@ # Extension batch arguments extension_arguments = {"setup": "", "calculation": "", "assignment": []} -extension_description = "Simplified use of Fields Calculator" +extension_description = "Advanced fields calculator" def frontend(): # pragma: no cover @@ -51,6 +51,7 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme # Get ports app = ansys.aedt.core.Desktop( @@ -73,15 +74,14 @@ def frontend(): # pragma: no cover aedtapp = get_pyaedt_app(project_name, design_name) # Load new expressions from file - current_directory = os.getcwd() - all_files = os.listdir(current_directory) - toml_files = [f for f in all_files if f.endswith(".toml")] + current_directory = Path.cwd() + toml_files = list(current_directory.glob("*.toml")) for toml_file in toml_files: aedtapp.post.fields_calculator.load_expression_file(toml_file) # Personal Lib directory - all_files = os.listdir(aedtapp.personallib) - toml_files = [os.path.join(aedtapp.personallib, f) for f in all_files if f.endswith(".toml")] + personal_lib_directory = Path(aedtapp.personallib) + toml_files = list(personal_lib_directory.glob("*.toml")) for toml_file in toml_files: aedtapp.post.fields_calculator.load_expression_file(toml_file) @@ -106,12 +106,15 @@ def frontend(): # pragma: no cover # Create UI master = tkinter.Tk() - master.geometry("700x150") + master.geometry("800x200") - master.title("Advanced fields calculator") + master.title(extension_description) + + # Detect if user closes the UI + master.flag = False # Load the logo for the main window - icon_path = os.path.join(ansys.aedt.core.workflows.__path__[0], "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -120,60 +123,97 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Solved setup:") + label = ttk.Label(master, text="Solved setup:", style="PyAEDT.TLabel") label.grid(row=0, column=0, pady=10, padx=15) - combo_setup = ttk.Combobox(master, width=30) + + combo_setup = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo_setup["values"] = available_setups combo_setup.current(0) combo_setup.grid(row=0, column=1, pady=10, padx=10) combo_setup.focus_set() - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Calculations:") + label = ttk.Label(master, text="Calculations:", style="PyAEDT.TLabel") label.grid(row=1, column=0, pady=10, padx=15) - combo_calculation = ttk.Combobox(master, width=30) + + combo_calculation = ttk.Combobox(master, width=30, style="PyAEDT.TCombobox") combo_calculation["values"] = list(available_descriptions.values()) combo_calculation.current(0) combo_calculation.grid(row=1, column=1, pady=10, padx=10) combo_calculation.focus_set() + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=2, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.setup = combo_setup.get() master.calculation = combo_calculation.get() master.destroy() - b = tkinter.Button(master, text="Ok", width=40, command=callback) + b = ttk.Button(master, text="Ok", width=40, command=callback, style="PyAEDT.TButton") b.grid(row=2, column=1, pady=10) tkinter.mainloop() - setup_ui = getattr(master, "setup", extension_arguments["setup"]) - if getattr(master, "setup"): - setup = setup_ui - else: - setup = extension_arguments["setup"] + output_dict = {} + + if master.flag: + setup_ui = getattr(master, "setup", extension_arguments["setup"]) + if getattr(master, "setup"): + setup = setup_ui + else: + setup = extension_arguments["setup"] - calculation_ui = getattr(master, "calculation", extension_arguments["calculation"]) - calculation = extension_arguments["setup"] + calculation_ui = getattr(master, "calculation", extension_arguments["calculation"]) + calculation = extension_arguments["setup"] - if getattr(master, "setup"): - calculation_description = calculation_ui - for k, v in available_descriptions.items(): - if calculation_description == v: - calculation = k - break + if getattr(master, "setup"): + calculation_description = calculation_ui + for k, v in available_descriptions.items(): + if calculation_description == v: + calculation = k + break - assignments = aedtapp.modeler.convert_to_selections(aedtapp.modeler.selections, True) + assignments = aedtapp.modeler.convert_to_selections(aedtapp.modeler.selections, True) + output_dict = {"setup": setup, "calculation": calculation, "assignment": assignments} app.release_desktop(False, False) - output_dict = {"setup": setup, "calculation": calculation, "assignment": assignments} - return output_dict @@ -216,16 +256,16 @@ def main(extension_args): # Load new expressions from file # Current directory - current_directory = os.getcwd() - all_files = os.listdir(current_directory) - toml_files = [f for f in all_files if f.endswith(".toml")] + # Load new expressions from file + current_directory = Path.cwd() + toml_files = list(current_directory.glob("*.toml")) for toml_file in toml_files: aedtapp.post.fields_calculator.load_expression_file(toml_file) # Personal Lib directory - all_files = os.listdir(aedtapp.personallib) - toml_files = [os.path.join(aedtapp.personallib, f) for f in all_files if f.endswith(".toml")] - for toml_file in toml_files: + personal_lib_directory = Path(aedtapp.personallib) + toml_files = list(personal_lib_directory.glob("*.toml")) + for toml_file in toml_files: # pragma: no cover aedtapp.post.fields_calculator.load_expression_file(toml_file) names = [] @@ -233,7 +273,7 @@ def main(extension_args): if not aedtapp.post.fields_calculator.is_general_expression(calculation): for assignment in assignments: assignment_str = assignment - if isinstance(assignment_str, FacePrimitive): + if isinstance(assignment_str, FacePrimitive): # pragma: no cover assignment_str = str(assignment.id) elif not isinstance(assignment_str, str): # pragma: no cover assignment_str = generate_unique_name(calculation) @@ -270,5 +310,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - - main(args) + main(args) + else: + main(args) From 056b15a97b76de95263fc7b4f9777c440adbc7eb Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 11:52:05 +0100 Subject: [PATCH 29/43] Add tests --- tests/system/solvers/test_45_workflows.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/system/solvers/test_45_workflows.py b/tests/system/solvers/test_45_workflows.py index b8aaea1f3db..76631ccbe9a 100644 --- a/tests/system/solvers/test_45_workflows.py +++ b/tests/system/solvers/test_45_workflows.py @@ -186,10 +186,6 @@ def test_07_twinbuilder_convert_circuit(self, add_app): assert main({"is_test": True}) - @pytest.mark.skipif( - TEST_REVIEW_FLAG, - reason="Test under review in 2024.2", - ) def test_08_configure_a3d(self, local_scratch): from ansys.aedt.core.workflows.project.configure_edb import main From cd9f488d0dcd9e3e72ac62887d028254d33a0c0b Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 12:11:32 +0100 Subject: [PATCH 30/43] Import nastran --- .../core/workflows/project/import_nastran.py | 111 ++++++++++++------ 1 file changed, 78 insertions(+), 33 deletions(-) diff --git a/src/ansys/aedt/core/workflows/project/import_nastran.py b/src/ansys/aedt/core/workflows/project/import_nastran.py index 906963fe23f..f4a246af921 100644 --- a/src/ansys/aedt/core/workflows/project/import_nastran.py +++ b/src/ansys/aedt/core/workflows/project/import_nastran.py @@ -21,7 +21,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -import os.path +from pathlib import Path import ansys.aedt.core from ansys.aedt.core import get_pyaedt_app @@ -51,15 +51,19 @@ def frontend(): # pragma: no cover import PIL.Image import PIL.ImageTk + from ansys.aedt.core.workflows.misc import ExtensionTheme master = tkinter.Tk() - master.geometry("750x250") + master.geometry("950x250") master.title("Import Nastran or STL file") + # Detect if user closes the UI + master.flag = False + # Load the logo for the main window - icon_path = os.path.join(ansys.aedt.core.workflows.__path__[0], "images", "large", "logo.png") + icon_path = Path(ansys.aedt.core.workflows.__path__[0]) / "images" / "large" / "logo.png" im = PIL.Image.open(icon_path) photo = PIL.ImageTk.PhotoImage(im) @@ -68,13 +72,20 @@ def frontend(): # pragma: no cover # Configure style for ttk buttons style = ttk.Style() - style.configure("Toolbutton.TButton", padding=6, font=("Helvetica", 8)) + theme = ExtensionTheme() + + # Apply light theme initially + theme.apply_light_theme(style) + master.theme = "light" + + # Set background color of the window (optional) + master.configure(bg=theme.light["widget_bg"]) + + label2 = ttk.Label(master, text="Browse file:", style="PyAEDT.TLabel") - var2 = tkinter.StringVar() - label2 = tkinter.Label(master, textvariable=var2) - var2.set("Browse file:") label2.grid(row=0, column=0, pady=10) text = tkinter.Text(master, width=40, height=1) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) text.grid(row=0, column=1, pady=10, padx=5) def browseFiles(): @@ -85,34 +96,64 @@ def browseFiles(): ) text.insert(tkinter.END, filename) - b1 = tkinter.Button(master, text="...", width=10, command=browseFiles) + b1 = ttk.Button(master, text="...", width=10, command=browseFiles, style="PyAEDT.TButton") b1.grid(row=0, column=2, pady=10) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Decimation factor (0-0.9). It may affect results:") + label = ttk.Label(master, text="Decimation factor (0-0.9). It may affect results:", style="PyAEDT.TLabel") label.grid(row=1, column=0, pady=10) + check = tkinter.Text(master, width=20, height=1) + check.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) check.insert(tkinter.END, "0.0") check.grid(row=1, column=1, pady=10, padx=5) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Import as lightweight (only HFSS):") + label = ttk.Label(master, text="Import as lightweight (only HFSS):", style="PyAEDT.TLabel") label.grid(row=2, column=0, pady=10) light = tkinter.IntVar() - check2 = tkinter.Checkbutton(master, width=30, variable=light) + check2 = ttk.Checkbutton(master, variable=light, style="PyAEDT.TCheckbutton") check2.grid(row=2, column=1, pady=10, padx=5) - var = tkinter.StringVar() - label = tkinter.Label(master, textvariable=var) - var.set("Enable planar merge:") + label = ttk.Label(master, text="Enable planar merge:", style="PyAEDT.TLabel") label.grid(row=3, column=0, pady=10) planar = tkinter.IntVar(value=1) - check3 = tkinter.Checkbutton(master, width=30, variable=planar) + check3 = ttk.Checkbutton(master, variable=planar, style="PyAEDT.TCheckbutton") check3.grid(row=3, column=1, pady=10, padx=5) + def toggle_theme(): + if master.theme == "light": + set_dark_theme() + master.theme = "dark" + else: + set_light_theme() + master.theme = "light" + + def set_light_theme(): + master.configure(bg=theme.light["widget_bg"]) + text.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + check.configure(bg=theme.light["pane_bg"], foreground=theme.light["text"], font=theme.default_font) + theme.apply_light_theme(style) + change_theme_button.config(text="\u263D") # Sun icon for light theme + + def set_dark_theme(): + master.configure(bg=theme.dark["widget_bg"]) + text.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + check.configure(bg=theme.dark["pane_bg"], foreground=theme.dark["text"], font=theme.default_font) + theme.apply_dark_theme(style) + change_theme_button.config(text="\u2600") # Moon icon for dark theme + + # Create a frame for the toggle button to position it correctly + button_frame = ttk.Frame(master, style="PyAEDT.TFrame", relief=tkinter.SUNKEN, borderwidth=2) + button_frame.grid(row=5, column=2, pady=10, padx=10) + + # Add the toggle theme button inside the frame + change_theme_button = ttk.Button( + button_frame, width=20, text="\u263D", command=toggle_theme, style="PyAEDT.TButton" + ) + + change_theme_button.grid(row=0, column=0, padx=0) + def callback(): + master.flag = True master.decimate_ui = float(check.get("1.0", tkinter.END).strip()) master.lightweight_ui = True if light.get() == 1 else False master.planar_ui = True if planar.get() == 1 else False @@ -132,10 +173,10 @@ def preview(): simplify_stl(master.file_path_ui, decimation=master.decimate_ui, preview=True) - b2 = tkinter.Button(master, text="Preview", width=40, command=preview) + b2 = ttk.Button(master, text="Preview", width=40, command=preview) b2.grid(row=5, column=0, pady=10, padx=10) - b3 = tkinter.Button(master, text="Ok", width=40, command=callback) + b3 = ttk.Button(master, text="Ok", width=40, command=callback) b3.grid(row=5, column=1, pady=10, padx=10) tkinter.mainloop() @@ -145,22 +186,24 @@ def preview(): planar_ui = getattr(master, "planar_ui", extension_arguments["planar"]) file_path_ui = getattr(master, "file_path_ui", extension_arguments["file_path"]) - output_dict = { - "decimate": decimate_ui, - "lightweight": lightweight_ui, - "planar": planar_ui, - "file_path": file_path_ui, - } + output_dict = {} + if master.flag: + output_dict = { + "decimate": decimate_ui, + "lightweight": lightweight_ui, + "planar": planar_ui, + "file_path": file_path_ui, + } return output_dict def main(extension_args): - file_path = extension_args["file_path"] + file_path = Path(extension_args["file_path"]) lightweight = extension_args["lightweight"] decimate = extension_args["decimate"] planar = extension_args["planar"] - if os.path.exists(file_path): + if file_path.is_file(): app = ansys.aedt.core.Desktop( new_desktop=False, version=version, @@ -177,14 +220,14 @@ def main(extension_args): aedtapp = get_pyaedt_app(project_name, design_name) - if file_path.endswith(".nas"): + if file_path.suffix == ".nas": aedtapp.modeler.import_nastran( - file_path, import_as_light_weight=lightweight, decimation=decimate, enable_planar_merge=str(planar) + str(file_path), import_as_light_weight=lightweight, decimation=decimate, enable_planar_merge=str(planar) ) else: from ansys.aedt.core.visualization.advanced.misc import simplify_stl - outfile = simplify_stl(file_path, decimation=decimate) + outfile = simplify_stl(str(file_path), decimation=decimate) aedtapp.modeler.import_3d_cad( outfile, healing=False, create_lightweigth_part=lightweight, merge_planar_faces=planar ) @@ -214,4 +257,6 @@ def main(extension_args): for output_name, output_value in output.items(): if output_name in extension_arguments: args[output_name] = output_value - main(args) + main(args) + else: + main(args) From 5db7536d64681ba7dd739e1fcf4e80960cf685f6 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 12:12:53 +0100 Subject: [PATCH 31/43] Import nastran --- .../_static/extensions/import_nastran_ui.png | Bin 35840 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/source/_static/extensions/import_nastran_ui.png diff --git a/doc/source/_static/extensions/import_nastran_ui.png b/doc/source/_static/extensions/import_nastran_ui.png deleted file mode 100644 index cbfdeb41d41358f09c904ebb1c42f3f43b7e7def..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35840 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
e_k-b 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 Date: Tue, 10 Dec 2024 12:16:29 +0100 Subject: [PATCH 32/43] Import nastran documentation --- .../project/import_nastran.rst | 52 ++++++++++++++---- .../_static/extensions/import_nastran_ui.png | Bin 0 -> 11327 bytes 2 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 doc/source/_static/extensions/import_nastran_ui.png diff --git a/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst b/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst index 68979e366af..3c4065a13bd 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/project/import_nastran.rst @@ -1,9 +1,10 @@ Import Nastran ============== -You can import a Nastran or STL file in any 3D modeler. You can also preview the imported file and decimate it prior to import. +The extension allows users to import Nastran or STL files into AEDT. -You can access the extension from the icon created on the **Automation** tab using the Extension Manager. +The extension provides options for configuring the import process, including decimation, lightweight import, +and planar merging. The following image shows the extension user interface: @@ -12,18 +13,49 @@ The following image shows the extension user interface: :alt: Import Nastran UI -The available arguments are: ``file_path``, ``planar``, ``lightweight``, and ``decimate``. +Supported features +------------------- -By enabling ``lightweight`` check box the user imports the STL as a lightweight object. -The ``decimate`` parameter indicates the percentage of triangles that have to be removed during simplification. -A value of ``0.2`` means that 20% of the triangles is removed from the data read from the -file before importing in AEDT. -The ``planar`` parameter indicates that touching triangles that lie on the same plane are merged. +The extension supports: -You can also launch the extension user interface from the terminal. An example can be found here: +- Importing Nastran or STL files into AEDT. +- Configuring the import process with options such as: + - Decimation factor for mesh reduction. + - Import as lightweight geometry (only for HFSS). + - Planar merging for geometry simplification. +- Previewing the geometry before final import. +- Switching between light and dark themes in the user interface. +Using the extension +-------------------- + +1. Open the **Automation** tab. +2. Locate and click the **Import Nastran or STL File** icon under the Extension Manager. +3. In the user interface: + - Select a Nastran (`.nas`) or STL (`.stl`) file using the **Browse** button. + - Set the **Decimation factor** to control the level of mesh reduction. + - Enable **Lightweight Import** to import the geometry as lightweight (HFSS only). + - Enable **Planar Merge** to simplify planar surfaces in the geometry. + - Use the **Preview** button to preview the geometry before importing. +4. To import the geometry into AEDT, click **OK**. Ensure that the settings are correct before finalizing the import. +5. Adjust the theme (light or dark) using the theme toggle button at the bottom-right corner of the window. + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. + +Supported arguments include: + +- **file_path**: Specifies the path to the Nastran or STL file to be imported. +- **lightweight**: Specifies whether to import the geometry as lightweight (True/False). +- **decimate**: Specifies the decimation factor for mesh reduction (float). +- **planar**: Specifies whether to enable planar merging (True/False). + +Use the following syntax to run the extension: + .. toctree:: :maxdepth: 2 - ../commandline \ No newline at end of file + ../commandline diff --git a/doc/source/_static/extensions/import_nastran_ui.png b/doc/source/_static/extensions/import_nastran_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..98c1c219093798807a4a32150970d77aaa0549f7 GIT binary patch literal 11327 zcmch72UJttw`UXu6%mzBK|qQ$5h;Q+X##@OARxUey+eRdLQ|9?O^{v%1f*ji1PEP` zPUrywL~0}Ztl4`d+&43{q5i0`$WC~KBu|Dcm)6e z(5R|B(*Xb|pa8(RtCuKAcMdQgCP>XWPo3uqfQkX;Rnm_OcJi9?0Km66>f=`zNxv_< zs~C9#0Jpiw-*c)uoWB78zERa@@-KbO@iW2E9ClgQ%}TqiP-}W__9-cex~tFEuQ@U% zw%+)dVcq`CXxLRB9j`)nx!krr-t~HE%~{&my)e4rfd@rd!Rsm!E>tSYrAZ1@&pdss z!u#|3X{YYVbH>~ItD@&pr`h%Cg}-yNb86TIAmKP(M2YF?Bsi`&sO5{AK~ib9zv-^T z>Aqif$q#kGrk8XiWdVTK_k_F5Jq~VxE93+-gW3kpk#7naLe??6H|>_*ZxmWr9?w3^ z^h6c^SZi)+CX%}WS5*z<#k5PiXQ!e-`Zs}J#|Hhu$hEDEGvc)a{Mj)rh>&T7vEe39 z8NiaK0cYH}m)X_Z;nUs0iV=e}azh*;OL8rE@5%k1q^+shD4PvUxlif>^*_pd;6+Z4 z$bZ|xhRYr29G|={rWS7=$vfgGUHQPAO!~|pVUQomh?Q|3O4?} zw;drn`=o0&`0NDqtM!~8X;4R0bS#nRjooN(f4hy^j&Tc6ls#G1LKkf2B6~jpi)=8> zfjSS8*3-kpTMqgMBv+TESLA9z^$%0b{fis%E^ePJPPbA(Xcu_5Rh-PSbkGSAB^6Ab z)fzA+a8DA`Mud1LqRb(h%_n%b-dx4-_4J|7^2GRX)?^Ct*@?ew(K6$4u_tekV*_39 zBZEbP`+thkz3j($+R<^>IMQ2H`wp37H`eUDj@RwC!{PUffLRHwCo9jv4t6z}8-W`T zutUuX?G;Z?PoU7)>H#*#C&=`7vS_1Y-PnP9mD}^sGD6Xuo?_`Kd9w~OxkQd#hYTsv zD*@dC7MM(G$FsEf||yWIxu`ShM8lI2y;W&H{=MS_v( zL_6d-=c~%?FZge+8P3v8SecFZoa03vutVd4Ne9)K&LOU}@(DkJyqw&+5`EV=ew6H* zMbX(UVNN@P4)$2j-ZwTBEt{qoc6OfbB98j4D!b9A>t{W@lYDmO-j(J7L+|N(vSlEP zC^Ikq@ruT&lTqr}sRW;`Mb#pylHu{EOWx{Z#LC944=M&^tIerm+(dWc~kBF zhdT~_-owUnx|ME(?Q{Qoa$c9G2d|#V!{4rq7it#*a@Ue$olWYDPEfi$QUS-R^ zb?oGE)#`%US(sv3P8dH;i~04P?Vh34tzJPN1#D#ykq;{|>(6fznl`SK6JD`>J{O+F zq6pvI9lE|Im+e|~v|=^qIX7f=6jy4q-&yAvF)Ezbu!q~OoBzO<>CUJJmfMkF92M1o zOSLd2RMs!2`!^9~$m@MIin7_2`-eK3?I^5CwEow8?_ys)M#_M5eD(VgvgbY4JO#5M z$%EZpPil&!UTk5m8zSU3&_WsQN70y5FwX@)eosdGrrS~lb7M|##;&ixUN--3r+%Za z=oUkaFRzN)kXl9I)!+hn+;d_nk z*!FyEt3|eJCEEXuA@&5zt%1y^RFw%wNG2Psl_OD7afj1+L66CbQ_7q0BhrKGJerskv zOVQ1dzK#qLKc4$)IQ#akf3CR-g)Dljaymk>(=7F^Mq)Ry*2q~As2$Qs64GX_IyyZ= z{9xpB+F>EF-4eK@huvU12u-F`qDfOjbRL>)Kla5y=0hCd+VdZRdL{n?n=TSk@hq zUJTFua}1k0fP7P>+VDG~bJy4ID5tvIu@($C$;@p2#Sa><=lllApS+^e4|De-V;Fl&N2aExRCXPw_uFXG z70NoPs~h^+YU&&}ZMM)G&FZr|MQ8W0yQXZgA9p^zni2TUXzCsQ4nkvPm(@EP+F9o0 zJvJZYTkgYX{KrK`xRT!7#SaHLjv2KhTj@gVcuf? zfrRSFCfgF#e&_Mjnoy6U%YV9GMXnoPC116E%@Y(NU$E(4B2f*}KMmQt&XX@*zh|Q+ zw-LAAJ|wsQ{sAs+k#%Wu7l0$~wh_5~T6W#~kAmM6K9Uh0@Z*a7ZE|~^@4|of0ZzxT zEHZQny{?7BZ5HCG@Hdr**572YsFrj=w0hxpmN(MFEH|NlLmUCGN+- zAvMLo0SO|B(~zcthF`l2RR@G<*SKM1Nxhe#`7vyepg|bJKN)vdv0&*P=S}UAvc*zx zeroBm-5SzKEGNZg+o#@|HBrZ&yt7*+*t=p&y?_s3=_|0t#^MCJ?!uq!eaVZ4wa(eE zJN(R<`1qiXrxgQ};pAD37Ja*ZLA8Q8o{P74Dst04IV(+VN|LO>r*~{pZy3+LK>Qj| zlWlQEtO{g^>UW!9y)ndgH@&TD+pHE$#f(^8kF!XIxCzr(W8Y!V6}Qr3v-jSP%z{67 z`8Y0$m~^ew8e<2{BGD1EZs9h(ig2;5WTj+hzL8VZw-73dBKnZUgJ@qjueW4a911*L=?dRijCvwbcyrzWi}s9&DOaov;Oaic9QC zrZ_jcZ~-V)$^JOF=2x_w%VLA1k?5T6mFHQTugBAr~g9mXRIov<&1QSD;Xq>Q{PjkuI=5(EE|82pzf6FQge-}+RF%9Y`NxfFGzKY-rnih57a zji&25J*X2nXD=bPnVQ?dVE*l2S7J7c2uh!ObjB-w&VmQZ{f^5k!|uXyVKb7Fnd;%j z_TJ+7^UPC~g8x#DgY;5Fl-}kM&H&P*V`m(QCGARkw6ySPvrrrmIndm*X};CP5}V&?Mc)c?7B4#LC!$kd-J4&aY_iv{KcdctzKQZ zAXC?t1t5YF@#Y_K?hm+x-1x~bIYjzyhyLS({{lqQbutt)yz>86i z{nO3x3XMiXH@iYf@Mgc;+Al0BYLimM^e=>d75xv0{J(|l{|^uR?G+S1A+dO7A#;6w z{dH!5C7g`g2!+sfa?Ej4NOl*Gw!@O%yZ03xq*?f1c%3AfKL9#30_t`ZeZghKVm!%S zV1w}hW9!C_ollPYmrKF;YZtRSKkISHF+CAn_Kn$VEAu*ed^mv&Zcg7DLY0Lt@D*Ka z4h-`rfVK7mZ?)_hwJ4mqb}ka%5nt#FAl8MYP9g({Sa6`!$vWxH`WcJ9mocDPpikFC z&vXEJpzGZ-2pC3#WY)yNcWq|OQPGIg$?q4mFz`9#;IiNP4?fYHT z7Y%*^73uitH^i1YnP}S4O#4A3LDTyN_tAt_@H17Lf^S+j+T%K>FI>z;__3C=Kkz|U z_ongLzmH08BK9UNqkGpbhf@xlz!xicf;n0aV$xVrlLZ?q6@~D2BqR|^Hum8MR&*(Q zsD5#;f!}`A)i=uaw!_t(VtDv%%IneuIb)%7t97H*L(?UHrSv4oj1#D0f_C}38@f5) z1olA)z5*_@pyppsd<;PeNwwiQ*XQ>10%q-=P9T>`I|-lG2!~P!(^B}74A53t z+jk#|a7=-92lbbXXq0mo{A;*|43vM@`yO3b8-E#gg;nI6^DY=xR;0Cf@F9RjztbP7 zCcEJ>@>Tt*!%SimXACn$VZ5jR9It4W*e%020YzeUj^}#K!vU&2RbYQaB5Lv3$ttH! z(4)Ux5!w!(1nKX-8+Qh*a_?rM#BuN84MBoZanDaX_;9zf2N-IKxr|B840f$?AMv!8U|5lR|NP>(Bocp(; zFZLB5`|*eLCMUy;>(|mr{`tIxc}8vVEt}$xk;kv`ywgtn;X(}$=H|&Ca z%-HF!hTq|x+G^@_G0=C>9JflJEXeZ4p*?BdF6zZEu}PN>zebqyYar7WH1Qo&jTE-TGI|NnWB& z>1(@~Wq0)Zmnj?PtUhnZSh>nWg!d@|^nj^fF!l%6aH~!0&LhXN=%JQg{f%nw{*B_; z&aux9VyVTb8InKVK5n0bg%(Gks;wsfc-}C%*mHsPz=~#)lno7%f6+gjBoVRb{8$5i zu<=-r$^7yaw=(l8sjpyp0lTYC~V_XX;bBVQo^4C@_UzW=iym#RU--bNVh_g>qTm>I1`ZI3B7(PK@*#Nn>COu>g` z&S~i|C@;DhN^v+TD0qH#`0Ivgzz@*vRV{<{h(8UqRXpjE&)M znXwL!ti7)>A#+>%@~a1pRJ(i~~fLUhetTey~f zS^D{7$dR!yj7a!=Sy^*k662iq#fKZmTq7$u)3~?%!zIz1!{dohfpsmJJqVP#$e57vdri0Z_F5@YSUf#)@nGt#TV`v$jFQz zHk1oe{$kjjmVfQ3mOQMQfRhZ_9&>7Psk-cbUWHF&SeSxXkC}GtZ(>W_3j#H4JMIn5 zwFHCnGEk$KCc`rtnA2U>KFC4931Z#Llm>UJyFk=ktoBY{)!3`#nA`@OWBtH@SVr=o zkfDLx5eb36jj?y>cdV{TiYy)7%-)UpMh%Q11bknk#8vV8#5@WevU+-S^VaXfF>e_v z_h$ccpWa_+Q~F>Z%+nQNU8}3MM<>QZLTF#wwCx4yII-M=fVEvwZ)0kh2@LIBS3EW> zQnj~raOgAH?}0beL(HyT%!y>Mn@u4pGv}|6?KeJPELZ6|`QJC)u6(VR2Gj<#FN5v% z3m5#ZNT9?;FfyUQnYQm18y^;O;8qhwJ|~yD;wIM)7~PvFmTK;!9g^Vm@6{@tM-@YX z1N%J!yKBj48We`2mEi?^;?2sksP`A^CuYg8(B}n%P?K*%-hM8bmBA@9%;N3SCAAGy zd(@*&RC3%(NijEe2I9K;QIXE?DQjhq`snV3FE4Q;m>8BBp>22a6xyP` zGso89Dj;ju-Lepxl8`}oe~4S?9BU}{emAtZ^h&U{+ewEEFW>V%gIVVu)UBc9YOf!A znLeLO{lPxXjA+`DS%Sm>=oeFqL2ac#flc>20p-!MoRevjvJ10xwmFIB=k|P8O6mi{ zytLN#p0YLsZPdeQ9;Bds_y|i)(^J1r&33^R4H6Zx2j!?XsFl+UN|&O=kF_F82&P>K zq(aBts6c(Qnq)BBNJQS1<?2Gn{`W}|5u zd4p)KYJ-q!Vy*Jb7 zj{bxAy^hB_SBh+llqJbr4P2j{HDK^#o8d)Mh8vw#DwM*z+gYt*9>Ji^cXy9Eock`u z(988~UN(HZ6Vz}YWg-eW(Ebv&_q4JhKr;zKoD-Y*phvp|tKJSyIms%G?ev~46?xMc zT3HRI5!(now0oge8*5+cnE2wZRPszO;L+}+B%sxG)pzW5vf=ZuSvt!Ehm|_g5dtl>3!b6^$yQ!xKuHN5} zFLFi>$~;M-Y7+}0D=0e(v=(pw&B|d?T8tF19whgB7;Cn@o_=x>ZY1WE?^RvyD$;&- zN}4F4c>DO78{1rRx>eiQ@1)qt5&FcAp6c}ka`kwuK3(qqWZHa4T$B2+WO3@YepD(B z*?BO;!=ZCk*4*@g3OBPdVs^aIyyH$ci}M91K>pk;gh22=53roRZvBW|4fN0?x!}D- z;RGRZTr<_e@fyyvlmw)`Bz9%*gtswClX@uG{UP{P$dLQdT_12}Mc^3~ew^ep<9shp zlE@L=RFd!n7f3%NZry6O!QV&S?xbu{y{$7Vusu`1L?1mNknDFRc4r9Os_?V#sNrqc zdqkKR@jlI%3@Af|;CIQ5NjlpA`yy%@{Nn(Gn+pc^LYWEYosin@Nv>$$QxXwwGR;ay zE(onn&wJl5&u~fp!rKWB=qF0F?U~dOdWwTr&S9mWxk&$|H#u8Vt(gFYYJW18f$c)e z)q0L!8((?erl#sW7}s;>Jry&9uKmu#B(99^ zo@i7Iv~F>oZl9&%4YySuu&LBW+qP!9Rk<(|=3qgO%!^c>s(rnj z-rE-+)4b-jnDG)Oj=UJx0=mZ<7$&@KD!bEdE4qB~7Ssv4A{7qIvQ`p1k95$xmI2_% zKoi{!VVA#F5%dOVlvX?Zum?`QB3jQuwd=-QJg*0=7HO%*Ey+f^8?(`KezZdP_h(?- z-k^}_CPJe3%Z_F}^(4R5X7IOihp-Giv2M7O+T^^Z2JBCTpQUHIXZyUIAg8CmS`R~= zpZJ*SI~%JG2!4n(wk6RQ6%W*{FWInYuZrOnWl1=W@@6pg$dH0Nlb!SDph-E#OZ?`R zYe3a;YKQK-t^spCYx>FMAI!8Th1GMD6?EljG-a?C=sxt12(>xGZcJzx9X@VPN9I-n zW!nJxW1=uK;fwxrwf-cQ>tK|LYM&+`PN7^5Zwt4-w>`4x+PE&E zG~4fiz1>&30zpo0-;}UUrBt<0uM{WBJTtxnMf8fR2WiD zrtu1Li9Rderj}#5WDi`4xX&@)3n^N-u=+kmj4>Bz0?;+m&5NUXng(XiGtthSa5tt_ zJdfm%o!HF`2{HaFh%!Rfc!Pc9>{xMQ@3OYTx#Tj59B-p9Bj33%{jSo74kLYeU5 z#SeA#`9yDO(WN42R-R|I<;uwI{Cdl+7xQLp3lF+>n0e&Hd7dl&%^$HNW1DTT@YcS`*$Kb%{4Pm1%MfnvE`g=n zHvLQphvu(NBob+0KvHd}2_GX>E5eacuNH0+JrVK+?i|?=TzuJ~Gs_a2v^x7!32_Y- z3iF&!`&BpGSGf3~IqDhF(p9f_F9ts5Q9m#is=)8euO!3cWA^zf&ljhBuuv73f!L3x z1>nL#9emv3Bp^%|%XYRu*3fLey*pjXxB-H{j+4zX)=qAx4+G6=iBA4*0gx1x;9n%N z^4G;Z6nc;yw6z&as#h=E*B)t$TF~gEm^!KM%&^KB%$d#CgFXWq@q!AeX@IW8gi(`2}!_3+};_2jKF7TC^wHBUh>jJ`-=Yp)YMc zH71iqhrxd&WqCukKd?ywcbY%HsenGI=XaQ^$m6i0U&}O=6sYgl=q)7@B4`$iVM>y+ zCD;bR!~FKb#n?DqY7vs8dDmmaZE}hb@be1)|7kM+|3hZzzeEJZOJktQy&>E5e)Ta| zgcXUFrwga3gC%uTlcij%brBxqbTYtRW%R04+}&ZejLAM#8!M#*@XVn7M@<`>Lc>pE zl8B1Pu)b&&v zOm4TY#jc$a8(6{-*f7L{=U~hX7{LHR_bsD+%qy1dC~RtHW>=e~`3`j4I_)hs^oGWXT0AfVaF>u{7tI4I$0z<&}R;UGym&FC-o?}bj^P8uK zT?2%8D14NOyONeKY*rk(OQ={JwynS6pXu78>Us{2c7aAVA}vEwrFQwbbzpiHl7 z5T2s}&P4;H-02j^iA0HPsR_&aSm-Ax^ws#tbEc=Pjla}FE&?>pzg_=K%FRPt-h~&r zTWVlqdq3RO$jG$#i>}(bG*6w&Nbn1nPu&gsw{hb8y&o4pF#EJmeOtb*R=sRkJ6&@U zMyHWq>!yNz5VKk7S?ank#ppd(a*CVT^R&p^khoocAkjc@m)UPvy8<#%g}7p1MAmrQPTo66RnPQW-beTL z!7r0xFIeY?{n-y0WJVDMBt0sFklIm%wl~RB%}6T>CoqxW&SdXdt~v_w~j>oz;(NY6ym zcn)>{_tqGfkaee_!84ML;KuB`LE391V!}gOAt%qV`3j1trbBo31w3|ELAmlR)1{=J zIwNnTqYjUmVOR$_Z#(xIn6@sg3S;-!6Z-Et~<`VDDuZkX^ZzB05Mol&~NH zfo0>+J?iyD%F|~GZ)u8MQ|!-VoXEActCaG$CrFOZ`LC3KnOtvB`s)nBT{3i7VpsmH zQW|l~_@C;B|LNN1e_@36PdcdO*-rS8?QotUl{UcFLa@71gc{GyKLy&>iIM9N{E?h} z3gGLB0U?FBQPv^ccavl4g*`C6(&`F5&H zLPm|WeRZ+lBRFK8-gJMrb8(tuJ320=$8)qU`YkPuT$l{)Un(pbKdaN-O6XD%S>AlW)y(@pVZ&p8LeNC zzb*9(Y$UZ+prs1J^%7FJix5?)4oy^=pm9zBoY`-5vaNvsQqHLU%!?FwVW1MrK|(Ml z0^hQeY6b|o?74M=SJu09+AGv-cU_Jx&53WTB_qhaMp0>h`T`*O+}nr#psjsO_X%qD zA#3s3;aQC{&qe}nH)Sa#NVQ>AzT4Mqx|w?`Y2jYDY;fuH*^7m!5e`}zHhADEl4~Mg z!V!aAY}ITIWIbtiw&2qVn7|ABY|T+ACG4nE3bj=o5C%JF-eJ?f?- z9`MrjXnD^?9NxK@i*HGgYUjUHzB?0~)aZ6ZKae{8oTWr%d0RY#^C-e72zXk5KgNop zmD3+*bnrflrh)snl*OhX_Dd>n_t0-UK>*;9(nlqFMtTUy#2j6(*GzD>Sx~8cNv-)V7>(V>3?r`OaPQ;1rh~d95!4)CURvQrfN)T~?Q&JhZ%KfIJ@aI|&IwuU*pOFCLz|8aS^A#Z64ljbT zwGOgckh1tc4q3cfsJ@*l9WY*7m=lR=J_{W<7()KUYBkxjwz+Oo85&z5;|$DY&CcLe zr&%z=AX_qnB4NAG`^X&sA=&d9+5eLYnJH{X&Nk{Sf%`e@H$zlCzQ+VVG$<&< z-wcaEl3;4nh$)7R`tcux4q^CBW#nH9aNVH!bM{53{hzRqe7J={kI@=Ny!`a~-=$kd z+jAE>9{qUmuVXW$Ac725|Ni{Ue*jMZ@d+G;8wY2bua2MIdKuwH9$Hli_^d*~^6h^E DBK|ft literal 0 HcmV?d00001 From 7b4f07192efd621b7f46871b9cd9a2f2d80ca67d Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 12:23:40 +0100 Subject: [PATCH 33/43] Twin builder documentation --- doc/source/User_guide/extensions.rst | 18 +++++++++++++ .../twinbuilder/convert_to_circuit.rst | 26 +++++++++++++++++++ .../twinbuilder/index.rst | 11 ++++++++ 3 files changed, 55 insertions(+) create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst create mode 100644 doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/index.rst diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index df340801808..211711ca3b4 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -162,6 +162,23 @@ They are small automated workflows with a simple UI. Import different schematic files (.asc, .sp, .cir, .qcv) into Circuit. + +Twin Builder extensions +~~~~~~~~~~~~~~~~~~~~~~~ + +Pre-installed extensions are available at Twin Builder level. +They are small automated workflows with a simple UI. + +.. grid:: 2 + + .. grid-item-card:: Convert to Circuit + :link: pyaedt_extensions_doc/twinbuilder/convert_to_circuit + :link-type: doc + :margin: 2 2 0 0 + + Convert Twin Builder design to Circuit. + + .. toctree:: :hidden: :maxdepth: 1 @@ -171,6 +188,7 @@ They are small automated workflows with a simple UI. pyaedt_extensions_doc/hfss/index pyaedt_extensions_doc/icepak/index pyaedt_extensions_doc/circuit/index + pyaedt_extensions_doc/twinbuilder/index Open source toolkits diff --git a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst new file mode 100644 index 00000000000..f709ff62e8c --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst @@ -0,0 +1,26 @@ +Conver to circuit +================= + +The extension allows users to create a circuit design +from a Twin Builder design by mapping components from Twin Builder to circuit components. + + +Supported features +------------------ + +The extension supports: + +- Mapping Twin Builder components to corresponding circuit components. + + +Command line +------------ + +The extension can also be used directly via the command line for batch processing. + +Use the following command syntax: + +.. toctree:: + :maxdepth: 2 + + ../commandline diff --git a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/index.rst b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/index.rst new file mode 100644 index 00000000000..d641671326c --- /dev/null +++ b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/index.rst @@ -0,0 +1,11 @@ +Twin Builder extensions +======================= + +.. grid:: 2 + + .. grid-item-card:: Convert to circuit + :link: convert_to_circuit + :link-type: doc + :margin: 2 2 0 0 + + Convert Twin Builder design to Circuit. From 72762099bf00f6f722c3508b733009a76e8497cc Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 12:29:30 +0100 Subject: [PATCH 34/43] Fix vale --- doc/source/User_guide/extensions.rst | 2 +- .../hfss/push_excitation.rst | 4 +-- .../hfss3dlayout/arbitrary_wave_port.rst | 14 +++++----- .../hfss3dlayout/cutout.rst | 10 +++---- .../hfss3dlayout/export_3d.rst | 4 +-- .../hfss3dlayout/export_layout.rst | 8 +++--- .../hfss3dlayout/parametrize_edb.rst | 26 +++++++++---------- .../hfss3dlayout/push_excitation.rst | 2 +- .../icepak/create_power_map.rst | 6 ++--- 9 files changed, 38 insertions(+), 38 deletions(-) diff --git a/doc/source/User_guide/extensions.rst b/doc/source/User_guide/extensions.rst index 211711ca3b4..4d254b31319 100644 --- a/doc/source/User_guide/extensions.rst +++ b/doc/source/User_guide/extensions.rst @@ -249,7 +249,7 @@ The Python script requires a common initial part to define the port and the vers active_project = app.active_project() active_design = app.active_design(active_project) - # no need to hardcode you application but get_pyaedt_app will detect it for you + # no need to hardcode you application but get_pyaedt_app detects it for you aedtapp = ansys.aedt.core.get_pyaedt_app(design_name=active_design.GetName(), desktop=app) # your workflow diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst index 3c134063c3a..96346b0fe3f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/push_excitation.rst @@ -43,9 +43,9 @@ The extension can also be used directly via the command line for batch processin Supported arguments include: -- **file_path**: Path to the excitation file. +- **file path**: Path to the excitation file. - **choice**: Name of the port to assign the excitation. -- **is_batch**: Boolean flag to enable batch mode. +- **is batch**: Boolean flag to enable batch mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst index a48d8e57390..4037a69b39c 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst @@ -38,8 +38,8 @@ Using the extension 1. Open the **Automation** tab in the HFSS 3D Layout interface. 2. Locate and click the **Layout Cutout** icon under the Extension Manager. 3. The main window displays the following elements: - - **Working directory**: A text box to specify the directory where output files will be saved. - - **Source layout**: A text box to specify the source layout design file (e.g., PCB files). + - **Working directory**: A text box to specify the directory where output files is saved. + - **Source layout**: A text box to specify the source layout design file (PCB files). - **Mounting side**: A dropdown menu to select the mounting side (top or bottom) for the wave port. - **Import EDB**: A checkbox to enable or disable the import of EDB files for the layout. - **Theme toggle**: A button to switch between light and dark modes for the UI. @@ -53,12 +53,12 @@ The extension can also be used directly via the command line for batch processin Supported arguments include: -- **working_path**: The directory where output files are saved. +- **working path**: The directory where output files are saved. - **source_path**: The path to the source layout design file. -- **mounting_side**: The side to mount the wave port on ("top" or "bottom"). -- **import_edb**: Boolean flag to enable or disable EDB import. -- **is_batch**: Boolean flag to enable batch mode (skip GUI). -- **is_test**: Boolean flag to enable or disable test mode. +- **mounting side**: The side to mount the wave port on ("top" or "bottom"). +- **import edb**: Boolean flag to enable or disable EDB import. +- **is batch**: Boolean flag to enable batch mode (skip GUI). +- **is test**: Boolean flag to enable or disable test mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst index d62edb9bf83..c4aedcf2207 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/cutout.rst @@ -28,7 +28,7 @@ Using the extension 1. Open the **Automation** tab in the HFSS 3D Layout interface. 2. Locate and click the **Layout Cutout** icon under the Extension Manager. 3. The main window displays the following elements: - - **Cutout type**: A dropdown menu to select the desired cutout type (e.g., ConvexHull, Bounding, Conforming). + - **Cutout type**: A dropdown menu to select the desired cutout type (ConvexHull, Bounding, Conforming). - **Signal nets**: A button to apply selected signal nets from the layout. - **Reference nets**: A button to apply selected reference nets. - **Expansion factor**: A text box to define the expansion factor for the cutout (in mm). @@ -44,12 +44,12 @@ The extension can also be used directly via the command line for batch processin Supported arguments include: -- **choice**: Type of cutout to apply (e.g., "ConvexHull"). +- **choice**: Type of cutout to apply ("ConvexHull"). - **signals**: List of signal nets to use for the cutout. - **reference**: List of reference nets to use for the cutout. -- **expansion_factor**: Expansion factor in mm for the cutout. -- **fix_disjoints**: Boolean flag to enable or disable fixing of disjoint nets. -- **is_batch**: Boolean flag to enable batch mode. +- **expansion factor**: Expansion factor in mm for the cutout. +- **fix disjoints**: Boolean flag to enable or disable fixing of disjoint nets. +- **is batch**: Boolean flag to enable batch mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst index 0efc2246561..ff8842e755e 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_3d.rst @@ -30,7 +30,7 @@ Using the extension 3. Click **Export** to export the design. -Command Line +Command line ------------ The extension can also be used directly via the command line for batch processing. @@ -39,7 +39,7 @@ Supported arguments include: - **choice**: The export option to choose (`"Export to HFSS"`, `"Export to Q3D"`, `"Export to Maxwell 3D"`, or `"Export to Icepak"`). -- **is_batch**: Boolean flag to indicate if the extension should run in batch mode. +- **is batch**: Boolean flag to indicate if the extension should run in batch mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst index 95443cb8e8f..a40ce2983e9 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst @@ -46,10 +46,10 @@ The extension can also be used directly via the command line for batch processin Supported arguments include: -- **export_ipc**: Boolean flag to export the IPC2581 file. -- **export_configuration**: Boolean flag to export the configuration file. -- **export_bom**: Boolean flag to export the BOM file. -- **is_batch**: Boolean flag to enable batch mode (useful for automated workflows). +- **export ipc**: Boolean flag to export the IPC2581 file. +- **export configuration**: Boolean flag to export the configuration file. +- **export bom**: Boolean flag to export the BOM file. +- **is batch**: Boolean flag to enable batch mode (useful for automated workflows). Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst index d68a242c275..c2b1611054b 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/parametrize_edb.rst @@ -34,7 +34,7 @@ Using the extension - **Parametrize Traces**: A checkbox to enable parametrization of traces. - **Extend Polygons (mm)**: A text box to define the expansion size for polygons in mm. - **Extend Voids (mm)**: A text box to define the expansion size for voids in mm. - - **Select Nets**: A list box to select nets (or leave empty for all nets) that will be parametrized. + - **Select Nets**: A list box to select nets (or leave empty for all nets) that is parametrized. 4. Select the desired options and click **Create Parametric Model** to generate the parametric model. @@ -43,18 +43,18 @@ Command line Supported arguments include: -- **aedb_path**: Path to the input AEDB file. -- **design_name**: Name of the design in the AEDB file. -- **parametrize_layers**: Boolean flag to enable parametrization of layers. -- **parametrize_materials**: Boolean flag to enable parametrization of materials. -- **parametrize_padstacks**: Boolean flag to enable parametrization of padstacks. -- **parametrize_traces**: Boolean flag to enable parametrization of traces. -- **nets_filter**: List of nets to apply parametrization to (leave empty for all nets). -- **expansion_polygon_mm**: Expansion size for polygons in mm. -- **expansion_void_mm**: Expansion size for voids in mm. -- **relative_parametric**: Boolean flag to apply relative parameters. -- **project_name**: Name for the new parametric project. -- **is_batch**: Boolean flag to enable batch mode. +- **aedb path**: Path to the input AEDB file. +- **design name**: Name of the design in the AEDB file. +- **parametrize layers**: Boolean flag to enable parametrization of layers. +- **parametrize materials**: Boolean flag to enable parametrization of materials. +- **parametrize padstacks**: Boolean flag to enable parametrization of padstacks. +- **parametrize traces**: Boolean flag to enable parametrization of traces. +- **nets filter**: List of nets to apply parametrization to (leave empty for all nets). +- **expansion polygon mm**: Expansion size for polygons in mm. +- **expansion void mm**: Expansion size for voids in mm. +- **relative parametric**: Boolean flag to apply relative parameters. +- **project name**: Name for the new parametric project. +- **is batch**: Boolean flag to enable batch mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst index 7e68510d982..49649e5ed3f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/push_excitation.rst @@ -45,7 +45,7 @@ Supported arguments include: - **file_path**: Path to the excitation file. - **choice**: Name of the port to assign the excitation. -- **is_batch**: Boolean flag to enable batch mode. +- **is batch**: Boolean flag to enable batch mode. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst b/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst index d2d8e072f7a..ca6d4769ff6 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/icepak/create_power_map.rst @@ -29,9 +29,9 @@ The extension can also be used directly via the command line for batch processin Supported arguments include: -- **file_path**: The path to the CSV file that contains geometric and source data. -- **is_batch**: Boolean flag to enable batch mode (set to `True` for batch processing). -- **is_test**: Boolean flag to indicate if the operation is a test (set to `False` in production). +- **file path**: The path to the CSV file that contains geometric and source data. +- **is batch**: Boolean flag to enable batch mode (set to `True` for batch processing). +- **is test**: Boolean flag to indicate if the operation is a test (set to `False` in production). Use the following syntax to run the extension in batch mode: From 56db8f98c0fe5e64ea9c59a53daa8ba8e1faa834 Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 12:36:41 +0100 Subject: [PATCH 35/43] Fix vale --- .../pyaedt_extensions_doc/circuit/import_schematic.rst | 4 ++-- .../pyaedt_extensions_doc/hfss/choke_designer.rst | 3 --- .../pyaedt_extensions_doc/hfss3dlayout/export_layout.rst | 8 -------- .../twinbuilder/convert_to_circuit.rst | 4 ++-- 4 files changed, 4 insertions(+), 15 deletions(-) diff --git a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst index aa67be111cc..7e1a04e9b4f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/circuit/import_schematic.rst @@ -19,7 +19,7 @@ Using the extension 1. Open the **Automation** tab in the Circuit interface. 2. Locate and click the **Import Schematic** icon under the Extension Manager. 3. In the user interface: - - Browse for a supported schematic file by clicking the "..." button. + - Browse for a supported schematic file. - Select the file and ensure its path appears in the text field. - Click **Import** to load the schematic into Circuit. 4. Toggle between light and dark themes using the button in the bottom-right corner. @@ -49,7 +49,7 @@ Supported file types -------------------- The following schematic file formats are supported: -- **.asc**: LTSpice schematic files +- **.asc**: Schematic files - **.sp**: SPICE netlist files - **.cir**: Circuit schematic files - **.qcv**: QCV-specific files diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst index fddeb30a124..c3f660bf9b5 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss/choke_designer.rst @@ -46,9 +46,6 @@ Command line The extension can also be used directly via the command line for batch processing. -Supported arguments include: - -- **choke_config**: Specifies the path to a `.json` file containing choke configuration parameters. Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst index a40ce2983e9..b471cd309f8 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/export_layout.rst @@ -43,14 +43,6 @@ Command line The extension can also be used directly via the command line for batch processing. -Supported arguments include: - - -- **export ipc**: Boolean flag to export the IPC2581 file. -- **export configuration**: Boolean flag to export the configuration file. -- **export bom**: Boolean flag to export the BOM file. -- **is batch**: Boolean flag to enable batch mode (useful for automated workflows). - Use the following syntax to run the extension: diff --git a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst index f709ff62e8c..ec9f1425645 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/twinbuilder/convert_to_circuit.rst @@ -1,5 +1,5 @@ -Conver to circuit -================= +Convert to circuit +================== The extension allows users to create a circuit design from a Twin Builder design by mapping components from Twin Builder to circuit components. From 72e1a1c1574ad0633bdf2f7322d5dc13c5fd2e1b Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Tue, 10 Dec 2024 13:34:08 +0100 Subject: [PATCH 36/43] Fix kernel --- .../hfss3dlayout/arbitrary_wave_port.rst | 2 +- .../_static/extensions/kernel_convert_ui.png | Bin 98284 -> 0 bytes .../workflows/project/kernel_converter.py | 112 ++++++++++++++---- 3 files changed, 87 insertions(+), 27 deletions(-) delete mode 100644 doc/source/_static/extensions/kernel_convert_ui.png diff --git a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst index 4037a69b39c..969c015869f 100644 --- a/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst +++ b/doc/source/User_guide/pyaedt_extensions_doc/hfss3dlayout/arbitrary_wave_port.rst @@ -13,7 +13,7 @@ Features The following image shows the extension user interface: -.. image:: ../../../_static/extensions/arbitrary_wave_port_ui.png +.. image:: ../../../_static/extensions/arbitrary_waveport_ui.png :width: 800 :alt: Arbitrary Wave Port Creator UI diff --git a/doc/source/_static/extensions/kernel_convert_ui.png b/doc/source/_static/extensions/kernel_convert_ui.png deleted file mode 100644 index 7dd2cf987d3c4e726cb76726e77b38b3b0b5ba64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98284 zcmd?RXH-*L*FP$vqIkfHg{nu9c0i>{2NCJLM7oU@2uKZ~TM$K>NRi%afY3rOD$+Y7 z1QH-1B@hUqB>_Uhji)^4JnwtY{qP^-ez@cA5eDp?z1Es*%|3r?@!n8hgN>Dw^~jMU zY+9NRjE@{)(L8eGXwAtJj3@7}y2UVlF?ktl+&@x2$i2e2Ip(OUr+VZ_Wz6Y=C&wB0 zr(S4UcpW)%bNS~F)2nC4xsMz<%-4FLYU*dZMq}|aL!}cBv5xei^aFSC3)skKkpd{K zwD$t~Y4<7>pUI2eyZHLc;|QSw@W?s!P?c{NwL+O*pH;v1faBW8P5&g7E4mkK9(%mu z1ahC!5-=h5PX#Eq!P&V3V`JW^gxeB(-oAS|6(4orVVKfo!k zW*+WkGBIfU!n)qWub%$v!I2{yd3)|+NqxA>e?OYl+QtUbZvFj0;r&U?zdPAw zJIYw2zpmidp%?%9`$#DE+O?l6^2aqR^MBZkw=cA&v{V;2m_9}(V5DS(wbkCTo2B~l zL0u>roOk?+axQ;g{@(LRiSqYgp?HN$Oe@N?G3Aw^5PEfQU*Dp)Tta$!S$p^yk?VI= zB^*P_pWJv&(uz^Sj|dnBF|##_`itNrM-0>56|cePob2uM1CYxAyP*8| z_={y0)ekd=_N=eZcRBC8(c-+&ppskAQG$JU$7gNIX71caxxn4inO)5P=_V8(xXM&) zBMWRF$;tVZN6uSwWMqU>-1}XlH=%S%G^My}_OYIIvtIS5+fLnuBfy!Gvd(B8Xnefs z|L!HIY<;mWX?kus<-1&22+ zTzo9=KZG1vAE@JvwQUQwVPWSUo@(%t05U z#251@>k>##NKz8PQ?xI~`*$~{IIGi|BErH8-f|=)AUVP=H7jdmUQ#Zw)xrH zt-H<~DVfG4!+PrYOP`StP{w+pXCGMivTKq{R zRH+7O?kL;DBBAXIk|48^9I$;u`-o6#mE`jg51&*o<1$Bwdgjrk*O!-b*{7vEemo#x z+wAi5^VhQyV*i#s6;PlH(@M`L0r=yuM=8BVT+t7SyV^SJvhW?v{D8$GHVrP8vatZw z9^k#r`V>9I+)HYgN_@I_Sx=uHE4OJfH8h-M*CJ>e+u{D6_YwCPg==uAA}A|4F|k0% zQ@cgufg^);dBTf3vPP#MHT?NUNxz4Ca{ePQ6rkFwLLi(xn;jj02Vo?D9t9{SpE- zI!PZ-Sv3k!nIeV3ws;e{p=nt_70S)1Iw5JzG0s64CT9aM2THZwiOeS4#sGX> zg9!5jWEhT@vgST{Scjcr+yfQ8?qq?Xm8d8*G|{fv3s=-tBMMQZ83pXG>geY9DzgrBSnBSo~0Q z0$PV*M@qE0m0|-G^g>wWi{Iwf;ivU4Ac__RI3)ukbCw3cg_GnHTRzcL`*v2YMn4t~ zsZF0>6f7xRv6dNzcn@n;pqhk16QOwr9@SR$H5(REKMNWw&{Lwo2Q!sn`8rAaQ$y`1 zU`P_RrC*jS-W;6PSo@cuYGoti5~Z)T_!2DBU)>qIH}!el_5sz>gwob zNOfoA)!bRF>WdAYZNF>LeCvV0@t{@<7`-^E^>Alsr_Ui5`S@Fsf5@(X%Oo(1Gh|rT zr2U4^vSCV9RTb~@`RS4;VKg|KP7JRip8bJ>>%Do4hNabeMLY&qY*4{F>`>RDWkqwd z=|16pclm2@CTtyq-j(dw48l%O$F`|tl&=z`)eZNW63m~4~yr2mY0kV0T0eYmEMPKMX+PYZbM6uvJ+IDLO8@x6V25QMLbjz&pS<}vJ=igS~7 zK8(o_l2UAyS5IkyHkMacYYkj1pWs^}rT|5@sj`mk`oxNHln4Gl+P^D(Hdbj8cp*^f z)Laos^QbXb^redz1r-%-svQPK!})@X4EAFXdG)l2nE<_)CW)(rOEyz;%Y0~q5tkqU zK7E9WxTm0|_xcmZFetLod*w&400{{NOfyJUF!@RHjB4lWUnUI|iLpH>lnYe)36jQG zr9kAxXiM^HhU^o-v;BR4BzD`OU2}-uYMwprI|!+3N6D`KH;H>dR+Y^77YP5G3}0vD zvogw0IkPVit|6FZ?-C^bIPI3G0TPGd*)Jmc(T4bx3mt=}HA9vwAMoim<(&Cdthfi^ z1>|j3E%T2u$y5rOdijyfGAMmM*f0Fbo3k;ZYt>K%pUFr4A!LbQQDrs-L zua$Z9oeoe^$&7f$z;s?IbEVzjM2X{2h9w+`WMl$<~J~_mm z;K>-`-06@v-8{%(^JoDyplkQ#qQMgZb&tEtOSfHDX|mD0WX`o!WkuSvNofRvUIMDa zK$LXGs;K_KHlIqm%HC6CiM|77kj^f^?t=5`^ik~qed^VZGcc!G>J-Q)>-G%Fn1|?6 zx*t$Gkl|~Ja>IyWY>6K5w%Rsu9Ubc5TCzP#Z^THzi~=)C`~rkzAw@F zTcHU@gWsnmw}IiD_+LAC#VA*Q+GA<%pu)bJEm*g#6gd6CbQ2gA!67mwlMeHm5+TNJ zsFv}_OqC)A5y%-{sGZ5TiMVYx&|@=_3z@Td$Rt5A z90o`-2Q`6DIzsMuH5L0$rTAr5H!79s+b|mwH&B=5l_=+r`P=FEG{Z)ylx8(eD6k16 zuYj`pl=4kyNSYidWz!_^%MSgQfs!@u#-!GU%Vb+}S{DjM?4&l#y68hj5yC< zEEW17Ep#j2&|VCP=kMt%Hd=1Q|glt8BW>o5HNP_rycUwk2x zn#M}?kkVL&VgT>Nzz?3hUDkv31aO6uyK7U*;Dw`;q2J{d%JjOO)C8N-r-!__n_?7e z9aBr@G6d?YsF1^8GX|@tu~bgij#NA?hJ^rO}BejIX-POBcK-B%xoT@K%^-u z*wuly`gMj-Yu1#0wmvWSNsuCLt5lopYBCMM_g?77xNMO~O`A0%wlOdm%3*NQg}l>6 zvn>S6XS{Kj{6mN~+>hlMup3lpso?oeYOXGKf4q^R6x8TX;>sH?^0D;J`oa@kd+L`l zBGw(MT*Fzc?46Ed*Wl9KHI7nN%m)VyjBrJvi#4#SmNoargCa!$<@H#PwN-9PuY5OS z^nfSrd_$E$R)^--7wqPez`IZDw%Mx`TxS=c9DI~mgAHCI)%b>y$V)vTB zMGR7Cjv?~ITFijz2wO_NX8&2KTdn(OdIl{8=0fUcv!g=7yOGDA&&&nr(F}PEFoEgV zcCSErgAy*6KKb|^sZ53Dx@{ku444^(RPxNo2BU~_zz|kfedbz#@B){zXiAHb&ForG zx-S>?kk>ba7+iy$RXnVpvqcpA)3cEHnx9gb?gj2v6zHdy7&MZ`CoG^-Oe-4}Tsu^7 z>S};;X`!7YZ^4QAm=di808nA^6=xW?>1(&S{rSwJl25;%1Z!^Kln?h_`qqL!|5#n6 zeDnH^Ykx}g>?Zp}$=iD~b2>iP^UX}^S5Fy0ts0grL?20YldRQ{!*F4PBc?tf#9Az9 zF^^K)+G=Yx(^dQ)Rxx-1G3}xP{iVHYEN+uC5qv-v#VRP-f;zt z1#WHBOai)zvif?5N4|{7nENp0Qx4iPH|phTGZnkaIA>6A({;#nI29#X3s3eU--EBX z+W|3ug{VKB)P8u$ToKy?!qLu>Hi`|q7N4^Ux*>osDz&8%9a^(lC_tijgMh;!l}8&5 z3^D9B9Our>%^a$NJ@u~7x0HaK93bK5X6+KhjSf1R>N3+@2jzSKVNo}0whby3h9XM1!srL!-9 z|0(F3CNZlGj{=EObL3I*!aX(Fu!<6U>B zycPwKks`HE`+ZZedztCzX38emG6b-a3QI$7)|3?lDR#kx&hA);!@i7N9y+Kf2_D#{ zN|C%kXq%+F(B2c+jDQ~7`4--x8A^t<6}%w?>e2@KK&f2kFKWs3{nJH$se2i^(_@}` zWJl|i7N3^Ne#d3IdcZ64^0dL&6m0^I1ef9Q>O{!7@D8rJ!D1JBk0GmYgWyYBcY_ zH*+;MT60vMFUEWm8oUaDJ4Zl-oL6pimb6(I%J#JLK_%nYj-XBEY9E zwo_hV>zKw2YSksI5a&Xv+8VF|Vce$sYNZ;ilo8)AEKR$s_}7_L`52{Ujf_R7lw-Vj zq(iq!q>^U49xIXyT-NS)W^8ZJ4`!(rAZJ{?Kzt2_-tqg#7#(%UYjNTH!r-E zU*f=uH-qwE6NItC81pjA{IoP~{+qXiuU%6K*#jt#4{_}v`NG{z+OLa{RJ)$+FMKk% zc=>YS!NEZ|Iypn7tE8`2bjU>s^kRN>b;kAN4_Qa#ol*I~O**XvctITU>hh4R!V?Rh z%=asktPPtfy?+B|)YzqF~t{vUWBA9@O`-+LWWx2J*m0H+gaf0eGPm@~SJv z_N(>S9&l{EF*4bn*{BJY4x@Mt`Nup#Qeo1-v0!2_OzcaUi~OGwHjAn7T+{|vK=yZ> z&CJdBrQ!qldmy;Oj7K?&WI zG(FsiIV?J)A0CP*Zc~WM#MEER=f$q$fxBk~|FdQqRt6$8l2-@;DEEOc%J z+Z3{iu3u`NsK~_&>kyHTrH(uLVi_DGZsg-p&B$AM#f|6@dR@WB81*x_>1|`pbcr6- zC0DF#^VlN_XRLp#1F~jo=q-fO#91e;np?;QZgMl&0O4%(M8sNPeW=yfE?%wZnkKPl z=2AOtfEn1?R*drVB7G2s7<6c61E*d4JNG@&1VqqX1AF55mDGmN70R%g)*!0do}clfj~+?SR>C@KnBIlA%(c`( z{eK~5A=lm2&Km4KVHRj=6X1rc=EEL;mk%u7mvW!M{H&sMZUv4P%GL$OT>H}C}$S5*p z?GY8-_A}6O4jI}b`cBunD{c?cQMRez00Mnx-ga8#$?r=?RgFwe7x2ZRH)gOB<>cTE zc-d_;q6sws4r-%Fd=0>`jQr&@kGweK)lvas1weMm@*(s!IkLd>&a~_8udU|G z7Sbm-U2&_cynoKV3bimfShC*CEB$8kjUl64K!bytG<<>KVaRxP7tGYorQ7-OH!Q;lUHLz8O=Z zk>&4kpQX~VUabKQZt~?6%nUjWCQT^s`wSsBU7n!=TFB@kbY}pAMasq-{qX# zYtzKrOft`RGS3)8BN4C=nhRJH-4Xx>UvpFobwQQyDf|Qo{=5)KhIu1|H#S;}QCz&X zx3;EKi-V@usl+zeK55luXL&>pyq>15qr*3ei$3~St0NoAjO8O$s5(O+4Qcv?KYc-g zUMju;moc`xIlsE2{f|m}QIrO6thuRaJs_^!qPmkdnfuR5FK+_lTQq=xHp^q!BSaTp zNU0qS5BOQmE4OXId;OI%Glupv5@%on}`nWR4czaMO{{FAW&+o!f_7xA##YG{BL!V=IWCC=R1w+c)>3 zsHO&iYhj*kdjB8H>R=-C@W2s#ZHMo0lW%|M@W9~6LpQf_UjjOx0lSFs^Q)uEZA=(& z&``k1FW@u(Va4v2g$lI+$)1UK9d$?iY( zKJhn;97f#ZG~MXKNT5rEg@prW)Q+?U{706*#6Vc`q_0)Y#oCy$?s9R3q7!niUcHKL z@G4X~Jn)L*Q_cvz=y&woU+fO$+h*7NIUaWXY*Aj`gN}}lP`jR?AylzRVNDR#mx3SB z`gBX^=FK<%qZyPlcBbA#Ei5dIL4+querQ_-(@K(Ea4{Q~Gy`g|eDdT8r;HmnlhDSo zU;hK;DKCjIK(S>8`oM_qmgpg0_$DABKfa#=P1S#7^#AR5vJfw6eMStWr?UL+95z56 za_PdiZ@1AbB3kKm<8=H{;{e^G*LN?-b31hl)!3Xz# zN_L=&ex_0xBPa&n+lL+Q!`6q#P}nDd*RLISV-R(~@{N6Iu53Jv~@=02>$WGV}4_hMQ4yi{~bTg zVn3-V^yjz!QxTyT>y?k?g&zKnrWP?DHU6t1Z{5%C8DjVsHKC#LfA(3_Rd!PIB~?v@ zb@$9qLmMi0?OOg{!+D7OzdM}5b28V%%8zA7H5$e8*2m|*KOl%pbG}z{olGxbUSUt~ z_U$oR8;xSM>*`=O@lY#&8g4x)u%M}&g_yRAuMhrozK+}QN4YnFx|Js8kYN(Mel=au z_koZW)#nBFRC@hqXk;AgVgd)Wc{G{`k!ZDB?#nYxmrKm9Zpin%XCo{|@fZ{^bAD;P zcX^>X@X<;*SO~KHkl$@4`#V7+K0YP;*;PodsA$rdtCg(})>1@j%cnirxpOs7|0dtC zhXilo^!%Lo{F7*#6&Gdq84CaW2?Pg|kh;;u-#;-{3<0NvhhE&^JC^6y-5aSpUnG{- z>8!SFsDA92Q^g4Szao{|glO!$%O01PaAtjB6wq@HRZC}!S+dQc(Mw8DPd$^5x{CIn zQ$@_1AItkfV`$n>E#nn0^gvG(nrnu~c?y+K1%iicF4RTQBD4+61>z~BqI~Ol<5I>igRAZc6!(~X@nKWJH zgN}gxO{?}D&!l|L3rPj98#;Q$sR@De_uvWk+{VF6to+e@jLHS4v(xK2)+luD^0pXZ z$ftO@9ID(x)RAx-aF4QjT=R`$P5R`)%*(()|8G@sGZw;f_mh-JR&isomK3HY}2-EH;am^(w;pHFd`bS1v))I($A5ZGg&FC=?&4jA;A0L_rM8DNd-~PNj}AS zx?v8=T>Dg|nQ4XTQg9BFJ4;bl_al-G zMEx$+%X`Z++q0abc-Q}9ul8v(Z&AC3XzsX(>Zk6Q;@x?Vcqb;0`TU=emq70Mgq4sa0 zT_vol>%(NJUTGcX>}fBGeEC_66LrT>G?M`Rmv*~SiS$-Wbe+r!_d^a!r z75>ngHscC=`AOR4AUG*btkKjE&oCHpZo5pXl29}Cnr?MU8*Caby?s?U*L{6Qul?&kx9@<>px@iKm&x zL^W<61NFsU5jRvN*`dCG_klZ(7%5u4P7}8nN8%oOh>K|@J?Lz?#elLgmanaBF33UX zxlUqYCV0jBC5*Oync>yzum6ivI5VkuEKf$i*R0Vf9HnRS0Gfd(kC9nx>d5K%b4Oz5K*kvL6A!A58Gz3 zUS^ZY$(~opER(!|@_XJ=FhdAGhp?Dea*%aNY3VSVW488bZegK*vnTJzTH;0_?ZE@K zpJ=!I9IaSASxuLN7fW^Q$ydl|k-o)}J0b6W6EWA)dhdC<-=kkTUuLZ}Us$A};D>d1 zL$t0G5#Rh3tQ$)m;QjQNC1B@33(o;-kfd)U{OA&&Wyk2oaDl7FPU-J+%Q#8Cfl zQYgQfv=FEmZw9nJn}&qV$m40|cE|NBpc|&)(itrUANKNvUnCaSG}ol8mJvjJ2OtA} z^(8zpzunLPa3AlLK-m}@t6k-dZ6gy%AtKCy3!Eo|- z-Qk6|AjIOzTh0l^`_E83CjCjWa-S_qr+#=Q#G4iUD1Qd2lSYYOD_h|Pi1mK-GMo%c ztqHKtE0Ch)rG)MTcMe!T1MN%7+l7Vg2{#1mL5?49j5EpO_KLZfln9;LaWCuS_0yf8 zzWhfhQ2dWjK;b$37fttzJqb;A<=aMRcwpQK3U}d&s9V6b9Z_^(qe>y`hXg>PkmH<3 zK5-&v;T^wrnzY^f%54t5HbWz$K1q)sa_U|AK#fKyoUplZ+EY7UO` zIhr>RCmZa4#Gh2}AQ~Qw+|N&`y{BvCdM_olRSoy)hPPipS}mVGU<;Bo>gE2{R18q* z;b;~2G!DLM_;z&5rqS9{;-*i+Vvm`hHb1~Pp4@S+gFksb&(`#9dv;ZvPGefFk+X+M z!X1$Z)dC^Yw_Gf})1HD&WnnnKBwu0Bv(g_0`lG*96P{C)E<_35psy<3p=G*Es1R2- zE9RWaJ#3?QNZL`US@qc<$(`xCoprmGESX?(0p~GqlfH8%QqN}|4xodzdJ4IFyPF;j zkmLqP8PceLq)qts)T?Iz@cFv~?~w8Do_D0KDp@X@7C5_a@_=9uqiCK1Uat?Y=%^z5Sa4;RnzmSokTsqC6Wm#K(>dSs44?gjWWjhtv+Y}T$QM$*1VspDqm zXm+H+Vk%wq?n$jp8`Xa`Zk8wV@=*(NZCd4u&uTo3-dV<^+@{wy+Pzfbt6(c3x1107hQL}=fEq8OQ^*e3 z5i$@laT~m1!uQN#zF8bcZ8T7%mP=E~cd7LIpx_;~mYtTvY+`Eb0hFkm-xl1M5lr{x zYLS&Rw@I}14A1lBUul8M7Hj`00yw*ad|Se>zTU3_#d@=vK6H=^mdP3E;bPTZAC~IT z^t4M96NxEPijoZ4rvmqDEMkBC^;M1BllXmuw9+K>kWuRJO;N3$Vg9i;>7T0_6fL{) z`CqNPMZ%EdFT0v88U8kk%qNO)@%gOLTBbWC5BNJ_#!pS(oNqrNxHa}3f8{F7;X|~r zoRrCAhrPq0d$6rTU1nRpK3}a_(@SQOQPNo{cUc=XwRw)D{V;ZpOyrzepZ87QcZn<^ zIbX}HpqpGw`&p`?M^iZYnqi@DVa1S7G9)9^IiL)%rSrCIc9e#f&-lmud9AT{X_8cj z{(6yWwK=qX%aySm!Ce3S-ib#k*8%iPi#)0M$Y)e2@k5AlU8mZ`dm!jHW1aXkqk>nX z+6lOf*zNDX+Pm^V8E(i~8S_<#sEcPGqkVMh zva>laCzYsch{UH@l>Vr4<*=TDoleC8iILY+WV4`+lAvO9HfF>R<^VlD;VjjFhL@F-?PbFy2*(j@ND
~3y_!{16|$9%T4dx4^>!w%fFI}z$c9Us`D=gW5rf03 z4Enlb8^cQiODT;k(CwW8R=vg_wv5ntaPKjCP2^hHop~eI&fKNoy$T;4AMOdWmcn0* zl6Vync+>#mTcp+D7biVmmOP)Ub-zfs3CU2sn^(qgB`afJ3^*uzcR-dS1}z$q<1t)e z(61ZE2Bw4bak_`-gvMieyXF6u#-2$At8f-rFcG1BcH<_WGHK?pX5=H7)GxzSv!kui ziZ`U3dc@Szy2sfyDp}np+~qPty^GJQ`3n}&hmb2BVA7MWyFe*ORObWtv8`Q6f_!*F+pyriIzj*9_@Fm{EehY@+?oma0ms(4p5!U=21Fk2Byfei_A{IHTpiRX*gSS^J3L~DgFC&*!sESV z%Xm%5`>Qd|&*0*&MYo2cOo+&pl#Dp&ZEjz>-;lr=SQgl>W+f>)Wqg6{xDQX!U~VFC zqUOPX#nb2}-~99Q-x99y6b-$imVj4PfykSt&kFcO)*rnz_N-obG45b%b7#BcOG^&2 zl}uTJ+7WQYm(a_hmgP28e7Oj}Tpr9{Dd{V1S=jSQT7QO2E4%S|6CG|B2 z-ORvhSZGauq(;Hjm=r4ilL6MU_ot90$?1}<8WK`_qyYb(NUJ85?QkWqie-|AynW}u z34DP;SE^D_d5V%voBj%y5^{utc2V+aO$Pt94)B$KjpUn|M>kVAHVTyXJ`h(181~=a z05ukaN1`N#&;TF0H7OI6wLj!-(mpOB={9Lw=Cy#|fS+HCH}AIin7^gX#o8f!cj3Zu zB&;y{wv4$7_BgP5H|{C>l1Nv%bg6f@*~gp%ox7GYwbgGChgPJ(T=;$%2=Q4_3?xS! zm4cy=OL_gnadRz5dZ9a1?bBD*2z0(|7t9&^l1&&br@eYPtZ4D`o`0}rRVPdbl^B%;Y6~NDAeYcVg=X1cl zy(h(yZX`6g#ojN}AKg~GT(lBTh`>0ib$e29Cg!H*D{T?p4ZWX89q5w-PUE(U znQlebr*BC5PTv)kODm>1iYGwmdE%5#K`(o|vUFwJAjexpJ!ujV=%li>U#ShbGhI6y z{${H(uMA)S_;~%a&CyX9w;bSc*R$fQG1(3ZGbV?1`@rwkr4Q{>yKHU+-C9pNJ9az7l+p%K4U#i3o$VD#0VDFCO*+WK z0N;5ZT`8^9Q#Ssxt%q=Y5&zBC(Pd!qw{+2xj^?e&6K9CBZu?mfDcIF=^ipVJ?Ib`2 z*m*m7dvEo4Xko>bTBSY9y3c(378T` zH22vnWv8UCk$CGo9Hugwl00nQvjn05)II~J|OFK6~Szge6i za6)(UV2srEVT&!XC}V!yX`(ieKTWKm!MJLz$~p{_5D*xhc${QX=ZH0;oOsQ_4c9Ts z7$&}T23TZFuE(?LyCV`;)FdlM`Zy=^p$|3OM;4fmqkSKzva;)rCr)VLp9b|{k1)qD(375irhi6Bok#5~rr0{hr18+ei{cm#RJ`sl}Z=}|^FJ0?k zkv4hoUH5or=19LNi_de)QQ5eMf}XC*E$FQ38KStB>PXX6ra`iA!*`yznf11a^9|b3 z-3e`$#U8m*l^$yFJ2X`Pj@<5Pac#$J|n4X88Z z=NE8{X{Do24p%XM7Za&*S%UX=@!rsk=~$>6P)YEC;;Z|T=xEx866*@mR5hKe2+~%$ zzxeK^k4;>;XyKZRE3_6svs{p%v49uCo{Fi&GGgv8&R9>q%!B zy(JRk#-AzPRU0HXv$Nurp%m3tZSaA|)4rf&WA_AMqDt?a4q52dUOc<~0^_j7`S~Sn zo7qi`f6FJti5pHS4#&L>v4vc~N0gIM+qO)Ql~VB-ck`u}ljz+^!Q)cIoJ+UCBeQos zQXqE#S{4?)f}3x=+c``R71{j3v7LkH?Bv2;xIFZJnDp*%4c7qU{)^o25Z_d9An?g< z_)*FG=QhLPm5BUL4ymiYVGi~U)*SjaLrTzjXs6)yjgXb?kD^k(U;U%dmU(O}l&U-G&axeH!LBg!5LfX)J15Y?53K&%sgbPWIpCyEK}xMf(YwzK z)8nNrM4gAr)we0RPg;+C!#Qu+hMV&!mq`fxNN5R2%Q;bJ_z9PZvVw&aJ$!u$+Bd4R z9*Zcy*)konj(j8JX=7Q`G7==UMFZ?~+65Z49nekoQ{~NPm7x1W2b!eAB^LjE8R9Yv zpFUzc*H_s4^$Nbl{Fd_w+%r9 zmPQj;n?Q>LUq)OrAur&*;WDVWj3F01!jR22saQ6=dS?-7*)L)TsxM1qS_!Ia=qQsm zxC5f&2c-dQnnM>|4jV3Vq|4wQaTI@S5fIAq$h#HPY9fF8GCobVODZ6`ceO-NzI^M) zF&=AKtvNmU5~#D6;p3VDbSNTV>O`ss6hQT$z8G}i4{lg7r|M=ZfuRPDZVY)7aqBiS zFO675nLaYSrlJ4QlQm6POcV^`=I8DJpZZr9TJlB%yBnzuL;8f-^(Mg0S>`)kjQf`M zcQ3m`4`(en>!fu0h8$PCRYkuw|M2p(za<#pUcYqaO4-uTjtMT*BITo>DMmLypGzM` zmfe={k-Pf<^9t|swf;zyRcuj~D8IJCLH?G6uGRS^;ArR_ugFuZnbqc6S8?$*?oe}G zPFR?t9B{M$ZUm-5<>QAOjtL24o1+EG)v}f7PnCLHwPGWY*W0BUoek9W?Xo+%wrfPj zvSH#TrY}5`<8nKNYE0zWR?q74w<#<@u2+osj8YMM36r)Zw(b+q%q zefuI#cBj;D_J_k$1%0-TeUitt?V7kIfj4ZtUJz(DOPU@xLOzFFjX5|9pnYZs%0L%EuIQ$&!aBwG z2Qv5LI>P{3S_lIy-dgh)%T+q3Tp|HW=MFbS*tnD|)Gm}eeXabBX9)6uX=U7)pLfVG zIK#PboZoVRUA9TkbKhH3sa0)T`j!*^-Ac-YTj`}Cn=H_Z72LlasLuWiYNFrsxrqN^PMv5|g5Ncp9)YTa zb-~2#hd$UEK6@3p$w-Y530_ge5BLmT#-ZSwu2pWNAFd zp-NOkj3)wyTo&FLvOTgPnH5PLv!IY7rqA*pqg#7DgqwHgL~&LZTBi=;RxMZfZKn8O zdSs~vK50aaLAcXa?QvFHZs-^Kwp7Ky{f_UhBSw@}?@u*yesMXLIYv?Lh=a1#NK=fqxN$wLCxlEGU*x%YZ_@2txlJOIA{k_gA z((lXf&~yNjt8$2Q@O3Sjx!qQxs&+%l^V47MUe$ckzJaw)gtE&mdKzEoHq@HC&UQlN z9xy3K0W&$I{9B&{Cf)e!$^cqCsPvXJFv~-c#bwm9$tG;F{JU!stn@~z_X|dBM1cU# z-B2>0EmT85rcB{HH4khU0n|4}0G0GJfWp+cJG?u;4GB~aQm z)!|m!cyeGNt6pZj*-CCz^Di73+T$GyD-oGfJv?#bwHYHm1It`D5efL(7p6sra#P@x zpPuW~!?H}bJYK~Dmq$OGJJN&^J;M^tUu*HRz;T14HM;8dp&`2`^mO}BiGBRS zf=w~XrV{}1B<{Q0_9Q~EGgbE)8~54#o&XqdngFriFZka7{y;K)>TKC(x{c(%K@^9a zkoKIAZ_{tpHlY2iTa3Cj-@{bsi9DQk&EeKL4*OKE&s3+UUF-Y1U>-^Fd*)sgoKvc7 z7r$3@MAgv*>zSN`n)m3lGbS`F>oA{QYSW2_t0r8r{xO)75^f~-C=3D}X(h@$%0Qo! zi-i?hRpo14O}@tkMQADIt1%E_nXbyi*wEOESdRZTQ~UKocgu@vmh%SJrwc%tqGqGt z2GEe%H1@@K;oN%$gIlK?{iV&Eq33IaJdg9Z5lxiRPCpc?_Yeu%u)aXzy^>#HGim81tK;|qc<#BG+(L<_5k3D( z85hPv4S!hX-#TJR`?l6=m?WJHf+eI7w8a;CwT<v+ntYxhPv+~oW_`X} zCgu6)whynY8DFFwY{{Vs(p25=D>L=d0I6JRnwV7b%_8f(M&s|rTbu#D%=RM`0i1Id zRd}Hydpvcg1ATVDiLBuhj4uRE2i7Z{G#Hu4`;Di&BIHZs_GkF^$v;xK7dXF~Ly!sl zq;(Nl=eDz!WvgdIpF139`x#>P(QQd@ix9j*m$_YJfP2qs?F@L^==~eU6_){UcCcl@ zbYY*QYFAX?2av3XF)^sP)4oWD#Bx(a!5N@2dm4U8yg-h1C!$64sS4R-07e44*tzl@HeX=58Sb*R6LO(=Vh z4Yl18xd+k5EcQCD za^PHzfVvfz;1Hb)mUZTBUyAXU5{nFS&%=M6Npm-gJpb&LOGl&;E6*LH^pwHjce8Ak zt;AQ+DZY-JzWIgQ(AT}wQd(WPmOy{vL*PEz${)6OM2agjE5oI_=11TC#RSu-nRUd$ zxTR!HnSb5EBZB{%k^zJ$*cB%%8Y^=6DlO@Z2yH`*-+ji9>cx#Jw=S>WxEsOln&0#F zhNR!jLpJTkQh4EL0#Tv#G&Ki)y*~FFS8MqUpU)W8rf}uc?3L~CY%{x%OL?SwK_{FY zTKAZz(&z6AUsC}wP~qG!PRGN#gxnUy=IS#$vN5CtH8Nhwrjls zeP`!}dNZx+g!gjpr5n$Xj5Mu4R^wX=hvkI}C1w)x&Vexwz^zrvPMousyu__1($~ty z>XBO#n$^+0K2C|^fSs}3bGanz+!s<;GO`+)hE~#6P}Yn+K>yq3^hmcFzI+CcD~KNX zY$rK3T*u;a5Lp%>XHhgQi;E9=Rv0ZXG~Vp1D7oRTjOfm&mb72x@38AN_8+<2+w!A@ zc&(avsoK4G5@k>3zZPW3*u8Y9suB_2FR#ElRvJn{F5X@(?imV(0vJVI6z7R$+L@yl zhf5oda)uOzGPcE1_1lr)si#qPaU}^BZ_e@Ze#nlGEcsBw{x!>?migabJNA!sm-FTXH49OU7=P{^5A9G(k*y4LGzl zb-^>^QC{SC)s!(<`cYdyzyRkNqZnr^jzr6xg-CIZc=MT=_0j#WmUr^1mFPASaObO~ zGZNsL%5*jj8%JqDu*RDozn*}4QO8+N-XYvg2^zMJ!tQGl4{OuW;PgDBK8lcBt|rUY z)&Shb>}v<3dL?_mslW&M-HorfXO)dK=)#8FrJZr(YcInX9*_KBf>YPvNJ=T5`hmCo zN)ZR~h!`IM#Y_Kkv+BzfSm9@e$(CQYjN@l&nogMm)hjsczCr{kITNCZI zX647ACcFPCz=Oszqxv`3KLc|6n=SKCRSMLQW7}(1-!e!_P^$VS=SHg2^Y8-y4(>ylPWdHnzFN29Xy&F8O8j;FXl}SAtufj1voz&Q1JWvfoddT1~G`j4VLwFj@_Zrl=HOCWQ)*QU~=2yUDHdd|SLJ7KjD1HFET ztyBg$lL+X<_-`(X;qTni|H$H%5Wi^r@IC5osTJ(UfZ{z9k7sX-`}#nLu{4=dJjA6b z9S6^WGINZyRoX&Uj*qb$@J-msNFPO(ZvU!&Gjo`C?Cti$6&}!gN!;?|!Off*X(|m* zrq?x(>yqRjEGJYbE?vR7JPNbGD3v)k8COq3s?&L}P7Ezaw8VVoZy#yfP~6qz%8E3esL{lnNI zOflL9lJrmTT^vK$@AR!Rjqfq@oa9-5&aG|e+3!k`y%A+d*}KJ6E$IwQdn!}ljLSct zF6=D?>tDTMZjoUfR%q(!TsJCxOVAA%Y5sZp7C_M*R43xwoseAeEq4=rjxYb6&;>nt zg`meFJoev3f0>po5vaZp>jyAJrPv zHNdxC_s^JY{YB093TQoXS!VX`|JbG$lX`wWLi>Y0er*PXCQlmki%ylMvka~n>KBVg zY%l!QmIZY*NvIW8P5m{=+2wu&Ipg;5dzX%0p_ZIgC5oub&+z?N-Wk?EHdAiKnsG|2 z2qPJLQX;&n6OxjPp`9G=Z#J;~#rrI6f0t+bYvh z5Kz5|ZRzNbz-odSBT~KRmbn`7F<&IwdeK_M=!tV!+R~N9gqf~8!hHiC{d~uCPMdi$ zwmU5~LzbG4n+;iE2*SE{@f^^cn+9PJz+(MV%-nPV^kGJo*N5q^1;76@8TX7EU1{?X zRsF%(<*rg!`=yJGfN1nHQ&aTadLKn_5h!!K#wLG~!J@%v_m5Yxfi@CBmXG&qmZOzg zFn&`{sq?@L@onw@i@o=ZYHID;e^s`kD6mzEB8X+H6cG_ZZ;Ev3CDH|?h29Mizy?aS zP(!Z)0*RE+2?7FA0|W>y6pXfW*gv~CkETotGmju*bo+>+nkO_jZ5%fKRh){ratSsQ#-wJBV_l^?*dvC*rRd_os;X-%GE5^cDbx{OIBTrQ7s>(B*b^cGg=JVVj-2y*)j? z2e+U8?^@zjP7WO%of#FypVXX#)%~YO{!7U^T4(Vu^3Gr5IRPf`cSr0+?{6G1TY=Fy z^!?$72+hg}@Fp$zoE@Md%J`Q7-ex_qZRb2K_@_10$HkBP0-gIdo&Q0aJqe~v2@3r> z-CuhV=4{Fw>42&fI9bHKe-I4e{ea&`>)^n^*ba3$aPx~g3~(0$Xw%>Jo@G%>OG_XD@kv+Pa~V3}VUEj96z9%=u_j%3MQb@i732p7oQ4LtO7(C<%5gz$^Pk+H-5Vv0Z7{Yh#ZQe_9M zxsu<$&0FkFWce68zJf<2XJjBFb`cRHt^1VL#sdl^{TFNU6Uafop5cnX9|B3~Mf2P>%nm=Fn$kzWl*RM=SD+F>Nu{nt`a{DXVMf^$J96AL0Rlkz80WJhM{-?s===nGYJzB{9AE=JH3Ypq- zO*M{lCj=S*GUH6@k6vpLbTf7S34apbPUAv<(pBc)WQ7-E!+)kX)_*A=({O!~MLvjJ z_zv4|N`84$j;*R+?pB6Bzx47%Ig2yOqrq`D%yW_ScuhVN)sdRj_-4cSZs~^qg0Fch z)XYoP%odJpj&tnQ(i?fZ_Ij#vXAoND6kNtps1R^v`kH2?u8hbkHk&%`g{qiKDimW) za07>+^kp-9#cG#PQ`ww`txp*0HcQa84#Bw30*}$C|U}# zWysoQDNbxCUF4R@6p@b5=uv)KPVJ_z#Ns&_@`rx0M=|;TxO-GKtu;=jWPCy68$JYk zo*MV*-*ekE+^^2prf7g2KkTxKkMBjbR9|2uCA_iYjW8GX zgjXh?60ALC7XkSpcJO7lg$*eg|2esOzEJ;~rm%3$d*^L-!-MVM!S`NjYM@)U%wiK7 zli(}HzUf4Q|LoKNCS^^&lu|FmZX0BL(!?vO5Ib#ZwJrFLi_gL@bD})yWt*k6tmWS#8{{5F4odVq~7juE}%$m%d5jbthBk|B?st&st z{@ry>$`)QvZ&he&7;S^~KuhqIGeB zgiX?iOAqm>(-a@YPn1KEK#?LG6EXsDQ@>uOL4a0kYjbnVNVuLrD36q(^#Cii-r)zr zW1)Z+(-e)(hSp-qDvYyAj4kw5zX_T`>rxw~Rae9)8keuxB@4Hfk1#tT%(ayCtK!sp zan^aC-kfGDo6}Oea0=`?dQm+m*ewF3tGgJ#iDK&Oo`7Cr#%+8{O4^$`-3@=F#<`{EN|SXka>6y~~MvdDW=*-CN6veHp%= zi8R_^Y*4tOd$xoDa$nM5C3pj4Ty2B|JqdhjE*L0+EHri^HFK|1XFXA4lG)=2yPe`& z6cUr>Y?yycT(0<2M-axp^p}9&2+D~Z0H!EP^QP)kzB0u zt__Syq}t&&0b0_S7BQzmyAV}6R{xv&h8)7A=#~@FXXTja8Z$F1SSHSx=)+SgD`Q9C zZxE?B&(9xW3wC{CAS$}1h_%N?r1E?Q{6GBaG{~`&0$h7N)4NTrj7h>=6VV?(V@Jyw z7N6TwMbqJ^L}lIK<>^}@O33?12V+>9k5DNtpLRE|g1$6#ko%XKf@ai8WyAOVrP57LUpC0mD@v+PzJY$sdjf`>-W{F)H_BhZLEg^5s7*P?HMU(mG1}R(N+{&ZI6uY0GFR47LY_lh#_wtJR&> zxsA6$?`Chb)vX-<4PbA?8g7Ea;e+cIr9VHPfOE+{Y+HzxdNO9OUKF0^n2<%{_a*Ve z2IRsE^i@Jl#8?_jcXEHH9cLTD=-JPjx|K zGUV?`c5{q<8ZO{g98u(bJ|Nc(IMt|i85n;4)Wep327rLh)CADwJSCZaQ(LjrsKmvN z#0hAsduHlYW~A}rIHY4#)^j?o7?!Ft13U{97uW{nIlHDmen~#3e2Z4iEn^?45ezA~ zs1$;P9t_vD21mb$13ino%O~Lwd4z?vWbWfI-vP9lh{;mC;(- z1HG83yn$u^fU2KWe%^(%^4&iE33RFN6<9uyQ$;)HW0B1##e>$prp_e2e}XaVgyPvf z5A7M7T3^$n3BO&_d|)~ux(51hs`=EegnK*yxJ$g|sIS7S&Gm*h(NPNT2)_v?1~E=C%UM-*S{ zfV+iNr;d8h3(<9qf6bcW-m%uRF&BO-Oim73TDz9a!$11ELc&tc;Z1Q3x$r#Rkvlo4 z`ry{A?!jSIvD5!rD%pSzubdiS`&J%~lOlXOOy$PPSe;0}l_eTf+MbSXH*rr+meLZv zK{t*zXQ4HzM7e#gd0f$In0r<~)lbku>vlkcV+79s($6Kg{eZCWk|^c>y&E!}`%-!3beTkKS-1vSjGF|t ze9|jWCO?P}T1r#Xc5X6pR=9zj-peG=r)ZK=O*<7En5V;RbN;k#y5$@rL=-4x#2X8n zSxzROCf?PJt}|kox6u6F8`2UUjC>JC3wO?(<)FfL5^y-CU%WACduRmf?fPV+4Km^1 zaBT1aepehtE|UwYG@|2rVZfUyK=6J1-q<;AG)8$%3KW)bgpfJXUlRuN#Uz25EKlbD zErG9RvyAlqxRSgiV5qH86Vw%F;uC8N*>Nz4KW>}1qxqvolu(48QHkqZ%v;a1RM*aC zYqicR$0#M=4z54;Ld;0@VHxQU7omb&Q$V2kqx*V&=sP80z@+kSDmo^{gPWIERH3O| zAR%Q6m~|7DL=~(4b$%v35+g~0jGf3_gsWL?+U7KUC47j_*ojVZB_Ad8b{VD(oHA*42&?_ z?_kqvK`riu%bmGFncup&EA>UPMKUmYw?esK&E>}lt;32w|27c_#vOL6cs|+-tYh$$ z)qKor&wSwI0&NK&>FqUl*3V;rQn#xQiHfXoDpjzVnJ1N%e}%{R3-rn`0M>39Ycbi- zD;!XkI~tyyGl{LTUMlMJ0TfsyQpz$`RW*Nz-m)G=@xk%()P;^WTTi{wF-Q9L= zXKlG-68w`pow`hcUj-i}=$M*XUPeq7H~$z9+V+?0i!~$PG`~9>xCEyNZCXdOYl>u+ z35l8ZVEC8hQ9^yS9Z0>oW{zo>?Fs25VM&;e&0zZxZdtzvf{*_u5*tH61ZxBAuf8eM z95UtCQByQhTO@0DR1Tc%nXpzLm>>!^5E6|@9n5--j~Twpx4qi(n}tmGqDG#YMbq-i zXg|sF;;bEua~E>pi*Afu8amUVDW>$6{iF=KZoce%_nsm*4@tP&I+6KwbS+%capiME z@oKv0*Fkv4=wI z5C3GaY2b`k<)XLB*$*|UgZW36NEvcoU1Uq`*E$24K5&1oNoZiFwTmq_Mu*MJFb&-8O2AXBC>?QH|&4MPK9nQG=UdfXmo# z4pis1_pkjhk*{`4FlUF9e>f)Yy7l=rU-Nbh2>`?%)}om}SX8;nR<*`7ew6L~(s`C7 z)IB4ay$Dq~h(V?HT3F|fw0qd}NzmWXVGGpRsxrm1?n=RZ12Yx3{Rxbz4e1-+0v*fl z^+-2eeN@Z?g&)*4>hPc&;Q3oBhF$0Mk7I<}CZ{Wlff%F=7``8i#JFt!rsp=QVUz7u z@|4&P3R+9G43M&7h?_BIzY*81L{924#LK?-a;zor6{ZXBnO@FPHXiC{2jo%47Y3Mb zybp$-qG7tX041WfoN$iY=8y!0@qU&(>=5N#u2BBJ>tc8P8gCANN(%!bVKE+a|J^!hLTfraUm50^_rmmV$%CtFXI*2Gr=HKTU* z1BL5z5S$FU!wI!W;*7RIIb1avY+uxwt5okft(zq4i9O@EEUFxym!F^F_T^JxOoA?m zNg9IUQ>^hR7iz_#&m{3nS{ach-fEOcK(|c?bkdM=ul+&T?nAVQT?6{>kBR)8F8k-R z^wUZ`fr6ne?Ji&SqxVssec<+$GfN7d4^2`dw=xJBQlYPdu9c4uW^Do;;gLe^v)*)z zZ-u2Xam136tkk5iGQ;!G+W6V-CW2f*#}*8=!a#Q``sS}}2we@w${mF1Niqfb_=-M% z*1{j;SyoBwBRNe4>a12dzy4jqvS`OxHR+lx8rMjyy}FfLNQsl{wpBnEe{!`7d$uh= ztoSN$!t%6D;EY3my@0W`W$nlNIyH_b7Kw3y7nX!9urSDIB z?~3a*rD#HYa9YgL%5)YZMzSB~bB%ak&BjF%95&|p8fv@bjeiTmOI16v(spbd z?c~Ct>E$0V@0};t$3xah84XrnIQqTp=r+q=^?+&T=8mFUUTxV}_&)OXvzK{h0p()ys z!n2Fr)TW%AxKc}RA0+jTI4(`d>*KE=Rxk!UWoi>aod|2`Ib@cI1jF2vNFSjEAwEfNceuH|HRP!D}0$9?#Ge z^1-Mr^u5O@Hdjk0K-GIrl!H4eUM_HFfkpajAG&-nn>93Q^@XuVCVGkzuamUwGPot{E?AW{j) z!>Nquj-aFQeaW8uW>2r)?Kypxds`>;Xv?_uT>-f0?GMR(GV8^>w&(Jlvv||P74npd z#g_G~bUdvbqJ?V)LLm+b%(BhqO(cDGc)H^lx#N2&WUe_iM3J_y^qWOp*VW|@99{Qa zeKU&Ta*xthI&9$3GV7*l5z}w`_CWv=qg!)U?LNB9X!`0)j=%ZZQdt7q_0RY;b-#R5b@ckEbd1eb~SZFi5DydDr{>N~^?Fz3Vf8 z>_+6UdX4`4`M&W@u#JQ+iZ}#A9|@$lF;U7bv7sRvf0!M_y^^B$Zwx5m%Mrzz zFWg9EEq2P>T~FKH-6t|R5euZ9VD;*=CKyMz5)KXN;WQ33d5Jft6^6>7n}2AiGj3V0 z5W#)Ag~@8t?VoA+%F(}C);>+J3ADvj$lvh(;Z==WrlweVLMxN62Y)M;d#fhp@sPEJ zo}Goa6YOph)77)`LOr1qQ$BdtEKwK*c2BCzZ7S)SwGAp|TTGiAFo1;K8}TiAybACE zdI_uU+e`(_&M+r!guWk*^Z<&K+jb=jQ6dLAwn?yFh<-*r4;P7H3=xrk_QX)9D4NsfCrOVyC^~TsgCfO{&{8}nOgrWL^ z^wNO9D&|~9e?_xwSZ=G(ny3`7iF~n~VEp!ph@qsdh~cxwFf@eLW@M8)0jm64STF znVc#t@i_MxxfSK55}})=?12noVI>#bx(t~GsD!94(Oa~W0wT)Dj_8yXt<~SfIQQ>A zx2iK=lsU3>m&G4dd>Deqv@{;0o1r&>bg~!(+3g6XX+K}!vq4@$ew0PGm)lH%M6L02 zUInE#-EQW4hs6f`ge!)M9D-H9?%e%J@LZ?)iPBb8)SnK&W=qr^?Zv#-c`)O^KScU^ zRz7om$Z45sG>%+5LFsCzQI7YG?$rvCl6s zBfS`-i4vJMD|G;;i>$hgEEV_pIy}cpQSF_69*WI5sL0)Rggp$F2zltc3^+%#{d`_)nAgTf%>`(mY0tlx{pQ zMN71i@fc)CM#J!Me>~^Fj4S_;&PKp-6MWt#n_Y{#Te`6P2luz;QCon^NrWL_d~r`4 zw$Z)2gBSnSnL0P>ol#4$VqV?4`;!A$qCkzF*zWRneE?FD;O^}P(TJQF7U~MY)v?vMB0pUshx7cVL{8!fhb{?k_vaxj)JBXlE1uN zo2qlHK11jf_1&?)b_-B7e#4DL3?2)fcL#S)fm!E5&v`$GXCOInYp;#lzaL}sHnl6z zd{HtN^I$;!>xhwLYRhzB26UWgJ-}C?bn=GV6Y3+-{@9cFtjt0h&@b!vcyAJz!#4>v z_IRvP@AB!1KTgqQJ>5>m9GCrk%)gh5CXIWIb#88ihZe^-xEz@cx6o7AGJ5~El6+p; z?zD*-mt;}hGu9x}>2bl?rCC3CD5a*M&Wk8Gu;H{04~?MtN(Q4dq*LM2b35rDuq3mO ztQ(@a3+|BFuX?c2z!y{Tmgr4geb>cdYo{dHWN?t>QgX2v#T&DPwll&VBW1Jmp$wup zj41~4@I@&j)#n86?_DP$-w}tHd26OEAdl$l*D{AU!w^tX65J)hvrlP8(4?Q~J2WeJ zp0uy!OJ|1Q=~q4G=4j9{+}6q+JYpI{iiI_%HJMGPzJ!FQcJb{^p~rG(4Yu&D`O10N1{epW@-bZvXJ3EBMO6X@Qm>Mt#T-`7dK z1^3iJuKQ7O>JRT9&5QBcOlc3Lj}>-KOED(`*8(!l^I+Fei9@TTih;C@@NnD~ z^*ekQ8nd#z2Co_1^3Ps#!BrC#E(zogHBh7^*Ge3CqJ)*do57s35iK3y^yL*ZF$o-g z)mzaZ6~64I*_pBIhPW)bMb7<0@1ehrX1|GR#2;F;P0 zfu?Nn?iHHIwDdiS%7rqL%{?ejbzDxeko z?Y{F{egvJ|#aoSW>_m_S74LcnoCM4h3TgsgDiH?OWW4mpZ!sXmKK-oSACY&Y^I4bVB%VGLW9U!0>zeU-NM`>Rs>U?TUpb6Ng)k#OawqD7}{Zk_BQGDW&BeD^4G z_*gIyX)3x7?|wYSahMqA3-JcGPJw@0=Apz*%CwTPKt_q!^GTaMhtXnjxkVTmqa@Wo zEPBDFPYpIO!whv|uPEIBR+~iqjC0d!A29 zP9vwg{D)F>RhA!D&UieV!bV4bbA%o7VAlmQJ%1L&9%H_NJF{i6YF=U2q;16$QD#$Z zNvZyR7jm8lNoY@mOl?1K;tm&hl*H{U?9Y%AV2{wNv=?+Yd{RE8nKS;3rL@sBsoc~* z;XH}oX21Ku`28GaRMhj{804$sOLZ}Vh@{MTTEp8%q^_E`EnC{Ef}pU_7f}Ybc|~^F zfakx=|1^G>x)ieD{L)*tJegIzsl!OK%@= zBS4%c4E3@vAZC$xkkV2!)`wq`;U&R1mH`v&YHloTw|JC&t%qcBrffixAyOX^db9>o z5SiVOf#+-YI+TC1RAfjdsz#9(pZ!=e4mOsd~d3q@W>Vs-mZ0?I%TpL?J(`VrY;VGZUJA|T;IMPZM(~0nBC_wW^)21RnKt+*{umT93!9LlF~+pw_ntg;@X!iVvf~8| z9)u4IN3y>7w>VpNLJQ$$uF6V-HReSHCJxmHcGrCKDc;WM87-3R4piKf6gcjkx1uIr zqK)tksq8b3kJAN~<~9lF3S@aRU{O(Y)Q^WGB%`34p1vI4(xu}We**t0YHf^`PGaM` zZD-opMY#fc%Hjoc~j}{v@g%c7B~8HH8BqzlS^JQsLGvGM_R2N#o+j z&HLWwtlVIN-M{`24_HOs`>WwQwJ~l^ZE#th7X?gfxNcXZc&f9p*MeD9IgC2*2NIHo`lSzJ$I$kYC-@XCe9BWk-rKq-&m=-Jc6Qx5pxr@sbq$jM#~$Hr$J_-lcBThR zi4x9TfCe`@3pW8F^`KyXzr%p`<);!nDZm!I>KdXx4mjmKxriPWLWja2}XfWUw0* z^a!)fCKWMx2e82~8Ztctb;kzRTJoN9599k;oLi|jtDR?h(+9pO>)EwP@eljaB1jo% zbuSHJZyyT_dzY?ozVR_h1Dk$fDLCsw@CjCLTzrwGOi)SGXoLZCj*L8QGA^>GT6`wa zh1_5C!095ftY7bJ;LYO1E2R6S_FwO^C#V$KAnKI9LIX{pzNjDgF9B|Dyqz4OR-VA} z2l-%c!|cF7$+VSl55w?4q-^LAxHVCJsN|9lHTMQ%ZYG1r^Eth8x)mk_n#;dM~8TCbShl3kvuB3ddnr-`cBO(*O9!a-h)JSWzu@RbKR7pE2=%nW(=;&k=5e7 z{5Wnro>G1p$NURLyeH$@pRMD0$8k9vL#_aGE*JJ2dKh{K{+yg94?X_yjI=(QDXG8K zr(BVLLAt)$6RMlDH*e9hqX8bHVD7Dv1jo7-C(E`P!7?vtCK)oJWN!-R@D0atHzN(K zaqj@NX>XhnqFNoC69yplP*h0E;QlSe!*1jN zu{8ctp7{2$;O~55(@=Ale!4cJZ1sW}yd-v^alt;hg&VV4xffXvD zmOJ{>*b~Jt?^3EAjEM6r&{GklZc&}_I7f`zmx1v8*G)MDc=(`6OaoY;ZhZ{RGGY&O z5v+!9P%#@r&fM!#44_iIKvjgbDH^Dm=Zx;mh~V%qZhP|Y=0me$k#v|F~ zDa>2%xwu;Tm=-~9sk$?lSJtFcxjzR&GpwU;xa)2`3S1j8X@v}dv%0z)IJtj_;z?n!CVC7)qGvr>)$O| z!oS(rPniH@O=RZGZCwc_z|I{*1CD-L@%nzQ+94_WOVffP-T&DX#|Vqxx|=Siu@JPB z9Wzq(x?^mOE;fc(lhv~gQx(NEZK7{?)}-7zwNyLh1Jz`;NgP2(Y%3VF6ChVQmve2yDZI{pSE%(~2cSw8R&dX0`>-O6XU8+@|zc}UBQ7E9Cv@K6^% zMuIy3cns<@Ewcn$6dsu3t|6qTkMa^8r^CFTv{wnOSzat{Q@Tn+bQ!_9Fm}S= z*#1DS49aIyqxHLMcG7A_#3{G&65kkGm+lU?u8tbqF@@|<3fj)RDN1cLpkE_CMx{v1 zg_`6|(s-SIf%~sms^q`;(*pq9^8vuUkmRfgHy21;fN_l=OP|Th03r`ZTHk4Ha^s_n zT7GNlo8>V*ZYNSWHj~7m&3P@2lBHw;d~I3u@yH)9@81`C-233=i-EDiQr{S2T5(pY zPC(ghU8oc0+we5iNv)!7I2UTk(sVgQMYb{S$3u6(kPo_5^Kgf^c z6K9GaYd#$rklrz)m%fI*4DLDYzkv?-!M)lfWkUyNBwKe4#hM03x^ob2v$K8jR*$ng zN!h@{sbpRZ--Jdyh1tTF=Au1ahC71}b)WtC6k@zF-hvsOvDzWcib(hqTH2@ji6l&B z)6;Be%`|Dd;dhRyf#i2t@BM2$?yCeM4-y(>&XvzMC~z;GmtjD=oS@F@*#PGsKXu2k zWTjvZ@;DX6Cy-U%6P+~`v{S=2gAQ*QOF@Jqf&>%H@#h&*URK51b|P4+Z5D6&<&9v1 z0xrm;b-@?ze^YbXU!3B%KEQC?d3B3ydvI|*@mkXWJy~oWYo~(E(NLuS7+4<5Jx6Vp zM_eO8lWmrufi5}4u7TO$9OYM$TdIXS%2GyRw&x2j+N8RM|Iijd1vIeiHK8vlS*csWBz+5;=zV|Dx*`6-F+;U}XNYOwgtI2@1YLz^Q&OxxIL=;1bD%c%GnB=iBm!8LuWjm_ z1itY4tMPwTzQkX$DP#zBC9Lb`1?Er916`H9*}gLR1OKC^($IjJmlDi;d4wPoN|#k< z_sYADQ$g3+9vH?S6EjaON}ah}YNH*}G_cKDGs*ZWFR9s-AL8!wK4OSMvl|6Im1l~7 zW%}~ElQ4$d+m>JLXCu8V`+HtVDSoVQ=K<|vgDrB~b|~FlPQKYKFDSvS=;xbpxTMR6 zF0st=TX*qWwjYNl81!F%}H%zQv$Qrx*^KwQWG`MlPsIzlwbA7k=zBg zvV-hnEecwWE^9;mCQDOUW_kA*&lldE^mD2J>rc5@$~u)jZH}L7@Z!ra`(3kqj zX*&*fu~tTbbHT?TqX6ctXkL~D_A2?%zdgy_(7P?Xv3I7El~wq|J}X;TMB%*xI%HwT zp(sYMsik$AEw5{ok8$zFyik#_>kFmtX^R?f_&B)$1I>~yp zWK7b468uZ@TS$(X{ZF<|=NmLAb+^JkQ^_g4Y{6O(@H?Jm7h#~~?PRM3cJ9@2LJ3wZ zoee3mDG2&E$Tqns?w#dU+Zq*!aH2`Kn^TJ;hVH+8U%-W(Lv;nLc)X==+X6m>-)^&e zOIgQf3l7-8A1zYhw#rx1mYk-VIA46?L08DkMm=A?xEUAl!@<;L+a$ zc=Z3U@~_*eXqfKkC$fVEh$5cSID&ZMq}=&Z_2-)33POmZML@Y=E;z1%(7mCjFoUL` zq!!HodunIk!b<*QbZ)gw(+!=>yl1{8Rx(_%&K-b76i!6RO`vCwI`Hz~a0 z%V21r-is?4fkt&MmTsRu9*vQ5#P07MwULdW?mv{0{a8~3%&)<~G#el7FD<&+rw2qr z@7?ehYoUy0I9C0wojgn#J)Wj4;L~J4ceRiDGY$sW)$^P>U%;bszT}qR;P3-#*sR;` zkMcq3?)xZVFE8%`S8B*z z&4K-GYV!j!xNCVaX=0;w2W1<&Al9-C z7;*jKioL#$GjE4R58CJ$we>jZB=8}I^w*>c-R;P_fCSzJ zV($~d?oKp+e(V_XAnDx8{#e4^5@r48sgaWjXj31j)E^1r<1s65$&&#!QJm?>YgTmk zWiTT7gGU|@eFc>^uiA-vHTuj`SL%8|t-N%4p^+NNb!j|sD(7wCHUD2u*UoT*nXpT zlgb?{m=>9)FV)|58>+_1k7i8uAd_kWwyU{s9UW;qmHeJP07Pv^wa}e?ili$FxR6%B zAf>DDxe$#wN!%;+dM4|lo}eN)Hnc0WsR2Xus+$~it5xuk!G{j9GZo zV*d=tb2d<4v-N}j9qW_F63k;mn4^=5y3T(9C07x>`s;O<@M8TN3543*<(fy$&0WuPvk?LF4E|-4)&PyTd2V8`W(g>P*cnNF_Q)pmcm|elfe2m>qp!%+ zQOS6~RCo~GA9iQ1FQK2%D{*y{vSC%`jr4`rc(kV2RgBvE$DIkDUsr>oCJ$b)-SQYu zS;>KXnXUj~DYANYEq1yB`bFH?=9_EWD4S9AERnI3G3}JTrU)|xT@o9^&OG2w$yi<) zMJ!=Wb79%n5#iUO)5U{m2zFT;)RDzzw(1}^`s(q4 zCy0vTAOWPsI;CVZ@1EqvG1}onGgtrn%gqizEs3L)Qo@+zqsS0_i?aE&`|4;NQ-?1a zj;X#6n@q%oh(`1K<<$-yOcq^)8fu1%o8Kz$tJ?yb=N;9n3JGIrpIu*GLz$U6WPUkY zz^&vI_sj}oHYbzezV%{<&7jA;y~rV}FR(;P#^!uChY-l^eeJCr^b6?anDh~=HWr04 zPYUOlr)x=9XAxxhtzVICzsV-%)RL`Y{#izlD*w*%O=(n22anIc zl2u>*JQiir&^Rxf_bl#@Yq%5OG=;DHc?~D}Fke4igl$9PuGd^Zq+h*?38F$gl^V=W zD#wmbIJd=|yM0&mEXj3ovlA|_WSm7@AYT!i47pc&RK3?{6}%#MWQ3v6P28@qZ_)(5 zZ3P3F(y|YmtHt3Fdhg#zxurO}S4%_T58tOX-f!dPb}-D(uX=R__^PXrP{x<2l1s6S zBOk6etq9d}BSqvMWtMv>dQjnJIafkStF4ch6!HaW=B>?LJ-1I|8E zoG$0x^eD=%rv8{oCn!w>b$7*by-Hl5bn=>(SgGbh&lw@nTIJ@*8nqC`()wtrq=Gvz z(7R>!j%O0$j^RE+&D+`CyYEGkK(k%pO)oRw9zQR4_N*BlrYs+ z^?dR5rB@f2b#)7iXI~#>m}!+^dlsP;I~J^kgm_})T^mP&T^v!+U6oH{>Wj$KNFeOz z_Ltp~if2_juNu%7LsUaRUuT{(jjB)29I*HM`$T!iowDy%@HO;6Ou9NL^^ExhvefP# zeMHuMKkwDb)fXh7UN#tc$C3M%w&d)FmFiT&Rfs^%+Lv%k_|q@k)TVWWXeYDg)ChA+ zRi|VpywP&TpgWjoP~AH^^m_9O^UnCvWKMj$wp5P6a}Vv`c(8ZQw>hR<>I&n}`Xbxt zeBJ7z!s%fF2i0DO%5bmF$fQ@mw%d5|$VkRZ**c%4)3uX%uQtE8y}2>7+4FhqA$IvU zj`S&?Mzy1Ap-0QA-+k~TNxk5xQG57V{yvZ8T(qt2aWjqI**aL;y7!%$e?;3YiVMbl z9Qw%B{|@6A?8GX?Bl)qgJ5Xmss$3WT>Ni}g{nlLeCzFwakQ+zaeH{f-xLti8l)gY! z{-(aUFd?LLoj^PL!t>N!L(=spVhPNJ z@l!qdTV#*xeHVApsi~=+g8h@H*m5d{v)CEQ$O+)=ekzfY3i zvm`kO-4icwMe;R(j!DIaOS}qSSsh0ZP}HD;!%^cw-?rq>U0@p$ZY73(DnW(b|4^?f z)R_33mG6x$w7lY66W;u)tjRESg2q1r3VPl-!Rm1eOszM%KSL)T*D*&EpHJnfbE&;Ttmg;v0BjXspiOO;J_fe3^Ir zId@B_$Dh3LcuCogoiK)cgtpM!k$SK*jV9W%@A)FlBuO3H7UB>1nm9!1S@*pVhe7!V zmZ7JVE9lgjB^VJOh1~YA98|oUU6p3qtUyMz83ygK4bUv9R~}UW_BBL$2ZJ{D__O8 zeT&ek9M-A)qhh0D;*aRsdr{R@LaWEK9&u264k z5_mJzMw*{^mw*3xTv7vj0wEWBTfX>6EJvBqLv++#llZbE*T*639lPnZ->Esza6ICX zi!)~DK%Tru@)Ivnf4T{QTnyn=hZ!x`9b)OfmB$Bk=VP9x@z)$?U93sSqi*%K?RK5z%I-V18O2bg= zR6ASY5(-uthClRKs5VdOc%b?zX)!pr!wK|pc__DUe?O^yfC{`2mHXYbf5IsK+ZC|{WFgaX{i^Azqfqhww%!9@ z>leZ&xCtp|3DMftg4d}u-yPZF7UgqPnBxbj4UR62Nr=af?8D35bKN(X)(d>Kys?Pok~05KUx}5oq@B3<*J>N*MUX! z0_?tQ96SB{#Z6TfV~LyiE@1VaWZLL>G#$#w6(aa*Tu?)Z#Wfr$yhQYxx%m zD6yrUEFo(J)*ifO`}FY1=TQ}HaYxf9-hrbfvyPRhA7E(b!YntI71*`n%Zz+5`|aJ|d2&X7uGLRh556F#|k?{v63969qCVd%k?BQu(Od;GIu zdd^e5rm9M*hI65b<7y~LxFFs=TKs&c?gJZ)*utqLo*7yC7{oPA zJS|0FHHbJD^E6wb@;XDRY&y_&h%2u`AHK4Da<0u$VoO`$0o^)!=;}Cqcycy|Lrrq4 zSI1vVWZ(}Q-Y?HePfy>5s0m1Oxek@QcMb`xz)#w9XcwgyvKNIKX3Mg;-DRotSvhmc z$~F!fnj~wDRL?L!VK!)KdVkuUnz`?jbNdjBMqC>!zI`)%-oBq`9-9eaKjk3jG$>y= zqqWM;AN3u2_BPR-qwA;VM@B5$JZ9}?6%ymh%OngNoiJ%S)g5&7(d38L#p*ewXgB@X z`C2nL)1|%V*s$_2tMPaHGTnRoQHD3qk)OWBHMZUGVLbyWvUn_#x$%un)QjhkO_p5s z=_ZyN_TzX1NAg^E8_bvQh`-+F-}`hVr?-BDmE7UUz2tF;Gy#iL*(WJA3)e1>WL)YS zy)s%*bXoBKV(%@#;%dHa;SeOa1a}LP;O?%$Ew~e$#@*d5AxLnSpbd>%aDqFHySqEw zPVzkGoclZD{RiH0_m}?AW3N$Fd#zck=9*O{Wt?Puh0Z75Fw|8I2m|Jf1iy|!XgYvS zN()t=xpZAhW0(zXfy35Do;A~lyMCc8Y#ItUs(wx1uS9OZ2&*@HqT~3m(Wa^s6I-*8 z&EEoV-Sue5HGw4dMy@j-N^Ff|0@c^Z8n|0EVeFc*CHT5WaJkF;<>_57a$1N;4(zO1 zYHFY47d%27Hlr-pF8&ujV!|_U>raFlo6O)YYcZBZ05s9p{dgtsB@UB4k?7J;xD*-L z@zk`a)Kr4ax;pKlO&e^hVBPe^`q$Qda{fD$Vyip&L1XD~hh-XT&a!sBQQ)u=tlVzBchcCv!N;T1#pURu0=VL);fjL@tZ%h>dde_j3U~^YwNgKePS)nkvpVR4 z(hb|yLJh~6RHQ##4NhOtS2%fS!LgoiN)K>k-#Sw{-&c4A9|4vrUsnvV*W$fFV<*El znLQo=UtyVWwf6xJxbm$J8F#ImO5g6p=$T9yME|16?EdD~XDAuZ&IZD?%oV^bc%B?I zQZda28dAM&^;x@(W-E+Fl-gvpEG&U4ny(PJzk-QGBdw-^1(s-GhBvfa8D}SI3pY!`;@E#X_o}hD|Y9-7@%^0%HCtZ*yAaO8>;(5}~ zaJy#Ic#+x7dzGQ9Ox`?R%K-y!+z*iZG86~n_X=un>tWCJ;)$Je5v@x~&rL{=AV{Jy z*?eB(`$-Xwk74Fn8*WU`c(@Kh$aqla8mAKtC+QE##M{L&r5aK|V^o!&9vQW#&^X{ zz((k*r=?%ByYNu>d_?nb9w&0k*Vg{d5GJ(U@Quca3;ZzVLouNDyHhRmRC0FpJHl$` zJ)ffF73g~F1G9HwcjPkwEK#4GPNyTmA-U4NighcCeMM2N?{S^!PqWK}G&WIsvF--A z;>|HZD-)kmstbseVXcT%3C42l0aHJSOOt9N{ELlUACIZp`$A3PvXgtZ`@d?c|?&4Q`yS1VIM zKbo&4F8M_lPjC?R>G?T@ha4I6XagPFAiPYH_=o%l3s2Im`d-;`vpmod;ZK!E0q;PeXTY!51_jP1mlrLvEbm(Xb@s)Yl^teh~cYw`is8-4M9{hA6Z9%GfEJ92RxPrtkcqr zI!a3-o9~0ZIO_d5$^kEniHMSK@aRgAjRvYQW&#|-&! zDXCNIa?p63Nk_b0_h|B4hV&AC+!SCO+{gv1Q!{F)QG!8(g}58@-;=(r(_sa+$xUZ1 z(3&KHuqTCR0S%G|4L7vC)I|tJq4gx0USMpt!DEIpcImFPg1sAX3f6g5!Vmhvs;6^e z_HG-F1VG)Jy36PL2HX=ej>s)6<3<%VBF(7$QKGen9karNZZ4y`iyuy;J|drBnKwD2_Lwx#ecnL}$)k%2wxX*N7- zbZ-4Z(j9A=lrZQc5^I%!;$k18Wp?>|Q0!16xW=3FkQ#1{rCHMdJ`@F8}wWKQ+7b;19YA^tevgp2Eqe&w{NqI_W%nsyE`hrSxVueh25riqWOZ z&+J&ncKCo2GU?@ds@;Gpi_|TsFugu>)~aM4Ldmm;seo!?Xl-rHd1%6ie9T2a+RBNF znjp&TcY)EJX)EkIX9U8klrpLo3N+(0(9=IZlcHof1$cQc`VkZ|%?FR=I!P-NDCJp8 znOn0(JK|r4ba12d;Mc&Rb-fv#GhU3IPWk>pO1BYeYyWtVIMOxXMA{44%ZESRtUPQd zv#E4YFVnIRlVHr7ldyJgtv|w1@)mSf^QEe4+grGI5uA!R0ACyv5)V{Azbk>3>n{xVC^$RD;MxmT$3+;q^SFSWLRGMm zQh?*unm*CV@aqW$V7fAWQJ8`rqN&I0*pu&Z;Kl^zt5)(VKQA&#-%E#j;2J+4{PQmr zO*7$~TtwatK(v=-UAjm_l2b_k%4Qtc(yr6wG3?g9<;`+B4$_PK9WDQ?@iXhoIkFA} zH{=dY*b5)`Ipn-=Ot_o8;k=SR;_)o&N284Qc06^1-BBp}yb-{}UeP_<%+{NxUq~NCr!J}bKLMm>vlwm-?8g>_8-?2ymgSnza@Bf`)Sy6#7#(gN8RK}`eyP)7v^Pm33@xq8McIHoigiHC7u9P6MyS>>d+(B+MX;&qA=*>+Y@HXOcQ3 zc6P}%hd~v6;yl$f&;dct`$(xJ zNw33j*D!0a8CXKY5D<$f10duTPvaW~EHlopewcqmBGpPJ#*E79^IAWO zFZ5b0C*F0P=1!xAAsZN*({^FFBa;1LXbN!X83BAC4-E&rd~%;RHc+2!&Dz*6obBV7 zdB}F#neCO_AANRLPM4K(V5GD?AaTWPJ(?^sz`Eg;a;S{*_fdj-i?mgYd0-vvYRPxA zPl7>S5yIu=FueH75n;j+4yc=`Sz&!Rf8}~;ws=0?wf#)!<@2JI&b9JR9E(#sohvF! z`Jtzl7kHqJJy_nBuvK9#dx`?sGj0PcU*MR3>WcWi5hq_Eu7QXhE~CU-vkqyZpxj(4K0G9?Cx+(60N5Z=|j^q`tCx& zroAET45L}x*^c@DUQcI82+va&holb1mC7%Nw8|!YX{^MP+P^FwOC6gkl~R$Z(E~B> zA1E2Lp!NKc{ZdWwicSm~9UTM@1tE6B=K}g&7QQqvLU|>03!+B(q+>oPeHeGHL!X}@ z?w`j9I;Aqcdj-t=ez{`2D5_M1UyuI_XFR0@RKCO31j(5uVpU-sAnPRyli0opw&aPc~1_hZpJMzo@+m6vA zZz5b7P&yFDGnJgu0)yen;pjF@rFlMZ`6=sGa&=f_ju&ELFXMN||d9n^PWOOmpXAq z`rpG9NVUK3l6qsoeq%VKJDF%|hb&$6 zv`y(An-Xw0n7dZ*3Hz8Fd_5+ZV37sZSg3uf!v`s8n0*(UDC>UJEg9*8!@y#o0mUct zMYot)D7EGRERSL0MrGVxM;S~O<)fu{;~QI=rcXMnc@ngovEu)#L`Z{7Jbh5yfe~$K zM&OXzbD>Ctd|f}8_WlZe-4vVqgB@#Fo(h?X@6H}{qts&57P4{U2jF6@|D|p3arwiE z*$yQ3^E?|DiSI=026G>Y~ai(G$c_U<^!us;KT~3KNX@ln{HZm|LEr&>2Gy zrbbvx>XO`|ten}!OCr4$zckOeQ7-x-%t4o{4)XCg7 z7mfOl;?CB{(pvO0qvd$hV8(8V zGUn!-+K$fg21|vnfTdfWSaEN~pfi%P^y`1n`7V}u9d?`COqLe0zgJeKjcD6P8 zpq!7OJAQ(mwgQtno54>ziAtRM;z4!T!*G<^3p!p7Ev-k%bc0JR3_sv%cQJ$Rh<}9E zaXPy$KR47POPlzF86T$-+b_&U5*N*nIe%*yJns_CzFHAtTcFP-i#Dk-*~Vg>MzXP*--CHNkr4_=u){`TbFdtdtF zqJ^HPDSt@W@5iyLP$CI5eQQuN>Up4E{M~3b!NZqu&1#&EuzlcOGzK=V#EZ^ymv(B- zOt>I+7BS;~&nVHEmT(ge!;PZ2Gu{98NQs!WOzvQuYllzllPPpv)D#D)m7C~!Ci=$+D*f1ptteMzaD%d zNE!}$ZR1X!-ZhE+$;_gFw)YR~zP!*zX=srTmNbq%c$1JSCEvXB*!!q)rOe=ThMe$} zErfapHlXvCg3Wtt(SZ5Sz6O@{KIj-r(EriiKL2mF@~OWYtHu)v zqQg}S$NNToL%N(juWz79ND7WhZvVB#K)vDYkAf7Q5tNG^2@{`thtC`-O66?d&9(G& z!l2$isj-k1JPfV-HhEpCxW}F}Wfc;O&4i3VC}&AMN-PONWdb3b0~}t%&gi>cAqJd| zUmmn&v#DLmmZ4VvpAC%qTL+C)=ljXzjG>>A^}47*rGJ31jPYfXMqvJ|NlJ1SXSMST z=34<%M`XMyo&YCY&1<%*QsG!$VC-eZ$32H1vvrValkX3__=#5Mi-)~|F;hG?g+)bZ z)+#mwRF9pQ8`Zt>b&dzh_~u=Cad)(!ayPtX_z@9JNt6+TLor2GvfMYZQ17F9?i;Zo z87}16KY-W*uyFp$DUZ)NmVSM0dfYeBYAVgBmaS4!)AXpAr99SITq)*rCWuADBq6h@ zTXyLZ1W}%v-Bkq2N>fv~s*&9|C)^Esx7uInC72;g?-fBRVN0?}HuO|6*;5-gSfk>3zQtK_DAeNDlEJY1wi z9wj0<1|zQM=3m<79G!*^^MZ%ZnPDaQ+j(y?t^m?Cg;=8Rt&mi!xM&eedzui8mon;g zlXs2Q!3AEwAP(opz#1rY)OOq_2>iw8=!^<2&QmIx)6Z2A(}Ur46{_8Dcr7m z`c1eusua0lLI2zS?@A`dQg;XvuKne%@@F%%^~1TEZKZ%7h$3L%Uqt}#U+zR)oGWK? zZ>UCk%dzpU{pIPz&rJfE9zw26(*H}Y{9Qpo$l3^|w%g7}&85n=`vIa4kEdN|dKl1A zkn$;e)W7A^zdUYuxa~URSZkWL=X-0XY+>&(k=l2T#-){V4rg-%KH3j4UjS7TD z`2VY~j6;vl%|*nNBcbLH5+Vxf~=8bNT*>S`zrZD27Ctkbwc2&CN|i$kh+hGBTo~qOaFCHvZIy z;uablC?U6004*n}^9u^Tcd0b$+CplwMe&*s(H|iZ?o9I+5yqi&#w~`{EcEqBP>Fei zpB`?+s1yDKw@bp8F9AbCa+}-Rsaf0;i~^O2z`)msOU<)HUuBF+E=^}4 z*K~}JjS2q-5ufx+&=;qjk(|1^nMdBxpf_j~0s_QaTU*<12{I?3`fHv9$hhsg{=+=I z5%moF#%|5d!!!5jTe7`v<_)>XZ36kRd?*DE;eB0(%l4R;uH&A{)OnG_v?RJ{o>5|)uiw{-rKj!ua zue#8LQv5uQA*VXA3Ym&~4pm$Zx=g4_=NnX*{DIUP#J@o5Nj8!x5CsCUzkBy?_4aJz z_VHqL*dXxZ-)2EtSCT&(Iw3dF+biiLoSKpn{`lzq2Tq+8|Lt5SD_P?5dny6_WXSCD z=e=rmd3pJ5w|E&yZ*FGUeuHhU7i1RvJ^BLZzjMFeeFkc_GW<0q^slMF-!s`CBc=6! zXQ^YFzu8@x&!1*ZFZ^}a z8_a*Z{ySUw`=Y1LpW)s0H5UHh48k{@D#@8mmr5u^*x~Rjc9F!J=Y?c>8x%gwHkjJu zW)=Yo@uhqqZu8b}AlJti;~%@@X4Q8DIgFMDyMPxc!#eMh*N$3j$QiyChmM%84^} z(GOnS`^cX*Kfd_m+<2&3v;AF=F7<6r151Ld&nO5$rpd(MT)%W0loICq(RVq=-wdNqu*Rw8jCYL9L8{`vlb+W-9_cfTbnVNvI? zyCAscAOHM1rScBcU-s2|Ji9>^0qm3;){QjPoLB02l)L|VA(upDf7CV-am z7OdJ@Cp5x{Qdd_!V^}mB7T1j3=9`qdt^`_%S7QVOWAB6_5w-YHdtk^|C|;3^K*7T| z*o=R*?>_ABj8$Pk#HOZonc!sT6G_5*0|b*N#e7LR(LV9aq1ymbY|(y=;-Ia-Jz`lt zVuA_3FrD}xS^Yrdt1{$P+m#$Tj4BFP*@P%yWdn(eCnd<(X9Hz{vPml6UQG`{H3m6R zD?&Op=1`Ej8772YLVR7Yo9IVSnJAJ+0()V(%}K@LdZrKVO)Z_!;J`Iw&-0LvH1~gf z)x_5$t~nUV-%N|8=iJldA z7PK?)IqLK=+5yuGXyicYpst-ZVbzEFTMLtMeTXblY z^4_uh7k3&K7!3ExjUH}5#=n4|PWs3X8Ex_=a@(Nh1r^Z=<>mJYr& zfDk!E83#;(;ZCU$ca;j_#RjbExFuhdDZ^T*q4#qw-aU92t(RV>7?TFCc8k87{{CmF zFm+!?TJ4&_L&PynmBY+}CvvT7$P_y)OQZvGw)ud$=}C9+1S8ERRbUTdw4`{OXVxjm zjAI8wD%wy6Gq7#dkA(RJ<8xd%Ij8+&DT==LJRB!yvcSy%A>JVYYWc&=mOT<<{dWDD(Re1#4JGhzR4GqiQQ6q$;%RdI8;=g>Z48iZ*05qjUA zyFB>biGeR~I!iGVR+Dw3DQZza0Nb8Jk1&=f%ZIn^r@j$JKdr^4SUhlMRuLuWW%{0d zdYm4|6{A4J_?9CYp!-kQR!l#wX9@rhGLO=Nr$b`gTnwyfSK=maBc#8-e8360?=-rq z-B?8i+yfgtgzsarabz4A?J(<_hPpbrij3zvm%^Fs#41QE?$6J4#|cY|T-+jDVvP0j zH0yD)32hdfcHro^*#)>3oVUFzz!o?i2EUY6MGU zf+e`mHRJ;a``yl_NS_UX%P)uu?pNgnr_qAZKD?MC;k|XKX>LnRdA271E4cTYp)Ae$ z7Bfy(1}M@l$3P-o85%9GE6kL-}I%vt%6o_(so8YeaSU*A7w`2AYAAODz3y07=PjxVbdo zPU|v;!?1y0==zEc1gWiMdTYd6x^%4h_^JMH&SFqhiCspBRHvSn$qEm?Vc6;oHGBHi8sVM&)n=X77IjCtR)R zD=4q#UVkH<3m7UN{DQ|zD689RSQo?~NKAD!8~F4NtZ*LEwWt|v`%CP859gb;oKn5^ zoZuD91b8xgINQJa9BaVzj+Rd)_D9V=Uo)<3M{yxeXlhsSV$Iv?0@bRiVG@(x=x%G$ zx!e^)9dCX)f@D%8Xd^C1T1h#_zFnvFR1s3m?J6XAuEFN0Foa!_vF^!8FFzvOx7Q{9RNENwc=-(w_1`uJ>}3UiAv$~ zWtuj4Y}hpG>~++C(;l0yr6VZ(iC%0;%FT*+4UEOu``sNa)0EPs}BauxOi z9+DX~fHIeg@UDP-g7~D7*)EM>ZM#lj9n<*v9o6H5%F$8f0s<(!tJ=5apL9g%<)4&8 zbp=J5p|jrPA&Jte0*M;=887cmTyI|x%}-NXtfUjZYjm;hLH+PCHVR{e@3 zQbv*_k+I+M9u=U&yhJ@0^F(PS07i({a1usW!DR2c`>Q5dZx33q>?^(uyJ!>h8PaO(XeLmmo%p}(f5&Ir18fc9R*HnFKR*!tt>bdnS-l|&acLs*?{JL)U0ew zg9AL#E!EoJ((S~2R59mM6<3|^1UGxiL~r5kV7Qq?PY1+sL)WAZ%LeFT(iNc1en?dbBXubDQaG0 zDWnl7Y){Pl&_^d2TsC#fxEnIpY%TE2=XA2XiJL{L&fxXGuPjk-n34($RLPFw3=+xg(69IG2u2 z**{7ZL>)e|d_~=hCr?T+XeYW7`LIUI9?2k$l8$sj17~#Y&jYWW5CmqU-Yk)~*qdgO zkTx>oo5z-5-V9#5)RuzrwTj!xB#w2HgfTMnhWfgh6o=P-?!GIEMKdZkQRLV8x{n-h zr}1?i22Iudn8%cL%=XQu>ta>qg3HV6iPFAt&A|0;+IKv$!k2P(^dEV{!xP|$cvs-c zzZg)DbwNbX6Rq40?C8&mbDiedOr7hp@!(Tv1rYShH+>VU^5?l%?1N*THauTxAKI5WBWo^k9^)ykrRoSA9O%43s zeE?aX%ydBkay79;L?)3W)r-?>SKmbVUe#EQIINDAV480cotPxn z$d-?ptqI<;@6%Yyd^T6fxY3UQg(82^9Ja7Lt6Btrim+W-*heq){c0ERCNc6(-_oj4 z^XpPOIx+y}lqkwK8n;~LUZe=dt~FL;xaUV(_+HQB-rhsDVhq41Bo%3^BW}jg*E5}9 zM}n)c*e zuzlqm(%glTLHbQ^GEJr=|-P-qY`8 z`KaGBW|rSG4}=9h;6waa;F9lB0FYkzTIW%k{q66%{`YqU%yNjTV#PJZT!S%=;AX4d zAtUevuf`h^A>s$-Gix+RocKTW@^<4|jul(iH)VvyLG39z?alBpoVuVNF ziKo9XLeZ=p<*G`s6LYN`lo3vV0~52itOp_u_(C`TAtZl7PQ|)!9MG#bq5DqW zokX?}x$ki7-Nlgdd!j^Z-fXtWYl9bQ#l7)g#Bk1ad)+JqIc(0IWCHu&ap%{ZBE-=9!DSPdBD+>=jwk9weri}_u`Mg$$et>3g?1r$Ae$# z!3P&uNS0{UoB;J7LO)rHW@9oq9%rQi3Lr{#$W<7YXVr@5mfb|Yz3l!vFVyBt>pFDS1GgOsb zC7;dn%f3V3tipidaE)u_=oc0dgEZThT2L%QzbaS=*HpvRhVR zHHDHV>O3i)TG?x4(OmAJzV!`@hK?!)ONc}6zrz=;o~Grc$&j)>(6&hI%Abqtt*(_u zj`iQrL1LNYL5O&utMGbb$s}gp#gj5MXTjTss^h(5JP<|6;`2>Nlyk?VhP$20*uzIL z$Fy0y%pi7qULam#MD%pUppXBJ`EA8gT$KtYYUGn;54gJNczE%^$s_9Ee88PiwJx_p zKQ_vkC`-T>U8=gf;b>lCbmviDw;iVsqN=iuU&hr%xclXeWu~h$Tg@<2AyNwXH6S&8 zW~`>3L?$FeXleOSVY_iWPXVCOp%qauDsPZX8z;Nhr@3$2h^@%O880FjFT(9^f;C>^ z-t6_FTy#J_^t*wRY~e-BYG4dl2z3rVV(6Hm*wfF&xcN#F*rsr{Bk54Si=>>16T_XX zeEPhwaQdAz0G5^N>ks*2bd%owCSuPN5RIYAk?44#bZ~5H1Ok(M*h?n>?5-W7D@KQP z)WgM+9MPcH+AGi?QErIaqbRf5=muDBuH z_||-yceiH+e{^8%dp$ZnVbB^k6C9JgVoxW)bbZ+a0q*SPNT8gqjzK`CVW-a;b14H7 zyjHwSoUMeRkA`I^sbM$w&0V(V1i^r>X# z1EA^@7$7HHk5AI8{6j=ubwB{oQ5(fa6<@(7qO;%Ih(f3^;AOCo!!+8Ag1fcE^5}? zIXQ!q5d0-DsFbNts)&+S3|1=yXLwucTBaubM~>=FHZu>2g91{OuPZz!O`nm@47GUJ zL)WYkQK9UC>;gU)RKlalYU3UjCzkGWXX`@pk$Mmd%E)fTLKq|~R$!6}9SBA&=cac0 z>DXxSKkJzFA*DeKHa%^X_L;;mFPowl%~S<_MKWwK5GKRZ4!yb)fN}hOp10RHg9Wwf z3ONkm4w1e>c>5#e@g(S61|$g`xQ>e>A(Njbem_ZHPE2km*(%qze1p#FHf+2%(~yfA z@}wF05o?ckYkf1(gM;z#T{HhwOCgl}T=)c~PQi_KQjwHNkljsN`$Q58s=_I;eLMFuI~aO(s7xn1{y53&DYZxJngu%l|4YhZ@G#{W8PMn zpIM&aQ|$qIgLRtCaOHJ9)1+y6$;Oj~_O}mS#)}Os8ubotfG>3$?}JTT$MhXyW^&ao zTSYHh&mh6+IbM{Qt0>#un<|4XF-eN+I8Jgl+pe<9p~#CFR*+~x*u5Q% z6&D6?y(^HdG}Fw#`B1nie!PBzeFu>mH8nK_9UW3_ZSD5=Y)H)1NNvhoZ6zD5PZY>* z8**@Q&9=luMx0bN!Y|(_79+fK=pa8wNRnkj>SJzzBJAg4@$KMmz?m2-srm% zadL8Mv~_D{!4gr5jLRKbx=no2jz(Sx zA(pV@_Os=?X3Pl9=E@9vvU?${d|ZF&VtN^6Iz2FWhI_f{H@Q91={hYI<6edr^tb?i6obK z-MZ%mBFSiUhV+vVPvkIFO6A6+p`7bons!Hi=1YroePJ%UxC~lKAW7kNz@4lZ<#cD|r-S@G89q5?D?C;!sB8;Wb87~z>!E!r%BkY* z&ZBMRio*Cd=lHgD9KT?~e#~@*E8f}Th5G>p;o~05p66Qt#?4zo2PTiFt}l3;en|ZF zrNE;Uk{uB7(g{^SE`wrtT?;?@MF!1JKEn@(k}uGsFMC?!ZtY>ilrJ$t{8#Myw_p@I z_mi-`LN;zC4~+6c1yBUgvyovdmqAAVrBfLnGtU}Xvc7D z@`A;0P2Wby4TH+~JJM{WQ{rV5V)Dwk7quIbN{b%))fu{YaG41B3ldnXvU4wK@To=W z@?uf{s-|?;9Dh+l=mhu427T5ltwDWw1EeEN5L&fpEPk@+Kds+Y<+xdMdWGQcB#P1* zho|h__P}K9oX!+*CJkeSnGPK5!yS#$jmUxQ77|oM^+-b{kcXN-;9Tv$Hcb&?c_J6YvZfnP()eD( zEAIQ8@?ikb@8fvDNKqDcc$>ptAw+kL*r10Bk?r#1*fE+e(PKL_u( zGivYW$KBgl(R-Vc5H6q=R`VmO;j@j@0g|oUsNiX9YK9*z)Th-0T@KXK1$_t% ze6Id##XK$U^@Xj}I`SC;3q9YcV6nTmm$OfgMGJ#9Ie#S9tbbvT?6b1%H7aO9a?kE_>ObQa4qIA1=!gmC#9Ux7BXPvo9LK6Y0AX+r6B_Ui$T+ z1_@sD-ezmMmyL=x9AZ^}xX9t?_vGfx;O2xy#*I>Hw8Q`GyHVvh@7|zz?%%5VN_P=@ zb%So6;+{$PGAr&tx{Pc4gnGglwXD2#zkNgb(~acy zA~8DT(#rIszEy$dS1rd4*liJg@w3HYqR|XXS0+avEX_<>l>#H5BBWC`VPCj1Fd8i| zIn|0Cl%h-T56r9x(l*D``<2{i;U3;nRhw8{BmQ70O8uz~yfCqcL{uP3#_MssA zf*dyg4nuRN8Q!(>!RQ=vrp1bZ5o-26?0fdQrixF=3y!0s1+@n%>4OsMx^R(BJi`vO zp}Y!W?H>c|Q)}Rnk{Lz%C(vOS-ah#Z{)>T}<7TxMPX97PI=V;b+#ak%)VDt^tzPl( zgm2*7e0}A>gn)kYcGNOqmHj<@mYkxbrZLO)>~8al>}v^~Omx6qg2kYw2KX-2oidFP8#iD<~SqtFRLdO)LMi>J;L zQ5NJNgmvvtQP#EPI>Nljg0_PgNjf37L#@&}TcOTbem{jQSOgIV!**<8Q8UI}kb+&z z9kam#NU%oG=meW#0fLtHF_k|v&#Bp6c5`M)rNYek5Z%gq*Ad85$nMGbA77!Sw};Do zde08gZj$f$2saTCLh3Kk2JL|eC$XLIxCY#J!JS@4w4!3=2skal?^Adj=p|eDVMzHo z2~^FgD5`aYQv-u!1=e1s2vZ&xAMp4lVDol@4SNHX=ykmTUKoQK6y)XTd**^t9)s=K zFB(W~&+EwFq}<5u5*rj@-HpB^4HS-*8N3TqG|w!MXlbX}#ph@SF8 zaBKRfj62iCu=kX$;{P5tr$`|~)Xa?f`fx4?uu%8?MaNUELcg+aC(Cd7s5O6rcj8cG zPcKg;J~bl)fGVY`qC%GN%YMBZ!3q2xw%Gg4Z!w7gy$=)FbXLg6#L(WapTg1Nf}h5e z8oU5q+lN+apn8$%3Q?WkCmL~?q$Tr-hRsv5@{^Rx5PT_QT`Th_%reEp4#%!LS(`NA z54_1FjO<%B2=7?dsq!|!h&<@#98^(GCJp^2t=NF(+$}Y#_%pikqo#VXWT*^mqdo-D zFiN1ZIv2KCkRP6`-S=Wj++7a|8p^+tw;r-9sO_xDeI!ySyr;0b$3pfogXx`vH5P%8 z)BDJ@GioBU%c{(-HU1!C4=WVy`2#X0Ibq2$i$63NF-}V490C7r6Q0g&uZgh=OoYT^Q!4li~` zDqfmKwwOq} zyzKZ^fe{DH{QG2IQ4>X!oe(3t&XjC2Vq=_yy851U&u*gv>`{OHoVggL#WpEjy9c@^ zvg<1#h1nY`5~;^sc9j*Gle5}$)y-HcjTr?_@Uz_!w6>uCh$h35Kn}>-FgV+fQta9; z7pVdoSY+~i2+8X^U=%H9i@YEkruUMDvNXb)2@(HkYlv6qb&NGTZmAa4o_wD>?0Bd1 z)vRMV%*pbo32UcXG<}fQfe~{DB>?cEaVDhrf?pY(9ugPG%4|1?kdK|Q*TbU`vC*<{ zQ2zG4Acm%x1 zb@7H_+1~Sme>1zsGduT>x=y2`OF?&ONJ=VNND_Ncv=cZvpL>c@4psw;GE*bk<8;D$ z9tPsAtt4Vf;L52>7_7y0beV4o#!uZ00whXIrD>J3v$a75g`$_T)w{`aVBB`Bs>tqj20Oy?EyW6%i?#R?HY(4NVU#!|ycCRJaNC{c;cn z=dR`LumODB(N0y9cnBsg8sFDWtC1dm?FA~03oE&}uq9V*f3TAquQIDgJl-dHYSMEdfTxfzNZA@(+Nu@ak z$#z@`!ZiFKOSaN@tgD02?rt%b4|x}G%0*L<^%YxYW?XoPSJgv09MumMU5E}B?c)jb zL;;w28(Qw!?^&qjrSv6W_ylm;+?Un8p~xRWlLgvFSYuhk;JA*}MS!IB)2 z>Hca9wZ}+=C1n1X<@q+x_ssfn%g;A%CGzNbdHW;35wKOL^&Tg5II_2lotQK0j>M&W zWxe^N?dPlk`}&1!k&=@IgUXYn(YTNe^Dzox%Vi(US^Zj8$9rB}**G7xvpn3w$^w(G zZKn@7D+cYyfy-rseKq4TMMq%@h_8svCHpoU#JNB#K z!MuQAFKJGd$Pp3KegBz!iLjn#iVZ>HP>HDIE|!~{6cE@FJK}eG+$Iq=KXrobyc7NsS~rcaAp%CgFtALMrVsou&)bZ zy7EqLi6?R0gIvdD-%H@HrwkUp^CmY7*H*=|nWtG7#+L&RWc=L#E^oHgrd9&2A`WK! zTITntooWQ3PhV=*7X4VC&u^XO&gNoWrsexNQnD@TcN1*s<4jt?VM6>iEf^T_k;I57 zv5}_vH_uuXCQ3&RGmF@rW&XgCoP;j)dux!i0Z5Ngr^rsMw}&PntVH(g7`JCsjJ)r<>eT9QxvLl{(_t9c#12SEAW!nzyCb zB?b;%o_R+AAcgpHb%D5l`gfl`qh$?a+*pdBo+aux!Vltxiq7oF)W8z7VOIUFG1Vj} z3j(F~5Hj!c;kP=d{#;%d8oo+Fbpw#2CZ#?6F8_s&x`22DfZw(wTUSKj~d!xsZJ9WLaA z@>~v=UaAf_h+(hw>DADdso_~WX$m%KAm}r5b&$!*>uSb|8p5d3mn)*8UvP#}GH7{@ ziBt;vIcL_`#7}7xrOElb3cO0*A!J4)!x}gQ@Mj%+be+~~fitgA+?Uz|O6|A|hn8hi zGHC{H>nNz`fqfHI!fgg))O5Ny=V-B)WaO0gz_0}C{)O}7}4D<4VtD#ce9 z(9OA;5JZ1UqcJ-&6X@A@SF{|}Hsl~vOF>&YD;XGcFjPJ{b`73Z3FiX z%=BgbWiu1|Id~6nLC=rz=+c!8Wf4VScE~)T@jfbWA9niL>Anq+aw$nw^f6H%p`YiP@j%MJ@>k?jpurtVS|C~sSGSYv>pW?^ zxLkIj)oJTtp0^T9E{DUU7AEX+yJzBJi$n#s@`9E|Z`iA~{QS7Cn8sG|t2*&fGxeeo z6QM8{X>dHfXD%V^jn~_i+Myb4Ak&UwJ~o(6H* zyK2O+9hm$;_w`jX2kJblAv&hafHrir+UWaRSi_wbEclc8H+7H$PRM*i;+;P7y3K#6 zTK01U;((fX_h=l(&MqJLDuf4q8nMoklL`O~=lKbkmT1vvV>pbu#3E^_Av}lo@y*F8 zw#~_bp|)LpZ>uk zM*wSJhfMNXwl)ukJ7^|JGmq|UgZKr+)c!bP2BKEOHSjrVP;8`d9)%i%U ziqHIdTvjVM8M+?zTP-pC)uX@Y+LCTd^k+u$+KRy=Dg%4@dWd@-5AMvFGw3RB=^Z-1b3 zCoqd*YZn<*zQ^oNPAGVNDs#NxYvUE-7?V?=_4RPKn#7h*SE%sXw!$um;ljiVoj#K% z>`EMz`^lKxk$tqMRW!S&ZxZTOxVW3vnNn@rEvP(mDlO^A($?u88E1(0)F&nCiKpLw zhcm0>UU}-8gwNwQNAu|d0+PN(N~I(9GKHFjO7=9P1c|GfY4Pz8!+8mYye_f9iVsh=wCIoVa=~}NI zxVw=)^cb1t(A*92n*42EEm_!x)Ut^MW&3%$$Ztf@3&=aQx>OqMh}veqNO(WJI_1I8 za8LGVF<^&Xa5uIUq-nfHUDhRAoH1mDQ>(mu%}T5jT&F5`?)LDCq2u}!QLP6- z%mQ!lAaQ*US(gV|*L^>ayVnGPOiV`zl*J8hMyZ@o-v(oa6X@$oKFj)-w%5Z-(s9&_ z8ss>i7Of|!6cX|LWbE)OKutj}53ASu3`<6Ae(jsL&`RZaLxwa_efKs*8q5ns)lVCI zPiLs|&ELNmy8xlY@kFv4SHvEUaB|CC$9qc?rL-3Tx4Tld~jk|#SMS|($ z;h_EOB-jI?kt|m%icAcBOxmyw=u()C zPM8-{Fjzsn7-*AK^_Gwm9xeB%_Q@RjHq`fcK8@I<9mY%KargFDrxn+l?X8kf6eKeUAfq26`r_3hjrg)H4aD-=s*3 zb?67HblXsIaV?OAVhFhWzkPd8z~hPt0|T?`7A@sVIm%l3{zWZ$Rg$K1Dc#^&>YwvR z%$tI#WVC)F$4C0k08L{n&s zT=nFQI|@5%HvqvfuQik1jWD7_p}mSeN_-K{<#AQ2#Y1X^eh|X(Wzfvgv6m&*> z{?%#51zXl*J$K^l=uGJBsHs{el8$^omEu52#n2*uk>j@xUylTyBdO6TdstirK1(D1 zsHpzz6ceM>IK`h2Pho?`in$b9NA*_Ej@#&zG6EG?kGjN0K``$&y4awz7wp0j;nMNF zmAKoff)dMiL~JCncFEMFBkQRGdMc}Gjo3->5atZhAvx;;pa=`tcQ-FweP<&isXDL% zN!0()c=OSeRL2!wGx2@`ufQ!fywfuUs`Q%E2y)1vKp%7y{ov_O_J>kCXK;Xq>AH5T zb<%ihS&_2-71xfNjFS`hNRDkYM=i*6Yv*>Q%TI-JvDmNkf-0K4vUg5Cqo$YaRnG++ zY6hjar5??;N6(MtR*bI*=!}!J=tpi4>ScV-llk&+Ok>hOMzcV=l!5~ZTG*K0IrbnL zb+mE7pRpO8z7O@V08_B`f`2Dvh0KkA$svfvi)?u7+pjVnbjMhyvb+c6^xV*&6CTs6 zdgS}fVf(FM6!`Y7cl50Dag4zE(3v|SIXT@d=5(QckT+cgUW$B*%;m2ZUYIXg__#MV zgC1+wpo&)VUm7^D#&w*ZiYKvlRBS|DL%#;c>6!ignSKsL3yJ-_*G1e@4S2*M^0>aR zWyvSkzS;6?4vjO3<7(?5C+Myh8EIx!ha( zPq!nFZ{vh**7wl;aJB6qgX^;zrgPLi)h|YLd@;W8{;|e$t!GqdrK?YsMk$Bi6q=b3 zg~-~OZVMMu_R=GPgEX;4C1Ry{Z)Pc{WATXmYQ6^4njaDb+QdaiK^+jn6cE}l;<`-G z(kish!Y%1$_g;FCZL|SUc8Qq{&JJjF+IJi@_96E(D7W&h2A2>Fc@hLe&U8w{(+bk( zP&dmqB{hqJ%M0O+@_T2z-eE-iBB`)-H(^0E^W z)o-FHdrRp|!#l|8r<>RnS^DKELOOclWpnoMgqd)jZ}}^)55VvebY@>oD|^_-N#7Ek z6L{~!^f@KJwvv|RTrjZV%UwF2M!iEyg=s4`>!CEjX8)P4K+;%#+`ioTh#l)1%Foza z!WVKCGPm&sB8_FZ=pNZ8tcl?Z-l?Tkc+Z2yqwZ;BdS@CLStV#44ZjDp*#!mb0a&YM z#*2f5IcqtPt;FsPlQ^R#90;^W2Mym38agbCpiGR@lO$@9!DO!agvp5#B~UxX;dA5Y zK|#5@+QJS{X7uzd&JlecJ3T71wfa}BpsdtQ9rs$Ex*~z7lr|_uQBhH&*`D+@G&C9( zR`B(;^HmrA($bRMQEh9|-;TlJPPAC9PLORq!;|=e;kj|O;kp%=(cpX#$J{C+24=~Y z9}9MKs|R}G4EWXkq_(F9e+Ol4bczQJiE2_+$PTc!wc|$E%6sY7%p=}Ad`TFbS;>gI z!+7wQeCogE1gPbHCi4jcoDc@HJje#^ePexteMlOQKedu4FB$D{7qt_oSs^cIW+mwtkWQ-3smm}t3MONM5mWQC^Q zOLtIeXo0|leDX%0^F{+|*QdGO%C?3;9oTdQG@#xefzgi6DSAyIOG7OO*sU!$jZI0= zSM7(e=7U&;TS|xrgRJ)3`|z;nOMha_*|TD{jifrI(qpq^E(7oJprv`5gG9q&#AUkTS*oA@aE^3UH7;# zz1Tg`_x5eA0(Exnj>bjj;#}U=cROMAv7B}kMGFtcKSF5H8a5f3Rq0BwmS(PTyjRQp zt{wGV_S19tYB9@nmE&4Xv3UKB8Gm@;?|O{)v7ZTrzH=R{U~6MCNq(O$Z=O3RJ-9Lp zmzn(Cof>_M9J8OA=`B8fkm7y#CS;=yA$1S2Ud$_-)l8AHv#m)WxVUs)?`p#LHt1f1KL%XkXj?a6m z^`}`J9U$o+BkYawC+hRxd-+!rQPH5^y+pJ2D144Ivv{fOn@BOTX9&q5J-H+PUseK$ zw3<=g0fO;lJk~!#GK1rIx+moD-Xsb>FQ^Qam+faK1*Y44=53@1A{zmtH+Ni_HFI(H zJq9Z<6|iI*-|NrOameNxIPaIeSl{U15DRnw6w}QV?3D z@d?Wcobmg4-spi9ze?~9uKJ72LSb(bx)!UXz9;@zPr;bj^o7f>O&)AzJ%X@<{3kR= zVGXZ()Iljh&mv3@DK4$FYMAEwH4g-qWq(HMT#UbPyi#9-6Zvgyf)A`=Wjww@6kG@) zwa@OIz8JjfU$*?DBJd`6O`Xz>Mbpi~*-V#RIqe`36gy>`2zAhcmvvz)V@o^om$G1YWNRn` zbK)EX)HJ;W`!P+|+MfuCB;v+a9?No40Y#7dRQ`hvd>sJ#=*u}O5V*dr^<@>6NRtf4 z1h%1RCYRcmZ@U&*BIAl_AOre5XoB+sy&2*Btm>7WbO2lxh_#v`{$2pqI?9&&Bei_f*09bRc}`OM!To zCGGc)kI;jS^x_Hm2u1BXZ(r6$D(LImlb1yWJ$Jt~6DNc{_5d3>pKj^AnE|93o6&1e z0D}c}6h4x~=h{zEPJGU6AvrP^!iGQW-^jQQY7++5Gx2SQlHj}-2?U!0^(BFBNm+enGBpsGQ@ev z?5|(F8Bc{-3k1KVpGobzi%`PxEkxmVHfqO+xcC<6pGk|l-i~p*`P|ORjUSS*`CL&d z>U8tp)op2JpQK|BPwp2fTX_V2`l&3pbae+(Njbp;DKO6T`C^ZMz; zO|%{H4O$QM!m<2U7QjWGEH2N&zg_Axl&`18q-D){fY6nX%QdvUgna_qfs`j4Mrz(@ z@OUn}41tB3EGzSEml`9lG5W`Q#U3eZ_v<(8V}8Lj`HcQ@IK)V!Cls`>BvJd-3AguB z*Ha=i&1fKm#~UwC0z5~=aG6y|DEu5p96VD3b56iaEUf=-z@MD?n13x&sTK@-mAoG& zfpmwl${y2mv4g@i!v)``j%DoO2{R-&FQk|WCn`xWqy$~FJd53zogMKL*+C;yZ#7~N zy!w%((n35-DX#~y^j#;}{;oJfM8^X9^03Owx_H*u3UyE|+;oTiN0OZAdAaZR5tNWV z6To}kMw(c6jj!Q&lc$HTCw<@Ly5bl_&&Tf#7BrzF%zsUg6DSHC!k*33q6QI44gO1lXr{Yr$bvRO=?u64ZSG%6(pSg zgvMq{qNDE(%~Bj?rlg=p7C_B`Q&&@Kk9SFvB}JanhzkKa4K;NE`H4qXuTVSJi3c(ZKJ&;m($*lcZ|N=hB)4RGiy z+JZh)X^wal8gc;zc)f(K49{QpU$w&&W6nz8?u5P`-u?z79P7fj$o? zZoZY>Tx{YzZNzdo7B?uU6B>bzix>cLC^8{DK*EMI^zH?f1K!Z z(A3mVPY`F1aTYZVpR4)@aMQJ!8(yRy^*?R!Fu#V%o!2uSOeJBskx>YQOmi&n?L1A4 z6s0g}SYfZMQ}Kz(X+{O7dUHwzRfj%&@$3kb7_YV0X+{e$mLsKLAja1ELM4mT55JU~ z@^pl~@ynN0%;Qb>Plh*H&q8lC)&pLh{d}8Z0XGiG7h(PPe32Z+(i|4wu&l@#zk~C} zdjyK-Qh|Z!Ok}S$a(m61xBO6F-=1Fxb{}7yI}joz|3oklFl5;c!8URWd(TDzJyS%} zu)_Sk7Aw}3M7~m7x(!zL(pu%m=NjMsH-V#Rk@8}#y%tZ_?w+B>5O4tvGdpgWW@4=B zfug1hVsKgIkF{2uXBPgx8kCcDPDAFR@vEL=65qSPyRciY9+L*LWBsRB*-@F$T~Skj zrSE`Q$i(N2??7u4?Fw#xd~F(8(`S!u7l{%cH2Cl-a9EDCoS9fFU}k(ST9z_e7OJoR zgUYEkZ0Z_kMFu<3X*{pN8OAGY(5t({`g7Zg z!YCf~kGR)vNGgNV3K)FoJj=nPyu5g}JY{IQ1^o_*ICf&SGGK=ksm3jpL%i?RTHzjf z<32FHPA}tVMMht%Sxnm=jnbxR-h}+9VbhK_Vv0V3#Q&t3$?FltXM-zeRj%b}C_@*|L7e~M) z8>!60Bu5$Ha0p#o3U!|0Wb>2)L-$$mhtj9;=>EkS-ec}b{|^rIssgP}5FqolZPnU; zky?qoz=S_L)f{)h051s zqYyvw8*luB&PX7_q_erAfKZ(=f+n!+gy$CR1Ld6tGfGcWxXp+%L>^aQ4jx)vZMed$ zhIMtcJI`;U#P5nA27$SpW<8V+#nxzI1Hnbo({~S^P7>ureR@AJ9V{kP@`8v)^so%{Gz_xGRlI7i1}9<;6o zD{-&{Roo#(tz>tb*Mt>brwFV--=)5bziBXFcd0aT8koGK)9ZgbRq~_7HtO-lq&0~C zxbZ@!ZHF`d+-->%R@I$GfH`KhG!pZ^{ldp;3a$#d!D3uEu^tw4Qn-fO;5DpQb+;1$ zu7*lB_zHX4-lTDLM!z%Qr(GAyURVH=wTeLd^R9FaqzlX*Bk(#MB1NAUAP6$NYU*?H zVrfjq%b9ZPHCGDraSOtPa$2{!A}xBl;PYm`CgbEr5qW{K+e|gf##(a6V2=S~jq|=x zUT34e8ca+K9hu54=|rlefL@eQ%>y^VJ5<0FOkqC|np@b3dzBLe?*?$HH@;tbqUgSo zA2|W zH#mUDIfzUMHJZa8g+zxUpicA9%xZ9sGUABJnLCmP_8E8#))z1X zD=&Ehc!HVqJzJM&i0Y95;oKF?84Obs4vFI1uJ|_Lm)(fKt1sqOjtwl>=y4KoV;IJ5 z;Ix#z>9nBP&YbO=DGDgfeN}Xb^kZ%PD@^{{;H$~!`Jm!a@Jq`1+bo|0a_{wRlwwsA z4c8i6m`k<&MI=U79j@r%`ZNKsKv%a{*Ao(vm&o;jF}wSa8{+~oO+>Xl+21?q z24hF1!G_c0NWS+Uv7EN9>?J1s>j#j{c>vaXbxjb-cn306Dq25ent9}^Y=8@YBbroHpICdVR6@8 zM#*YB1sGi2GXCP!>s0Ie4)lB;0(uTYl3c7Fl$7b@PTqF&HwhT^tm|)p1qA-H=G&q0 z2bCQvm;y4{xfczX4<~Zt(uI{QC=MvHH*mm{_;;D+FZt@fQy(tT=GESP0C9ZSYe2Tt zZQ~+1*-vP^e+3DSGKEsE`7OwJqX*ZX-~b#SUNLx{2~VtAX3PSRr<3XKKYHhVRx9>DJtN5M#&fZxf{$0k+Y3y%=?q=Wh|WR8{DP^)if{Xz zG5`sNYQSVJVfK&hEr?Nyhz1&#$itfUCvFM0 z;CVU_h&d2s@(~T1G!eo5%=4*7qfbhlBQ~zBs;p$qqIj2OkGVzi5bR)&-MWgh_>U!v z5qY|wpRn~r-`*b6m<$iypBa^`yt~xYVz>BLS3?x>Y)kvBqtP+`>Fop1e)_p>)}zf4 ze0$5?)$iEBm)zu4d0ThJuvX6z=5;Ib@o~whvHsUQj>9QmpCNvh2{H=2WuY-7w*Wyb z(}SY)x_PDdi|?CpEKu=LjA*lW^tbO^mJNXDPmgx-`(0tW;AGc$K&K&BzJ?rW($QhS zdKJG0*+b4#9)!W3PqPw`PkT~hv3Rz@Z3Pc8tHA9QSVDF*CtV5eot5sriG(iP%U=h- z-X9?B)zID9n^3C}s0q$~82eg;MbQ}m+0xSC3fAE1J|m^c5q{6D!Lfe&gvi5ABqo;m z&P4a@6oQei#0RXj+ECP1!M|7vM2F9u{5pK^FN?roEH6iheB|5BH5pl5pzg0l7f({@ zrBcx*Rl)NvH($)Km2qgQ;T{L*j$LHUPgb>uh4VrUl+*(G&$@_fR~8WR4eS**XtZ*Qy}(c1bLI$?D_(GhcN~WrC6-Vw*^UrM_rYhwmbm|OA zkgM)OGJQ+8`A$3DXt}=zqUZjMS?;IbAsZ^&XY!(pM77orfC8eC!OmslA7gYPlBb3V znW&JU>oq&8dPo5`mt2r1Qjy&$U(qH2S9+hAm#zBehmRor;L;1ky=2G?fzKxk``mI4 z#e5-cD?jlXIY}Dp7b*yIx$19COgdVvd$DzENw-o@?o%Lw^9V*!3lZ&}vmjd*u8UK0 zMy7Ef&~hLk{Ck2V=J{|@p$$tNoz-h_%<^V^Z;>1ogD}Dd?Qr1Sggnjigu>KZ$hRr4 z6jS1Y1B|i{R&E&z%))9N2ylZOGZHw2Ru*lM#Yb7@04jTzYQv@99o@XZTFn+OD~Iik zEF3wnUinT)iU_Ibwg9}mGS`e+R?P)&2HuV2+Xn1P=WJ=`?EOreI##h*F|D-) zYN&e`{TvbLjJ2SC!C@Z8;8d~;+??tm`Pd_#Lt;AV}HlOE} zT8wtb=73+r-e1!+&uT4sHIv zD-MI)j~NO|xk-2iR$NypMiK1Q89VTLBC63lf2|zHYsbroD6C6c@^Yr)6KMw=@P8w6 zs-O-orGE#*lfNP0^ll(BvU>^`Vqc;c!6JrEuZQg_74wlk>IGw|UC%F~96c+QAYf9F z>z9LyAyI@9=aBf`RNuhg?K!N7f8#w)@$~v7oXUmd;x5ADs^AJqtP#Mh-B8l?1dizJnxBqg`A~+dm!YUu;ebpXY)(-8po^CUbxv zz38!M48pgHE%(yrp5Ps~0mzsQC8F2sa;}zOk$`9iWH0keV*9rgWKiFeeL#JW5s+x4 zQ)sU6ilG^_r;n^2>D`$12EB~Oh96A;)&1jxJSz#^W zWX#ggs&<7)dLV7z$q~Ij`1{qRr`#R0|38B1 zj~&N?;$ku;CNv1vR@lpn=lLr8W&QE2>+At9@(=bjVmA3Ggc#86w&oK8VTxd3)9VOA zOfuiTeN#|S_=C(o{nKX>xfX=r4TLD-Nx8UiA*kITx#GTLeSihB6=)JCj&An%_q!p~6ZzkO z?8B`BgNDjVBsw~}lBz0pxB?!xQxQqYcMV!}f1YIa&yyfS`>{3o=y`^@|)v+sOfx9dOR$Vy5|{G*``5yk7|7_IRo3FRb|6gM))z(3~{OZ#{`8UBLD8 zBt&Lkp3U?duzLy_IltfAlcazFSn&7nZ|dw^B}mHR^TL8S*M9?mMIbQaDKimj92-kZ z=B|3ZG`=BF4CEyyJN{aOgne32>^uMHf2sr!yp5IRt3YnBRh_L2B zEml_6oX$=n#})#!@hnjr8@fLWL4EEuu41W5UTNt&2&`NzA1yO8^S`ep8zowm?7kZ= zPj?PqOiW10$e=AOEPgfF5&wP&+SK$kY5dRFaCj$$#pPw|XA>T)|F#yS=BxKk zLYU#!ON~fBfBuw^krDZOK|+Hp&Li1qAc&9gj~zQv$|OtF@`Qx~^7zTjzheU+h;)sW zsVOBV&b0LOh~D1M7}(h9(9{3EIP$t4<3tnjS!M}&?oW_H=;t}Dt$4}wx^@3`Y1>?G zaoS~QDM-!#E!G<>lsro~{7)-(=iMg4Z;E?iVLw5*RF_5*MAM&;kdTrs)(iTbbTruk zDTjV9Peh@ut=w0S1qI?olJ&2hxd}U;E~TIL1YV&2+;u=gARr*|^>n*VCb+_zo10xf z=jkHZUCJ1VGg6cP!Vxb3#S|46r>}9*@NrjmbgU3W10YayUHz~>MWIpcgQFzW!M|;6 zjF1AJ2Lf)7`D@AkH$eFBkF2GI_x}C+k+bA)rm!`C)3`L|${?Q_4uy!-*EL~P974{6 zyuvB@KfA{NSnd3I&Htx>@V`>VQU2!w;}4?U;D0KGe;Zc+PxSK+bx50SirUbUD&%)r z#Pt}LmS!pR@NzGaoS0vr6y_<6&uY{$chuyx#Qi37!q3zM$r2%ELqv>}MsCPKYX!cr z=Z$U~@a8mN%rzxamhoUmA)8M8KJLSISR(}}0A%rV#?9989a+~QLy9ebh;O!;&ka!WMm@93PI>ZCe zuvl_Cn8;S=oHwiR)G zxxt=FR?#8$I~Vi&Z3#rx&);#Ph^JI-Z6PPv7oW&Q z7kE`c5&y=Wg#^<@O;U@@$MPn4vObBK)Ih3AVgc12!a-VV+X^*e1|{#TzI%kH)}>Xm zSy!%bPn3OQ)%ZQ9Q)(lt6n| zI#i#ju69Y$&u~38C1i^?-7ibr>dOLxXi}zf{NBP?4^Ka^hOm6>@L2sY(vGC)x8NEJ z1mCzeSMcIHzf}Y{vE_1Y z12`VB2onwtn%i23M`JG}nk{ORTC6<6oKDh#rr-Ix33LpA`=Sq-O{-w(_^N^~=6n0O zL2mN4ErW8+fS63<)7qaPSN;0l$%Y&B2A1Z0tf0}!{n?*mR}!8i|9sjYMWYP0=L;$u z5J<`Xksfb@OZmi%-28Ix6ZsCeGce0=Em@uZU~8mZ8TJe&q)j=69{9Sx!-YQbs?faIhhQdf5LYfrZp5C`ZDRW`b29d$k` z=oGLkQUvb}`?^KvF%xi`l$Wop)O32Q;q8<)XqS^CsH7wo=k+QjCa4eFj^&mOSgV`F z=db4w>?Ki=dixJF9pti)yUr<`y&e6PU7TVaG9_)d0s<}H+*eXb%m)#Yax>=xO{0#; zn-ra{j{|Me-lykOR6o=KQSw$ zF;AC$99J(}9?>pLZNl4Yk7B#JHS@U^coFq|o+mzv%jV0=<~6Fy6tC9jK^g(zJ*jj7 zfMI&a+^VC{?^%7OEy#7L)Uql+-ww6ClN!}gQ|H_(TTaT&Th5n~*D4;ZhqIi6>r&1Z zV4JX#U*SA;>GIJ<(z}{C;|Vms%j;OoQp~I0U8L*Wv%(heo&&1qrX4abL`0}0BwAIK ze!yHB$}Fd$9br>aHfvj|QHxglrDDTx*AJIWYc(rKhr6Icx9TY;@azE%9`U9ia?wkU z!Hd}!@C9r09i8URcjU2JYu2$7jXG3yeyS`{1G>nU9pSh^M0~C*tfQ8$V4@?m4==jd zX9q;-@dV}HCt@00@9cJ1Omos6ZD-CgDKV0@&SRp8&!Nvxph|)7nU^FcQf-tQYHrdG zZ}Y`(_ON*lDG9NMea1*D<>}`1UtCqQeQ#_G^MG1c2tF4MwNfbbY7ZH^@CTP=s~)>- z;4X2k(t~yTd%{L5r?7;ppKh43bNo%HPPTk(cav&(b`Q))S&vG#DQ6gsH;cOhYW(ue z7Bg*nm-@~U8(iux4N|5fRsX{}M0*rh*AEdv5Ech)^n~xTC;<2#t-5Q_4!5`RpM#S( zSS%yGgWav3-U`Sf#3=7?e6Sg{-+$r@NnR5bv<%Ak7&x$sX^Ygzzft~x(X^3sn?b88 zRV#dtY05+EPRn9V8 z5^;g*4Dx{_WL0wcg!W<}$j7_|c*2c*3q5{3fq}FuDATbeOO-CQ!&#q(MQ5F&IH-48 zUR2V>qwPDX9_7ws>Dj4GpxG0B-+UB(iy}~)N7)G~F%pi+?Z%eLH3zrFgdhFkOk>kx z175CPejl6Vf}!ZgFH~&9o=;|kKGnmrP7OmNaoM}kxKzFj@=>@9)(;YzQj`4^2OE_D$Mc4bbGc@gVI_N!oa!DAj-EKRi9iR~$QXN?;OMT?Mnb+xy-e z&g%CKj3&H=sp|V&nFQFEfMDDX5-Zqou)@w4L(fm(e z>nA^AzX!O2X5t!Bd`D$yN8u(Ba&Y#Hgv9hf~d?9Jy(d3(4 zb!rLHir!qPI-oq6$Vc+!EH3Fy!S4-9R8b)I0}0HlS19kH4mxOL-T0N*84Mdgh()UI z6+e`!55JO){#AsDi@Ru(!OlGOKEZ+NbFnLo)o?T){DM}VOBizI&r;)Tx1F}P62no` z1N7vB!Bh>?f>GX$^-t|&7~a!E6N}~OkSUs8ynI^DPYkq6w|~Iq}?q%k2dj5gn#u!ig9s`3KK%9$4cAITv{v=&rqZ6u3DFUA9-B%xwSfW2`6Vp zaTft2+_rSZx3pXPj+x;olXJRWn3h#5Q4p}G*Z4d=;I6`oK~YpwF&yc7HV}K!!aDsT z4KFE&e2-u(_N;1kJT?BoI1ty6ODafN%oVxTxPeCkvGC_;wU_J>B#9aE_>NaS+ZP`j<;p#__kD7#q_@vb3r+ zDz+7aX1CYCpNXIL(ZCNcj~xIRL8(6_O91u1N|y3GbjJ+6qGP%(R;LN7j_2~+hn$ty zqrVagI(GNWq8zPwypjk!F6y#l6s0V~jgS{Gvv(ELdgvb8tRRcUgD%0=V<`=T=IypZ z;b5dvjc?8}H=WvxBo7Ag#lMaalg9N+$zoiIzdvhXAtn{mWG*5L5$2qfrdMm~70wP( zT4fEX@$6|F;P8Z9xjqja(`?{65Lfw;aIj(S5d{=z-k}aBYk4OQ^lS>rGUwH$8?>IQ z^Ent|@&V$`0v`Y@w4dtA%RUL;OO_`P@rhW0`KKmaD`(pkDQ}3ebN%RmYjIk`&~2_4 zeaSWi3PJ;pqA`T@5`Bhv0%paZ<#-x6#&f^%z0{zJC^qIv%Xq#JEs?k z7E-r#pL!40Up;%t6X^&(+<0Joq&2arF@goow#Sie0}b+nZHFfpS<^4i?sfaRLDFF8 zDJxQ=wHI(O_w$1boA09wkeK;1bka$j?t_qp;bb_~~H%l{r6n$nF;vA9&Egvum6g#*Q!dr9Mw4n6sv!}00By0$Um9%4) z6ydC?txcK3c1e4?APmgT&`%~O%YnQ_c!x6Pk&H7XfL60w)TMH^_@hJa^?a?&Iwe<_KIPw9yl|3(M31UBV9Sc{2|Sdvl_@fi=6O;!E)&WgJM}p zN>*Gln4mGLm0Y$`d@^R=us>&Y`Bk^=ZljGDs?;S48-HPlyZ!TpG7nYWk<%p+qXbJCFJzM6FoKZaH1NL|bBf=Vn&@;c}QEGq(s+MomR!zuFgEe&yS?RCnuge`%tsrdHP4x_Cc62dH=fyNU|J zzj{UV@%5BfqLWPYcaI?*7KKi-;G>_x#@BK$Z)GF+s>m8?bW2Lq`U#0?wI3%NU}%Oq zN-`o5O=bZjrE#gLg%S7tLkyKkmA$z`)#^$<+U}Z_%8l@|D#<_fbPDn+bn0LJD#2oG z8&>Vqw~hlam6ls|zb;gXkna@92f?YP0HxZnqT<)uY-aAw&MXC+UPUz$!KJ6)VfQGqDP0gh5kFoXzSq(ZtaQsu@^y-oDX;dRp>F&#Ao28G#q#GJjAWh|bv=`trn#1Rl~gB=c`uJzDFmm)WYuyTI(^VW zWcA93;^@hP(SweT!40K;izxw%tbXU}INweG;jk6>cT#ylxcD=&$)F;p}`V zmLkk~fxTkcB|2^|^XL!3x5{hcYYNr#4?m{uqMo)`FnvDgTW}Q?$p&$`9c5VE+*|G9 zm5i~^D}+xq!dUI(P^3+qOGe=_2?fl3G1toz9<&80fNK|JI(4s8&x2 zYn3prMJLOk(0(uMrZ(CUeRcABs^xMmvGhkhJ9&C7?axtWUkwH|L(LPb_9RQEEKGLQ zWX!T(Pr3ZGO(HG3Sr)X_N{Jl`vy>b^YJC#sLLN#ALEd~!oND}5N{Lx^yR!|IExOwE zXG_%taGk!Vkfeo|Gds&}t21+jF3^lkWbv}k{C>cCJ^Ye>S)R21K0^HsN0(Cl^MSOF zh4geH*;PV)QT0;*+&*r0?!yY)%IxO+DBF2l>*t^4MF)FD2PQs%7O`ZS6B-6;#Z*HU zsjB+Kq|){WV^!aWLVhN==gqmb9bNF$@mBc4>|m?)sg3IHnzHM3)yx9BzDZ&!&5L_- zv~@;47oFz}ZYGai;wq?-NPj{AN}S8iwq{RfS#D7C186sUD=J1>VwRV6R8>_E zuEqu2h_+nICEiIuz3L7S5%jFKF5dp3Q6Aw%X;G!F&jzS!Ndw}Per4gXy6t&=!mnTU zEqnldCQoaqu;KWt@0P6+V{)^LyoZKZtxN| z+$O`Z9h{P-OYF4lBr;49M!+q>)+?~JK{R;mHmz#nE{;mZ$VHMtd zUgQLDm7(`MzqWs)o>r>JArB-Z&Vxc|q$aryY%I)Ds09bsDS@a-jiM~j4Ht=6AE{jU ziKexnToLWXtheAf)FzU!f_af7Z9jVHIa8MyL>&8WUj3U(sDL z=5d#H<3#(4PT@8#YEi&A=L26F4T(W8?}uqtW8d27FX>Jt^)_@IRZ(|>qnQ{b17~l_ z26KQ~javzF=^n!@S85&{P!^(%1pSYyv2`+vox*I_K^$!R0YZ39?jgIY8kOoE(&>+r zw@b@sEg9_+4snW$@y*J$OL+~v+q+c*3+Nm^i zSDwm|nkkyQH1}SpxGHlZnmbUmajcW(%9%5_fHzyXe%vp(M+ z?(hA$ACLDR;6q-o>vdhvb?G>!UEPUkOO9eDU<;cJOZ6_F?ekITb&buKW%nwRX}W9b zJxZRi$=CBHBN6$2nwDquDZXEGG4uVgQMQ=fr^Bo})$fZ$&#@ zp;+v<@^!&2je+oEr51o5&*t68{J~;4PknIz<)srRt;c5}phA0&2&N;`YnkVStR)Bo z$(QRk<-FMsP zDFV6zk)kR5yWK4!lWeKPd}Y1Q&yI|uR*r0zly3 zdk7j@1d-5auY^eN!t@xWK_t! zpoKpj@sSDee5RV;T>5YXw?Pst^sqOR^jQd*x|2WN1RAO<_j~H6)=weW#~#DvRQ%lQ z?cW33_7sVzs#ElE-Eneo=1Fgf#PL^e+Iein()X5|5XgSQohtuFAPqt@Osh>adkw18eRDnmsN83=^tu~KynFEe`^VETij z(SWI)2ob7xYx#?7zTN6vkPr)e14@2`oeYJpM;z^sxWqfzZW=S$23Q;OsOq=c#}w>j z9hAiG6&@7Fa=6G4Eq3$In6(FXd#!Fy3JQO#c=GL*7uR^Hu6nm9|9FmSz6JHyx@0Ye z<}awOhm+KuOwo!&H=5XVRpuI)=J4_9b3mAHR2z%b%f0k#8!nIy_TZy%)%E+wyd(2Y zGdvYfz7ExBQL`0oWBcKvl#lHY(rC-qQCcpj`X8|9OYJqyk0);I9RFpZyTFWi^IkGZ zqQ}1JZG)+D5Fqkg%4DzXV3aeQ4O!lD)fq92*?S@Tn0U(K*9!;06b1I$=?_O+zF{%XaaEaRNJZGhi%%Vgg zO}@t@CU*n%*z(91W+VOCozg+E?=H7ek?VE;-s^&UvtM~lFxsCQlklxXOS_kwHuv7W zq%;IoR}{e3nDB8IkLo=YRjtu_yUHUE-e7xQ@A)Zj($zZgp>SQJ``+dwec2K>J)0-$ z^B+)DZD~gPg_FAtlJmNK@F}AMrV)Ef^1xhoALFx8XSlaf*(Dp!YhiC*8$N(#M}M|J z-iFgBO54W^eh&UQl*+4_kI@$7_nK@LSqEbs3l)exclKts0?m%GDhv>%v*FF#aD1&dGXz^91*6H-bjQzv2^eTA9xD$k+A(Xif9RuS2{qq z!XSI4*bwfxP^Kq%waY)5_9(6)sOY=!B=4>Frk?uVe%~}FnEb}=tpPdZZ_B|MwG@}9 z;-XbMiZMmHI{S_L)W^Hc9=e?39R7l$kD?HeH-Gei*mk)G-Ay6Ar_V<{Jc(qnh?rE= zDQU21p}BCN>;_m_C{I&Azb)s!Cvm!iKYWwkbERc%^SGSScftPUwUgLrR`A{rA=<{& zs;(+|I^TP)L*^ymbF{~Mb#%7QZz;BaK{4S6$cWpp{aq-^y^XS~E^D2dnyLZYs8s%5 zkEcz@T*Ts6oTq$EP2))@mx_1qF3P*$%(|z80*4Om*8P?;sVrw~mL?yBJbU@7 zOugO7LPo$N%CDE_+`ngKV*M+9ON9fw3-0CZU4@cYT_mCgqZpH z5j4w6J&p}Tbz++5+g=2QMA06vK$_Y(wK;&DI#9SU`m_;x2H7tvWe zxko;L-EH4r(Vd$oi!kY%`WraMKQ!X5N?*R;vKEjVIFc1IlEs1I_h&DlM%QVDj>#`j zqn|^wbwqAjqjVSUZI0XxAo`XPzp!dK;FJTjn zn((SjuHp6-20Jopaz7_Z#Zk$-Z+J$>6 z=$Q+f1z`A-r0I)%gVBT<|IOU{3zWd8vjL{V?(6Gyol9LM3R@fscdy04mI2Fm_>Okx z4x*wV3l=$F?C!0gncWm{f3~*D#jcHOP6Q>nRi&mqtCxQC{#k2trB#+HD|HVj zkGf7D?E~z`!}ifNu#F3)5^2|v?_HEFsUMvh1wKOM5RN>m9DxtlZA>fS{2M`kNo3{L%FZIHC0&>rbw-$L6pCG7Ub z&SmLF*;;9HeDpkH=u+vCX7sC(`SuQsS8FyS90f&rB{pvtq^WqqpRh zV-4vm7lPVGrSz66I>9?d*S#F5_O8*^#4)q_AeQ+~Sbni8#wz3BwKyf!p?YNOm8`}M zGvQv2|Kd*@SaoW<2!FzGUVcRwqO(Y=F7}A+uJw5MZMLs+qNJ8V9skNm-&ereii&I6 z!8hlRc0m8`w;@Yasl4WONJrf)ymY!k#hl)*KkBDQ$%$oc0j+DdkpqE)yAGE`$n^~Q zq8Xo_oi9ZMMGyP2SHAfk+NR9t7Qcs_2>(r(86arXcDdgL;Z@h^zcX1l+Ox!mT~arc z+zH5_^@LJl5Vkvo(PayYIzw5Ga$!~9Q`RB~q|_$3O4Pk;;l87w{z?C;^D7PZxe=0; z%t7}BT}UYmwn2Ou>sv)CS8TwaX02Nx9-6%(%?q{((8;#$a1g=)IqN@Go4P90Hu2-A zHo4D5F%ndK;!Ib%{ZGe?7=JQd@r3c;j9c?T`1EQc6bhwa!C73rSKi_Ia*NzNIn%nj zy8Nf~3^~U@*f^R+ARR=^4`1+Rol0D;_E&n8aX&M4a2&3jQF2$?rdZ=P6TBD*W=`Q-CNSdBS zvMJCU=O)u}?I9-Sx5M*?>Ly_QIx!&d7TWGprwnLzLjSpYVC7cqZoJMTCI+3B^%dM< z85dyX5U>U<^A^u+3t5M-ZSS!|bP18q)H|sQyCnyuu!-)|W>XC)~>BzIw$M zFi~?SS%SjRQNNk9e0=f1N7?Et0678iDa_n&r!BS?O59OA2(Pr&HU4;q zFEy7t7+!L{F>Q*T79JAH@Exw@$}FJ>7XGmEc%M`G6=a`!T)%agwW7Slq`4b)gQVyo zg4trDhWjAbGUh6+Uo=U`iUB<`-{Mb^>$fy}8V(*O=HXmp5{j|DW%Fh;rpgM3yJJcL%V{Py*qchnbTUHOcU{{n%rQW`<+b@ zw-?H7BFO1*<-C6*AoUT2H*!(q7@PjKtYU z$&_aB?ssTT_;&00FM+m=k&*KAKM~I=2&9?Exj-KiAu*EdpjBD&NLj7CMh(DxMC&NA zE(7DO;9BVht%;w!aQWaoY2Tlxl%F2`24y8Xol)E4D5rtHau5LlJp3BQ+N2eKcz??v zDBf=T#jhQx4TsUZ{hV8mDk-XKwg-25Rn#`~A~IsoCndAyMii~&4!+q!wwBQ9{qE%K zg3qHPKG@c0(*h#G74kJqfx4TwMQ0<)4^Kw|4)mq8!R+CW8y)Sy+ibd!DiT}E?L)d@8c04YyY@XHHii=N~O&PSm}?g0VaW_=D6h!5W63Z@@RMG zW=%)DC;{dMxoG?WHvSAAm_hc z5owe)>pgv5uI(KNw|3nD_yzfW{4z>>!sNNA7Fq&>1JX`3Xx(J7rEjz)v?8G zLa*QGx=?bMPfKv_9O~=qBjPux4{5{YD%y9(l%}z|?_af2+e>{4VS0S-0j0+wo%5$l zNZmdihs90W-X$~{$iC0$1$sFeu-tSWY%!mNC2tN$mZo?ogY|qO`EqM4r5ZHr_e+J_ zxfAUPJ3y@MyPP&AM&~&YJeHI;@cvd;Wp&$L{^-MQo4rG`YaaXhvHRE-3BNgvx2I>l zw2m92&-HwEQ+3FISEzDUJ1O~KWtwd<@{yh3(b}r&4PF@=hV?;lZ$p_Pr`5>YMzbQZ zcP(P~i(@#$hxQQDXZburtWQ8yy>fN3Vq6OA>>M5>6Q=+=IiwB6h0T#`#FjLS7Vx3} zUpQ*D5t0Pk_=%5m7uk!EYtkON+s4yR{3Bl-1lMu7W`^GKs-ExlELUvbO^BgBC@v6b zF+1mJDfgLIAV{km8u#*Q!~)7=uReEwI4ma`C<&}?dSQ#S^}^J$&%W~uTpFF`qVA8l zsJnZVdC|+8^=k6^!WGGKo?Dl_s^>}o>s<)KYiYm+J38R{%i12RW8FO( zpQIvIA2o8GY~zDMvz!Qt(d+H)6_k|3jMe#o zCtINdE8#$2Ze;89uDefMX{MFV&J43_0VHRHx*gv6T9|@|x9nKj{cv^jUs|{PAC<%@ zr@WtZbbPnFan$scTj^4$q0D$g%T>O>@;hx*gk9EQf3oInPX>hh(4X)j$jO0`Yj2)m zxs+D34*NwjKz+@M5HwRa`OEtp|d zS@|R44s}cVB7hOKfG@xls&{f0Hm4aI_fIOe=|V7_U%Y&2>bYVWYI<2s6eY6RbCHM< z(c}mR4?-EQWzPud!OH%c9A`=Iyg1~2;vsNWXQz!YGfTIdG1w9pEPFIV_UoJmoYo5Q*mK^hd z+f!QfOrU#V1Gc%5Y8A>kZ9QEW`%X0x4u~*$2Bc>!7*C#2Rt0((b~kjl`0r!dZAQ50 zzR6$c{*RKwCDAj}06m>OYIns*ArWijvj?^Q(|wJKe9{Q%xn3*r64Hrx-qSI9PQ&Yz zf98T%NbT}1nTu{(&IOW54ry7tDykPPYu*}|0;uCL*vO?PVKv2Cy7u?dvSu_@Z%@{| zZIEOZ9^yF`eSxu8y)${ik$i?iV{^{Ulcd&Qm&|N;qi>yQUPy)GOo~<9Y{}!@$uOu-D%gp5`rp+ z^p9%BzB_NFHk6w@8ff+}VEr5=noQYadK@553Mt(BY|2#P&R3!GJp5vhUX%j2{p!Z@ zKF+2}83_mq(xW5iU+{_MCC_2;Cqc9msNYyr2~8JG2w%B|vRlUAmKVF_Djz%PkWV{peS78-L^^Wr zaT(WvCfk)GtBzQb?NzTT&6tc|+qUYLm_iSotj>5IfzpNQ#cfiLL1-mUHfDtLHNtfX zYG1`lxUwN5PrfC9i{}FZc)p6a?0gQCTN_H&8pY_MVba55(|ZF8?Db3$okvASw&?zD zT#DHgr9=L!pyVJz9Hvcd?jrwa0m^9Sx?}`$&3y4i=$kEoh zoj>s$;5lIfQPb7+`vwk*y;kNk^EKvB=#H{-mbSNl-;28VTldMUN7kV?L!I|nu9m8y zW5E1_l2^yK-j=MoC}YTKc6i41~`^p z6PppiRufv96_Xas)nzxO55lr9 zw`tQ?zeTM*j{2kX?pGP+xMMx_r|2y-BNrT>qerL zcb*#&zcX}go)_*L>vHx)*)}IVw3TiePLqO$<390`JMm*If(^l0--nvJpjctXzFH@AQbFFlL2kd(2aA5P5nXO6n2qzv^k+5RX2phN8{!Ho23bZ} zWVvgF1+7QCB`kno8uvP{=*;r0vT{(%W}YHRCbUgJ1CwPc)nz==o!^UvJ&HZnO0~7y zJMY{1R1BrOr)B4B7w%jXpAes(;Zi()xg~%;yMDj(=_3K%-?_D<)Aj3UT-}hY`i07} zx@SZjJp0AY@^E>{PESa>EMzN8Ja1RifZag+^4>zErpz{Xpun+%{y3joOOA1C$r!Y! zdjcI_st!{BWV9r~L>2UN0~lVMqwLQ+)}ANuK(VFAYHgp#D55I_C*J3K9W&w^jacO4Ea4UsEQ$3XiJqSVeM~t ziqvhUY<6I*2LfaJS9DGLVI}m1q6&^reg8==ylr2Zjp)KPr5C@)37qNIvht*HoOldQF<(&FZuqovq>=?6Ooc z)CB-5O*=|Pfw;_eSE)8aKLzDGwvLg+uGls9x2}*E=VW`krgZ03WLoM!M*?QxoTD5J#~2!O)ZX=F#zM$vK=E zk)`D9%k7yH#QmyGkty-=F{9A>rVmA7%;5fTEJ`M;;=hc6X4TyxBByLmZ|&r??4)nP!yVq1 zUn8B12paVPsCotE7yqGjP(?pC0q~pmPMqAU!To-vimms@S+xOT_N7o_G3%_wX`R_3z*Xl+$aLqK(BP^;(i zde8!qhO_6lZYa&B10Cc#5)#%2||H}<*fA{Vm>+n)i{4keCy5+ngg9T