modulo-vki 2.0.7__py3-none-any.whl → 2.1.1__py3-none-any.whl

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.
@@ -25,11 +25,11 @@ def Bound_EXT(S, Ex, boundaries):
25
25
  # Ex=int((Nf-1)/2) # Extension on each size
26
26
  size_Ext = 2 * Ex + len(S) # Compute the size of the extended signal
27
27
  S_extend = np.zeros((int(size_Ext))) # Initialize extended signal
28
- S_extend[Ex:int((size_Ext - Ex))] = S; # Assign the Signal on the zeroes
28
+ S_extend[Ex:int((size_Ext - Ex))] = S # Assign the Signal on the zeroes
29
29
 
30
30
  if boundaries == "reflect":
31
31
  LEFT = np.flip(S[0:Ex]) # Prepare the reflection on the left
32
- RIGHT = np.flip(S[len(S) - Ex:len(S)]) # Prepare the reflectino on the right
32
+ RIGHT = np.flip(S[len(S) - Ex:len(S)]) # Prepare the reflection on the right
33
33
  S_extend[0:Ex] = LEFT
34
34
  S_extend[len(S_extend) - Ex:len(S_extend)] = RIGHT
35
35
  elif boundaries == "nearest":
@@ -90,6 +90,23 @@ def conv_m(K, h, Ex, boundaries):
90
90
  # K_F=K_F1+K_F2
91
91
  return K_F2
92
92
 
93
+ def conv_m_2D(K, h, Ex, boundaries):
94
+
95
+ # Extended K
96
+ K_ext = np.pad(K, Ex, mode=boundaries)
97
+
98
+ # Filtering matrix
99
+ h_mat = np.outer(np.atleast_2d(h).T, np.atleast_2d(h))
100
+
101
+ # Filtering
102
+ K_filt = signal.fftconvolve(K_ext, h_mat, mode='valid')
103
+
104
+ # Interior K
105
+ Ex1 = int((len(K_filt) - len(K)) / 2)
106
+ K_F2 = K_filt[Ex1:(len(K_filt) - Ex1), Ex1:(len(K_filt) - Ex1)]
107
+
108
+ return K_F2
109
+
93
110
 
94
111
  def _loop_gemm(a, b, c=None, chunksize=100):
95
112
  size_i = a.shape[0]
@@ -201,7 +201,7 @@ def Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=10,CL=16,Name='', verbose=False):
201
201
  V_g=V[:,k].reshape(n_y,n_x).T
202
202
  # Prepare the plot
203
203
  fig, ax = plt.subplots(figsize=(6, 3)) # This creates the figure
204
- plt.contourf(Xg,Yg,np.sqrt(U_g**2+V_g**2),30)
204
+ contour = plt.contourf(Xg,Yg,np.sqrt(U_g**2+V_g**2),30)
205
205
  # plt.quiver(Xg,Yg,U_g,V_g,scale=10000)
206
206
  ax.set_aspect('equal') # Set equal aspect ratio
207
207
  ax.set_xlabel('$x[mm]$',fontsize=13)
@@ -229,7 +229,7 @@ def Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=10,CL=16,Name='', verbose=False):
229
229
  return
230
230
 
231
231
 
232
- def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
232
+ def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step,verbose=False):
233
233
  """
234
234
  The gif file is created from the provided data snapshot
235
235
  """
@@ -243,17 +243,22 @@ def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
243
243
  Fol_Out = 'Gif_Images_temporary'
244
244
  if not os.path.exists(Fol_Out):
245
245
  os.mkdir(Fol_Out)
246
- # Loop to produce the Gifs
246
+ # Loop to produce the Gifs
247
+ if not verbose:
248
+ print('Exporting images...')
247
249
  for k in range(1,n_t,Step):
248
250
  NameOUT = Fol_Out + os.sep + 'Im%03d' % (k) + '.png'
249
- Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=k+In,CL=16,Name=NameOUT)
251
+ Plot_2D_CFD_Cyl(Xg,Yg,U,V,k=k+In,CL=16,Name=NameOUT,verbose=verbose)
250
252
 
251
253
  import imageio # This used for the animation
252
254
  images = []
253
255
 
256
+ if not verbose:
257
+ print('Preparing images...')
254
258
  for k in range(1,n_t,Step):
255
- MEX = 'Preparing Im ' + str(k)
256
- print(MEX)
259
+ if verbose:
260
+ MEX = 'Preparing Im ' + str(k)
261
+ print(MEX)
257
262
  NameOUT = Fol_Out + os.sep + 'Im%03d' % (k) + '.png'
258
263
  images.append(imageio.imread(NameOUT))
259
264
 
@@ -266,7 +271,7 @@ def Animation_2D_CFD_Cyl(Giff_NAME,D,Xg,Yg,In,Fin,Step):
266
271
 
267
272
 
268
273
 
269
- def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG):
274
+ def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG, show=False):
270
275
  """
271
276
  This function plots the vector field from the TR-PIV in Exercise 4.
272
277
 
@@ -314,8 +319,12 @@ def Plot_Field_TEXT_Cylinder(File,Name_Mesh,Name_FIG):
314
319
  circle = plt.Circle((0,0),2.5,fill=True,color='r',edgecolor='k',alpha=0.5)
315
320
  plt.gcf().gca().add_artist(circle)
316
321
  plt.tight_layout()
317
- plt.savefig(Name_FIG, dpi=200)
318
- plt.show()
322
+ plt.savefig(Name_FIG, dpi=200)
323
+
324
+ if show:
325
+ plt.show()
326
+
327
+ plt.close()
319
328
  print(Name_FIG+' printed')
320
329
  return n_s, Xg, Yg, Vxg, Vyg, X_S, Y_S
321
330
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: modulo_vki
3
- Version: 2.0.7
3
+ Version: 2.1.1
4
4
  Summary: MODULO (MODal mULtiscale pOd) is a software developed at the von Karman Institute to perform Multiscale Modal Analysis of numerical and experimental data.
5
5
  Home-page: https://github.com/mendezVKI/MODULO/tree/master/modulo_python_package/
6
6
  Author: ['R. Poletti', 'L. Schena', 'D. Ninni', 'M. A. Mendez']
@@ -21,27 +21,42 @@ Requires-Dist: ipython
21
21
  Requires-Dist: ipython-genutils
22
22
  Requires-Dist: ipywidgets
23
23
  Requires-Dist: matplotlib
24
+ Dynamic: author
25
+ Dynamic: author-email
26
+ Dynamic: classifier
27
+ Dynamic: description
28
+ Dynamic: description-content-type
29
+ Dynamic: home-page
30
+ Dynamic: license
31
+ Dynamic: license-file
32
+ Dynamic: requires-dist
33
+ Dynamic: requires-python
34
+ Dynamic: summary
24
35
 
25
36
 
26
37
 
27
38
  MODULO: a python toolbox for data-driven modal decomposition
28
- -----------------------------------------------------------
39
+ ------------------------------------------------------------
29
40
 
30
41
  .. image:: https://readthedocs.org/projects/modulo/badge/?version=latest
31
42
  :target: https://modulo.readthedocs.io/en/latest/?badge=latest
32
43
  :alt: Documentation Status
33
44
 
34
- .. raw:: html
45
+ |DOI| |PyPI|
35
46
 
36
- <div style="text-align: center;">
37
- <img src="https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png" alt="Modulo Logo" width="500"/>
38
- </div>
47
+ .. |DOI| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.13939519.svg
48
+ :target: https://doi.org/10.5281/zenodo.13939519
39
49
 
40
- **MODULO** is a modal decomposition package developed at the von Karman Institute for Fluid Dynamics (VKI).
41
- It offers a wide range of decomposition techniques, enabling users to select the most suitable method based
42
- on the specific physics of their problem and their desired outcomes. MODULO can natively handle large
43
- datasets efficiently, featuring a memory-saving option that partitions the data and computes the decomposition in
44
- chunks (ninni2020modulo). Additionally, it supports non-uniform meshes through its weighted inner product formulation.
50
+ .. |PyPI| image:: https://img.shields.io/pypi/v/modulo_vki
51
+ :target: https://pypi.org/project/modulo_vki/
52
+
53
+ .. image:: https://modulo.readthedocs.io/en/latest/_images/modulo_logo.png
54
+ :alt: MODULO logo
55
+ :width: 500px
56
+ :align: center
57
+
58
+
59
+ **MODULO** is a modal decomposition package developed at the von Karman Institute for Fluid Dynamics (VKI). It offers a wide range of decomposition techniques, allowing users to choose the most appropriate method for their specific problem. MODULO can efficiently handle large datasets natively, thanks to a memory-saving feature that partitions the data and processes the decomposition in chunks (ninni2020modulo). Moreover, it supports non-uniform meshes through a weighted inner product formulation. Currently, MODULO heavily relies on NumPy routines and does not offer additional parallel computing capabilities beyond those naturally provided by NumPy.
45
60
 
46
61
  While the discontinued MATLAB version of MODULO (ninni2020modulo) is accessible in the “Old_Matlab_Implementation” branch,
47
62
  it is no longer maintained. The latest decomposition techniques are exclusively available in the current Python version.
@@ -49,75 +64,52 @@ it is no longer maintained. The latest decomposition techniques are exclusively
49
64
  As a part of the MODULO project, we provide a series of lectures on data-driven modal decomposition, and its applications.
50
65
  These are available at the `MODULO YouTube channel <https://www.youtube.com/@modulompod5682>`_.
51
66
 
52
-
53
67
  .. contents:: Table of contents
54
68
 
55
69
  Modal decompositions
56
70
  --------------------
57
71
  Modal decompositions aim to describe the data as a linear combination of *modes*, obtained by projecting the data
58
- onto a suitable set of basis. For instance, consider a matrix $D(x, t)$, where $x$ and $t$ are the spatial and temporal
59
- coordinates, respectively, the modal decomposition can be written as:
60
-
61
- $D(x_i, t_k) = \\phi(x_i) \\Sigma \\psi(t_k)^T$
62
-
63
- where $\\phi(x_i)$ is the spatial basis, $\\psi(t_k)$ is the temporal basis, and $\\Sigma$ is the modal coefficients.
64
- Different decompositions employ different basis, such as prescribed Fourier basis ($\\psi_\\mathcal{F}$) for
72
+ onto a suitable set of basis. Different decompositions employ different bases, such as prescribed Fourier basis for
65
73
  the Discrete Fourier Transform (DFT), or data-driven basis, i.e. tailored on the dataset at hand,
66
- for the Proper Orthogonal Decomposition (POD).
67
-
68
- We refer to (mendez2022statistical, mendez2022generalizedmultiscalemodalanalysis, Mendez_2023) for an introduction to the topic.
69
-
74
+ for the Proper Orthogonal Decomposition (POD). We refer to `Mendez (2022) <https://doi.org/10.48550/arXiv.2201.03847>`_, `Mendez (2023) <https://doi.org/10.1017/9781108896214.013>`_, and `Mendez et al. (2023) <https://arxiv.org/abs/2208.07746>`_, for an introduction to the topic.
70
75
  MODULO currently features the following decompositions:
71
- - Discrete Fourier Transform (DFT) (briggs1995dft)
72
- - Proper Orthogonal Decomposition (POD) (sirovich1987turbulence, berkooz1993proper)
73
- - Multi-Scale Proper Orthogonal Decomposition (mPOD) (mendez2019multi)
74
- - Dynamic Mode Decomposition (DMD) (schmid2010dynamic)
75
- - Spectral Proper Orthogonal Decomposition (SPOD) (csieber2016spectral, towne2018spectral), note that the two are
76
- different formulations, and both are available in MODULO.
77
- - Kernel Proper Orthogonal Decomposition (KPOD) (mika1998kernel)
76
+
77
+ - Discrete Fourier Transform (DFT) (`Briggs et al. (1997) <https://epubs.siam.org/doi/book/10.1137/1.9781611971514>`_)
78
+ - Proper Orthogonal Decomposition (POD) (`Sirovich et al. (1987) <https://www.ams.org/journals/qam/1987-45-03/S0033-569X-1987-0910464-1/S0033-569X-1987-0910464-1.pdf>`_ , `Berkooz et al. (1993) <https://doi.org/10.1146/annurev.fl.25.010193.002543>`_)
79
+ - Multi-Scale Proper Orthogonal Decomposition (mPOD) (`Mendez et al. (2019) <https://arxiv.org/abs/1804.09646>`_)
80
+ - Dynamic Mode Decomposition (DMD) (`Schmid (2010) <https://doi.org/10.1017/S0022112010001217>`_)
81
+ - Spectral Proper Orthogonal Decomposition (SPOD) (`Sieber et al. (2016) <https://doi.org/10.48550/arXiv.1508.04642>`_, `Towne et al. (2018) <https://doi.org/10.48550/arXiv.1708.04393>`_),
82
+ note that the two are different formulations, and both are available in MODULO.
83
+ - Kernel Proper Orthogonal Decomposition (KPOD) (`Mika et al. (1998) <https://proceedings.neurips.cc/paper_files/paper/1998/file/226d1f15ecd35f784d2a20c3ecf56d7f-Paper.pdf>`_)
78
84
 
79
85
  We remind the curious reader to the respective references for a detailed description of each decomposition, and to the
80
86
  documentation for a practical guide on how to use them in MODULO.
81
87
 
82
-
83
88
  Release Notes
84
89
  -------------
85
- The latest version of MODULO (v2.0) includes the following updates:
86
-
87
- 1. **Faster EIG/SVD algorithms**, using powerful randomized svd solvers from scikit_learn
88
- (see `here<https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html>`_
89
- and `here <https://scikit-learn.org/stable/modules/generated/sklearn.utils.extmath.randomized_svd.html>`_.)
90
- It is now possible to select various options as "eig_solver" and "svd_solver",
91
- offering different trade-offs in terms of accuracy vs computational time.
90
+ This version of MODULO includes the following updates:
92
91
 
93
- 2. **Computation the POD directly via SVD**, using any of the four "svd_solver" options.
94
- This is generally faster but requires more memory.
92
+ 1. **mPOD bug fix:** the previous version of mPOD was skipping the last scale of the frequency splitting vector. Fixed in this version.
95
93
 
96
- 1. **Faster subscale estimators for the mPOD:** the previous version used the rank of the correlation matrix in each scale to define
97
- the number of modes to be computed in each portion of the splitting vector before assembling the full basis.
98
- This is computationally very demanding. This estimation has been replaced by a
99
- frequency-based threshold (i.e. based on the frequency bins within each portion) since one can show that the
100
- frequency-based estimator is always more "conservative" than the rank-based estimator.
94
+ 2. **SPOD parallelisation:** CSD - SPOD can now be parallelized, leveraging `joblib`. The user needs just to pass the argument `n_processes` for the computation to be
95
+ split between different workers.
96
+
97
+ 3. **Simplified decomposition interface:** the interface of the decomposition methods has been simplified to improve user experience.
101
98
 
102
- 1. **Major improvement on the memory saving option**: the previous version of modulo always required in input the matrix D.
103
- Then, if the memory saving option was active, the matrix was partitioned and stored locally to free the RAM before computing the
104
- correlation matrix (see [this tutorial by D. Ninni](https://www.youtube.com/watch?v=LclxO1WTuao)).
105
- In the new version, it is possible to initialize a modulo object *without* the matrix D (see exercise 5 in the examples).
106
- Instead, one can create the partitions without loading the matrix D.
99
+ 4. **Enhanced POD selection:** the POD function has been redesigned, allowing users to easily choose between different POD methods.
100
+
101
+ 5. **Improved computational efficiency:** the code of the decomposition functions has been optimised, resulting in reduced computation time. mPOD now includes two additional optional arguments to enable faster filtering and to avoid recomputing the Sigmas after QR polishing.
102
+
103
+ 6. **Extended documentation:** the documentation has been significantly enriched, now including theoretical foundations for all the supported modal decomposition techniques.
107
104
 
108
- 1. **Implementation of Dynamic Mode Decomposition (DMD)** from (Schmid, P.J 2010)
109
-
110
- 2. **Implementation of the two Spectral POD formulations**, namely the one from (Sieber et al 2016),
111
- and the one from (Towne et al 2018).
112
-
113
- 3. **Implementation of a kernel version of the POD**, in which the correlation matrix is replaced by a kernel matrix.
114
- This is described in Lecture 15 of the course `Hands on Machine Learning for Fluid dynamics 2023 <https://www.vki.ac.be/index.php/events-ls/events/eventdetail/552/-/online-on-site-hands-on-machine-learning-for-fluid-dynamics-2023>`_.
115
- We refer also to: `https://arxiv.org/abs/2208.07746`.
116
-
117
- 1. **Implementation of a formulation for non-uniform meshes**, using a weighted matrix for all the relevant inner products.
118
- This is currently available only for POD and mPOD but allows for handling data produced from CFD simulation without resampling on a uniform grid (see exercise 4).
119
- It can be used both with and without the memory-saving option.
105
+
106
+ Documentation
107
+ -------------
120
108
 
109
+ The documentation of MODULO is available `here <https://lorenzoschena.github.io/MODULO/intro.html>`_. It
110
+ contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
111
+ decompositions required inputs and outputs. A `list of YouTube videos <https://www.youtube.com/@modulompod5682>`_
112
+ is also available to guide the introduce the user to modal decomposition and MODULO.
121
113
 
122
114
  Installation
123
115
  -------------
@@ -151,14 +143,6 @@ or, if you have pip installed in your environment,
151
143
  $ pip install .
152
144
 
153
145
 
154
- Documentation
155
- -------------
156
-
157
- The documentation of MODULO is available `here <https://modulo.readthedocs.io/en/latest/intro.html>`_. It
158
- contains a comprehensive guide on how to install and use the package, as well as a detailed description of the
159
- decompositions required inputs and outputs. A `list of YouTube videos<https://www.youtube.com/@modulompod5682>`_
160
- is also available to guide the introduce the user to modal decomposition and MODULO.
161
-
162
146
  Example
163
147
  -------------
164
148
 
@@ -179,7 +163,7 @@ The following example illustrates how to decompose a data set (D) using the POD
179
163
  m = ModuloVKI(D)
180
164
 
181
165
  # Compute the POD decomposition
182
- phi_POD, Sigma_POD, psi_POD = m.Compute_POD_K()
166
+ phi_POD, Sigma_POD, psi_POD = m.POD()
183
167
 
184
168
  which returns the spatial basis ($\phi$), the temporal basis ($\psi$), and the modal
185
169
  amplitudes ($\Sigma$) of the POD decomposition.
@@ -202,7 +186,7 @@ by the user (refer to `examples/ex_04_Memory_Saving.py`).
202
186
  m = ModuloVKI(D, N_PARTITIONS=10)
203
187
 
204
188
  # Compute the POD decomposition
205
- phi_POD, Sigma_POD, psi_POD = m.Compute_POD_K()
189
+ phi_POD, Sigma_POD, psi_POD = m.POD()
206
190
 
207
191
  Example 3: non-uniform grid
208
192
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -230,16 +214,25 @@ you can use the weighted inner product formulation (refer to `examples/ex_05_non
230
214
  m = ModuloVKI(D, weights=weights)
231
215
 
232
216
  # Compute the POD decomposition
233
- phi_POD, Sigma_POD, psi_POD = m.Compute_POD_K()
234
-
235
-
236
-
217
+ phi_POD, Sigma_POD, psi_POD = m.POD()
218
+
237
219
  Community guidelines
238
220
  ---------------------
239
221
 
240
222
  Contributing to MODULO
241
223
  ^^^^^^^^^^^^^^^^^^^^^^^
242
- We welcome contributions to MODULO. To create a new feature, please submit a pull request, specifying the proposed changes and
224
+ We welcome contributions to MODULO.
225
+
226
+ It is recommended to perform a shallow clone of the repository to avoid downloading the entire history of the project:
227
+
228
+ .. code-block:: bash
229
+
230
+ $ git clone --depth 1 https://github.com/mendezVKI/MODULO.git
231
+
232
+ This will download only the latest version of the repository, which is sufficient for contributing to the project, and will save
233
+ you time and disk space.
234
+
235
+ To create a new feature, please submit a pull request, specifying the proposed changes and
243
236
  providing an example of how to use the new feature (that will be included in the `examples/` folder).
244
237
 
245
238
  The pull request will be reviewed by the MODULO team before being merged into the main branch, and your contribution duly acknowledged.
@@ -250,14 +243,39 @@ If you find a bug, or you encounter unexpected behaviour, please open an issue o
250
243
 
251
244
  Ask for help
252
245
  ^^^^^^^^^^^^
246
+ If you have troubles using MODULO, or you need help with a specific decomposition, please open an issue on the MODULO GitHub repository.
253
247
 
254
248
  Citation
255
- ---------
249
+ --------
250
+
256
251
  If you use MODULO in your research, please cite it as follows:
257
252
 
258
- ``Ninni, D., & Mendez, M. A. (2020). MODULO: A software for Multiscale Proper Orthogonal Decomposition of data. SoftwareX, 12, 100622.``
253
+ Poletti, R., Schena, L., Ninni, D., Mendez, M. A. (2024).
254
+ *MODULO: A Python toolbox for data-driven modal decomposition*.
255
+ Journal of Open Source Software, 9(102), 6753. https://doi.org/10.21105/joss.06753
256
+
257
+ .. code-block:: text
258
+
259
+ @article{Poletti2024,
260
+ doi = {10.21105/joss.06753},
261
+ url = {https://doi.org/10.21105/joss.06753},
262
+ year = {2024},
263
+ publisher = {The Open Journal},
264
+ volume = {9},
265
+ number = {102},
266
+ pages = {6753},
267
+ author = {R. Poletti and L. Schena and D. Ninni and M. A. Mendez},
268
+ title = {MODULO: A Python toolbox for data-driven modal decomposition},
269
+ journal = {Journal of Open Source Software}
270
+ }
271
+
272
+ and
273
+
274
+ Ninni, D., & Mendez, M. A. (2020).
275
+ *MODULO: A software for Multiscale Proper Orthogonal Decomposition of data*.
276
+ SoftwareX, 12, 100622. https://doi.org/10.1016/j.softx.2020.100622
259
277
 
260
- .. code-block:: text
278
+ .. code-block:: text
261
279
 
262
280
  @article{ninni2020modulo,
263
281
  title={MODULO: A software for Multiscale Proper Orthogonal Decomposition of data},
@@ -269,7 +287,6 @@ If you use MODULO in your research, please cite it as follows:
269
287
  publisher={Elsevier}
270
288
  }
271
289
 
272
- We are currently working on a Journal of Open Source article that will be available soon.
273
290
 
274
291
  References
275
292
  ----------
@@ -302,3 +319,8 @@ There are also decomposition-specific projects, some of which are listed below:
302
319
  - Ichinaga, Andreuzzi, Demo, Tezzele, Lapo, Rozza, Brunton, Kutz. PyDMD: A Python package for robust dynamic mode decomposition. arXiv preprint, 2024.
303
320
  - Rogowski, Marcin, et al. "Unlocking massively parallel spectral proper orthogonal decompositions in the PySPOD package." Computer Physics Communications 302 (2024): 109246.
304
321
 
322
+
323
+
324
+
325
+
326
+
@@ -0,0 +1,26 @@
1
+ modulo_vki/__init__.py,sha256=AOjmeFjHj69m45iZzfTHM6-SLUelgKdGeu3VdSg9hIo,39
2
+ modulo_vki/modulo.py,sha256=OYMLteELmAHyhfByCoy2Vqg4h7bUMsgbmIDF7jUXf3A,38261
3
+ modulo_vki/modulo_old.py,sha256=3r_BBYQfbmZWGDyPukyJTVYVVcAVuEE0CmREEJkzsxU,59413
4
+ modulo_vki/core/__init__.py,sha256=y9mIqtmSg3o8TXMqFxoiMCoMSle6mK0LBrvNJCVM1Zg,226
5
+ modulo_vki/core/_dft.py,sha256=W98vC4HR1fivZjYRQXrFKV7RBa-O3RSRwq-nCKoxqjQ,4374
6
+ modulo_vki/core/_dmd_s.py,sha256=f3DKFlWdUS33-MrCFuL93nvI3VDVwD9DrEiDpCrNKwI,2934
7
+ modulo_vki/core/_k_matrix.py,sha256=ECDau3hh80gmSTCvp7-GXtLn0QBThYz5b-A3dgHHZiY,7004
8
+ modulo_vki/core/_mpod_space.py,sha256=0Om-kMQV5n5oI67Ef5ZuXtvBDaRePMVBQYfhJ-_hK0E,7327
9
+ modulo_vki/core/_mpod_time.py,sha256=-QhLyOEAKW-E8JPhPgQETfd153Xzc-TASiJyfH-VdG0,9848
10
+ modulo_vki/core/_pod_space.py,sha256=A3dfv4Nzs9fx3qwOdlJR5HwyyfI-QcVer8P83xqa_C4,6983
11
+ modulo_vki/core/_pod_time.py,sha256=JtiFGYFV-tBKTWHWHW8zynMoLt2q8bD1bd1LP9pyvjo,2169
12
+ modulo_vki/core/_spod_s.py,sha256=rxXSsNdSTLv3sjvlUErw3xjHk0eF8H7IkSJr5nMQ8Vo,4149
13
+ modulo_vki/core/_spod_t.py,sha256=csftCPRSqs-OghQa8l0mRDL7cy5eXXSCnW8O4pnXTCY,3866
14
+ modulo_vki/core/spatial_structures.py,sha256=65xh3zD3ekjRYUeRd2KcOYzPurpua7qDf0AysY-X8hE,14712
15
+ modulo_vki/core/temporal_structures.py,sha256=0DQEdE9ssTnnfIC86VZPsNlym6fsjRAboPHHnv-9CI4,10645
16
+ modulo_vki/core/utils.py,sha256=Ac9Im9knlbZRByP6Qgv-LCDt5zEC8PbyidqXzVdeYtQ,17889
17
+ modulo_vki/utils/__init__.py,sha256=F5yy5R19dONK9oaBEpKzylorVJNcjT2kiJ5Og-ZX1ek,94
18
+ modulo_vki/utils/_plots.py,sha256=m43t08cVq-TY0BW0YPqT71hN-54hBphIYKZEn8Kw16E,1453
19
+ modulo_vki/utils/_utils.py,sha256=WFD7nwjSzVHpevVwTEvMdjAmcbeqwoXT9M48tIIniJw,14355
20
+ modulo_vki/utils/others.py,sha256=26ES5EmsLhwkvcXTwNhDMkblGrxoWepX5c9TXeLTRWg,17336
21
+ modulo_vki/utils/read_db.py,sha256=lJFauxJxS0_mYoxrbn-43UqZjOkr-qb9f6RTUq4IxZU,15149
22
+ modulo_vki-2.1.1.dist-info/licenses/LICENSE,sha256=5TivriXFErrYrJgBq3M72kHNHqtSiCft3xESM1zHc0k,1091
23
+ modulo_vki-2.1.1.dist-info/METADATA,sha256=MGJRX_sOUGm4_18AnPXzz3lT8PKi7KxPhbHZ9yiQEVQ,14933
24
+ modulo_vki-2.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
25
+ modulo_vki-2.1.1.dist-info/top_level.txt,sha256=4PA4AmafKU6M7us7gvt_Q976Khx3qjNUEThRRM5zxeA,11
26
+ modulo_vki-2.1.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.3.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,22 +0,0 @@
1
- modulo_vki/__init__.py,sha256=wKu93pAmJcEzH5iKpXZ6rguM43RdI9C-4W4r8frvpc0,594
2
- modulo_vki/modulo.py,sha256=j6cdcDcHR8omT9i-FSKzRSwh_dT4PbKM1RN35NnVmU0,37654
3
- modulo_vki/core/__init__.py,sha256=y9mIqtmSg3o8TXMqFxoiMCoMSle6mK0LBrvNJCVM1Zg,226
4
- modulo_vki/core/_dft.py,sha256=Sq-vH8DlypAjHEGfWBAzBZp7DqKMCQ9G82QwdbYo-vs,2285
5
- modulo_vki/core/_dmd_s.py,sha256=lD7COE1Zinxyjd4IZl0MxT4XtqKM9JtXLL4U26MbtFc,2678
6
- modulo_vki/core/_k_matrix.py,sha256=SxS5esKl8ifMtTYWWeX437UWADKB3fW4ozKGryxVHpM,3687
7
- modulo_vki/core/_mpod_space.py,sha256=0Om-kMQV5n5oI67Ef5ZuXtvBDaRePMVBQYfhJ-_hK0E,7327
8
- modulo_vki/core/_mpod_time.py,sha256=ItlFTEl-uhj76aIpHpq8U2-vokTnPiE3PL60RKHUYlM,8498
9
- modulo_vki/core/_pod_space.py,sha256=l-Fbcg0JdnOMb_jyKwFyM8YeanXxWa8EvwEdOs5QV6U,6960
10
- modulo_vki/core/_pod_time.py,sha256=xWEOX6pO7Cpx1Vm7vF7X4YSORMNuAOpJyfpJiG-foTI,2144
11
- modulo_vki/core/_spod_s.py,sha256=rxXSsNdSTLv3sjvlUErw3xjHk0eF8H7IkSJr5nMQ8Vo,4149
12
- modulo_vki/core/_spod_t.py,sha256=csftCPRSqs-OghQa8l0mRDL7cy5eXXSCnW8O4pnXTCY,3866
13
- modulo_vki/utils/__init__.py,sha256=F5yy5R19dONK9oaBEpKzylorVJNcjT2kiJ5Og-ZX1ek,94
14
- modulo_vki/utils/_plots.py,sha256=m43t08cVq-TY0BW0YPqT71hN-54hBphIYKZEn8Kw16E,1453
15
- modulo_vki/utils/_utils.py,sha256=5-keBtdW6Z-QmUvgX2ITWOIddsdn0svHudynUXkc3ag,13935
16
- modulo_vki/utils/others.py,sha256=4VOfB5Xf-lYYdh2qFDXK3Oy7u4xgvjzTgidNTlg2qg0,17101
17
- modulo_vki/utils/read_db.py,sha256=lJFauxJxS0_mYoxrbn-43UqZjOkr-qb9f6RTUq4IxZU,15149
18
- modulo_vki-2.0.7.dist-info/LICENSE,sha256=5TivriXFErrYrJgBq3M72kHNHqtSiCft3xESM1zHc0k,1091
19
- modulo_vki-2.0.7.dist-info/METADATA,sha256=6CuUQwoompNn5fy8b2dfI7xRN31xtfItgYGo9HbMqQo,14572
20
- modulo_vki-2.0.7.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
21
- modulo_vki-2.0.7.dist-info/top_level.txt,sha256=4PA4AmafKU6M7us7gvt_Q976Khx3qjNUEThRRM5zxeA,11
22
- modulo_vki-2.0.7.dist-info/RECORD,,