Skip to content

Commit

Permalink
fix joss
Browse files Browse the repository at this point in the history
  • Loading branch information
pswpswpsw committed Feb 20, 2024
1 parent b2b1f8d commit b4fd1b6
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
python-version: 3.10.13

- name: Install dependencies
run: python -m pip install wheel twine
run: python -m pip install wheel twine build

- name: Build package
run: python -m build
Expand Down
Binary file modified docs/JOSS/Fig2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 39 additions & 3 deletions docs/JOSS/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,44 @@ @book{Kutz2016book
doi={10.1137/1.9781611974508},
publisher={SIAM}
}


@software{Falcon_PyTorch_Lightning_2019,
author = {Falcon, William and {The PyTorch Lightning team}},
doi = {10.5281/zenodo.3828935},
license = {Apache-2.0},
month = mar,
title = {{PyTorch Lightning}},
url = {https://github.com/Lightning-AI/lightning},
version = {1.4},
year = {2019}
}
@article{kaptanoglu2022pysindy,
doi = {10.21105/joss.03994},
url = {https://doi.org/10.21105/joss.03994},
year = {2022},
publisher = {The Open Journal},
volume = {7},
number = {69},
pages = {3994},
author = {Alan A. Kaptanoglu and Brian M. de Silva and Urban Fasel and Kadierdan Kaheman and Andy J. Goldschmidt and Jared Callaham and Charles B. Delahunt and Zachary G. Nicolaou and Kathleen Champion and Jean-Christophe Loiseau and J. Nathan Kutz and Steven L. Brunton},
title = {PySINDy: A comprehensive Python package for robust sparse system identification},
journal = {Journal of Open Source Software}
}
@article{pedregosa2011scikit,
title={Scikit-learn: Machine learning in Python},
author={Pedregosa, Fabian and Varoquaux, Ga{\"e}l and Gramfort, Alexandre and Michel, Vincent and Thirion, Bertrand and Grisel, Olivier and Blondel, Mathieu and Prettenhofer, Peter and Weiss, Ron and Dubourg, Vincent and others},
journal={the Journal of machine Learning research},
volume={12},
pages={2825--2830},
year={2011},
publisher={JMLR. org}
}
@article{paszke2019pytorch,
title={Pytorch: An imperative style, high-performance deep learning library},
author={Paszke, Adam and Gross, Sam and Massa, Francisco and Lerer, Adam and Bradbury, James and Chanan, Gregory and Killeen, Trevor and Lin, Zeming and Gimelshein, Natalia and Antiga, Luca and others},
journal={Advances in neural information processing systems},
volume={32},
year={2019}
}
@article{schmid2022dynamic,
author = {Schmid, Peter J},
journal = {Annual Review of Fluid Mechanics},
Expand Down Expand Up @@ -549,7 +585,7 @@ @article{peitz2020data
journal = {SIAM Journal on Applied Dynamical Systems},
number = {3},
pages = {2162--2193},
title = {Data-driven model predictive control using interpolated Koopman generators},
title = {Data-driven model predictive control using interpolated {K}oopman generators},
volume = {19},
doi={10.1137/20M1325678},
year = {2020}}
Expand Down
17 changes: 7 additions & 10 deletions docs/JOSS/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ Specifically, `PyKoopman` offers tools for designing the observables (i.e., func

![External package dependencies of PyKoopman.\label{fig:package-structure-dependency}](./Fig2.png){ width=80% }

The core component of the PyKoopman package is the Koopman model class. We used several base classes from `sklearn` to build the machine learning pipeline. We used `torch` and `lightning` for implementing deep learning methods for Koopman operator. We also used `pydmd` to incorporate some existing implementation for regression after nonlinear observables are chosen. Finally, we used `derivative` to obtain time derivative to deal with non-uniformly sampled data. To summarize, the external package dependencies are depicted in Fig. \ref{fig:package-structure-dependency}.
The core component of the PyKoopman package is the Koopman model class. We used several base classes from `scikit-learn` [@pedregosa2011scikit] to build the machine learning pipeline. We used `pytorch` [@paszke2019pytorch] and `lightning` [@Falcon_PyTorch_Lightning_2019] for implementing deep learning methods for Koopman operator. We also used `PyDMD` [@demo2018pydmd] to incorporate some existing implementation for regression after nonlinear observables are chosen. Finally, we used `derivative` [@kaptanoglu2022pysindy] to obtain time derivative to deal with non-uniformly sampled data. To summarize, the external package dependencies are depicted in Fig. \ref{fig:package-structure-dependency}.

<!-- Below are justifications for each dependency:
Expand Down Expand Up @@ -96,10 +96,10 @@ At the time of writing, we have the following features implemented:
- Observable library for lifting the state $\mathbf{x}$ into the observable space

- Identity (for DMD/DMDc or in case users want to compute observables themselves): `Identity`
- Multivariate polynomials: `Polynomial` [@Williams2015jnls]
- Time delay coordinates: `TimeDelay` [@mezic2004comparison;@Brunton2017natcomm]
- Radial basis functions: `RadialBasisFunctions` [@Williams2015jnls]
- Random Fourier features: `RandomFourierFeatures` [@degennaro2019scalable]
- Multivariate polynomials [@Williams2015jnls]: `Polynomial`
- Time delay coordinates [@mezic2004comparison;@Brunton2017natcomm]: `TimeDelay`
- Radial basis functions [@Williams2015jnls]: `RadialBasisFunctions`
- Random Fourier features [@degennaro2019scalable]: `RandomFourierFeatures`
- Custom library (defined by user-supplied functions): `CustomObservables`
- Concatenation of observables: `ConcatObservables`

Expand Down Expand Up @@ -144,10 +144,7 @@ At the time of writing, we have the following features implemented:
# Example


The `PyKoopman` [GitHub repository](https://github.com/dynamicslab/pykoopman) provides
several helpful Jupyter notebook tutorials. Here, we briefly demonstrate a typical workflow
using the `PyKoopman` package to approximate Koopman operator of a 2D
nonlinear system.
The `PyKoopman` [GitHub repository](https://github.com/dynamicslab/pykoopman) provides several helpful Jupyter notebook tutorials. Here, we briefly demonstrate a typical workflow using the `PyKoopman` package to approximate Koopman operator of a 2D nonlinear system.

First, consider the dynamical system
$$
Expand Down Expand Up @@ -206,7 +203,7 @@ model = Koopman(observables=Polynomial(2),regressor=EDMD())
model.fit(X,Xnext)
```

Once the `Koopman` object `model` has been fit, we can use the `model.simulate` method to make predictions over an arbitrary time horizon. Fig. \ref{fig:example-edmd} displays the excellent agreement between ground truth and the EDMD prediction from the aforementioned `Koopman`` model on randomly generated unseen test data.
Once the `Koopman` object `model` has been fit, we can use the `model.simulate` method to make predictions over an arbitrary time horizon. Fig. \ref{fig:example-edmd} displays the excellent agreement between ground truth and the EDMD prediction from the aforementioned `Koopman` model on randomly generated unseen test data.

<!-- For example, the following code demonstrates the usage of `model.simulate`` to make predictions for 50 unseen initial conditions sampled on the unit circle.
Expand Down

0 comments on commit b4fd1b6

Please sign in to comment.