PyCosmoMMF 0.4.0__tar.gz → 0.6.0__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 (68) hide show
  1. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/PKG-INFO +3 -2
  2. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/_version.py +2 -2
  3. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/signatures.py +1 -1
  4. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/tagging.py +45 -29
  5. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/tests/test_integration.py +16 -1
  6. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.copier-answers.yml +0 -0
  7. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.git_archival.txt +0 -0
  8. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.gitattributes +0 -0
  9. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.github/CONTRIBUTING.md +0 -0
  10. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.github/dependabot.yml +0 -0
  11. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.github/release.yml +0 -0
  12. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.github/workflows/cd.yml +0 -0
  13. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.github/workflows/ci.yml +0 -0
  14. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.gitignore +0 -0
  15. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.pre-commit-config.yaml +0 -0
  16. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/.readthedocs.yaml +0 -0
  17. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/LICENSE +0 -0
  18. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/README.md +0 -0
  19. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/CosmoMMF_Dark.png +0 -0
  20. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/CosmoMMF_light.png +0 -0
  21. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/basic.css +0 -0
  22. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/check-solid.svg +0 -0
  23. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/clipboard.min.js +0 -0
  24. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/copy-button.svg +0 -0
  25. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/copybutton.css +0 -0
  26. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/copybutton.js +0 -0
  27. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/copybutton_funcs.js +0 -0
  28. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/debug.css +0 -0
  29. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/doctools.js +0 -0
  30. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/documentation_options.js +0 -0
  31. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/file.png +0 -0
  32. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/language_data.js +0 -0
  33. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/minus.png +0 -0
  34. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/plus.png +0 -0
  35. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/pygments.css +0 -0
  36. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/scripts/furo-extensions.js +0 -0
  37. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/scripts/furo.js +0 -0
  38. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/scripts/furo.js.LICENSE.txt +0 -0
  39. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/scripts/furo.js.map +0 -0
  40. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/searchtools.js +0 -0
  41. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/skeleton.css +0 -0
  42. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/sphinx_highlight.js +0 -0
  43. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/styles/furo-extensions.css +0 -0
  44. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/styles/furo-extensions.css.map +0 -0
  45. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/styles/furo.css +0 -0
  46. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/_static/styles/furo.css.map +0 -0
  47. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/api/pycosmommf.rst +0 -0
  48. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/api_tab.md +0 -0
  49. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/basic_usage.md +0 -0
  50. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/conf.py +0 -0
  51. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/CosmoMMF_Dark.png +0 -0
  52. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/CosmoMMF_light.png +0 -0
  53. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/final_NEXUSPLUS_Signatures_hydro.png +0 -0
  54. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/final_NEXUSPLUS_Signatures_hydro_dark.png +0 -0
  55. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/final_tagging_figure.png +0 -0
  56. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/images/final_tagging_figure_dark.png +0 -0
  57. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/docs/index.md +0 -0
  58. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/noxfile.py +0 -0
  59. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/pyproject.toml +0 -0
  60. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/__init__.py +0 -0
  61. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/_version.pyi +0 -0
  62. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/filter.py +0 -0
  63. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/hessian.py +0 -0
  64. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/py.typed +0 -0
  65. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/src/pycosmommf/utils.py +0 -0
  66. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/tests/__init__.py +0 -0
  67. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/tests/test_package.py +0 -0
  68. {pycosmommf-0.4.0 → pycosmommf-0.6.0}/tests/test_unit.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pycosmommf
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: A package for identifying structures in the cosmic web.
5
5
  Project-URL: Homepage, https://github.com/James11222/pycosmommf
6
6
  Project-URL: Bug Tracker, https://github.com/James11222/pycosmommf/issues
@@ -26,6 +26,7 @@ License: Copyright 2024 James Sunseri
26
26
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
27
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
28
  SOFTWARE.
29
+ License-File: LICENSE
29
30
  Classifier: Development Status :: 1 - Planning
30
31
  Classifier: Intended Audience :: Developers
31
32
  Classifier: Intended Audience :: Science/Research
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.0'
16
- __version_tuple__ = version_tuple = (0, 4, 0)
15
+ __version__ = version = '0.6.0'
16
+ __version_tuple__ = version_tuple = (0, 6, 0)
@@ -99,7 +99,7 @@ def maximum_signature(Rs, field, alg="NEXUSPLUS", eps=1e-8):
99
99
  sigmax : 4D array
100
100
  The maximum signatures.
101
101
  """
102
- if alg not in ["NEXUS", "NEXUSPLUS"]:
102
+ if alg not in ["NEXUS", "NEXUSPLUS"]: # pragma: no cover
103
103
  msg = "alg must be either 'NEXUS' or 'NEXUSPLUS'"
104
104
  raise ValueError(msg)
105
105
 
@@ -18,7 +18,7 @@ def make_the_clusbool(delta, max_sigs, Δ): # pragma: no cover
18
18
 
19
19
  Arguments:
20
20
  ----------------
21
- delta - [3D Float Array] - delta refers to the δ delta.
21
+ delta - [3D Float Array] - delta refers to the δ field.
22
22
  max_sigs - [4D Float Array] - the maximum signatures array from CosmoMMF.maximum_signature()
23
23
  verbose - [Boolean] - a flag to allow the function to be more helpful and verbose.
24
24
  Δ - [Int] - The overdensity parameter threshold for determining virialization. This
@@ -75,14 +75,14 @@ def make_the_clusbool(delta, max_sigs, Δ): # pragma: no cover
75
75
  return clusbool, S_th, signature_thresholds, virialized_fractions
76
76
 
77
77
 
78
- def calc_mass_change(sig_vec, delta_vec, Smin, Smax):
78
+ def calc_mass_change(sig_vec, density_vec, Smin, Smax):
79
79
  """
80
80
  Calculate the mass change curve for a given structure type.
81
81
 
82
82
  Arguments:
83
83
  -----------
84
84
  sig_vec - [1D Float Array] - the signature values for a given structure type
85
- delta_vec - [1D Float Array] - the delta values for a given structure type
85
+ density_vec - [1D Float Array] - the density values for a given structure type
86
86
  Smin - [Float] - the minimum signature value
87
87
  Smax - [Float] - the maximum signature value
88
88
 
@@ -98,7 +98,7 @@ def calc_mass_change(sig_vec, delta_vec, Smin, Smax):
98
98
  # Sum up all the mass in a structure type as a function of log(𝒮)
99
99
  for i in range(len(M)):
100
100
  filter = sig_vec > 10 ** log10S[i]
101
- M[i] = np.sum(delta_vec[filter])
101
+ M[i] = np.sum(density_vec[filter])
102
102
 
103
103
  # Compute the derivative |dM^2/dlog(𝒮)|
104
104
  ΔM_2 = np.abs(np.diff(M**2) / np.diff(log10S))
@@ -111,14 +111,14 @@ def calc_mass_change(sig_vec, delta_vec, Smin, Smax):
111
111
 
112
112
 
113
113
  def calc_structure_bools(
114
- delta, max_sigs, verbose, clusbool=None, Smin=-3, Smax=2, Δ=370
114
+ density_cube, max_sigs, verbose, clusbool=None, Smin=-3, Smax=2, Δ=370
115
115
  ):
116
116
  """
117
117
  Calculate the boolean filters for clusters, filaments, walls, and voids.
118
118
 
119
119
  Arguments:
120
120
  -----------
121
- delta - [3D Float Array] - the δ delta
121
+ density_cube - [3D Float Array] - the δ+1 density_cube
122
122
  max_sigs - [4D Float Array] - the maximum signatures array from CosmoMMF.maximum_signature()
123
123
  verbose - [Boolean] - a flag to allow the function to be more helpful and verbose.
124
124
  clusbool - [3D Boolean Array] - the cluster boolean filter
@@ -144,15 +144,15 @@ def calc_structure_bools(
144
144
 
145
145
  """
146
146
 
147
- N_cells = np.prod(delta.shape)
147
+ N_cells = np.prod(density_cube.shape)
148
148
 
149
149
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
150
150
  # Step 1. Create Cluster Boolean Filter
151
151
  # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
152
152
 
153
- if clusbool is None:
153
+ if clusbool is None: # pragma: no cover
154
154
  clusbool, cluster_thresh, S_clus, f_vir_clus = make_the_clusbool(
155
- delta, max_sigs, Δ
155
+ density_cube - 1.0, max_sigs, Δ
156
156
  )
157
157
  else:
158
158
  cluster_thresh = None
@@ -170,10 +170,12 @@ def calc_structure_bools(
170
170
  # Isolate Valid Filaments (not clusters)
171
171
  not_clus_flat = np.reshape(clusbool == False, N_cells) # noqa: E712
172
172
  filament_valid = filament_signature[not_clus_flat]
173
- flat_delta_valid = np.reshape(delta, N_cells)[not_clus_flat]
173
+ flat_density_cube_valid = np.reshape(density_cube, N_cells)[not_clus_flat]
174
174
 
175
175
  # Compute Mass Change Curves and Find Filament Threshold
176
- S_fil, dM2_fil = calc_mass_change(filament_valid, flat_delta_valid, Smin, Smax)
176
+ S_fil, dM2_fil = calc_mass_change(
177
+ filament_valid, flat_density_cube_valid, Smin, Smax
178
+ )
177
179
  ind = np.argmax(dM2_fil)
178
180
  filament_thresh = S_fil[ind]
179
181
  filbool = (max_sigs[:, :, :, 1] > filament_thresh) & (~clusbool)
@@ -185,10 +187,10 @@ def calc_structure_bools(
185
187
  # Isolate Valid Walls (not clusters or filaments)
186
188
  wall_valid_filt = (not_clus_flat) & (filament_signature < filament_thresh)
187
189
  wall_valid = wall_signature[wall_valid_filt]
188
- wall_delta_valid = np.reshape(delta, N_cells)[wall_valid_filt]
190
+ wall_density_cube_valid = np.reshape(density_cube, N_cells)[wall_valid_filt]
189
191
 
190
192
  # Compute Mass Change Curves and Find Wall Threshold
191
- S_wall, dM2_wall = calc_mass_change(wall_valid, wall_delta_valid, Smin, Smax)
193
+ S_wall, dM2_wall = calc_mass_change(wall_valid, wall_density_cube_valid, Smin, Smax)
192
194
  ind = np.argmax(dM2_wall)
193
195
  wall_thresh = S_wall[ind]
194
196
  wallbool = (max_sigs[:, :, :, 2] > wall_thresh) & ~(filbool | clusbool)
@@ -204,47 +206,47 @@ def calc_structure_bools(
204
206
  print(" Cluster Boolean Filter Report ")
205
207
  print("---------------------------------------\n")
206
208
 
207
- volume_fraction = np.sum(clusbool) / N_cells
208
- mass_fraction = np.sum(delta[clusbool]) / np.sum(delta)
209
+ volume_fraction_clus = np.sum(clusbool) / N_cells
210
+ mass_fraction_clus = np.sum(density_cube[clusbool]) / np.sum(density_cube)
209
211
 
210
212
  print("Signature Threshold of Clusters:", cluster_thresh)
211
- print("Volume Fraction of Clusters:", volume_fraction)
212
- print("Mass Fraction of Clusters:", mass_fraction)
213
+ print("Volume Fraction of Clusters:", volume_fraction_clus)
214
+ print("Mass Fraction of Clusters:", mass_fraction_clus)
213
215
  print("")
214
216
 
215
217
  print("---------------------------------------")
216
218
  print(" Filament Boolean Filter Report ")
217
219
  print("---------------------------------------\n")
218
220
 
219
- volume_fraction = np.sum(filbool) / N_cells
220
- mass_fraction = np.sum(delta[filbool]) / np.sum(delta)
221
+ volume_fraction_fil = np.sum(filbool) / N_cells
222
+ mass_fraction_fil = np.sum(density_cube[filbool]) / np.sum(density_cube)
221
223
 
222
224
  print("Signature Threshold of Filaments:", filament_thresh)
223
- print("Volume Fraction of Filaments:", volume_fraction)
224
- print("Mass Fraction of Filaments:", mass_fraction)
225
+ print("Volume Fraction of Filaments:", volume_fraction_fil)
226
+ print("Mass Fraction of Filaments:", mass_fraction_fil)
225
227
  print("")
226
228
 
227
229
  print("---------------------------------------")
228
230
  print(" Wall Boolean Filter Report ")
229
231
  print("---------------------------------------\n")
230
232
 
231
- volume_fraction = np.sum(wallbool) / N_cells
232
- mass_fraction = np.sum(delta[wallbool]) / np.sum(delta)
233
+ volume_fraction_wall = np.sum(wallbool) / N_cells
234
+ mass_fraction_wall = np.sum(density_cube[wallbool]) / np.sum(density_cube)
233
235
 
234
236
  print("Signature Threshold of Walls:", wall_thresh)
235
- print("Volume Fraction of Walls:", volume_fraction)
236
- print("Mass Fraction of Walls:", mass_fraction)
237
+ print("Volume Fraction of Walls:", volume_fraction_wall)
238
+ print("Mass Fraction of Walls:", mass_fraction_wall)
237
239
  print("")
238
240
 
239
241
  print("---------------------------------------")
240
242
  print(" Void Boolean Filter Report ")
241
243
  print("---------------------------------------\n")
242
244
 
243
- volume_fraction = np.sum(voidbool) / N_cells
244
- mass_fraction = np.sum(delta[voidbool]) / np.sum(delta)
245
+ volume_fraction_void = np.sum(voidbool) / N_cells
246
+ mass_fraction_void = np.sum(density_cube[voidbool]) / np.sum(density_cube)
245
247
 
246
- print("Volume Fraction of Voids:", volume_fraction)
247
- print("Mass Fraction of Voids:", mass_fraction)
248
+ print("Volume Fraction of Voids:", volume_fraction_void)
249
+ print("Mass Fraction of Voids:", mass_fraction_void)
248
250
  print("\n---------------------------------------\n")
249
251
 
250
252
  summary_data = {
@@ -252,8 +254,22 @@ def calc_structure_bools(
252
254
  "f_vir_clus": f_vir_clus,
253
255
  "S_fil": S_fil,
254
256
  "dM2_fil": dM2_fil,
257
+ "S_fil_thresh": filament_thresh,
255
258
  "S_wall": S_wall,
256
259
  "dM2_wall": dM2_wall,
260
+ "S_wall_thresh": wall_thresh,
261
+ "mass_fractions": [
262
+ mass_fraction_clus,
263
+ mass_fraction_fil,
264
+ mass_fraction_wall,
265
+ mass_fraction_void,
266
+ ],
267
+ "volume_fractions": [
268
+ volume_fraction_clus,
269
+ volume_fraction_fil,
270
+ volume_fraction_wall,
271
+ volume_fraction_void,
272
+ ],
257
273
  }
258
274
 
259
275
  return clusbool, filbool, wallbool, voidbool, summary_data
@@ -30,7 +30,7 @@ def test_calc_structure_bools():
30
30
  np.roll(m.sphere(32, 2), -10, axis=0) + np.roll(m.sphere(32, 2), 10, axis=0)
31
31
  ) >= 1
32
32
  clusbool, filbool, wallbool, voidbool, summary_stats = m.calc_structure_bools(
33
- delta=field,
33
+ field,
34
34
  max_sigs=sigs,
35
35
  verbose=True,
36
36
  clusbool=clusbool,
@@ -42,3 +42,18 @@ def test_calc_structure_bools():
42
42
  assert filbool.shape == (32, 32, 32)
43
43
  assert wallbool.shape == (32, 32, 32)
44
44
  assert voidbool.shape == (32, 32, 32)
45
+ assert type(summary_stats) is dict
46
+
47
+ clusbool, filbool, wallbool, voidbool = m.calc_structure_bools(
48
+ field,
49
+ max_sigs=sigs,
50
+ verbose=False,
51
+ clusbool=clusbool,
52
+ Smin=-3,
53
+ Smax=2,
54
+ Δ=370,
55
+ )
56
+ assert clusbool.shape == (32, 32, 32)
57
+ assert filbool.shape == (32, 32, 32)
58
+ assert wallbool.shape == (32, 32, 32)
59
+ assert voidbool.shape == (32, 32, 32)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes