cardiac-geometriesx 0.4.6__tar.gz → 0.4.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {cardiac_geometriesx-0.4.6/src/cardiac_geometriesx.egg-info → cardiac_geometriesx-0.4.7}/PKG-INFO +4 -3
  2. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/pyproject.toml +3 -3
  3. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/cli.py +10 -0
  4. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/mesh.py +40 -35
  5. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7/src/cardiac_geometriesx.egg-info}/PKG-INFO +4 -3
  6. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/requires.txt +1 -1
  7. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/tests/test_cli.py +21 -14
  8. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/LICENSE +0 -0
  9. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/README.md +0 -0
  10. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/setup.cfg +0 -0
  11. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/__init__.py +0 -0
  12. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/fibers/__init__.py +0 -0
  13. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/fibers/lv_ellipsoid.py +0 -0
  14. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/fibers/slab.py +0 -0
  15. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/fibers/utils.py +0 -0
  16. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/geometry.py +0 -0
  17. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/gui.py +0 -0
  18. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometries/utils.py +0 -0
  19. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/SOURCES.txt +0 -0
  20. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/dependency_links.txt +0 -0
  21. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/entry_points.txt +0 -0
  22. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/not-zip-safe +0 -0
  23. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/src/cardiac_geometriesx.egg-info/top_level.txt +0 -0
  24. {cardiac_geometriesx-0.4.6 → cardiac_geometriesx-0.4.7}/tests/test_save_load.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cardiac-geometriesx
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: A python library for cardiac geometries
5
5
  Author-email: Henrik Finsberg <henriknf@simula.no>
6
6
  License: MIT
@@ -38,7 +38,7 @@ Provides-Extra: test
38
38
  Requires-Dist: pre-commit; extra == "test"
39
39
  Requires-Dist: pytest; extra == "test"
40
40
  Requires-Dist: pytest-cov; extra == "test"
41
- Requires-Dist: ukb-atlas; extra == "test"
41
+ Requires-Dist: ukb-atlas[pyvista]; extra == "test"
42
42
  Requires-Dist: fenicsx-ldrb; extra == "test"
43
43
  Provides-Extra: gui
44
44
  Requires-Dist: streamlit; extra == "gui"
@@ -47,6 +47,7 @@ Requires-Dist: pyvista[all]>=0.43.0; extra == "gui"
47
47
  Requires-Dist: trame-vuetify; extra == "gui"
48
48
  Requires-Dist: ipywidgets; extra == "gui"
49
49
  Requires-Dist: fenicsx-ldrb; extra == "gui"
50
+ Dynamic: license-file
50
51
 
51
52
  ![_](docs/_static/logo.png)
52
53
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cardiac-geometriesx"
7
- version = "0.4.6"
7
+ version = "0.4.7"
8
8
  description = "A python library for cardiac geometries"
9
9
  authors = [{name = "Henrik Finsberg", email = "henriknf@simula.no"}]
10
10
  license = {text = "MIT"}
@@ -52,7 +52,7 @@ test = [
52
52
  "pre-commit",
53
53
  "pytest",
54
54
  "pytest-cov",
55
- "ukb-atlas",
55
+ "ukb-atlas[pyvista]",
56
56
  "fenicsx-ldrb",
57
57
  ]
58
58
  gui = [
@@ -177,7 +177,7 @@ tag = true
177
177
  sign_tags = false
178
178
  tag_name = "v{new_version}"
179
179
  tag_message = "Bump version: {current_version} → {new_version}"
180
- current_version = "0.4.6"
180
+ current_version = "0.4.7"
181
181
 
182
182
 
183
183
  [[tool.bumpversion.files]]
@@ -92,6 +92,14 @@ def app():
92
92
  help="Function space for fibers of the form family_degree",
93
93
  show_default=True,
94
94
  )
95
+ @click.option(
96
+ "--clipped/--no-clipped",
97
+ default=False,
98
+ is_flag=True,
99
+ type=bool,
100
+ help="If True create clip away the outflow tracts",
101
+ show_default=True,
102
+ )
95
103
  def ukb(
96
104
  outdir: Path | str,
97
105
  mode: int = -1,
@@ -102,6 +110,7 @@ def ukb(
102
110
  fiber_angle_endo: float = 60,
103
111
  fiber_angle_epi: float = -60,
104
112
  fiber_space: str = "P_1",
113
+ clipped: bool = False,
105
114
  ):
106
115
  outdir = Path(outdir)
107
116
  outdir.mkdir(exist_ok=True)
@@ -116,6 +125,7 @@ def ukb(
116
125
  fiber_angle_endo=fiber_angle_endo,
117
126
  fiber_angle_epi=fiber_angle_epi,
118
127
  fiber_space=fiber_space,
128
+ clipped=clipped,
119
129
  )
120
130
  geo.save(outdir / "ukb.bp")
121
131
 
@@ -32,6 +32,7 @@ def ukb(
32
32
  fiber_angle_endo: float = 60,
33
33
  fiber_angle_epi: float = -60,
34
34
  fiber_space: str = "P_1",
35
+ clipped: bool = False,
35
36
  comm: MPI.Comm = MPI.COMM_WORLD,
36
37
  ) -> Geometry:
37
38
  try:
@@ -44,26 +45,29 @@ def ukb(
44
45
  raise ImportError(msg) from e
45
46
 
46
47
  if comm.rank == 0:
48
+ ukb.cli.main(["surf", str(outdir), "--mode", str(mode), "--std", str(std), "--case", case])
49
+ mesh_args = [
50
+ "mesh",
51
+ str(outdir),
52
+ "--case",
53
+ case,
54
+ "--char_length_max",
55
+ str(char_length_max),
56
+ "--char_length_min",
57
+ str(char_length_min),
58
+ ]
59
+ if clipped:
60
+ ukb.cli.main(["clip", str(outdir), "--case", case, "--smooth"])
61
+ mesh_args.append("--clipped")
47
62
  print(comm.rank)
48
- ukb.cli.main(
49
- [
50
- str(outdir),
51
- "--mode",
52
- str(mode),
53
- "--std",
54
- str(std),
55
- "--case",
56
- case,
57
- "--mesh",
58
- "--char_length_max",
59
- str(char_length_max),
60
- "--char_length_min",
61
- str(char_length_min),
62
- ]
63
- )
63
+
64
+ ukb.cli.main(mesh_args)
64
65
  comm.barrier()
65
66
  outdir = Path(outdir)
66
- mesh_name = outdir / f"{case}.msh"
67
+ if clipped:
68
+ mesh_name = outdir / f"{case}_clipped.msh"
69
+ else:
70
+ mesh_name = outdir / f"{case}.msh"
67
71
 
68
72
  geometry = utils.gmsh2dolfin(comm=comm, msh_file=mesh_name)
69
73
 
@@ -98,24 +102,25 @@ def ukb(
98
102
  )
99
103
  raise ImportError(msg)
100
104
 
101
- # base_marker = 3
102
- # indices = []
103
- # for k in ["PV", "TV", "AV", "MV"]:
104
- # indices.append(geometry.ffun.find(geometry.markers[k][0]))
105
- # indices = np.hstack(comm.allreduce(indices, op=MPI.SUM))
106
- # values = np.full(len(indices), base_marker, dtype=np.int32)
107
-
108
- markers = {
109
- "lv": [geometry.markers["LV"][0]],
110
- "rv": [geometry.markers["RV"][0]],
111
- "epi": [geometry.markers["EPI"][0]],
112
- "base": [
113
- geometry.markers["PV"][0],
114
- geometry.markers["TV"][0],
115
- geometry.markers["AV"][0],
116
- geometry.markers["MV"][0],
117
- ],
118
- }
105
+ if clipped:
106
+ markers = {
107
+ "lv": [geometry.markers["LV"][0]],
108
+ "rv": [geometry.markers["RV"][0]],
109
+ "epi": [geometry.markers["EPI"][0]],
110
+ "base": [geometry.markers["BASE"][0]],
111
+ }
112
+ else:
113
+ markers = {
114
+ "lv": [geometry.markers["LV"][0]],
115
+ "rv": [geometry.markers["RV"][0]],
116
+ "epi": [geometry.markers["EPI"][0]],
117
+ "base": [
118
+ geometry.markers["PV"][0],
119
+ geometry.markers["TV"][0],
120
+ geometry.markers["AV"][0],
121
+ geometry.markers["MV"][0],
122
+ ],
123
+ }
119
124
  system = ldrb.dolfinx_ldrb(
120
125
  mesh=geometry.mesh,
121
126
  ffun=geometry.ffun,
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cardiac-geometriesx
3
- Version: 0.4.6
3
+ Version: 0.4.7
4
4
  Summary: A python library for cardiac geometries
5
5
  Author-email: Henrik Finsberg <henriknf@simula.no>
6
6
  License: MIT
@@ -38,7 +38,7 @@ Provides-Extra: test
38
38
  Requires-Dist: pre-commit; extra == "test"
39
39
  Requires-Dist: pytest; extra == "test"
40
40
  Requires-Dist: pytest-cov; extra == "test"
41
- Requires-Dist: ukb-atlas; extra == "test"
41
+ Requires-Dist: ukb-atlas[pyvista]; extra == "test"
42
42
  Requires-Dist: fenicsx-ldrb; extra == "test"
43
43
  Provides-Extra: gui
44
44
  Requires-Dist: streamlit; extra == "gui"
@@ -47,6 +47,7 @@ Requires-Dist: pyvista[all]>=0.43.0; extra == "gui"
47
47
  Requires-Dist: trame-vuetify; extra == "gui"
48
48
  Requires-Dist: ipywidgets; extra == "gui"
49
49
  Requires-Dist: fenicsx-ldrb; extra == "gui"
50
+ Dynamic: license-file
50
51
 
51
52
  ![_](docs/_static/logo.png)
52
53
 
@@ -35,5 +35,5 @@ fenicsx-ldrb
35
35
  pre-commit
36
36
  pytest
37
37
  pytest-cov
38
- ukb-atlas
38
+ ukb-atlas[pyvista]
39
39
  fenicsx-ldrb
@@ -60,29 +60,36 @@ def test_script_no_fibers(script, tmp_path: Path):
60
60
  assert geo.mesh.geometry.dim == 3
61
61
 
62
62
 
63
+ @pytest.mark.parametrize("clipped", [True, False])
63
64
  @pytest.mark.parametrize("case", ["ED", "ES"])
64
- def test_ukb(tmp_path: Path, case: str):
65
+ def test_ukb(tmp_path: Path, case: str, clipped: bool):
65
66
  runner = CliRunner()
66
67
 
67
68
  comm = MPI.COMM_WORLD
68
69
  path = comm.bcast(tmp_path, root=0)
69
70
 
70
- res = runner.invoke(
71
- cli.ukb,
72
- [
73
- path.as_posix(),
74
- "--case",
75
- case,
76
- "--char-length-max",
77
- "10.0",
78
- "--char-length-min",
79
- "10.0",
80
- ],
81
- )
71
+ args = [
72
+ path.as_posix(),
73
+ "--case",
74
+ case,
75
+ "--char-length-max",
76
+ "10.0",
77
+ "--char-length-min",
78
+ "10.0",
79
+ ]
80
+ if clipped:
81
+ if case == "ES":
82
+ pytest.skip("Clipped case with default values are for ED")
83
+ args.append("--clipped")
84
+
85
+ res = runner.invoke(cli.ukb, args)
82
86
  assert res.exit_code == 0
83
87
  assert path.is_dir()
84
88
 
85
89
  assert (path / "mesh.xdmf").exists()
86
- assert (path / f"{case}.msh").exists()
90
+ if clipped:
91
+ assert (path / f"{case}_clipped.msh").exists()
92
+ else:
93
+ assert (path / f"{case}.msh").exists()
87
94
  geo = Geometry.from_folder(comm=comm, folder=path)
88
95
  assert geo.mesh.geometry.dim == 3