├── CONTRIBUTING.md ├── MANIFEST.in ├── README.md ├── docs ├── .nojekyll ├── Makefile ├── doctrees │ ├── README.doctree │ ├── environment.pickle │ ├── fast_LISA_response_tutorial.doctree │ ├── index.doctree │ ├── nbsphinx │ │ ├── fast_LISA_response_tutorial.ipynb │ │ ├── fast_LISA_response_tutorial_10_0.png │ │ ├── fast_LISA_response_tutorial_11_1.png │ │ ├── fast_LISA_response_tutorial_15_0.png │ │ ├── fast_LISA_response_tutorial_18_0.png │ │ ├── fast_LISA_response_tutorial_24_0.png │ │ ├── fast_LISA_response_tutorial_24_1.png │ │ ├── fast_LISA_response_tutorial_25_0.png │ │ ├── fast_LISA_response_tutorial_26_0.png │ │ ├── fast_LISA_response_tutorial_27_0.png │ │ ├── fast_LISA_response_tutorial_29_0.png │ │ └── fast_LISA_response_tutorial_30_0.png │ └── user │ │ └── main.doctree ├── html │ ├── .buildinfo │ ├── .buildinfo.bak │ ├── README.html │ ├── _images │ │ ├── fast_LISA_response_tutorial_11_1.png │ │ ├── fast_LISA_response_tutorial_15_0.png │ │ ├── fast_LISA_response_tutorial_18_0.png │ │ ├── fast_LISA_response_tutorial_24_0.png │ │ ├── fast_LISA_response_tutorial_24_1.png │ │ ├── fast_LISA_response_tutorial_25_0.png │ │ ├── fast_LISA_response_tutorial_26_0.png │ │ ├── fast_LISA_response_tutorial_27_0.png │ │ ├── fast_LISA_response_tutorial_29_0.png │ │ └── fast_LISA_response_tutorial_30_0.png │ ├── _sources │ │ ├── README.rst.txt │ │ ├── fast_LISA_response_tutorial.ipynb.txt │ │ ├── index.rst.txt │ │ └── user │ │ │ └── main.rst.txt │ ├── _static │ │ ├── _sphinx_javascript_frameworks_compat.js │ │ ├── basic.css │ │ ├── css │ │ │ ├── badge_only.css │ │ │ ├── fonts │ │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ ├── lato-bold-italic.woff │ │ │ │ ├── lato-bold-italic.woff2 │ │ │ │ ├── lato-bold.woff │ │ │ │ ├── lato-bold.woff2 │ │ │ │ ├── lato-normal-italic.woff │ │ │ │ ├── lato-normal-italic.woff2 │ │ │ │ ├── lato-normal.woff │ │ │ │ └── lato-normal.woff2 │ │ │ └── theme.css │ │ ├── doctools.js │ │ ├── documentation_options.js │ │ ├── file.png │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── Lato │ │ │ │ ├── lato-bold.eot │ │ │ │ ├── lato-bold.ttf │ │ │ │ ├── lato-bold.woff │ │ │ │ ├── lato-bold.woff2 │ │ │ │ ├── lato-bolditalic.eot │ │ │ │ ├── lato-bolditalic.ttf │ │ │ │ ├── lato-bolditalic.woff │ │ │ │ ├── lato-bolditalic.woff2 │ │ │ │ ├── lato-italic.eot │ │ │ │ ├── lato-italic.ttf │ │ │ │ ├── lato-italic.woff │ │ │ │ ├── lato-italic.woff2 │ │ │ │ ├── lato-regular.eot │ │ │ │ ├── lato-regular.ttf │ │ │ │ ├── lato-regular.woff │ │ │ │ └── lato-regular.woff2 │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ ├── Roboto-Slab-Light.woff │ │ │ ├── Roboto-Slab-Light.woff2 │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ ├── Roboto-Slab-Thin.woff │ │ │ ├── Roboto-Slab-Thin.woff2 │ │ │ ├── RobotoSlab │ │ │ │ ├── roboto-slab-v7-bold.eot │ │ │ │ ├── roboto-slab-v7-bold.ttf │ │ │ │ ├── roboto-slab-v7-bold.woff │ │ │ │ ├── roboto-slab-v7-bold.woff2 │ │ │ │ ├── roboto-slab-v7-regular.eot │ │ │ │ ├── roboto-slab-v7-regular.ttf │ │ │ │ ├── roboto-slab-v7-regular.woff │ │ │ │ └── roboto-slab-v7-regular.woff2 │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── lato-bold-italic.woff │ │ │ ├── lato-bold-italic.woff2 │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bold.woff2 │ │ │ ├── lato-normal-italic.woff │ │ │ ├── lato-normal-italic.woff2 │ │ │ ├── lato-normal.woff │ │ │ └── lato-normal.woff2 │ │ ├── jquery-3.5.1.js │ │ ├── jquery.js │ │ ├── js │ │ │ ├── badge_only.js │ │ │ ├── html5shiv-printshiv.min.js │ │ │ ├── html5shiv.min.js │ │ │ ├── modernizr.min.js │ │ │ ├── theme.js │ │ │ └── versions.js │ │ ├── language_data.js │ │ ├── minus.png │ │ ├── nbsphinx-broken-thumbnail.svg │ │ ├── nbsphinx-code-cells.css │ │ ├── nbsphinx-gallery.css │ │ ├── nbsphinx-no-thumbnail.svg │ │ ├── plus.png │ │ ├── pygments.css │ │ ├── searchtools.js │ │ ├── sphinx_highlight.js │ │ ├── underscore-1.13.1.js │ │ ├── underscore-1.3.1.js │ │ └── underscore.js │ ├── fast_LISA_response_tutorial.html │ ├── fast_LISA_response_tutorial.ipynb │ ├── genindex.html │ ├── index.html │ ├── objects.inv │ ├── py-modindex.html │ ├── search.html │ ├── searchindex.js │ └── user │ │ └── main.html ├── index.html ├── make.bat └── source │ ├── README.rst │ ├── conf.py │ ├── fast_LISA_response_tutorial.ipynb │ ├── index.rst │ └── user │ └── main.rst ├── examples └── fast_LISA_response_tutorial.ipynb ├── fastlisaresponse ├── __init__.py ├── cutils │ ├── __init__.py │ ├── include │ │ ├── LISAResponse.hh │ │ └── cuda_complex.hpp │ └── src │ │ ├── LISAResponse.cu │ │ └── responselisa.pyx ├── pointer_adjust.py ├── response.py ├── tests │ ├── __init__.py │ └── test_fastlisaresponse.py └── utils │ ├── __init__.py │ └── utility.py ├── pyproject.toml ├── requirements.txt ├── scripts └── prebuild.py └── setup.py /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | Please note we have a code of conduct, please follow it in all your interactions with the project. 7 | 8 | ## Pull Request Process 9 | 10 | 1. Increase the version numbers in any examples files and the README.md to the new version that this 11 | Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). 12 | 2. The owners of the repository will merge in the pull request after review. 13 | 14 | ## Code of Conduct 15 | 16 | ### Our Pledge 17 | 18 | In the interest of fostering an open and welcoming environment, we as 19 | contributors and maintainers pledge to making participation in our project and 20 | our community a harassment-free experience for everyone, regardless of age, body 21 | size, disability, ethnicity, gender identity and expression, level of experience, 22 | nationality, personal appearance, race, religion, or sexual identity and 23 | orientation. 24 | 25 | ### Our Standards 26 | 27 | Examples of behavior that contributes to creating a positive environment 28 | include: 29 | 30 | * Using welcoming and inclusive language 31 | * Being respectful of differing viewpoints and experiences 32 | * Gracefully accepting constructive criticism 33 | * Focusing on what is best for the community 34 | * Showing empathy towards other community members 35 | 36 | Examples of unacceptable behavior by participants include: 37 | 38 | * The use of sexualized language or imagery and unwelcome sexual attention or 39 | advances 40 | * Trolling, insulting/derogatory comments, and personal or political attacks 41 | * Public or private harassment 42 | * Publishing others' private information, such as a physical or electronic 43 | address, without explicit permission 44 | * Other conduct which could reasonably be considered inappropriate in a 45 | professional setting 46 | 47 | ### Our Responsibilities 48 | 49 | Project maintainers are responsible for clarifying the standards of acceptable 50 | behavior and are expected to take appropriate and fair corrective action in 51 | response to any instances of unacceptable behavior. 52 | 53 | Project maintainers have the right and responsibility to remove, edit, or 54 | reject comments, commits, code, wiki edits, issues, and other contributions 55 | that are not aligned to this Code of Conduct, or to ban temporarily or 56 | permanently any contributor for other behaviors that they deem inappropriate, 57 | threatening, offensive, or harmful. 58 | 59 | ### Scope 60 | 61 | This Code of Conduct applies both within project spaces and in public spaces 62 | when an individual is representing the project or its community. Examples of 63 | representing a project or community include using an official project e-mail 64 | address, posting via an official social media account, or acting as an appointed 65 | representative at an online or offline event. Representation of a project may be 66 | further defined and clarified by project maintainers. 67 | 68 | ### Enforcement 69 | 70 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 71 | reported by contacting the project team via email at mikekatz04@gmail.com. All 72 | complaints will be reviewed and investigated and will result in a response that 73 | is deemed necessary and appropriate to the circumstances. The project team is 74 | obligated to maintain confidentiality with regard to the reporter of an incident. 75 | Further details of specific enforcement policies may be posted separately. 76 | 77 | Project maintainers who do not follow or enforce the Code of Conduct in good 78 | faith may face temporary or permanent repercussions as determined by other 79 | members of the project's leadership. 80 | 81 | ### Attribution 82 | 83 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 84 | available at [http://contributor-covenant.org/version/1/4][version] 85 | 86 | [homepage]: http://contributor-covenant.org 87 | [version]: http://contributor-covenant.org/version/1/4/ 88 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | # Include the README 2 | include README 3 | 4 | # Include the license file 5 | include LICENCE 6 | include THIRD.txt 7 | 8 | # Include dependencies 9 | include requirements*.txt 10 | 11 | # Include makefile 12 | include Makefile 13 | 14 | # Include docs 15 | recursive-include docs 16 | 17 | # Include Changelog 18 | include CHANGELOG 19 | 20 | # Include tests 21 | recursive-include tests/testsuites * 22 | 23 | # Include scripts 24 | recursive-include scripts * 25 | 26 | # Include tuto 27 | include tutorial/*.ipynb 28 | 29 | # Include include files 30 | include include/* 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fastlisaresponse: Generic LISA response function for GPUs 2 | 3 | This code base provides a GPU-accelerated version of the generic time-domain LISA response function. The GPU-acceleration allows this code to be used directly in Parameter Estimation. 4 | 5 | Please see the [documentation](https://mikekatz04.github.io/lisa-on-gpu/) for further information on these modules. The code can be found on Github [here](https://github.com/mikekatz04/lisa-on-gpu). It can be found on [Zenodo](https://zenodo.org/record/3981654#.XzS_KRNKjlw). 6 | 7 | If you use all or any parts of this code, please cite [arXiv:2204.06633](https://arxiv.org/abs/2204.06633). See the [documentation](https://mikekatz04.github.io/lisa-on-gpu/) to properly cite specific modules. 8 | 9 | 10 | ## Getting Started 11 | 12 | Install with pip (CPU only for now): 13 | ``` 14 | pip install fastlisaresponse 15 | ``` 16 | To import fastlisaresponse: 17 | 18 | ``` 19 | from fastlisaresponse import ResponseWrapper 20 | ``` 21 | 22 | See [examples notebook](https://github.com/mikekatz04/lisa-on-gpu/blob/master/examples/fast_LISA_response_tutorial.ipynb). 23 | 24 | 25 | ### Prerequisites 26 | 27 | Now (version 1.0.11) `fastlisaresponse` requires the newest version of [LISA Analysis Tools](github.com/mikekatz04/LISAanalysistools). You can run `pip install lisaanalysistools`. 28 | 29 | To install this software for CPU usage, you need Python >3.4 and NumPy. To run the examples, you will also need jupyter and matplotlib. We generally recommend installing everything, including gcc and g++ compilers, in the conda environment as is shown in the examples here. This generally helps avoid compilation and linking issues. If you use your own chosen compiler, you will need to make sure all necessary information is passed to the setup command (see below). You also may need to add information to the `setup.py` file. 30 | 31 | To install this software for use with NVIDIA GPUs (compute capability >2.0), you need the [CUDA toolkit](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html) and [CuPy](https://cupy.chainer.org/). The CUDA toolkit must have cuda version >8.0. Be sure to properly install CuPy within the correct CUDA toolkit version. Make sure the nvcc binary is on `$PATH` or set it as the `CUDAHOME` environment variable. 32 | 33 | 34 | ### Installing 35 | 36 | 37 | Install with pip (CPU only for now): 38 | ``` 39 | pip install fastlisaresponse 40 | ``` 41 | 42 | To install from source: 43 | 44 | 0) [Install Anaconda](https://docs.anaconda.com/anaconda/install/) if you do not have it. 45 | 46 | 1) Create a virtual environment. 47 | 48 | ``` 49 | conda create -n lisa_resp_env -c conda-forge gcc_linux-64 gxx_linux-64 numpy Cython scipy jupyter ipython h5py matplotlib python=3.12 50 | conda activate lisa_resp_env 51 | ``` 52 | 53 | If on MACOSX, substitute `gcc_linux-64` and `gxx_linus-64` with `clang_osx-64` and `clangxx_osx-64`. 54 | 55 | If you want a faster install, you can install the python packages (numpy, Cython, scipy, tqdm, jupyter, ipython, h5py, requests, matplotlib) with pip. 56 | 57 | 2) Clone the repository. 58 | 59 | ``` 60 | git clone https://github.com/mikekatz04/lisa-on-gpu.git 61 | cd lisa-on-gpu 62 | ``` 63 | 64 | 3) If using GPUs, use pip to [install cupy](https://docs-cupy.chainer.org/en/stable/install.html). 65 | 66 | ``` 67 | pip install cupy-12x 68 | ``` 69 | 70 | 4) Run install. Make sure CUDA is on your PATH. 71 | 72 | ``` 73 | python scripts/prebuild.py 74 | pip install . 75 | ``` 76 | 77 | ## Running the Tests 78 | 79 | Run the example notebook or the tests using `unittest` from the main directory of the code: 80 | ``` 81 | python -m unittest discover 82 | ``` 83 | 84 | ## Contributing 85 | 86 | Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. 87 | 88 | ## Versioning 89 | 90 | We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/mikekatz04/lisa-on-gpu/tags). 91 | 92 | Current Version: 1.0.11 93 | 94 | ## Authors 95 | 96 | * **Michael Katz** 97 | * Jean-Baptiste Bayle 98 | * Alvin J. K. Chua 99 | * Michele Vallisneri 100 | 101 | ### Contibutors 102 | 103 | * Maybe you! 104 | 105 | ## License 106 | 107 | This project is licensed under the GNU License - see the [LICENSE.md](LICENSE.md) file for details. 108 | 109 | ## Acknowledgments 110 | 111 | * It was also supported in part through the computational resources and staff contributions provided for the Quest/Grail high performance computing facility at Northwestern University. 112 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/.nojekyll -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = ./ 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/doctrees/README.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/README.doctree -------------------------------------------------------------------------------- /docs/doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/doctrees/fast_LISA_response_tutorial.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/fast_LISA_response_tutorial.doctree -------------------------------------------------------------------------------- /docs/doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/index.doctree -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_10_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_10_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_11_1.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_15_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_15_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_18_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_24_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_24_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_24_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_24_1.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_25_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_25_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_26_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_26_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_27_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_27_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_29_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_29_0.png -------------------------------------------------------------------------------- /docs/doctrees/nbsphinx/fast_LISA_response_tutorial_30_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/nbsphinx/fast_LISA_response_tutorial_30_0.png -------------------------------------------------------------------------------- /docs/doctrees/user/main.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/doctrees/user/main.doctree -------------------------------------------------------------------------------- /docs/html/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 97456d5115c946c8812811860f7c907e 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/html/.buildinfo.bak: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 419b6f28d8a7b7ee62ebb0f0b6e6932e 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/html/README.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | fastlisaresponse: Generic LISA response function for GPUs — fastlisaresponse 0.1.0 documentation 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 60 | 61 |
65 | 66 |
67 |
68 |
69 |
    70 |
  • 71 | 72 |
  • 73 | View page source 74 |
  • 75 |
76 |
77 |
78 |
79 |
80 | 81 |
82 |

fastlisaresponse: Generic LISA response function for GPUs

83 |

This code base provides a GPU-accelerated version of the generic 84 | time-domain LISA response function. The GPU-acceleration allows this 85 | code to be used directly in Parameter Estimation.

86 |

Please see the 87 | documentation for 88 | further information on these modules. The code can be found on Github 89 | here. It can be found on 90 | Zenodo.

91 |

If you use all or any parts of this code, please cite 92 | arXiv:2204.06633. See the 93 | documentation to 94 | properly cite specific modules.

95 |
96 |

Getting Started

97 |

Install with pip (CPU only for now):

98 |
pip install fastlisaresponse
 99 | 
100 |
101 |

To import fastlisaresponse:

102 |
from fastlisaresponse import ResponseWrapper
103 | 
104 |
105 |

See examples 106 | notebook.

107 |
108 |

Prerequisites

109 |

Now (version 1.0.11) fastlisaresponse requires the newest version of 110 | LISA Analysis Tools. You 111 | can run pip install lisaanalysistools.

112 |

To install this software for CPU usage, you need Python >3.4 and NumPy. 113 | To run the examples, you will also need jupyter and matplotlib. We 114 | generally recommend installing everything, including gcc and g++ 115 | compilers, in the conda environment as is shown in the examples here. 116 | This generally helps avoid compilation and linking issues. If you use 117 | your own chosen compiler, you will need to make sure all necessary 118 | information is passed to the setup command (see below). You also may 119 | need to add information to the setup.py file.

120 |

To install this software for use with NVIDIA GPUs (compute capability 121 | >2.0), you need the CUDA 122 | toolkit 123 | and CuPy. The CUDA toolkit must have 124 | cuda version >8.0. Be sure to properly install CuPy within the correct 125 | CUDA toolkit version. Make sure the nvcc binary is on $PATH or set 126 | it as the CUDAHOME environment variable.

127 |
128 |
129 |

Installing

130 |

Install with pip (CPU only for now):

131 |
pip install fastlisaresponse
132 | 
133 |
134 |

To install from source:

135 |
    136 |
  1. Install Anaconda if 137 | you do not have it.

  2. 138 |
  3. Create a virtual environment.

  4. 139 |
140 |
conda create -n lisa_resp_env -c conda-forge gcc_linux-64 gxx_linux-64 numpy Cython scipy jupyter ipython h5py matplotlib python=3.12
141 | conda activate lisa_resp_env
142 | 
143 |
144 |
If on MACOSX, substitute `gcc_linux-64` and `gxx_linus-64` with `clang_osx-64` and `clangxx_osx-64`.
145 | 
146 | If you want a faster install, you can install the python packages (numpy, Cython, scipy, tqdm, jupyter, ipython, h5py, requests, matplotlib) with pip.
147 | 
148 |
149 |
    150 |
  1. Clone the repository.

  2. 151 |
152 |
git clone https://github.com/mikekatz04/lisa-on-gpu.git
153 | cd lisa-on-gpu
154 | 
155 |
156 |
    157 |
  1. If using GPUs, use pip to install 158 | cupy.

  2. 159 |
160 |
pip install cupy-12x
161 | 
162 |
163 |
    164 |
  1. Run install. Make sure CUDA is on your PATH.

  2. 165 |
166 |
python scripts/prebuild.py
167 | pip install .
168 | 
169 |
170 |
171 |
172 |
173 |

Running the Tests

174 |

Run the example notebook or the tests using unittest from the main 175 | directory of the code:

176 |
python -m unittest discover
177 | 
178 |
179 |
180 |
181 |

Contributing

182 |

Please read CONTRIBUTING.md for details on our 183 | code of conduct, and the process for submitting pull requests to us.

184 |
185 |
186 |

Versioning

187 |

We use SemVer for versioning. For the versions 188 | available, see the tags on this 189 | repository.

190 |

Current Version: 1.0.11

191 |
192 |
193 |

Authors

194 |
    195 |
  • Michael Katz

  • 196 |
  • Jean-Baptiste Bayle

  • 197 |
  • Alvin J. K. Chua

  • 198 |
  • Michele Vallisneri

  • 199 |
200 |
201 |

Contibutors

202 |
    203 |
  • Maybe you!

  • 204 |
205 |
206 |
207 |
208 |

License

209 |

This project is licensed under the GNU License - see the 210 | LICENSE.md file for details.

211 |
212 |
213 |

Acknowledgments

214 |
    215 |
  • It was also supported in part through the computational resources and 216 | staff contributions provided for the Quest/Grail high performance 217 | computing facility at Northwestern University.

  • 218 |
219 |
220 |
221 | 222 | 223 |
224 |
225 | 239 |
240 |
241 |
242 |
243 | 248 | 249 | 250 | -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_11_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_11_1.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_15_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_15_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_18_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_18_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_24_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_24_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_24_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_24_1.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_25_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_25_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_26_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_26_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_27_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_27_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_29_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_29_0.png -------------------------------------------------------------------------------- /docs/html/_images/fast_LISA_response_tutorial_30_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_images/fast_LISA_response_tutorial_30_0.png -------------------------------------------------------------------------------- /docs/html/_sources/README.rst.txt: -------------------------------------------------------------------------------- 1 | fastlisaresponse: Generic LISA response function for GPUs 2 | ========================================================= 3 | 4 | This code base provides a GPU-accelerated version of the generic 5 | time-domain LISA response function. The GPU-acceleration allows this 6 | code to be used directly in Parameter Estimation. 7 | 8 | Please see the 9 | `documentation `__ for 10 | further information on these modules. The code can be found on Github 11 | `here `__. It can be found on 12 | `Zenodo `__. 13 | 14 | If you use all or any parts of this code, please cite 15 | `arXiv:2204.06633 `__. See the 16 | `documentation `__ to 17 | properly cite specific modules. 18 | 19 | Getting Started 20 | --------------- 21 | 22 | Install with pip (CPU only for now): 23 | 24 | :: 25 | 26 | pip install fastlisaresponse 27 | 28 | To import fastlisaresponse: 29 | 30 | :: 31 | 32 | from fastlisaresponse import ResponseWrapper 33 | 34 | See `examples 35 | notebook `__. 36 | 37 | Prerequisites 38 | ~~~~~~~~~~~~~ 39 | 40 | Now (version 1.0.11) ``fastlisaresponse`` requires the newest version of 41 | `LISA Analysis Tools `__. You 42 | can run ``pip install lisaanalysistools``. 43 | 44 | To install this software for CPU usage, you need Python >3.4 and NumPy. 45 | To run the examples, you will also need jupyter and matplotlib. We 46 | generally recommend installing everything, including gcc and g++ 47 | compilers, in the conda environment as is shown in the examples here. 48 | This generally helps avoid compilation and linking issues. If you use 49 | your own chosen compiler, you will need to make sure all necessary 50 | information is passed to the setup command (see below). You also may 51 | need to add information to the ``setup.py`` file. 52 | 53 | To install this software for use with NVIDIA GPUs (compute capability 54 | >2.0), you need the `CUDA 55 | toolkit `__ 56 | and `CuPy `__. The CUDA toolkit must have 57 | cuda version >8.0. Be sure to properly install CuPy within the correct 58 | CUDA toolkit version. Make sure the nvcc binary is on ``$PATH`` or set 59 | it as the ``CUDAHOME`` environment variable. 60 | 61 | Installing 62 | ~~~~~~~~~~ 63 | 64 | Install with pip (CPU only for now): 65 | 66 | :: 67 | 68 | pip install fastlisaresponse 69 | 70 | To install from source: 71 | 72 | 0) `Install Anaconda `__ if 73 | you do not have it. 74 | 75 | 1) Create a virtual environment. 76 | 77 | :: 78 | 79 | conda create -n lisa_resp_env -c conda-forge gcc_linux-64 gxx_linux-64 numpy Cython scipy jupyter ipython h5py matplotlib python=3.12 80 | conda activate lisa_resp_env 81 | 82 | :: 83 | 84 | If on MACOSX, substitute `gcc_linux-64` and `gxx_linus-64` with `clang_osx-64` and `clangxx_osx-64`. 85 | 86 | If you want a faster install, you can install the python packages (numpy, Cython, scipy, tqdm, jupyter, ipython, h5py, requests, matplotlib) with pip. 87 | 88 | 2) Clone the repository. 89 | 90 | :: 91 | 92 | git clone https://github.com/mikekatz04/lisa-on-gpu.git 93 | cd lisa-on-gpu 94 | 95 | 3) If using GPUs, use pip to `install 96 | cupy `__. 97 | 98 | :: 99 | 100 | pip install cupy-12x 101 | 102 | 4) Run install. Make sure CUDA is on your PATH. 103 | 104 | :: 105 | 106 | python scripts/prebuild.py 107 | pip install . 108 | 109 | Running the Tests 110 | ----------------- 111 | 112 | Run the example notebook or the tests using ``unittest`` from the main 113 | directory of the code: 114 | 115 | :: 116 | 117 | python -m unittest discover 118 | 119 | Contributing 120 | ------------ 121 | 122 | Please read `CONTRIBUTING.md `__ for details on our 123 | code of conduct, and the process for submitting pull requests to us. 124 | 125 | Versioning 126 | ---------- 127 | 128 | We use `SemVer `__ for versioning. For the versions 129 | available, see the `tags on this 130 | repository `__. 131 | 132 | Current Version: 1.0.11 133 | 134 | Authors 135 | ------- 136 | 137 | - **Michael Katz** 138 | - Jean-Baptiste Bayle 139 | - Alvin J. K. Chua 140 | - Michele Vallisneri 141 | 142 | Contibutors 143 | ~~~~~~~~~~~ 144 | 145 | - Maybe you! 146 | 147 | License 148 | ------- 149 | 150 | This project is licensed under the GNU License - see the 151 | `LICENSE.md `__ file for details. 152 | 153 | Acknowledgments 154 | --------------- 155 | 156 | - It was also supported in part through the computational resources and 157 | staff contributions provided for the Quest/Grail high performance 158 | computing facility at Northwestern University. 159 | -------------------------------------------------------------------------------- /docs/html/_sources/index.rst.txt: -------------------------------------------------------------------------------- 1 | 2 | .. include:: README.rst 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | :caption: Documentation: 7 | 8 | user/main 9 | 10 | .. toctree:: 11 | :maxdepth: 4 12 | :caption: Tutorial: 13 | 14 | fast_LISA_response_tutorial 15 | -------------------------------------------------------------------------------- /docs/html/_sources/user/main.rst.txt: -------------------------------------------------------------------------------- 1 | Fast Response Function 2 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 | 4 | .. autoclass:: fastlisaresponse.response.pyResponseTDI 5 | :members: 6 | :show-inheritance: 7 | :inherited-members: 8 | 9 | Response Function Wrapper 10 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | 12 | .. autoclass:: fastlisaresponse.response.ResponseWrapper 13 | :members: 14 | :show-inheritance: 15 | :inherited-members: 16 | 17 | Utilities 18 | ~~~~~~~~~~ 19 | 20 | .. automodule:: fastlisaresponse.utils.utility 21 | :members: 22 | -------------------------------------------------------------------------------- /docs/html/_static/_sphinx_javascript_frameworks_compat.js: -------------------------------------------------------------------------------- 1 | /* Compatability shim for jQuery and underscores.js. 2 | * 3 | * Copyright Sphinx contributors 4 | * Released under the two clause BSD licence 5 | */ 6 | 7 | /** 8 | * small helper function to urldecode strings 9 | * 10 | * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL 11 | */ 12 | jQuery.urldecode = function(x) { 13 | if (!x) { 14 | return x 15 | } 16 | return decodeURIComponent(x.replace(/\+/g, ' ')); 17 | }; 18 | 19 | /** 20 | * small helper function to urlencode strings 21 | */ 22 | jQuery.urlencode = encodeURIComponent; 23 | 24 | /** 25 | * This function returns the parsed url parameters of the 26 | * current request. Multiple values per key are supported, 27 | * it will always return arrays of strings for the value parts. 28 | */ 29 | jQuery.getQueryParameters = function(s) { 30 | if (typeof s === 'undefined') 31 | s = document.location.search; 32 | var parts = s.substr(s.indexOf('?') + 1).split('&'); 33 | var result = {}; 34 | for (var i = 0; i < parts.length; i++) { 35 | var tmp = parts[i].split('=', 2); 36 | var key = jQuery.urldecode(tmp[0]); 37 | var value = jQuery.urldecode(tmp[1]); 38 | if (key in result) 39 | result[key].push(value); 40 | else 41 | result[key] = [value]; 42 | } 43 | return result; 44 | }; 45 | 46 | /** 47 | * highlight a given string on a jquery object by wrapping it in 48 | * span elements with the given class name. 49 | */ 50 | jQuery.fn.highlightText = function(text, className) { 51 | function highlight(node, addItems) { 52 | if (node.nodeType === 3) { 53 | var val = node.nodeValue; 54 | var pos = val.toLowerCase().indexOf(text); 55 | if (pos >= 0 && 56 | !jQuery(node.parentNode).hasClass(className) && 57 | !jQuery(node.parentNode).hasClass("nohighlight")) { 58 | var span; 59 | var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); 60 | if (isInSVG) { 61 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 62 | } else { 63 | span = document.createElement("span"); 64 | span.className = className; 65 | } 66 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 67 | node.parentNode.insertBefore(span, node.parentNode.insertBefore( 68 | document.createTextNode(val.substr(pos + text.length)), 69 | node.nextSibling)); 70 | node.nodeValue = val.substr(0, pos); 71 | if (isInSVG) { 72 | var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 73 | var bbox = node.parentElement.getBBox(); 74 | rect.x.baseVal.value = bbox.x; 75 | rect.y.baseVal.value = bbox.y; 76 | rect.width.baseVal.value = bbox.width; 77 | rect.height.baseVal.value = bbox.height; 78 | rect.setAttribute('class', className); 79 | addItems.push({ 80 | "parent": node.parentNode, 81 | "target": rect}); 82 | } 83 | } 84 | } 85 | else if (!jQuery(node).is("button, select, textarea")) { 86 | jQuery.each(node.childNodes, function() { 87 | highlight(this, addItems); 88 | }); 89 | } 90 | } 91 | var addItems = []; 92 | var result = this.each(function() { 93 | highlight(this, addItems); 94 | }); 95 | for (var i = 0; i < addItems.length; ++i) { 96 | jQuery(addItems[i].parent).before(addItems[i].target); 97 | } 98 | return result; 99 | }; 100 | 101 | /* 102 | * backward compatibility for jQuery.browser 103 | * This will be supported until firefox bug is fixed. 104 | */ 105 | if (!jQuery.browser) { 106 | jQuery.uaMatch = function(ua) { 107 | ua = ua.toLowerCase(); 108 | 109 | var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 110 | /(webkit)[ \/]([\w.]+)/.exec(ua) || 111 | /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 112 | /(msie) ([\w.]+)/.exec(ua) || 113 | ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 114 | []; 115 | 116 | return { 117 | browser: match[ 1 ] || "", 118 | version: match[ 2 ] || "0" 119 | }; 120 | }; 121 | jQuery.browser = {}; 122 | jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; 123 | } 124 | -------------------------------------------------------------------------------- /docs/html/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /docs/html/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /docs/html/_static/doctools.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Base JavaScript utilities for all Sphinx HTML documentation. 3 | */ 4 | "use strict"; 5 | 6 | const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ 7 | "TEXTAREA", 8 | "INPUT", 9 | "SELECT", 10 | "BUTTON", 11 | ]); 12 | 13 | const _ready = (callback) => { 14 | if (document.readyState !== "loading") { 15 | callback(); 16 | } else { 17 | document.addEventListener("DOMContentLoaded", callback); 18 | } 19 | }; 20 | 21 | /** 22 | * Small JavaScript module for the documentation. 23 | */ 24 | const Documentation = { 25 | init: () => { 26 | Documentation.initDomainIndexTable(); 27 | Documentation.initOnKeyListeners(); 28 | }, 29 | 30 | /** 31 | * i18n support 32 | */ 33 | TRANSLATIONS: {}, 34 | PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), 35 | LOCALE: "unknown", 36 | 37 | // gettext and ngettext don't access this so that the functions 38 | // can safely bound to a different name (_ = Documentation.gettext) 39 | gettext: (string) => { 40 | const translated = Documentation.TRANSLATIONS[string]; 41 | switch (typeof translated) { 42 | case "undefined": 43 | return string; // no translation 44 | case "string": 45 | return translated; // translation exists 46 | default: 47 | return translated[0]; // (singular, plural) translation tuple exists 48 | } 49 | }, 50 | 51 | ngettext: (singular, plural, n) => { 52 | const translated = Documentation.TRANSLATIONS[singular]; 53 | if (typeof translated !== "undefined") 54 | return translated[Documentation.PLURAL_EXPR(n)]; 55 | return n === 1 ? singular : plural; 56 | }, 57 | 58 | addTranslations: (catalog) => { 59 | Object.assign(Documentation.TRANSLATIONS, catalog.messages); 60 | Documentation.PLURAL_EXPR = new Function( 61 | "n", 62 | `return (${catalog.plural_expr})` 63 | ); 64 | Documentation.LOCALE = catalog.locale; 65 | }, 66 | 67 | /** 68 | * helper function to focus on search bar 69 | */ 70 | focusSearchBar: () => { 71 | document.querySelectorAll("input[name=q]")[0]?.focus(); 72 | }, 73 | 74 | /** 75 | * Initialise the domain index toggle buttons 76 | */ 77 | initDomainIndexTable: () => { 78 | const toggler = (el) => { 79 | const idNumber = el.id.substr(7); 80 | const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); 81 | if (el.src.substr(-9) === "minus.png") { 82 | el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; 83 | toggledRows.forEach((el) => (el.style.display = "none")); 84 | } else { 85 | el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; 86 | toggledRows.forEach((el) => (el.style.display = "")); 87 | } 88 | }; 89 | 90 | const togglerElements = document.querySelectorAll("img.toggler"); 91 | togglerElements.forEach((el) => 92 | el.addEventListener("click", (event) => toggler(event.currentTarget)) 93 | ); 94 | togglerElements.forEach((el) => (el.style.display = "")); 95 | if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); 96 | }, 97 | 98 | initOnKeyListeners: () => { 99 | // only install a listener if it is really needed 100 | if ( 101 | !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && 102 | !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS 103 | ) 104 | return; 105 | 106 | document.addEventListener("keydown", (event) => { 107 | // bail for input elements 108 | if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; 109 | // bail with special keys 110 | if (event.altKey || event.ctrlKey || event.metaKey) return; 111 | 112 | if (!event.shiftKey) { 113 | switch (event.key) { 114 | case "ArrowLeft": 115 | if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; 116 | 117 | const prevLink = document.querySelector('link[rel="prev"]'); 118 | if (prevLink && prevLink.href) { 119 | window.location.href = prevLink.href; 120 | event.preventDefault(); 121 | } 122 | break; 123 | case "ArrowRight": 124 | if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; 125 | 126 | const nextLink = document.querySelector('link[rel="next"]'); 127 | if (nextLink && nextLink.href) { 128 | window.location.href = nextLink.href; 129 | event.preventDefault(); 130 | } 131 | break; 132 | } 133 | } 134 | 135 | // some keyboard layouts may need Shift to get / 136 | switch (event.key) { 137 | case "/": 138 | if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; 139 | Documentation.focusSearchBar(); 140 | event.preventDefault(); 141 | } 142 | }); 143 | }, 144 | }; 145 | 146 | // quick alias for translations 147 | const _ = Documentation.gettext; 148 | 149 | _ready(Documentation.init); 150 | -------------------------------------------------------------------------------- /docs/html/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | const DOCUMENTATION_OPTIONS = { 2 | VERSION: '0.1.0', 3 | LANGUAGE: 'en', 4 | COLLAPSE_INDEX: false, 5 | BUILDER: 'html', 6 | FILE_SUFFIX: '.html', 7 | LINK_SUFFIX: '.html', 8 | HAS_SOURCE: true, 9 | SOURCELINK_SUFFIX: '.txt', 10 | NAVIGATION_WITH_KEYS: false, 11 | SHOW_SEARCH_SUMMARY: true, 12 | ENABLE_SEARCH_SHORTCUTS: true, 13 | }; -------------------------------------------------------------------------------- /docs/html/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/file.png -------------------------------------------------------------------------------- /docs/html/_static/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bold.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bold.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bold.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-bolditalic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-italic.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-italic.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-regular.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-regular.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-regular.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Lato/lato-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Lato/lato-regular.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Light.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Light.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Thin.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/Roboto-Slab-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/Roboto-Slab-Thin.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/html/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/html/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-bold.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-normal.woff -------------------------------------------------------------------------------- /docs/html/_static/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /docs/html/_static/js/badge_only.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); -------------------------------------------------------------------------------- /docs/html/_static/js/html5shiv-printshiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/html/_static/js/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/html/_static/js/modernizr.min.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.6.2 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t a.language.name.localeCompare(b.language.name)); 14 | 15 | const languagesHTML = ` 16 |
17 |
Languages
18 | ${languages 19 | .map( 20 | (translation) => ` 21 |
22 | ${translation.language.code} 23 |
24 | `, 25 | ) 26 | .join("\n")} 27 |
28 | `; 29 | return languagesHTML; 30 | } 31 | 32 | function renderVersions(config) { 33 | if (!config.versions.active.length) { 34 | return ""; 35 | } 36 | const versionsHTML = ` 37 |
38 |
Versions
39 | ${config.versions.active 40 | .map( 41 | (version) => ` 42 |
43 | ${version.slug} 44 |
45 | `, 46 | ) 47 | .join("\n")} 48 |
49 | `; 50 | return versionsHTML; 51 | } 52 | 53 | function renderDownloads(config) { 54 | if (!Object.keys(config.versions.current.downloads).length) { 55 | return ""; 56 | } 57 | const downloadsNameDisplay = { 58 | pdf: "PDF", 59 | epub: "Epub", 60 | htmlzip: "HTML", 61 | }; 62 | 63 | const downloadsHTML = ` 64 |
65 |
Downloads
66 | ${Object.entries(config.versions.current.downloads) 67 | .map( 68 | ([name, url]) => ` 69 |
70 | ${downloadsNameDisplay[name]} 71 |
72 | `, 73 | ) 74 | .join("\n")} 75 |
76 | `; 77 | return downloadsHTML; 78 | } 79 | 80 | document.addEventListener("readthedocs-addons-data-ready", function (event) { 81 | const config = event.detail.data(); 82 | 83 | const flyout = ` 84 |
85 | 86 | Read the Docs 87 | v: ${config.versions.current.slug} 88 | 89 | 90 |
91 |
92 | ${renderLanguages(config)} 93 | ${renderVersions(config)} 94 | ${renderDownloads(config)} 95 |
96 |
On Read the Docs
97 |
98 | Project Home 99 |
100 |
101 | Builds 102 |
103 |
104 | Downloads 105 |
106 |
107 |
108 |
Search
109 |
110 |
111 | 118 |
119 |
120 |
121 |
122 | 123 | Hosted by Read the Docs 124 | 125 |
126 |
127 | `; 128 | 129 | // Inject the generated flyout into the body HTML element. 130 | document.body.insertAdjacentHTML("beforeend", flyout); 131 | 132 | // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. 133 | document 134 | .querySelector("#flyout-search-form") 135 | .addEventListener("focusin", () => { 136 | const event = new CustomEvent("readthedocs-search-show"); 137 | document.dispatchEvent(event); 138 | }); 139 | }) 140 | } 141 | 142 | if (themeLanguageSelector || themeVersionSelector) { 143 | function onSelectorSwitch(event) { 144 | const option = event.target.selectedIndex; 145 | const item = event.target.options[option]; 146 | window.location.href = item.dataset.url; 147 | } 148 | 149 | document.addEventListener("readthedocs-addons-data-ready", function (event) { 150 | const config = event.detail.data(); 151 | 152 | const versionSwitch = document.querySelector( 153 | "div.switch-menus > div.version-switch", 154 | ); 155 | if (themeVersionSelector) { 156 | let versions = config.versions.active; 157 | if (config.versions.current.hidden || config.versions.current.type === "external") { 158 | versions.unshift(config.versions.current); 159 | } 160 | const versionSelect = ` 161 | 174 | `; 175 | 176 | versionSwitch.innerHTML = versionSelect; 177 | versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); 178 | } 179 | 180 | const languageSwitch = document.querySelector( 181 | "div.switch-menus > div.language-switch", 182 | ); 183 | 184 | if (themeLanguageSelector) { 185 | if (config.projects.translations.length) { 186 | // Add the current language to the options on the selector 187 | let languages = config.projects.translations.concat( 188 | config.projects.current, 189 | ); 190 | languages = languages.sort((a, b) => 191 | a.language.name.localeCompare(b.language.name), 192 | ); 193 | 194 | const languageSelect = ` 195 | 208 | `; 209 | 210 | languageSwitch.innerHTML = languageSelect; 211 | languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); 212 | } 213 | else { 214 | languageSwitch.remove(); 215 | } 216 | } 217 | }); 218 | } 219 | 220 | document.addEventListener("readthedocs-addons-data-ready", function (event) { 221 | // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. 222 | document 223 | .querySelector("[role='search'] input") 224 | .addEventListener("focusin", () => { 225 | const event = new CustomEvent("readthedocs-search-show"); 226 | document.dispatchEvent(event); 227 | }); 228 | }); -------------------------------------------------------------------------------- /docs/html/_static/language_data.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This script contains the language-specific data used by searchtools.js, 3 | * namely the list of stopwords, stemmer, scorer and splitter. 4 | */ 5 | 6 | var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; 7 | 8 | 9 | /* Non-minified version is copied as a separate JS file, if available */ 10 | 11 | /** 12 | * Porter Stemmer 13 | */ 14 | var Stemmer = function() { 15 | 16 | var step2list = { 17 | ational: 'ate', 18 | tional: 'tion', 19 | enci: 'ence', 20 | anci: 'ance', 21 | izer: 'ize', 22 | bli: 'ble', 23 | alli: 'al', 24 | entli: 'ent', 25 | eli: 'e', 26 | ousli: 'ous', 27 | ization: 'ize', 28 | ation: 'ate', 29 | ator: 'ate', 30 | alism: 'al', 31 | iveness: 'ive', 32 | fulness: 'ful', 33 | ousness: 'ous', 34 | aliti: 'al', 35 | iviti: 'ive', 36 | biliti: 'ble', 37 | logi: 'log' 38 | }; 39 | 40 | var step3list = { 41 | icate: 'ic', 42 | ative: '', 43 | alize: 'al', 44 | iciti: 'ic', 45 | ical: 'ic', 46 | ful: '', 47 | ness: '' 48 | }; 49 | 50 | var c = "[^aeiou]"; // consonant 51 | var v = "[aeiouy]"; // vowel 52 | var C = c + "[^aeiouy]*"; // consonant sequence 53 | var V = v + "[aeiou]*"; // vowel sequence 54 | 55 | var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 56 | var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 57 | var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 58 | var s_v = "^(" + C + ")?" + v; // vowel in stem 59 | 60 | this.stemWord = function (w) { 61 | var stem; 62 | var suffix; 63 | var firstch; 64 | var origword = w; 65 | 66 | if (w.length < 3) 67 | return w; 68 | 69 | var re; 70 | var re2; 71 | var re3; 72 | var re4; 73 | 74 | firstch = w.substr(0,1); 75 | if (firstch == "y") 76 | w = firstch.toUpperCase() + w.substr(1); 77 | 78 | // Step 1a 79 | re = /^(.+?)(ss|i)es$/; 80 | re2 = /^(.+?)([^s])s$/; 81 | 82 | if (re.test(w)) 83 | w = w.replace(re,"$1$2"); 84 | else if (re2.test(w)) 85 | w = w.replace(re2,"$1$2"); 86 | 87 | // Step 1b 88 | re = /^(.+?)eed$/; 89 | re2 = /^(.+?)(ed|ing)$/; 90 | if (re.test(w)) { 91 | var fp = re.exec(w); 92 | re = new RegExp(mgr0); 93 | if (re.test(fp[1])) { 94 | re = /.$/; 95 | w = w.replace(re,""); 96 | } 97 | } 98 | else if (re2.test(w)) { 99 | var fp = re2.exec(w); 100 | stem = fp[1]; 101 | re2 = new RegExp(s_v); 102 | if (re2.test(stem)) { 103 | w = stem; 104 | re2 = /(at|bl|iz)$/; 105 | re3 = new RegExp("([^aeiouylsz])\\1$"); 106 | re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 107 | if (re2.test(w)) 108 | w = w + "e"; 109 | else if (re3.test(w)) { 110 | re = /.$/; 111 | w = w.replace(re,""); 112 | } 113 | else if (re4.test(w)) 114 | w = w + "e"; 115 | } 116 | } 117 | 118 | // Step 1c 119 | re = /^(.+?)y$/; 120 | if (re.test(w)) { 121 | var fp = re.exec(w); 122 | stem = fp[1]; 123 | re = new RegExp(s_v); 124 | if (re.test(stem)) 125 | w = stem + "i"; 126 | } 127 | 128 | // Step 2 129 | re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; 130 | if (re.test(w)) { 131 | var fp = re.exec(w); 132 | stem = fp[1]; 133 | suffix = fp[2]; 134 | re = new RegExp(mgr0); 135 | if (re.test(stem)) 136 | w = stem + step2list[suffix]; 137 | } 138 | 139 | // Step 3 140 | re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; 141 | if (re.test(w)) { 142 | var fp = re.exec(w); 143 | stem = fp[1]; 144 | suffix = fp[2]; 145 | re = new RegExp(mgr0); 146 | if (re.test(stem)) 147 | w = stem + step3list[suffix]; 148 | } 149 | 150 | // Step 4 151 | re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; 152 | re2 = /^(.+?)(s|t)(ion)$/; 153 | if (re.test(w)) { 154 | var fp = re.exec(w); 155 | stem = fp[1]; 156 | re = new RegExp(mgr1); 157 | if (re.test(stem)) 158 | w = stem; 159 | } 160 | else if (re2.test(w)) { 161 | var fp = re2.exec(w); 162 | stem = fp[1] + fp[2]; 163 | re2 = new RegExp(mgr1); 164 | if (re2.test(stem)) 165 | w = stem; 166 | } 167 | 168 | // Step 5 169 | re = /^(.+?)e$/; 170 | if (re.test(w)) { 171 | var fp = re.exec(w); 172 | stem = fp[1]; 173 | re = new RegExp(mgr1); 174 | re2 = new RegExp(meq1); 175 | re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); 176 | if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) 177 | w = stem; 178 | } 179 | re = /ll$/; 180 | re2 = new RegExp(mgr1); 181 | if (re.test(w) && re2.test(w)) { 182 | re = /.$/; 183 | w = w.replace(re,""); 184 | } 185 | 186 | // and turn initial Y back to y 187 | if (firstch == "y") 188 | w = firstch.toLowerCase() + w.substr(1); 189 | return w; 190 | } 191 | } 192 | 193 | -------------------------------------------------------------------------------- /docs/html/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/minus.png -------------------------------------------------------------------------------- /docs/html/_static/nbsphinx-broken-thumbnail.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/html/_static/nbsphinx-code-cells.css: -------------------------------------------------------------------------------- 1 | /* remove conflicting styling from Sphinx themes */ 2 | div.nbinput.container div.prompt *, 3 | div.nboutput.container div.prompt *, 4 | div.nbinput.container div.input_area pre, 5 | div.nboutput.container div.output_area pre, 6 | div.nbinput.container div.input_area .highlight, 7 | div.nboutput.container div.output_area .highlight { 8 | border: none; 9 | padding: 0; 10 | margin: 0; 11 | box-shadow: none; 12 | } 13 | 14 | div.nbinput.container > div[class*=highlight], 15 | div.nboutput.container > div[class*=highlight] { 16 | margin: 0; 17 | } 18 | 19 | div.nbinput.container div.prompt *, 20 | div.nboutput.container div.prompt * { 21 | background: none; 22 | } 23 | 24 | div.nboutput.container div.output_area .highlight, 25 | div.nboutput.container div.output_area pre { 26 | background: unset; 27 | } 28 | 29 | div.nboutput.container div.output_area div.highlight { 30 | color: unset; /* override Pygments text color */ 31 | } 32 | 33 | /* avoid gaps between output lines */ 34 | div.nboutput.container div[class*=highlight] pre { 35 | line-height: normal; 36 | } 37 | 38 | /* input/output containers */ 39 | div.nbinput.container, 40 | div.nboutput.container { 41 | display: -webkit-flex; 42 | display: flex; 43 | align-items: flex-start; 44 | margin: 0; 45 | width: 100%; 46 | } 47 | @media (max-width: 540px) { 48 | div.nbinput.container, 49 | div.nboutput.container { 50 | flex-direction: column; 51 | } 52 | } 53 | 54 | /* input container */ 55 | div.nbinput.container { 56 | padding-top: 5px; 57 | } 58 | 59 | /* last container */ 60 | div.nblast.container { 61 | padding-bottom: 5px; 62 | } 63 | 64 | /* input prompt */ 65 | div.nbinput.container div.prompt pre, 66 | /* for sphinx_immaterial theme: */ 67 | div.nbinput.container div.prompt pre > code { 68 | color: #307FC1; 69 | } 70 | 71 | /* output prompt */ 72 | div.nboutput.container div.prompt pre, 73 | /* for sphinx_immaterial theme: */ 74 | div.nboutput.container div.prompt pre > code { 75 | color: #BF5B3D; 76 | } 77 | 78 | /* all prompts */ 79 | div.nbinput.container div.prompt, 80 | div.nboutput.container div.prompt { 81 | width: 4.5ex; 82 | padding-top: 5px; 83 | position: relative; 84 | user-select: none; 85 | } 86 | 87 | div.nbinput.container div.prompt > div, 88 | div.nboutput.container div.prompt > div { 89 | position: absolute; 90 | right: 0; 91 | margin-right: 0.3ex; 92 | } 93 | 94 | @media (max-width: 540px) { 95 | div.nbinput.container div.prompt, 96 | div.nboutput.container div.prompt { 97 | width: unset; 98 | text-align: left; 99 | padding: 0.4em; 100 | } 101 | div.nboutput.container div.prompt.empty { 102 | padding: 0; 103 | } 104 | 105 | div.nbinput.container div.prompt > div, 106 | div.nboutput.container div.prompt > div { 107 | position: unset; 108 | } 109 | } 110 | 111 | /* disable scrollbars and line breaks on prompts */ 112 | div.nbinput.container div.prompt pre, 113 | div.nboutput.container div.prompt pre { 114 | overflow: hidden; 115 | white-space: pre; 116 | } 117 | 118 | /* input/output area */ 119 | div.nbinput.container div.input_area, 120 | div.nboutput.container div.output_area { 121 | -webkit-flex: 1; 122 | flex: 1; 123 | overflow: auto; 124 | } 125 | @media (max-width: 540px) { 126 | div.nbinput.container div.input_area, 127 | div.nboutput.container div.output_area { 128 | width: 100%; 129 | } 130 | } 131 | 132 | /* input area */ 133 | div.nbinput.container div.input_area { 134 | border: 1px solid #e0e0e0; 135 | border-radius: 2px; 136 | /*background: #f5f5f5;*/ 137 | } 138 | 139 | /* override MathJax center alignment in output cells */ 140 | div.nboutput.container div[class*=MathJax] { 141 | text-align: left !important; 142 | } 143 | 144 | /* override sphinx.ext.imgmath center alignment in output cells */ 145 | div.nboutput.container div.math p { 146 | text-align: left; 147 | } 148 | 149 | /* standard error */ 150 | div.nboutput.container div.output_area.stderr { 151 | background: #fdd; 152 | } 153 | 154 | /* ANSI colors */ 155 | .ansi-black-fg { color: #3E424D; } 156 | .ansi-black-bg { background-color: #3E424D; } 157 | .ansi-black-intense-fg { color: #282C36; } 158 | .ansi-black-intense-bg { background-color: #282C36; } 159 | .ansi-red-fg { color: #E75C58; } 160 | .ansi-red-bg { background-color: #E75C58; } 161 | .ansi-red-intense-fg { color: #B22B31; } 162 | .ansi-red-intense-bg { background-color: #B22B31; } 163 | .ansi-green-fg { color: #00A250; } 164 | .ansi-green-bg { background-color: #00A250; } 165 | .ansi-green-intense-fg { color: #007427; } 166 | .ansi-green-intense-bg { background-color: #007427; } 167 | .ansi-yellow-fg { color: #DDB62B; } 168 | .ansi-yellow-bg { background-color: #DDB62B; } 169 | .ansi-yellow-intense-fg { color: #B27D12; } 170 | .ansi-yellow-intense-bg { background-color: #B27D12; } 171 | .ansi-blue-fg { color: #208FFB; } 172 | .ansi-blue-bg { background-color: #208FFB; } 173 | .ansi-blue-intense-fg { color: #0065CA; } 174 | .ansi-blue-intense-bg { background-color: #0065CA; } 175 | .ansi-magenta-fg { color: #D160C4; } 176 | .ansi-magenta-bg { background-color: #D160C4; } 177 | .ansi-magenta-intense-fg { color: #A03196; } 178 | .ansi-magenta-intense-bg { background-color: #A03196; } 179 | .ansi-cyan-fg { color: #60C6C8; } 180 | .ansi-cyan-bg { background-color: #60C6C8; } 181 | .ansi-cyan-intense-fg { color: #258F8F; } 182 | .ansi-cyan-intense-bg { background-color: #258F8F; } 183 | .ansi-white-fg { color: #C5C1B4; } 184 | .ansi-white-bg { background-color: #C5C1B4; } 185 | .ansi-white-intense-fg { color: #A1A6B2; } 186 | .ansi-white-intense-bg { background-color: #A1A6B2; } 187 | 188 | .ansi-default-inverse-fg { color: #FFFFFF; } 189 | .ansi-default-inverse-bg { background-color: #000000; } 190 | 191 | .ansi-bold { font-weight: bold; } 192 | .ansi-underline { text-decoration: underline; } 193 | 194 | 195 | div.nbinput.container div.input_area div[class*=highlight] > pre, 196 | div.nboutput.container div.output_area div[class*=highlight] > pre, 197 | div.nboutput.container div.output_area div[class*=highlight].math, 198 | div.nboutput.container div.output_area.rendered_html, 199 | div.nboutput.container div.output_area > div.output_javascript, 200 | div.nboutput.container div.output_area:not(.rendered_html) > img{ 201 | padding: 5px; 202 | margin: 0; 203 | } 204 | 205 | /* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ 206 | div.nbinput.container div.input_area > div[class^='highlight'], 207 | div.nboutput.container div.output_area > div[class^='highlight']{ 208 | overflow-y: hidden; 209 | } 210 | 211 | /* hide copy button on prompts for 'sphinx_copybutton' extension ... */ 212 | .prompt .copybtn, 213 | /* ... and 'sphinx_immaterial' theme */ 214 | .prompt .md-clipboard.md-icon { 215 | display: none; 216 | } 217 | 218 | /* Some additional styling taken form the Jupyter notebook CSS */ 219 | .jp-RenderedHTMLCommon table, 220 | div.rendered_html table { 221 | border: none; 222 | border-collapse: collapse; 223 | border-spacing: 0; 224 | color: black; 225 | font-size: 12px; 226 | table-layout: fixed; 227 | } 228 | .jp-RenderedHTMLCommon thead, 229 | div.rendered_html thead { 230 | border-bottom: 1px solid black; 231 | vertical-align: bottom; 232 | } 233 | .jp-RenderedHTMLCommon tr, 234 | .jp-RenderedHTMLCommon th, 235 | .jp-RenderedHTMLCommon td, 236 | div.rendered_html tr, 237 | div.rendered_html th, 238 | div.rendered_html td { 239 | text-align: right; 240 | vertical-align: middle; 241 | padding: 0.5em 0.5em; 242 | line-height: normal; 243 | white-space: normal; 244 | max-width: none; 245 | border: none; 246 | } 247 | .jp-RenderedHTMLCommon th, 248 | div.rendered_html th { 249 | font-weight: bold; 250 | } 251 | .jp-RenderedHTMLCommon tbody tr:nth-child(odd), 252 | div.rendered_html tbody tr:nth-child(odd) { 253 | background: #f5f5f5; 254 | } 255 | .jp-RenderedHTMLCommon tbody tr:hover, 256 | div.rendered_html tbody tr:hover { 257 | background: rgba(66, 165, 245, 0.2); 258 | } 259 | 260 | -------------------------------------------------------------------------------- /docs/html/_static/nbsphinx-gallery.css: -------------------------------------------------------------------------------- 1 | .nbsphinx-gallery { 2 | display: grid; 3 | grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); 4 | gap: 5px; 5 | margin-top: 1em; 6 | margin-bottom: 1em; 7 | } 8 | 9 | .nbsphinx-gallery > a { 10 | padding: 5px; 11 | border: 1px dotted currentColor; 12 | border-radius: 2px; 13 | text-align: center; 14 | } 15 | 16 | .nbsphinx-gallery > a:hover { 17 | border-style: solid; 18 | } 19 | 20 | .nbsphinx-gallery img { 21 | max-width: 100%; 22 | max-height: 100%; 23 | } 24 | 25 | .nbsphinx-gallery > a > div:first-child { 26 | display: flex; 27 | align-items: start; 28 | justify-content: center; 29 | height: 120px; 30 | margin-bottom: 5px; 31 | } 32 | -------------------------------------------------------------------------------- /docs/html/_static/nbsphinx-no-thumbnail.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/html/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/_static/plus.png -------------------------------------------------------------------------------- /docs/html/_static/pygments.css: -------------------------------------------------------------------------------- 1 | pre { line-height: 125%; } 2 | td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 3 | span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 4 | td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 5 | span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 6 | .highlight .hll { background-color: #ffffcc } 7 | .highlight { background: #f8f8f8; } 8 | .highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ 9 | .highlight .err { border: 1px solid #FF0000 } /* Error */ 10 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 11 | .highlight .o { color: #666666 } /* Operator */ 12 | .highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ 13 | .highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ 14 | .highlight .cp { color: #9C6500 } /* Comment.Preproc */ 15 | .highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ 16 | .highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ 17 | .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ 18 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 19 | .highlight .ge { font-style: italic } /* Generic.Emph */ 20 | .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ 21 | .highlight .gr { color: #E40000 } /* Generic.Error */ 22 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 23 | .highlight .gi { color: #008400 } /* Generic.Inserted */ 24 | .highlight .go { color: #717171 } /* Generic.Output */ 25 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 26 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 27 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 28 | .highlight .gt { color: #0044DD } /* Generic.Traceback */ 29 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 30 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 31 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 32 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 33 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 34 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 35 | .highlight .m { color: #666666 } /* Literal.Number */ 36 | .highlight .s { color: #BA2121 } /* Literal.String */ 37 | .highlight .na { color: #687822 } /* Name.Attribute */ 38 | .highlight .nb { color: #008000 } /* Name.Builtin */ 39 | .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ 40 | .highlight .no { color: #880000 } /* Name.Constant */ 41 | .highlight .nd { color: #AA22FF } /* Name.Decorator */ 42 | .highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ 43 | .highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ 44 | .highlight .nf { color: #0000FF } /* Name.Function */ 45 | .highlight .nl { color: #767600 } /* Name.Label */ 46 | .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ 47 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 48 | .highlight .nv { color: #19177C } /* Name.Variable */ 49 | .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ 50 | .highlight .w { color: #bbbbbb } /* Text.Whitespace */ 51 | .highlight .mb { color: #666666 } /* Literal.Number.Bin */ 52 | .highlight .mf { color: #666666 } /* Literal.Number.Float */ 53 | .highlight .mh { color: #666666 } /* Literal.Number.Hex */ 54 | .highlight .mi { color: #666666 } /* Literal.Number.Integer */ 55 | .highlight .mo { color: #666666 } /* Literal.Number.Oct */ 56 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 57 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 58 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 59 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 60 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 61 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 62 | .highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ 63 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 64 | .highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ 65 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 66 | .highlight .sr { color: #A45A77 } /* Literal.String.Regex */ 67 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 68 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 69 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 70 | .highlight .fm { color: #0000FF } /* Name.Function.Magic */ 71 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 72 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 73 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 74 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 75 | .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ -------------------------------------------------------------------------------- /docs/html/_static/sphinx_highlight.js: -------------------------------------------------------------------------------- 1 | /* Highlighting utilities for Sphinx HTML documentation. */ 2 | "use strict"; 3 | 4 | const SPHINX_HIGHLIGHT_ENABLED = true 5 | 6 | /** 7 | * highlight a given string on a node by wrapping it in 8 | * span elements with the given class name. 9 | */ 10 | const _highlight = (node, addItems, text, className) => { 11 | if (node.nodeType === Node.TEXT_NODE) { 12 | const val = node.nodeValue; 13 | const parent = node.parentNode; 14 | const pos = val.toLowerCase().indexOf(text); 15 | if ( 16 | pos >= 0 && 17 | !parent.classList.contains(className) && 18 | !parent.classList.contains("nohighlight") 19 | ) { 20 | let span; 21 | 22 | const closestNode = parent.closest("body, svg, foreignObject"); 23 | const isInSVG = closestNode && closestNode.matches("svg"); 24 | if (isInSVG) { 25 | span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); 26 | } else { 27 | span = document.createElement("span"); 28 | span.classList.add(className); 29 | } 30 | 31 | span.appendChild(document.createTextNode(val.substr(pos, text.length))); 32 | const rest = document.createTextNode(val.substr(pos + text.length)); 33 | parent.insertBefore( 34 | span, 35 | parent.insertBefore( 36 | rest, 37 | node.nextSibling 38 | ) 39 | ); 40 | node.nodeValue = val.substr(0, pos); 41 | /* There may be more occurrences of search term in this node. So call this 42 | * function recursively on the remaining fragment. 43 | */ 44 | _highlight(rest, addItems, text, className); 45 | 46 | if (isInSVG) { 47 | const rect = document.createElementNS( 48 | "http://www.w3.org/2000/svg", 49 | "rect" 50 | ); 51 | const bbox = parent.getBBox(); 52 | rect.x.baseVal.value = bbox.x; 53 | rect.y.baseVal.value = bbox.y; 54 | rect.width.baseVal.value = bbox.width; 55 | rect.height.baseVal.value = bbox.height; 56 | rect.setAttribute("class", className); 57 | addItems.push({ parent: parent, target: rect }); 58 | } 59 | } 60 | } else if (node.matches && !node.matches("button, select, textarea")) { 61 | node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); 62 | } 63 | }; 64 | const _highlightText = (thisNode, text, className) => { 65 | let addItems = []; 66 | _highlight(thisNode, addItems, text, className); 67 | addItems.forEach((obj) => 68 | obj.parent.insertAdjacentElement("beforebegin", obj.target) 69 | ); 70 | }; 71 | 72 | /** 73 | * Small JavaScript module for the documentation. 74 | */ 75 | const SphinxHighlight = { 76 | 77 | /** 78 | * highlight the search words provided in localstorage in the text 79 | */ 80 | highlightSearchWords: () => { 81 | if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight 82 | 83 | // get and clear terms from localstorage 84 | const url = new URL(window.location); 85 | const highlight = 86 | localStorage.getItem("sphinx_highlight_terms") 87 | || url.searchParams.get("highlight") 88 | || ""; 89 | localStorage.removeItem("sphinx_highlight_terms") 90 | url.searchParams.delete("highlight"); 91 | window.history.replaceState({}, "", url); 92 | 93 | // get individual terms from highlight string 94 | const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); 95 | if (terms.length === 0) return; // nothing to do 96 | 97 | // There should never be more than one element matching "div.body" 98 | const divBody = document.querySelectorAll("div.body"); 99 | const body = divBody.length ? divBody[0] : document.querySelector("body"); 100 | window.setTimeout(() => { 101 | terms.forEach((term) => _highlightText(body, term, "highlighted")); 102 | }, 10); 103 | 104 | const searchBox = document.getElementById("searchbox"); 105 | if (searchBox === null) return; 106 | searchBox.appendChild( 107 | document 108 | .createRange() 109 | .createContextualFragment( 110 | '" 114 | ) 115 | ); 116 | }, 117 | 118 | /** 119 | * helper function to hide the search marks again 120 | */ 121 | hideSearchWords: () => { 122 | document 123 | .querySelectorAll("#searchbox .highlight-link") 124 | .forEach((el) => el.remove()); 125 | document 126 | .querySelectorAll("span.highlighted") 127 | .forEach((el) => el.classList.remove("highlighted")); 128 | localStorage.removeItem("sphinx_highlight_terms") 129 | }, 130 | 131 | initEscapeListener: () => { 132 | // only install a listener if it is really needed 133 | if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; 134 | 135 | document.addEventListener("keydown", (event) => { 136 | // bail for input elements 137 | if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; 138 | // bail with special keys 139 | if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; 140 | if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { 141 | SphinxHighlight.hideSearchWords(); 142 | event.preventDefault(); 143 | } 144 | }); 145 | }, 146 | }; 147 | 148 | _ready(() => { 149 | /* Do not call highlightSearchWords() when we are on the search page. 150 | * It will highlight words from the *previous* search query. 151 | */ 152 | if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); 153 | SphinxHighlight.initEscapeListener(); 154 | }); 155 | -------------------------------------------------------------------------------- /docs/html/genindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Index — fastlisaresponse 0.1.0 documentation 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 59 | 60 |
64 | 65 |
66 |
67 |
68 |
    69 |
  • 70 | 71 |
  • 72 |
  • 73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 |

Index

81 | 82 |
83 | _ 84 | | A 85 | | B 86 | | C 87 | | D 88 | | E 89 | | F 90 | | G 91 | | H 92 | | L 93 | | M 94 | | N 95 | | O 96 | | P 97 | | R 98 | | S 99 | | T 100 | | U 101 | | X 102 | | Y 103 | 104 |
105 |

_

106 | 107 | 111 |
112 | 113 |

A

114 | 115 | 119 |
120 | 121 |

B

122 | 123 | 127 |
128 | 129 |

C

130 | 131 | 135 | 143 |
144 | 145 |

D

146 | 147 | 151 | 155 |
156 | 157 |

E

158 | 159 | 163 |
164 | 165 |

F

166 | 167 | 176 |
    168 |
  • 169 | fastlisaresponse.utils.utility 170 | 171 |
  • 175 |
177 | 178 |

G

179 | 180 | 184 | 190 |
191 | 192 |

H

193 | 194 | 198 |
199 | 200 |

L

201 | 202 | 206 | 212 |
213 | 214 |

M

215 | 216 | 225 |
226 | 227 |

N

228 | 229 | 235 | 241 |
242 | 243 |

O

244 | 245 | 249 |
250 | 251 |

P

252 | 253 | 257 |
258 | 259 |

R

260 | 261 | 265 | 271 |
272 | 273 |

S

274 | 275 | 279 |
280 | 281 |

T

282 | 283 | 289 | 297 |
298 | 299 |

U

300 | 301 | 305 |
306 | 307 |

X

308 | 309 | 313 | 317 |
318 | 319 |

Y

320 | 321 | 325 |
326 | 327 | 328 | 329 |
330 |
331 |
332 | 333 |
334 | 335 |
336 |

© Copyright 2021, Michael Katz, Jean-Baptiste Bayle, Alvin Chua, Michele Vallisneri.

337 |
338 | 339 | Built with Sphinx using a 340 | theme 341 | provided by Read the Docs. 342 | 343 | 344 |
345 |
346 |
347 |
348 |
349 | 354 | 355 | 356 | -------------------------------------------------------------------------------- /docs/html/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/docs/html/objects.inv -------------------------------------------------------------------------------- /docs/html/py-modindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Python Module Index — fastlisaresponse 0.1.0 documentation 7 | 8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 62 | 63 |
67 | 68 |
69 |
70 |
71 |
    72 |
  • 73 | 74 |
  • 75 |
  • 76 |
77 |
78 |
79 |
80 |
81 | 82 | 83 |

Python Module Index

84 | 85 |
86 | f 87 |
88 | 89 | 90 | 91 | 93 | 94 | 96 | 99 | 100 | 101 | 104 |
 
92 | f
97 | fastlisaresponse 98 |
    102 | fastlisaresponse.utils.utility 103 |
105 | 106 | 107 |
108 |
109 |
110 | 111 |
112 | 113 |
114 |

© Copyright 2021, Michael Katz, Jean-Baptiste Bayle, Alvin Chua, Michele Vallisneri.

115 |
116 | 117 | Built with Sphinx using a 118 | theme 119 | provided by Read the Docs. 120 | 121 | 122 |
123 |
124 |
125 |
126 |
127 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /docs/html/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Search — fastlisaresponse 0.1.0 documentation 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 62 | 63 |
67 | 68 |
69 |
70 |
71 |
    72 |
  • 73 | 74 |
  • 75 |
  • 76 |
77 |
78 |
79 |
80 |
81 | 82 | 89 | 90 | 91 |
92 | 93 |
94 | 95 |
96 |
97 |
98 | 99 |
100 | 101 |
102 |

© Copyright 2021, Michael Katz, Jean-Baptiste Bayle, Alvin Chua, Michele Vallisneri.

103 |
104 | 105 | Built with Sphinx using a 106 | theme 107 | provided by Read the Docs. 108 | 109 | 110 |
111 |
112 |
113 |
114 |
115 | 120 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /docs/html/searchindex.js: -------------------------------------------------------------------------------- 1 | Search.setIndex({"alltitles": {"Acknowledgments": [[0, "acknowledgments"], [2, "acknowledgments"]], "Authors": [[0, "authors"], [2, "authors"]], "Build waveforms": [[1, "Build-waveforms"]], "Contibutors": [[0, "contibutors"], [2, "contibutors"]], "Contributing": [[0, "contributing"], [2, "contributing"]], "Custom TDI setup": [[1, "Custom-TDI-setup"]], "Documentation:": [[2, null]], "Fast LISA Response Tutorial": [[1, null]], "Fast Response Function": [[3, null]], "Getting Started": [[0, "getting-started"], [2, "getting-started"]], "Gravitational wave signal": [[1, "Gravitational-wave-signal"]], "Installing": [[0, "installing"], [2, "installing"]], "License": [[0, "license"], [2, "license"]], "Plot results": [[1, "Plot-results"]], "Prerequisites": [[0, "prerequisites"], [2, "prerequisites"]], "Response Function Wrapper": [[3, "response-function-wrapper"]], "Run generator": [[1, "Run-generator"]], "Running the Tests": [[0, "running-the-tests"], [2, "running-the-tests"]], "Setup classes": [[1, "Setup-classes"]], "Tutorial:": [[2, null]], "Utilities": [[3, "module-fastlisaresponse.utils.utility"]], "Versioning": [[0, "versioning"], [2, "versioning"]], "fastlisaresponse: Generic LISA response function for GPUs": [[0, null], [2, null]]}, "docnames": ["README", "fast_LISA_response_tutorial", "index", "user/main"], "envversion": {"nbsphinx": 4, "sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["README.rst", "fast_LISA_response_tutorial.ipynb", "index.rst", "user/main.rst"], "indexentries": {"__call__() (fastlisaresponse.response.responsewrapper method)": [[3, "fastlisaresponse.response.ResponseWrapper.__call__", false]], "a_in (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.A_in", false]], "buffer_integer (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.buffer_integer", false]], "channels_no_delays (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.channels_no_delays", false]], "citation (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.citation", false]], "citation (fastlisaresponse.response.responsewrapper property)": [[3, "fastlisaresponse.response.ResponseWrapper.citation", false]], "deps (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.deps", false]], "dt (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.dt", false]], "e_in (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.E_in", false]], "fastlisaresponse.utils.utility": [[3, "module-fastlisaresponse.utils.utility", false]], "get_overlap() (in module fastlisaresponse.utils.utility)": [[3, "fastlisaresponse.utils.utility.get_overlap", false]], "get_projections() (fastlisaresponse.response.pyresponsetdi method)": [[3, "fastlisaresponse.response.pyResponseTDI.get_projections", false]], "get_tdi_delays() (fastlisaresponse.response.pyresponsetdi method)": [[3, "fastlisaresponse.response.pyResponseTDI.get_tdi_delays", false]], "half_order (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.half_order", false]], "link_inds (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.link_inds", false]], "link_space_craft_0_in (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.link_space_craft_0_in", false]], "link_space_craft_1_in (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.link_space_craft_1_in", false]], "module": [[3, "module-fastlisaresponse.utils.utility", false]], "nlinks (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.nlinks", false]], "num_a (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.num_A", false]], "num_channels (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.num_channels", false]], "num_pts (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.num_pts", false]], "order (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.order", false]], "pyresponsetdi (class in fastlisaresponse.response)": [[3, "fastlisaresponse.response.pyResponseTDI", false]], "response_gen (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.response_gen", false]], "response_orbits (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.response_orbits", false]], "responsewrapper (class in fastlisaresponse.response)": [[3, "fastlisaresponse.response.ResponseWrapper", false]], "sampling_frequency (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.sampling_frequency", false]], "tdi (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.tdi", false]], "tdi_buffer (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.tdi_buffer", false]], "tdi_combinations (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.tdi_combinations", false]], "tdi_gen (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.tdi_gen", false]], "tdi_orbits (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.tdi_orbits", false]], "use_gpu (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.use_gpu", false]], "xp (fastlisaresponse.response.pyresponsetdi attribute)": [[3, "fastlisaresponse.response.pyResponseTDI.xp", false]], "xyz (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.XYZ", false]], "y_gw (fastlisaresponse.response.pyresponsetdi property)": [[3, "fastlisaresponse.response.pyResponseTDI.y_gw", false]]}, "objects": {"fastlisaresponse.response": [[3, 0, 1, "", "ResponseWrapper"], [3, 0, 1, "", "pyResponseTDI"]], "fastlisaresponse.response.ResponseWrapper": [[3, 1, 1, "", "__call__"], [3, 2, 1, "", "citation"]], "fastlisaresponse.response.pyResponseTDI": [[3, 3, 1, "", "A_in"], [3, 3, 1, "", "E_in"], [3, 2, 1, "", "XYZ"], [3, 3, 1, "", "buffer_integer"], [3, 3, 1, "", "channels_no_delays"], [3, 2, 1, "", "citation"], [3, 3, 1, "", "deps"], [3, 3, 1, "", "dt"], [3, 1, 1, "", "get_projections"], [3, 1, 1, "", "get_tdi_delays"], [3, 3, 1, "", "half_order"], [3, 3, 1, "", "link_inds"], [3, 3, 1, "", "link_space_craft_0_in"], [3, 3, 1, "", "link_space_craft_1_in"], [3, 3, 1, "", "nlinks"], [3, 3, 1, "", "num_A"], [3, 3, 1, "", "num_channels"], [3, 3, 1, "", "num_pts"], [3, 3, 1, "", "order"], [3, 2, 1, "", "response_gen"], [3, 2, 1, "", "response_orbits"], [3, 3, 1, "", "sampling_frequency"], [3, 3, 1, "", "tdi"], [3, 3, 1, "", "tdi_buffer"], [3, 2, 1, "", "tdi_combinations"], [3, 2, 1, "", "tdi_gen"], [3, 2, 1, "", "tdi_orbits"], [3, 3, 1, "", "use_gpu"], [3, 3, 1, "", "xp"], [3, 2, 1, "", "y_gw"]], "fastlisaresponse.utils": [[3, 4, 0, "-", "utility"]], "fastlisaresponse.utils.utility": [[3, 5, 1, "", "get_overlap"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "module", "Python module"], "5": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute", "4": "py:module", "5": "py:function"}, "terms": {"": 1, "0": [0, 1, 2, 3], "06633": [0, 1, 2, 3], "084702251e": 1, "1": [0, 1, 2, 3], "10": 1, "10000": [1, 3], "1001": 3, "11": [0, 1, 2], "11820901": 1, "12": [0, 1, 2, 3], "12x": [0, 2], "13": [1, 3], "14": 1, "15": 1, "16": 1, "17": 1, "1j": 1, "1st": [1, 3], "2": [0, 1, 2, 3], "200": 3, "21": [1, 3], "22": 1, "2204": [0, 1, 2, 3], "22979888": 1, "23": 3, "25": [1, 3], "2a": 1, "2d": 3, "2nd": [1, 3], "3": [0, 1, 2], "31": [1, 3], "31558149": 1, "32": 3, "3290324": 1, "35962078e": 1, "4": [0, 1, 2], "47197271e": 1, "5": 1, "6": [1, 3], "64": [0, 2], "7": 1, "763545603": 1, "8": [0, 2], "9": 1, "91128699": 1, "9805742971871619": 1, "A": [1, 3], "Be": [0, 2], "For": [0, 1, 2], "If": [0, 1, 2, 3], "In": 3, "It": [0, 1, 2, 3], "Or": 3, "The": [0, 1, 2, 3], "To": [0, 2], "_0t": 1, "__call__": [1, 2, 3], "__init__": [1, 3], "a_in": [2, 3], "ab": 3, "acceler": [0, 2, 3], "access": 1, "accord": 3, "across": 3, "activ": [0, 2], "add": [0, 2], "addit": 3, "adjust": 3, "advanc": 3, "ae": 3, "aet": [1, 3], "after": 3, "agnost": 1, "algorithm": 1, "all": [0, 2, 3], "allow": [0, 1, 2, 3], "along": 3, "also": [0, 1, 2, 3], "alvin": [0, 2], "amount": 3, "ampl": 3, "amplitud": 1, "an": [1, 3], "anaconda": [0, 2], "analysi": [0, 2, 3], "angl": [1, 3], "ani": [0, 1, 2], "api": 1, "appli": 3, "approx": 1, "ar": [1, 3], "arang": 1, "arg": 3, "argument": [1, 3], "arm": [1, 3], "arrai": [1, 3], "arxiv": [0, 1, 2, 3], "astropi": 1, "avail": [0, 2], "avoid": [0, 2], "ax": 1, "bad": 1, "baptist": [0, 2], "barycent": 1, "base": [0, 2, 3], "bayesian": [1, 3], "bayl": [0, 2], "becaus": 3, "befor": [1, 3], "begin": [1, 3], "being": 3, "below": [0, 2], "beta": [1, 3], "between": 3, "binari": [0, 1, 2], "bit": 1, "bmatrix": 1, "bool": 3, "both": [1, 3], "buffer": 3, "buffer_integ": [2, 3], "build": 2, "c": [0, 2], "calcul": 3, "call": 1, "callabl": 3, "can": [0, 1, 2, 3], "capabl": [0, 1, 2, 3], "carrier": 3, "case": 3, "cd": [0, 2], "chan": 1, "channel": 3, "channels_no_delai": [2, 3], "choic": 3, "chop": 1, "chosen": [0, 2, 3], "chua": [0, 2], "citat": [2, 3], "cite": [0, 1, 2], "clang_osx": [0, 2], "clangxx_osx": [0, 2], "class": [2, 3], "clone": [0, 2], "co": 1, "code": [0, 1, 2, 3], "com": [0, 2], "combin": [1, 3], "command": [0, 2], "compil": [0, 2], "complex": 3, "complic": 1, "compra": 3, "comput": [0, 1, 2, 3], "conda": [0, 2], "conduct": [0, 2], "constel": [1, 3], "contain": 3, "contribut": 3, "convert": 3, "coordin": [1, 3], "correct": [0, 1, 2], "cos2psi": 1, "cosiota": 1, "cpu": [0, 1, 2, 3], "creat": [0, 2], "cross": 3, "cuda": [0, 2], "cudahom": [0, 2], "cupi": [0, 2, 3], "current": [0, 2, 3], "custom": 2, "cython": [0, 2], "data": 1, "ddot": 1, "def": 1, "default": 3, "defaut": 3, "defin": 1, "delai": 3, "dep": [2, 3], "depend": 3, "deploi": 1, "deriv": 1, "detail": [0, 1, 2], "detector": [1, 3], "determin": [1, 3], "dict": [1, 3], "differ": 3, "directli": [0, 1, 2], "directori": [0, 2], "discov": [0, 2], "do": [0, 2, 3], "doc": 1, "document": [0, 1], "doe": [1, 3], "domain": [0, 1, 2, 3], "dot": 1, "doubl": 3, "dt": [1, 2, 3], "dure": 3, "e": [1, 3], "e_in": [2, 3], "each": 3, "earli": 3, "earlier": 3, "eclipt": 3, "either": 3, "els": 1, "emitt": 3, "end": [1, 3], "enough": 3, "enter": 3, "enumer": 1, "environ": [0, 2], "epsilon": 3, "equalarmlengthorbit": [1, 3], "equival": [1, 3], "esaorbit": 1, "estim": [0, 2], "eta": 3, "everyth": [0, 1, 2, 3], "exampl": [0, 1, 2], "f": 1, "f_0t": 1, "facil": [0, 2], "fals": [1, 3], "fast": 2, "faster": [0, 2, 3], "fastlisarespons": [1, 3], "fddot": 1, "fdot": 1, "fig": 1, "file": [0, 2], "final": 3, "fine": 1, "first": [1, 3], "flip_hx": [1, 3], "forg": [0, 2], "form": [1, 3], "formal": 3, "found": [0, 1, 2, 3], "fr": 3, "frac": 1, "frame": [1, 3], "frequenc": [1, 3], "from": [0, 1, 2, 3], "front": 3, "function": 1, "further": [0, 2], "g": [0, 2], "galact": 1, "garbag": 3, "gb": 1, "gb_lisa_custom": 1, "gb_lisa_esa": 1, "gbwave": 1, "gcc": [0, 2], "gcc_linux": [0, 2], "gener": 3, "get": [1, 3], "get_overlap": [2, 3], "get_project": [2, 3], "get_tdi_delai": [2, 3], "git": [0, 2], "github": [0, 2], "given": [1, 3], "gnu": [0, 2], "go": 1, "gpu": [1, 3], "grail": [0, 2], "gravit": [2, 3], "gw": 3, "gxx_linu": [0, 2], "gxx_linux": [0, 2], "h": 1, "h5py": [0, 1, 2], "h_": [1, 3], "h_x": 3, "ha": [1, 3], "half": 3, "half_ord": [2, 3], "hard": 3, "have": [0, 2, 3], "hc": 1, "help": [0, 1, 2, 3], "here": [0, 1, 2, 3], "high": [0, 2], "howev": 1, "hp": 1, "hsc": 1, "hsp": 1, "http": [0, 2, 3], "hz": 3, "i": [0, 1, 2, 3], "ideal": 3, "ih_": 1, "ih_x": 3, "ihx": 1, "ij": 3, "implement": 1, "import": [0, 1, 2], "in2p3": 3, "inclin": 1, "includ": [0, 1, 2, 3], "index": 3, "index_beta": [1, 3], "index_lambda": [1, 3], "individu": 3, "indivud": 3, "infer": [1, 3], "inform": [0, 1, 2, 3], "initi": 1, "inlin": 1, "input": 3, "input_in": 3, "int": 3, "interpol": [1, 3], "invers": [1, 3], "iota": 1, "ipython": [0, 2], "is_ecliptic_latitud": [1, 3], "issu": [0, 2, 3], "its": 1, "itself": 1, "j": [0, 2], "jean": [0, 2], "jupyt": [0, 2], "just": 1, "k": [0, 2], "katz": [0, 2], "keyword": [1, 3], "kwarg": 3, "lab": 1, "lagrangian": 3, "lam": [1, 3], "langrangian": 1, "larg": 3, "latitud": 3, "latitudin": 3, "leav": 3, "left": 1, "len": 1, "length": 3, "linear": 3, "link": [0, 1, 2, 3], "link_ind": [2, 3], "link_space_craft_0_in": [2, 3], "link_space_craft_1_in": [2, 3], "links_for_delai": [1, 3], "lisa": 3, "lisa_resp_env": [0, 2], "lisaanalysistool": [0, 2], "lisatool": [1, 3], "list": 3, "longitud": 3, "lower": 3, "m": [0, 2], "macosx": [0, 2], "magnitud": 3, "mai": [0, 2], "main": [0, 2], "make": [0, 2, 3], "match": 3, "math": [1, 3], "matplotlib": [0, 1, 2], "maxim": 3, "mayb": [0, 2], "md": [0, 2], "method": [1, 3], "michael": [0, 2], "michel": [0, 2], "mikekatz04": [0, 2], "mismatch": 3, "model": 3, "modul": [0, 2], "more": 1, "move": 1, "multipli": 3, "must": [0, 1, 2, 3], "n": [0, 2, 3], "n_overid": 3, "ndarrai": 3, "necesari": 3, "necessari": [0, 2, 3], "need": [0, 1, 2, 3], "newest": [0, 1, 2], "nlink": [2, 3], "none": 3, "northwestern": [0, 2], "note": 1, "notebook": [0, 2], "now": [0, 1, 2], "np": [1, 3], "num_a": [2, 3], "num_channel": [2, 3], "num_pt": [2, 3], "number": 3, "numer": 3, "numpi": [0, 1, 2, 3], "nvcc": [0, 2], "nvidia": [0, 2], "obj": 3, "object": 3, "observ": [1, 3], "off": 1, "one": 3, "onli": [0, 1, 2], "onto": 3, "option": 3, "orbit": [1, 3], "order": [1, 2, 3], "org": 3, "otherwis": 1, "our": [0, 1, 2], "out": 3, "output": 3, "over": [1, 3], "overlap": 3, "overrid": 3, "own": [0, 2], "packag": [0, 2], "page": 3, "paper": 1, "paramet": [0, 1, 2, 3], "part": [0, 1, 2], "pass": [0, 2, 3], "path": [0, 2], "pe": 3, "perform": [0, 2], "phase": [1, 3], "phase_maxim": 3, "phasor": 3, "phi": 1, "phi0": 1, "phi_0": 1, "pi": [1, 3], "pip": [0, 2], "pleas": [0, 1, 2], "plot": 2, "plt": 1, "pm": 3, "point": 3, "polar": [1, 3], "portion": 1, "prebuild": [0, 2], "process": [0, 2], "produc": 3, "project": [0, 1, 2, 3], "proper": 3, "properli": [0, 1, 2, 3], "properti": 3, "provid": [0, 1, 2, 3], "psi": 1, "pull": [0, 2], "py": [0, 2], "pyplot": 1, "pyresponsetdi": [1, 2, 3], "pytdirespons": 1, "python": [0, 2], "qquad": 1, "quantiti": 3, "quest": [0, 2], "radian": 3, "rais": 3, "rate": [1, 3], "read": [0, 2, 3], "real": 3, "receiv": 3, "recommend": [0, 1, 2], "remov": [1, 3], "remove_garbag": [1, 3], "remove_sky_coord": [1, 3], "repositori": [0, 2], "request": [0, 2], "requir": [0, 2], "resourc": [0, 2], "response_gen": [2, 3], "response_orbit": [2, 3], "responsewrapp": [0, 1, 2, 3], "result": 2, "return": [1, 3], "right": 1, "run": 3, "same": 3, "sampl": [1, 3], "sampling_frequ": [1, 2, 3], "scipi": [0, 2], "script": [0, 2], "second": [1, 3], "see": [0, 1, 2], "self": [1, 3], "semver": [0, 2], "set": [0, 1, 2, 3], "set_ylabel": 1, "setup": [0, 2, 3], "shape": 3, "sharex": 1, "should": [1, 3], "shown": [0, 2], "sig1": 3, "sig2": 3, "sign": [1, 3], "signal": [2, 3], "simul": 3, "sin": 1, "sin2psi": 1, "singl": 3, "sky": [1, 3], "so": 3, "softwar": [0, 2], "solar": 1, "sourc": [0, 2], "space": 3, "specif": [0, 1, 2], "spline": 3, "src": 1, "ssb": [1, 3], "staff": [0, 2], "start": [1, 3], "step": 3, "stock": 3, "str": 3, "submit": [0, 2], "subplot": 1, "substitut": [0, 2], "suffici": 3, "support": [0, 2], "sure": [0, 2, 3], "system": 1, "t": [1, 3], "t0": [1, 3], "tag": [0, 2], "take": [1, 3], "td": 3, "tdi": [2, 3], "tdi_buff": [2, 3], "tdi_chan": [1, 3], "tdi_combin": [2, 3], "tdi_gen": [1, 2, 3], "tdi_kwargs_custom": 1, "tdi_kwargs_esa": 1, "tdi_orbit": [2, 3], "techniqu": 3, "tell": 3, "templat": 3, "term": 3, "test": 1, "text": 1, "them": 3, "thes": 3, "theta": [1, 3], "thi": [0, 1, 2, 3], "through": [0, 1, 2], "time": [0, 1, 2, 3], "tob": 3, "tool": [0, 2, 3], "toolkit": [0, 2], "total": 1, "toward": 3, "tqdm": [0, 2], "transform": 1, "true": [1, 3], "tupl": 3, "two": 3, "type": 3, "typic": 3, "u": [0, 2], "un": 1, "under": [0, 2], "unit": 1, "unittest": [0, 2], "univers": [0, 2], "us": [0, 1, 2, 3], "usag": [0, 1, 2], "use_gpu": [1, 2, 3], "user": 3, "util": 2, "vallisneri": [0, 2], "valu": 3, "valueerror": 3, "variabl": [0, 2], "veri": 3, "version": 1, "virtual": [0, 2], "wa": [0, 2, 3], "want": [0, 2], "warn": 1, "wave": [2, 3], "waveform": [2, 3], "waveform_gen": 3, "we": [0, 1, 2], "well": 3, "what": 3, "where": [1, 3], "which": [1, 3], "within": [0, 1, 2, 3], "work": 3, "wrapper": [1, 2], "x": 3, "x1": 1, "x2": 1, "xp": [1, 2, 3], "xyz": [2, 3], "y": 3, "y_": 3, "y_gw": [2, 3], "year": [1, 3], "you": [0, 1, 2], "your": [0, 2], "yrsid_si": 1, "z": 3, "zenodo": [0, 1, 2], "zero": 3}, "titles": ["fastlisaresponse: Generic LISA response function for GPUs", "Fast LISA Response Tutorial", "fastlisaresponse: Generic LISA response function for GPUs", "Fast Response Function"], "titleterms": {"acknowledg": [0, 2], "author": [0, 2], "build": 1, "class": 1, "contibutor": [0, 2], "contribut": [0, 2], "custom": 1, "document": 2, "fast": [1, 3], "fastlisarespons": [0, 2], "function": [0, 2, 3], "gener": [0, 1, 2], "get": [0, 2], "gpu": [0, 2], "gravit": 1, "instal": [0, 2], "licens": [0, 2], "lisa": [0, 1, 2], "plot": 1, "prerequisit": [0, 2], "respons": [0, 1, 2, 3], "result": 1, "run": [0, 1, 2], "setup": 1, "signal": 1, "start": [0, 2], "tdi": 1, "test": [0, 2], "tutori": [1, 2], "util": 3, "version": [0, 2], "wave": 1, "waveform": 1, "wrapper": 3}}) -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=. 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/source/README.rst: -------------------------------------------------------------------------------- 1 | fastlisaresponse: Generic LISA response function for GPUs 2 | ========================================================= 3 | 4 | This code base provides a GPU-accelerated version of the generic 5 | time-domain LISA response function. The GPU-acceleration allows this 6 | code to be used directly in Parameter Estimation. 7 | 8 | Please see the 9 | `documentation `__ for 10 | further information on these modules. The code can be found on Github 11 | `here `__. It can be found on 12 | `Zenodo `__. 13 | 14 | If you use all or any parts of this code, please cite 15 | `arXiv:2204.06633 `__. See the 16 | `documentation `__ to 17 | properly cite specific modules. 18 | 19 | Getting Started 20 | --------------- 21 | 22 | Install with pip (CPU only for now): 23 | 24 | :: 25 | 26 | pip install fastlisaresponse 27 | 28 | To import fastlisaresponse: 29 | 30 | :: 31 | 32 | from fastlisaresponse import ResponseWrapper 33 | 34 | See `examples 35 | notebook `__. 36 | 37 | Prerequisites 38 | ~~~~~~~~~~~~~ 39 | 40 | Now (version 1.0.11) ``fastlisaresponse`` requires the newest version of 41 | `LISA Analysis Tools `__. You 42 | can run ``pip install lisaanalysistools``. 43 | 44 | To install this software for CPU usage, you need Python >3.4 and NumPy. 45 | To run the examples, you will also need jupyter and matplotlib. We 46 | generally recommend installing everything, including gcc and g++ 47 | compilers, in the conda environment as is shown in the examples here. 48 | This generally helps avoid compilation and linking issues. If you use 49 | your own chosen compiler, you will need to make sure all necessary 50 | information is passed to the setup command (see below). You also may 51 | need to add information to the ``setup.py`` file. 52 | 53 | To install this software for use with NVIDIA GPUs (compute capability 54 | >2.0), you need the `CUDA 55 | toolkit `__ 56 | and `CuPy `__. The CUDA toolkit must have 57 | cuda version >8.0. Be sure to properly install CuPy within the correct 58 | CUDA toolkit version. Make sure the nvcc binary is on ``$PATH`` or set 59 | it as the ``CUDAHOME`` environment variable. 60 | 61 | Installing 62 | ~~~~~~~~~~ 63 | 64 | Install with pip (CPU only for now): 65 | 66 | :: 67 | 68 | pip install fastlisaresponse 69 | 70 | To install from source: 71 | 72 | 0) `Install Anaconda `__ if 73 | you do not have it. 74 | 75 | 1) Create a virtual environment. 76 | 77 | :: 78 | 79 | conda create -n lisa_resp_env -c conda-forge gcc_linux-64 gxx_linux-64 numpy Cython scipy jupyter ipython h5py matplotlib python=3.12 80 | conda activate lisa_resp_env 81 | 82 | :: 83 | 84 | If on MACOSX, substitute `gcc_linux-64` and `gxx_linus-64` with `clang_osx-64` and `clangxx_osx-64`. 85 | 86 | If you want a faster install, you can install the python packages (numpy, Cython, scipy, tqdm, jupyter, ipython, h5py, requests, matplotlib) with pip. 87 | 88 | 2) Clone the repository. 89 | 90 | :: 91 | 92 | git clone https://github.com/mikekatz04/lisa-on-gpu.git 93 | cd lisa-on-gpu 94 | 95 | 3) If using GPUs, use pip to `install 96 | cupy `__. 97 | 98 | :: 99 | 100 | pip install cupy-12x 101 | 102 | 4) Run install. Make sure CUDA is on your PATH. 103 | 104 | :: 105 | 106 | python scripts/prebuild.py 107 | pip install . 108 | 109 | Running the Tests 110 | ----------------- 111 | 112 | Run the example notebook or the tests using ``unittest`` from the main 113 | directory of the code: 114 | 115 | :: 116 | 117 | python -m unittest discover 118 | 119 | Contributing 120 | ------------ 121 | 122 | Please read `CONTRIBUTING.md `__ for details on our 123 | code of conduct, and the process for submitting pull requests to us. 124 | 125 | Versioning 126 | ---------- 127 | 128 | We use `SemVer `__ for versioning. For the versions 129 | available, see the `tags on this 130 | repository `__. 131 | 132 | Current Version: 1.0.11 133 | 134 | Authors 135 | ------- 136 | 137 | - **Michael Katz** 138 | - Jean-Baptiste Bayle 139 | - Alvin J. K. Chua 140 | - Michele Vallisneri 141 | 142 | Contibutors 143 | ~~~~~~~~~~~ 144 | 145 | - Maybe you! 146 | 147 | License 148 | ------- 149 | 150 | This project is licensed under the GNU License - see the 151 | `LICENSE.md `__ file for details. 152 | 153 | Acknowledgments 154 | --------------- 155 | 156 | - It was also supported in part through the computational resources and 157 | staff contributions provided for the Quest/Grail high performance 158 | computing facility at Northwestern University. 159 | -------------------------------------------------------------------------------- /docs/source/conf.py: -------------------------------------------------------------------------------- 1 | # Configuration file for the Sphinx documentation builder. 2 | # 3 | # This file only contains a selection of the most common options. For a full 4 | # list see the documentation: 5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 6 | 7 | # -- Path setup -------------------------------------------------------------- 8 | 9 | # If extensions (or modules to document with autodoc) are in another directory, 10 | # add these directories to sys.path here. If the directory is relative to the 11 | # documentation root, use os.path.abspath to make it absolute, like shown here. 12 | # 13 | # import os 14 | # import sys 15 | # sys.path.insert(0, os.path.abspath('.')) 16 | 17 | 18 | # -- Project information ----------------------------------------------------- 19 | 20 | project = "fastlisaresponse" 21 | copyright = "2021, Michael Katz, Jean-Baptiste Bayle, Alvin Chua, Michele Vallisneri" 22 | author = "Michael Katz, Jean-Baptiste Bayle, Alvin Chua, Michele Vallisneri" 23 | 24 | # The full version, including alpha/beta/rc tags 25 | release = "0.1.0" 26 | 27 | import pypandoc 28 | 29 | output = pypandoc.convert_file("../../README.md", "rst") 30 | with open("README.rst", "w") as fp: 31 | fp.write(output) 32 | 33 | import sys, os 34 | 35 | sys.path.insert(0, os.path.abspath("/Users/michaelkatz/Research/lisa-on-gpu/")) 36 | 37 | import shutil 38 | 39 | shutil.copy( 40 | "/Users/mlkatz1/Research/lisa-on-gpu/examples/fast_LISA_response_tutorial.ipynb", 41 | "/Users/mlkatz1/Research/lisa-on-gpu/docs/source/fast_LISA_response_tutorial.ipynb", 42 | ) 43 | 44 | 45 | # -- General configuration --------------------------------------------------- 46 | 47 | # Add any Sphinx extension module names here, as strings. They can be 48 | # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom 49 | # ones. 50 | html_theme = "sphinx_rtd_theme" 51 | extensions = [ 52 | "sphinx.ext.autodoc", 53 | "sphinx.ext.napoleon", 54 | "sphinx.ext.autosummary", 55 | "sphinx_rtd_theme", 56 | "nbsphinx", 57 | "sphinx.ext.mathjax", 58 | ] 59 | 60 | source_suffix = [".rst"] 61 | 62 | # Add any paths that contain templates here, relative to this directory. 63 | templates_path = ["_templates"] 64 | 65 | # List of patterns, relative to source directory, that match files and 66 | # directories to ignore when looking for source files. 67 | # This pattern also affects html_static_path and html_extra_path. 68 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] 69 | 70 | import sphinx_rtd_theme 71 | 72 | autodoc_member_order = "bysource" 73 | 74 | 75 | def skip(app, what, name, obj, would_skip, options): 76 | if name == "__call__": 77 | return False 78 | return would_skip 79 | 80 | 81 | def setup(app): 82 | app.connect("autodoc-skip-member", skip) 83 | 84 | 85 | # -- Options for HTML output ------------------------------------------------- 86 | 87 | # The theme to use for HTML and HTML Help pages. See the documentation for 88 | # a list of builtin themes. 89 | # 90 | html_theme = "sphinx_rtd_theme" 91 | 92 | # Add any paths that contain custom static files (such as style sheets) here, 93 | # relative to this directory. They are copied after the builtin static files, 94 | # so a file named "default.css" will overwrite the builtin "default.css". 95 | html_static_path = ["_static"] 96 | 97 | html_theme_options = { 98 | "display_version": True, 99 | "prev_next_buttons_location": "both", 100 | "style_nav_header_background": "coral", 101 | # Toc options 102 | "collapse_navigation": True, 103 | "sticky_navigation": True, 104 | "navigation_depth": 4, 105 | } 106 | -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | 2 | .. include:: README.rst 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | :caption: Documentation: 7 | 8 | user/main 9 | 10 | .. toctree:: 11 | :maxdepth: 4 12 | :caption: Tutorial: 13 | 14 | fast_LISA_response_tutorial 15 | -------------------------------------------------------------------------------- /docs/source/user/main.rst: -------------------------------------------------------------------------------- 1 | Fast Response Function 2 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 | 4 | .. autoclass:: fastlisaresponse.response.pyResponseTDI 5 | :members: 6 | :show-inheritance: 7 | :inherited-members: 8 | 9 | Response Function Wrapper 10 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 | 12 | .. autoclass:: fastlisaresponse.response.ResponseWrapper 13 | :members: 14 | :show-inheritance: 15 | :inherited-members: 16 | 17 | Utilities 18 | ~~~~~~~~~~ 19 | 20 | .. automodule:: fastlisaresponse.utils.utility 21 | :members: 22 | -------------------------------------------------------------------------------- /fastlisaresponse/__init__.py: -------------------------------------------------------------------------------- 1 | from .response import pyResponseTDI, ResponseWrapper 2 | -------------------------------------------------------------------------------- /fastlisaresponse/cutils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/fastlisaresponse/cutils/__init__.py -------------------------------------------------------------------------------- /fastlisaresponse/cutils/include/LISAResponse.hh: -------------------------------------------------------------------------------- 1 | #ifndef __LISA_RESPONSE__ 2 | #define __LISA_RESPONSE__ 3 | 4 | #include "cuda_complex.hpp" 5 | #include "Detector.hpp" 6 | 7 | #define C_inv 3.3356409519815204e-09 8 | #define NUM_THREADS 256 9 | 10 | typedef gcmplx::complex cmplx; 11 | 12 | void get_response(double *y_gw, double *t_data, double *k_in, double *u_in, double *v_in, double dt, 13 | int num_delays, 14 | cmplx *input_in, int num_inputs, int order, 15 | double sampling_frequency, int buffer_integer, double *A_in, double deps, int num_A, double *E_in, 16 | int projections_start_ind, 17 | Orbits *orbits); 18 | 19 | void get_tdi_delays(double *delayed_links, double *input_links, int num_inputs, int num_delays, double *t_arr, int *unit_starts, int *unit_lengths, int *tdi_base_link, int *tdi_link_combinations, int *tdi_signs_in, int *channels, int num_units, int num_channels, 20 | int order, double sampling_frequency, int buffer_integer, double *A_in, double deps, int num_A, double *E_in, int tdi_start_ind, Orbits *orbits); 21 | 22 | #endif // __LISA_RESPONSE__ 23 | -------------------------------------------------------------------------------- /fastlisaresponse/cutils/src/responselisa.pyx: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | cimport numpy as np 3 | 4 | from lisatools.utils.pointeradjust import pointer_adjust 5 | 6 | assert sizeof(int) == sizeof(np.int32_t) 7 | 8 | cdef extern from "Detector.hpp": 9 | ctypedef void* Orbits 'Orbits' 10 | 11 | cdef extern from "LISAResponse.hh": 12 | ctypedef void* cmplx 'cmplx' 13 | void get_response(double* y_gw, double* t_data, double* k_in, double* u_in, double* v_in, double dt, 14 | int num_delays, 15 | cmplx *input_in, int num_inputs, int order, 16 | double sampling_frequency, int buffer_integer, double* A_in, double deps, int num_A, double* E_in, 17 | int projections_start_ind, 18 | Orbits *orbits); 19 | 20 | void get_tdi_delays(double *delayed_links, double *input_links, int num_inputs, int num_delays, double *t_arr, int *unit_starts, int *unit_lengths, int *tdi_base_link, int *tdi_link_combinations, int *tdi_signs, int *channels, int num_units, int num_channels, 21 | int order, double sampling_frequency, int buffer_integer, double *A_in, double deps, int num_A, double *E_in, int tdi_start_ind, Orbits *orbits); 22 | 23 | @pointer_adjust 24 | def get_response_wrap(y_gw, t_data, k_in, u_in, v_in, dt, 25 | num_delays, 26 | input_in, num_inputs, order, sampling_frequency, buffer_integer, 27 | A_in, deps, num_A, E_in, projections_start_ind, 28 | orbits): 29 | 30 | cdef size_t y_gw_in = y_gw 31 | cdef size_t t_data_in = t_data 32 | cdef size_t k_in_in = k_in 33 | cdef size_t u_in_in = u_in 34 | cdef size_t v_in_in = v_in 35 | 36 | cdef size_t orbits_in = orbits 37 | cdef size_t input_in_in = input_in 38 | 39 | cdef size_t A_in_in = A_in 40 | cdef size_t E_in_in = E_in 41 | 42 | get_response(y_gw_in, t_data_in, k_in_in, u_in_in, v_in_in, dt, 43 | num_delays, 44 | input_in_in, num_inputs, order, sampling_frequency, buffer_integer, 45 | A_in_in, deps, num_A, E_in_in, projections_start_ind, 46 | orbits_in) 47 | 48 | 49 | @pointer_adjust 50 | def get_tdi_delays_wrap(delayed_links, y_gw, num_inputs, num_delays, t_arr, unit_starts, unit_lengths, tdi_base_link, tdi_link_combinations, tdi_signs, channels, num_units, num_channels, 51 | order, sampling_frequency, buffer_integer, A_in, deps, num_A, E_in, tdi_start_ind, orbits): 52 | 53 | cdef size_t delayed_links_in = delayed_links 54 | cdef size_t y_gw_in = y_gw 55 | cdef size_t A_in_in = A_in 56 | cdef size_t E_in_in = E_in 57 | cdef size_t t_arr_in = t_arr 58 | cdef size_t unit_starts_in = unit_starts 59 | cdef size_t unit_lengths_in = unit_lengths 60 | cdef size_t tdi_base_link_in = tdi_base_link 61 | cdef size_t tdi_link_combinations_in = tdi_link_combinations 62 | cdef size_t tdi_signs_in = tdi_signs 63 | cdef size_t channels_in = channels 64 | cdef size_t orbits_in = orbits 65 | 66 | get_tdi_delays( delayed_links_in, y_gw_in, num_inputs, num_delays, t_arr_in, unit_starts_in, unit_lengths_in, tdi_base_link_in, tdi_link_combinations_in, tdi_signs_in, channels_in, num_units, num_channels, 67 | order, sampling_frequency, buffer_integer, A_in_in, deps, num_A, E_in_in, tdi_start_ind, orbits_in) 68 | -------------------------------------------------------------------------------- /fastlisaresponse/pointer_adjust.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | try: 4 | import cupy as cp 5 | 6 | gpu = True 7 | 8 | except (ImportError, ModuleNotFoundError) as e: 9 | gpu = False 10 | 11 | 12 | def pointer_adjust(func): 13 | def func_wrapper(*args, **kwargs): 14 | targs = [] 15 | for arg in args: 16 | if gpu: 17 | if isinstance(arg, cp.ndarray): 18 | targs.append(arg.data.mem.ptr) 19 | continue 20 | 21 | if isinstance(arg, np.ndarray): 22 | targs.append(arg.__array_interface__["data"][0]) 23 | continue 24 | 25 | try: 26 | targs.append(arg.ptr) 27 | continue 28 | except AttributeError: 29 | targs.append(arg) 30 | 31 | return func(*targs, **kwargs) 32 | 33 | return func_wrapper 34 | -------------------------------------------------------------------------------- /fastlisaresponse/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mikekatz04/lisa-on-gpu/5fef321af89813db61e075e86a6a58609fd57583/fastlisaresponse/tests/__init__.py -------------------------------------------------------------------------------- /fastlisaresponse/tests/test_fastlisaresponse.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | import numpy as np 3 | import warnings 4 | import os 5 | 6 | path_to_file = os.path.dirname(__file__) 7 | 8 | from lisatools.detector import EqualArmlengthOrbits 9 | from fastlisaresponse import ResponseWrapper 10 | from fastlisaresponse.utils import get_overlap 11 | 12 | try: 13 | import cupy as cp 14 | 15 | gpu_available = True 16 | 17 | except (ModuleNotFoundError, ImportError) as e: 18 | pass 19 | 20 | warnings.warn( 21 | "CuPy is not installed or a gpu is not available. If trying to run on a gpu, please install CuPy." 22 | ) 23 | gpu_available = False 24 | 25 | YRSID_SI = 31558149.763545603 26 | 27 | 28 | class GBWave: 29 | def __init__(self, use_gpu=False): 30 | 31 | self.use_gpu = use_gpu 32 | 33 | @property 34 | def xp(self) -> object: 35 | """Numpy or Cupy""" 36 | return cp if self.use_gpu else np 37 | 38 | def __call__(self, A, f, fdot, iota, phi0, psi, T=1.0, dt=10.0): 39 | 40 | # get the t array 41 | t = self.xp.arange(0.0, T * YRSID_SI, dt) 42 | cos2psi = self.xp.cos(2.0 * psi) 43 | sin2psi = self.xp.sin(2.0 * psi) 44 | cosiota = self.xp.cos(iota) 45 | 46 | fddot = 11.0 / 3.0 * fdot**2 / f 47 | 48 | # phi0 is phi(t = 0) not phi(t = t0) 49 | phase = ( 50 | 2 * np.pi * (f * t + 1.0 / 2.0 * fdot * t**2 + 1.0 / 6.0 * fddot * t**3) 51 | - phi0 52 | ) 53 | 54 | hSp = -self.xp.cos(phase) * A * (1.0 + cosiota * cosiota) 55 | hSc = -self.xp.sin(phase) * 2.0 * A * cosiota 56 | 57 | hp = hSp * cos2psi - hSc * sin2psi 58 | hc = hSp * sin2psi + hSc * cos2psi 59 | 60 | return hp + 1j * hc 61 | 62 | 63 | class ResponseTest(unittest.TestCase): 64 | 65 | def run_test(self, tdi_gen, use_gpu): 66 | gb = GBWave(use_gpu=use_gpu) 67 | 68 | T = 2.0 # years 69 | t0 = 10000.0 # time at which signal starts (chops off data at start of waveform where information is not correct) 70 | 71 | sampling_frequency = 0.1 72 | dt = 1 / sampling_frequency 73 | 74 | # order of the langrangian interpolation 75 | order = 25 76 | 77 | # orbit_file_esa = path_to_file + "/../../orbit_files/esa-trailing-orbits.h5" 78 | 79 | # orbit_kwargs_esa = dict(orbit_file=orbit_file_esa) 80 | 81 | index_lambda = 6 82 | index_beta = 7 83 | 84 | orbits = EqualArmlengthOrbits(use_gpu=use_gpu) 85 | orbits.configure(linear_interp_setup=True) 86 | tdi_kwargs_esa = dict( 87 | orbits=orbits, 88 | order=order, 89 | tdi=tdi_gen, 90 | tdi_chan="AET", 91 | ) 92 | 93 | gb_lisa_esa = ResponseWrapper( 94 | gb, 95 | T, 96 | dt, 97 | index_lambda, 98 | index_beta, 99 | t0=t0, 100 | flip_hx=False, # set to True if waveform is h+ - ihx 101 | use_gpu=use_gpu, 102 | remove_sky_coords=True, # True if the waveform generator does not take sky coordinates 103 | is_ecliptic_latitude=True, # False if using polar angle (theta) 104 | remove_garbage=True, # removes the beginning of the signal that has bad information 105 | **tdi_kwargs_esa, 106 | ) 107 | 108 | # define GB parameters 109 | A = 1.084702251e-22 110 | f = 2.35962078e-3 111 | fdot = 1.47197271e-17 112 | iota = 1.11820901 113 | phi0 = 4.91128699 114 | psi = 2.3290324 115 | 116 | beta = 0.9805742971871619 117 | lam = 5.22979888 118 | 119 | chans = gb_lisa_esa(A, f, fdot, iota, phi0, psi, lam, beta) 120 | 121 | return chans 122 | 123 | def test_tdi_1st_generation(self): 124 | 125 | waveform_cpu = self.run_test("1st generation", False) 126 | self.assertTrue(np.all(np.isnan(waveform_cpu) == False)) 127 | 128 | if gpu_available: 129 | waveform_gpu = self.run_test("1st generation", True) 130 | mm = 1.0 - get_overlap( 131 | cp.asarray(waveform_cpu), 132 | cp.asarray(waveform_gpu), 133 | use_gpu=gpu_available, 134 | ) 135 | self.assertLess(np.abs(mm), 1e-10) 136 | 137 | def test_tdi_2nd_generation(self): 138 | 139 | waveform_cpu = self.run_test("2nd generation", False) 140 | self.assertTrue(np.all(np.isnan(waveform_cpu) == False)) 141 | 142 | if gpu_available: 143 | waveform_gpu = self.run_test("2nd generation", True) 144 | mm = 1.0 - get_overlap( 145 | cp.asarray(waveform_cpu), waveform_gpu, use_gpu=gpu_available 146 | ) 147 | self.assertLess(np.abs(mm), 1e-10) 148 | -------------------------------------------------------------------------------- /fastlisaresponse/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .utility import get_overlap 2 | -------------------------------------------------------------------------------- /fastlisaresponse/utils/utility.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | try: 4 | import cupy as cp 5 | from pyresponse import get_response_wrap as get_response_wrap_gpu 6 | from pyresponse import get_tdi_delays_wrap as get_tdi_delays_wrap_gpu 7 | 8 | gpu = True 9 | 10 | except (ImportError, ModuleNotFoundError) as e: 11 | import numpy as xp 12 | 13 | gpu = False 14 | 15 | 16 | def get_overlap(sig1, sig2, phase_maximize=False, use_gpu=False): 17 | """Calculate the mismatch across TDI channels 18 | 19 | Calculates the overlap between two sets of TDI observables in the time 20 | domain. The overlap is complex allowing for the addition of overlap 21 | over all channels. It can be phase maximized as well. 22 | 23 | This function has GPU capabilities. 24 | 25 | Args: 26 | sig1 (list or xp.ndarray): TDI observables for first signal. Must be ``list`` of 27 | ``xp.ndarray`` or a single ``xp.ndarray``. Must have same length as ``sig2`` in terms 28 | of number of channels and length of the indivudal channels. 29 | sig2 (list or xp.ndarray): TDI observables for second signal. Must be ``list`` of 30 | ``xp.ndarray`` or a single ``xp.ndarray``. Must have same length as ``sig1`` in terms 31 | of number of channels and length of the individual channels. 32 | phase_maximize (bool, optional): If ``True``, maximize over the phase in the overlap. 33 | This is equivalent to getting the magnitude of the phasor that is the complex 34 | overlap. (Defaut: ``False``) 35 | use_gpu (bool, optional): If ``True``, use the GPU. This sets ``xp=cupy``. If ``False, 36 | use the CPU and set ``xp=numpy``. 37 | 38 | Returns: 39 | double: Overlap as a real value. 40 | 41 | """ 42 | 43 | # choose right array library 44 | if use_gpu: 45 | xp = cp 46 | else: 47 | xp = np 48 | 49 | # check inputs 50 | if not isinstance(sig1, list): 51 | if not isinstance(sig1, xp.ndarray): 52 | raise ValueError("sig1 must be list of or single xp.ndarray.") 53 | 54 | elif sig1.ndim < 2: 55 | sig1 = [sig1] 56 | 57 | if not isinstance(sig2, list): 58 | if not isinstance(sig2, xp.ndarray): 59 | raise ValueError("sig1 must be list of or single xp.ndarray.") 60 | 61 | elif sig1.ndim < 2: 62 | sig2 = [sig2] 63 | 64 | assert len(sig1) == len(sig2) 65 | assert len(sig1[0]) == len(sig2[0]) 66 | 67 | # complex overlap 68 | overlap = 0.0 + 1j * 0.0 69 | for sig1_i, sig2_i in zip(sig1, sig2): 70 | overlap_i = np.dot(np.fft.rfft(sig1_i).conj(), np.fft.rfft(sig2_i)) / np.sqrt( 71 | np.dot(np.fft.rfft(sig1_i).conj(), np.fft.rfft(sig1_i)) 72 | * np.dot(np.fft.rfft(sig2_i).conj(), np.fft.rfft(sig2_i)) 73 | ) 74 | overlap += overlap_i 75 | 76 | overlap /= len(sig1) 77 | 78 | if phase_maximize: 79 | return np.abs(overlap) 80 | 81 | else: 82 | return overlap.real 83 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | 2 | [build-system] 3 | requires = ["setuptools", "wheel", "Cython", "numpy", "lisaanalysistools"] 4 | build-backend = 'setuptools.build_meta' 5 | 6 | [tool.poetry] 7 | name = "fastlisaresponse" 8 | version = "1.0.11" 9 | description = "GPU/CPU TD LISA Response Function" 10 | license = "Apache" 11 | classifiers = ["Programming Language :: Python :: 3", "Operating System :: OS Independent"] 12 | homepage = "https://github.com/mikekatz04/LISAanalysistools" 13 | authors = ["Michael L. Katz"] 14 | readme = "README.md" 15 | 16 | [tool.poetry.dependencies] 17 | python = "*" 18 | # astropy = "==5.2.1" 19 | # corner = "==2.2.1" 20 | # healpy = "==1.16.2" 21 | # "ligo.skymap" = "==1.0.4" 22 | # matplotlib = "==3.6.3" 23 | # pandas = "==1.5.2" 24 | # seaborn = "==0.12.2" 25 | # tables = "==3.8.0" 26 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy 2 | pandas 3 | Cython 4 | scipy 5 | tqdm 6 | h5py 7 | requests 8 | matplotlib 9 | LISAanalysistools -------------------------------------------------------------------------------- /scripts/prebuild.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | 3 | fps_cu_to_cpp = ["fastlisaresponse/cutils/src/LISAResponse"] 4 | fps_pyx = ["fastlisaresponse/cutils/src/responselisa"] 5 | 6 | for fp in fps_cu_to_cpp: 7 | shutil.copy(fp + ".cu", fp + ".cpp") 8 | 9 | for fp in fps_pyx: 10 | shutil.copy(fp + ".pyx", fp + "_cpu.pyx") 11 | 12 | 13 | # setup version file 14 | with open("README.md", "r") as fh: 15 | lines = fh.readlines() 16 | 17 | for line in lines: 18 | if line.startswith("Current Version"): 19 | version_string = line.split("Current Version: ")[1].split("\n")[0] 20 | 21 | with open("fastlisaresponse/_version.py", "w") as f: 22 | f.write("__version__ = '{}'".format(version_string)) 23 | 24 | import requests 25 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # from future.utils import iteritems 2 | import os 3 | from os.path import join as pjoin 4 | from setuptools import setup 5 | from distutils.extension import Extension 6 | from Cython.Distutils import build_ext 7 | import numpy 8 | import shutil 9 | 10 | 11 | def find_in_path(name, path): 12 | """Find a file in a search path""" 13 | 14 | # Adapted fom http://code.activestate.com/recipes/52224 15 | for dir in path.split(os.pathsep): 16 | binpath = pjoin(dir, name) 17 | if os.path.exists(binpath): 18 | return os.path.abspath(binpath) 19 | return None 20 | 21 | 22 | def locate_cuda(): 23 | """Locate the CUDA environment on the system 24 | 25 | Returns a dict with keys 'home', 'nvcc', 'include', and 'lib64' 26 | and values giving the absolute path to each directory. 27 | 28 | Starts by looking for the CUDAHOME env variable. If not found, 29 | everything is based on finding 'nvcc' in the PATH. 30 | """ 31 | 32 | # First check if the CUDAHOME env variable is in use 33 | if "CUDAHOME" in os.environ or "CUDA_HOME" in os.environ: 34 | home = ( 35 | os.environ["CUDAHOME"] 36 | if "CUDAHOME" in os.environ 37 | else os.environ["CUDA_HOME"] 38 | ) 39 | nvcc = pjoin(home, "bin", "nvcc") 40 | else: 41 | # Otherwise, search the PATH for NVCC 42 | nvcc = find_in_path("nvcc", os.environ["PATH"]) 43 | if nvcc is None: 44 | raise EnvironmentError( 45 | "The nvcc binary could not be " 46 | "located in your $PATH. Either add it to your path, " 47 | "or set $CUDAHOME" 48 | ) 49 | home = os.path.dirname(os.path.dirname(nvcc)) 50 | 51 | cudaconfig = { 52 | "home": home, 53 | "nvcc": nvcc, 54 | "include": pjoin(home, "include"), 55 | "lib64": pjoin(home, "lib64"), 56 | } 57 | for k, v in iter(cudaconfig.items()): 58 | if not os.path.exists(v): 59 | raise EnvironmentError( 60 | "The CUDA %s path could not be " "located in %s" % (k, v) 61 | ) 62 | 63 | return cudaconfig 64 | 65 | 66 | def customize_compiler_for_nvcc(self): 67 | 68 | # track all the object files generated with cuda device code 69 | self.cuda_object_files = [] 70 | 71 | # Tell the compiler it can processes .cu 72 | self.src_extensions.append(".cu") 73 | 74 | # Save references to the default compiler_so and _comple methods 75 | default_compiler_so = self.compiler_so 76 | super = self._compile 77 | 78 | def _compile(obj, src, ext, cc_args, extra_postargs, pp_opts): 79 | # generate a special object file that will contain linked in 80 | # relocatable device code 81 | if src == "zzzzzzzzzzzzzzzz.cu": 82 | self.set_executable("compiler_so", CUDA["nvcc"]) 83 | postargs = extra_postargs["nvcclink"] 84 | cc_args = self.cuda_object_files[1:] 85 | src = self.cuda_object_files[0] 86 | elif os.path.splitext(src)[1] == ".cu": 87 | self.set_executable("compiler_so", CUDA["nvcc"]) 88 | postargs = extra_postargs["nvcc"] 89 | self.cuda_object_files.append(obj) 90 | else: 91 | postargs = extra_postargs["gcc"] 92 | super(obj, src, ext, cc_args, postargs, pp_opts) 93 | self.compiler_so = default_compiler_so 94 | 95 | self._compile = _compile 96 | 97 | 98 | # Run the customize_compiler 99 | class custom_build_ext(build_ext): 100 | def build_extensions(self): 101 | customize_compiler_for_nvcc(self.compiler) 102 | build_ext.build_extensions(self) 103 | 104 | 105 | try: 106 | CUDA = locate_cuda() 107 | run_cuda_install = True 108 | except OSError: 109 | run_cuda_install = False 110 | 111 | # Obtain the numpy include directory. This logic works across numpy versions. 112 | try: 113 | numpy_include = numpy.get_include() 114 | except AttributeError: 115 | numpy_include = numpy.get_numpy_include() 116 | 117 | 118 | # lib_gsl_dir = "/opt/local/lib" 119 | # include_gsl_dir = "/opt/local/include" 120 | 121 | # find detector source files from installed distribution. 122 | import lisatools 123 | 124 | path_to_lisatools = lisatools.__file__.split("__init__.py")[0] 125 | path_to_lisatools_cutils = path_to_lisatools + "cutils/" 126 | 127 | # if installing for CUDA, build Cython extensions for gpu modules 128 | if run_cuda_install: 129 | 130 | # gpu_extension = dict( 131 | # libraries=["cudart", "cublas", "cusparse"], 132 | # library_dirs=[CUDA["lib64"]], 133 | # runtime_library_dirs=[CUDA["lib64"]], 134 | # language="c++", 135 | # # This syntax is specific to this build system 136 | # # we're only going to use certain compiler args with nvcc 137 | # # and not with gcc the implementation of this trick is in 138 | # # customize_compiler() 139 | # extra_compile_args={ 140 | # "gcc": ["-std=c++11"], # '-g'], 141 | # "nvcc": [ 142 | # "-arch=sm_70", 143 | # # "-gencode=arch=compute_30,code=sm_30", 144 | # # "-gencode=arch=compute_50,code=sm_50", 145 | # # "-gencode=arch=compute_52,code=sm_52", 146 | # # "-gencode=arch=compute_60,code=sm_60", 147 | # # "-gencode=arch=compute_61,code=sm_61", 148 | # "-gencode=arch=compute_70,code=sm_70", 149 | # #'-gencode=arch=compute_75,code=sm_75', 150 | # #'-gencode=arch=compute_75,code=compute_75', 151 | # "-std=c++11", 152 | # "--default-stream=per-thread", 153 | # "--ptxas-options=-v", 154 | # "-c", 155 | # "--compiler-options", 156 | # "'-fPIC'", 157 | # # "-G", 158 | # # "-g", 159 | # # "-O0", 160 | # # "-lineinfo", 161 | # ], # for debugging 162 | # }, 163 | # include_dirs=[ 164 | # numpy_include, 165 | # CUDA["include"], 166 | # "include/", 167 | # ], 168 | # ) 169 | 170 | response_ext = Extension( 171 | "fastlisaresponse.cutils.pyresponse_gpu", 172 | sources=[ 173 | path_to_lisatools_cutils + "src/Detector.cu", 174 | "fastlisaresponse/cutils/src/LISAResponse.cu", 175 | "fastlisaresponse/cutils/src/responselisa.pyx", 176 | "zzzzzzzzzzzzzzzz.cu", 177 | ], 178 | library_dirs=[CUDA["lib64"]], 179 | language="c++", 180 | libraries=["cudart", "cudadevrt"], 181 | runtime_library_dirs=[CUDA["lib64"]], 182 | extra_compile_args={ 183 | "gcc": ["-std=c++11"], 184 | "nvcc": ["-arch=sm_80", "-rdc=true", "--compiler-options", "'-fPIC'"], 185 | "nvcclink": [ 186 | "-arch=sm_80", 187 | "--device-link", 188 | "--compiler-options", 189 | "'-fPIC'", 190 | ], 191 | }, 192 | include_dirs=[ 193 | numpy_include, 194 | CUDA["include"], 195 | "fastlisaresponse/cutils/include", 196 | path_to_lisatools_cutils + "include", 197 | ], 198 | ) 199 | 200 | cpu_extension = dict( 201 | libraries=[], 202 | language="c++", 203 | # This syntax is specific to this build system 204 | # we're only going to use certain compiler args with nvcc 205 | # and not with gcc the implementation of this trick is in 206 | # customize_compiler() 207 | extra_compile_args={ 208 | "gcc": ["-std=c++11"], 209 | }, # '-g'], 210 | include_dirs=[ 211 | numpy_include, 212 | "./fastlisaresponse/cutils/include", 213 | path_to_lisatools_cutils + "include", 214 | ], 215 | ) 216 | 217 | response_cpu_ext = Extension( 218 | "fastlisaresponse.cutils.pyresponse_cpu", 219 | sources=[ 220 | path_to_lisatools_cutils + "src/Detector.cpp", 221 | "fastlisaresponse/cutils/src/LISAResponse.cpp", 222 | "fastlisaresponse/cutils/src/responselisa_cpu.pyx", 223 | ], 224 | **cpu_extension 225 | ) 226 | 227 | 228 | cpu_extensions = [response_cpu_ext] # , detector_ext] 229 | 230 | if run_cuda_install: 231 | extensions = [response_ext] + cpu_extensions 232 | 233 | else: 234 | extensions = cpu_extensions 235 | 236 | with open("README.md", "r") as fh: 237 | long_description = fh.read() 238 | 239 | setup( 240 | name="fastlisaresponse", 241 | author="Michael Katz", 242 | author_email="mikekatz04@gmail.com", 243 | ext_modules=extensions, 244 | # Inject our custom trigger 245 | packages=[ 246 | "fastlisaresponse", 247 | "fastlisaresponse.utils", 248 | "fastlisaresponse.cutils", 249 | "fastlisaresponse.cutils.src", 250 | "fastlisaresponse.cutils.include", 251 | ], 252 | cmdclass={"build_ext": custom_build_ext}, 253 | # Since the package has c code, the egg cannot be zipped 254 | zip_safe=False, 255 | long_description=long_description, 256 | long_description_content_type="text/markdown", 257 | version="1.0.11", 258 | url="https://github.com/mikekatz04/lisa-on-gpu", 259 | classifiers=[ 260 | "Programming Language :: Python :: 3", 261 | "License :: OSI Approved :: GNU General Public License (GPL)", 262 | "Environment :: GPU :: NVIDIA CUDA", 263 | "Natural Language :: English", 264 | "Programming Language :: C++", 265 | "Programming Language :: Cython", 266 | "Programming Language :: Python :: 3.12", 267 | ], 268 | python_requires=">=3.6", 269 | package_data={ 270 | "fastlisaresponse.cutils.src": [ 271 | "LISAResponse.cu", 272 | "LISAResponse.cpp", 273 | "responselisa.pyx", 274 | ], 275 | "fastlisaresponse.cutils.include": ["LISAResponse.hh", "cuda_complex.hpp"], 276 | }, 277 | ) 278 | --------------------------------------------------------------------------------