From 8c855de7be733deba4c123fdf6a304e46e51dfde Mon Sep 17 00:00:00 2001 From: Jonas Lindemann Date: Thu, 15 Feb 2024 23:40:18 +0100 Subject: [PATCH 1/3] Support for optional dependencies --- pyproject.toml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d01264a..dabe328 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,12 +12,8 @@ dependencies = [ "numpy", "scipy", "tabulate", - "visvis", - "vedo", - "pyvtk", - "qtpy", - "tabulate", ] + requires-python = ">=3.8" readme = "README.md" license = {text = "MIT"} @@ -48,3 +44,9 @@ build-backend = "pdm.backend" [tool.pdm] distribution = true + +[project.optional-dependencies] +visvis = [ "visvis" ] +vedo = [ "vedo" ] +pyvtk = [ "pyvtk" ] +qtpy = [ "qtpy" ] From c962181ba45bd2e7781d450b36845fb563bed882 Mon Sep 17 00:00:00 2001 From: Jonas Lindemann Date: Mon, 11 Mar 2024 11:35:20 +0100 Subject: [PATCH 2/3] Adding output functions for strings. --- src/calfem/utils.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/calfem/utils.py b/src/calfem/utils.py index 4d84b4b..4620e22 100644 --- a/src/calfem/utils.py +++ b/src/calfem/utils.py @@ -58,17 +58,26 @@ def disp(msg): else: print(msg) +def str_disp(msg): + return f"\n{msg}\n" + def disp_par(msg): if type_of_script() == 'jupyter': display(HTML(f"

{msg}

")) else: print(f"\nmsg\n") +def str_disp_par(msg): + return f"\n{msg}\n" + def disp_bold(msg): if type_of_script() == 'jupyter': display(HTML(f"{msg}")) else: print(f"**{msg}**") + +def str_disp_bold(msg): + return f"**{msg}**" def disp_bold_par(msg): if type_of_script() == 'jupyter': @@ -76,24 +85,36 @@ def disp_bold_par(msg): else: print(f"\n**{msg}**\n") +def str_disp_bold_par(msg): + return f"\n**{msg}**\n" + def disp_h1(msg): if type_of_script() == 'jupyter': display(HTML(f"

{msg}

")) else: print(f"\n# {msg}\n") +def str_disp_h1(msg): + return f"\n# {msg}\n" + def disp_h2(msg): if type_of_script() == 'jupyter': display(HTML(f"

{msg}

")) else: print(f"\n## {msg}\n") +def str_disp_h2(msg): + return f"\n## {msg}\n" + def disp_h3(msg): if type_of_script() == 'jupyter': display(HTML(f"

{msg}

")) else: print(f"\n## {msg}\n") +def str_disp_h3(msg): + return f"\n## {msg}\n" + def disp_array(a, headers=[], fmt=".4e", tablefmt="psql", showindex=False): """ Print a numpy array in a nice way. @@ -103,6 +124,12 @@ def disp_array(a, headers=[], fmt=".4e", tablefmt="psql", showindex=False): else: print(tab.tabulate(np.asarray(a), tablefmt=tablefmt, floatfmt=fmt, showindex=showindex, headers=headers)) +def str_disp_array(a, headers=[], fmt=".4e", tablefmt="psql", showindex=False): + """ + Return a numpy array in a nice way as a string. + """ + return tab.tabulate(np.asarray(a), tablefmt=tablefmt, floatfmt=fmt, showindex=showindex, headers=headers) + class ElementProperties(object): def __init__(self): self.ep = {} From 2da58aea31ac4a45f4efdd8795ada29b272f9765 Mon Sep 17 00:00:00 2001 From: Jonas Lindemann Date: Wed, 17 Apr 2024 16:51:54 +0200 Subject: [PATCH 3/3] Small fixes --- examples/example1.py | 66 ++++++++++++++++++++++++++++++++++++++++++++ src/__init__.py | 0 src/calfem/utils.py | 6 ++-- 3 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 examples/example1.py create mode 100644 src/__init__.py diff --git a/examples/example1.py b/examples/example1.py new file mode 100644 index 0000000..5640313 --- /dev/null +++ b/examples/example1.py @@ -0,0 +1,66 @@ +import calfem.geometry as cfg +import calfem.mesh as cfm +import calfem.vis_mpl as cfv + +g = cfg.Geometry() + +# Add points + +g.point([0, 0]) # 0 +g.point([1, 0]) # 1 +g.point([1, 1]) # 2 +g.point([0, 1]) # 3 + +# Add points for circle + +r = 0.20 + +g.point([0.5, 0.5]) # 4 +g.point([0.5, 0.5+r]) # 5 +g.point([0.5, 0.5-r]) # 6 +g.point([0.5+r, 0.5]) # 7 +g.point([0.5-r, 0.5]) # 8 + +# Add lines + +g.spline([0, 1]) # 0 +g.spline([1, 2]) # 1 +g.spline([2, 3]) # 2 +g.spline([3, 0]) # 3 + +# TODO: Add circles HERE + +g.circle([5, 4, 7]) # 4 +g.circle([7, 4, 6]) # 5 +g.circle([6, 4, 8]) # 6 +g.circle([8, 4, 5]) # 7 + +# Add surface and hole UPDATE + +g.surface([0, 1, 2, 3], [[7, 6, 5, 4]]) + +#cfv.figure(fig_size=(10.0,10.0)) +#cfv.draw_geometry(g) + +mesh = cfm.GmshMesh(g) + +# Mesh properties + +mesh.el_type = 3 +mesh.dofs_per_node = 1 # Degrees of freedom per node. +mesh.el_size_factor = 0.040 # Factor that changes element sizes. + +coords, edof, dofs, bdofs, elementmarkers = mesh.create() + + +cfv.figure(fig_size=(10,10)) +cfv.draw_mesh( + coords=coords, + edof=edof, + dofs_per_node=mesh.dofs_per_node, + el_type=mesh.el_type, + filled=True, + title="Example 01" +) + +cfv.show_and_wait_mpl() diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/calfem/utils.py b/src/calfem/utils.py index 4620e22..3899b45 100644 --- a/src/calfem/utils.py +++ b/src/calfem/utils.py @@ -59,7 +59,7 @@ def disp(msg): print(msg) def str_disp(msg): - return f"\n{msg}\n" + return f"{msg}\n" def disp_par(msg): if type_of_script() == 'jupyter': @@ -110,10 +110,10 @@ def disp_h3(msg): if type_of_script() == 'jupyter': display(HTML(f"

{msg}

")) else: - print(f"\n## {msg}\n") + print(f"\n### {msg}\n") def str_disp_h3(msg): - return f"\n## {msg}\n" + return f"\n### {msg}\n" def disp_array(a, headers=[], fmt=".4e", tablefmt="psql", showindex=False): """