pax_global_header 0000666 0000000 0000000 00000000064 15053353627 0014523 g ustar 00root root 0000000 0000000 52 comment=7207eec533d202b1432de1a1a90a934ead3c1f48
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/ 0000775 0000000 0000000 00000000000 15053353627 0020451 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.coveragerc 0000664 0000000 0000000 00000001271 15053353627 0022573 0 ustar 00root root 0000000 0000000 # .coveragerc to control coverage.py
[run]
branch = True
omit =
*ase/*
*numpy/*
*spglib/*
tests/*
*/site.py
include =
dynasor/*
bin/*
local_installation/dynasor/*
local_installation/dynasor
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
# Don't complain about missing debug-only code:
def __repr__
if self\.debug
# Don't complain if tests don't hit defensive assertion code:
raise AssertionError
raise NotImplementedError
# Don't complain if non-runnable code isn't run:
if 0:
if __name__ == .__main__.:
ignore_errors = True
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.flake8 0000664 0000000 0000000 00000000153 15053353627 0021623 0 ustar 00root root 0000000 0000000 [flake8]
max-line-length = 100
inline-quotes = '
multiline-quotes = """
exclude = .ipynb_checkpoints local
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitignore 0000664 0000000 0000000 00000000516 15053353627 0022443 0 ustar 00root root 0000000 0000000 slask/*
build/
dist/
*.pyc
*.so
.project
.pydevproject
.settings/*
*~
userguide/
doc/dynasor.*.rst
*.npz
*.lock
.coverage
bin/dynasor
dynasor.egg-info/
.ipynb_checkpoints/
mypkg.sh
log.lammps
dump*
!dump.traj
!dump_with_velocities.traj
pbslog
model*.xyz
thermo.out
dump*.out
pbslog
movie*.*
*.nc
gpumd_run_dir
local
public
*.tgz
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab-ci.yml 0000664 0000000 0000000 00000012026 15053353627 0023106 0 ustar 00root root 0000000 0000000 stages: [build, test, deploy]
# Avoid duplicate pipelines: skip push pipelines when an MR exists; otherwise allow all
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS'
when: never
- when: always
variables:
# Images
BARE_IMAGE: "python:3.13-slim-bookworm"
CUSTOM_IMAGE: "$CI_REGISTRY/materials-modeling/$CI_PROJECT_NAME/cicd"
# pip cache
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_INPUT: "1"
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.pip-cache"
cache:
key:
files:
- pyproject.toml
paths:
- .pip-cache/
# ---------- Build a wheel/sdist ----------
build:wheel:
stage: build
image: $BARE_IMAGE
rules:
- when: always
script:
- python -m pip install -U pip build
- python -m build --wheel --sdist
- ls -l dist/
artifacts:
name: "dist-$CI_COMMIT_SHORT_SHA"
paths: [dist/]
expire_in: 7 days
# ---------- Test matrix (install from source with extras) ----------
.test_template:
stage: test
image: "python:$PYTHON_VERSION"
before_script:
- python -m pip install -U pip
- pip install ".[test]"
script:
- xdoctest dynasor
- coverage run -m pytest --verbose --junitxml=report.xml tests/
- COVERAGE_OPTIONS="--omit=dynasor/core/rho_j_q_numba.py,dynasor/post_processing/filon.py"
- coverage report -m $COVERAGE_OPTIONS
- coverage xml -o coverage.xml $COVERAGE_OPTIONS
- coverage html $COVERAGE_OPTIONS
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: always
allow_failure: true
- when: manual
allow_failure: true
coverage: '/TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
artifacts:
reports:
junit: report.xml
coverage_report:
coverage_format: cobertura
path: coverage.xml
paths: [htmlcov/]
expire_in: 2 days
test:py39:
extends: .test_template
variables: { PYTHON_VERSION: "3.9" }
test:py310:
extends: .test_template
variables: { PYTHON_VERSION: "3.10" }
test:py311:
extends: .test_template
variables: { PYTHON_VERSION: "3.11" }
test:py312:
extends: .test_template
variables: { PYTHON_VERSION: "3.12" }
test:py313:
extends: .test_template
variables: { PYTHON_VERSION: "3.13" }
rules:
- when: always
allow_failure: false
style_check:
stage: test
image: $BARE_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule"'
when: always
- when: never
script:
- python -m pip install -U pip flake8
- flake8 doc/ examples/ dynasor/ tests/
# ---------- Documentation (uses built wheel + extras) ----------
documentation:
stage: test
image: $CUSTOM_IMAGE
rules:
- if: '$CI_COMMIT_BRANCH != "master" && $CI_COMMIT_TAG == null && $CI_PIPELINE_SOURCE != "schedule"'
when: always
- when: never
before_script:
- python -m pip install -U pip
- pip install ".[documentation]"
script:
- mkdir -p public
- sphinx-build -b doctest -W doc/ public/
- sphinx-build -W doc/ public/
artifacts:
paths: [public/]
expire_in: 7 days
# ---------- Pages ----------
# - stable: latest tag -> public/
# - latest: default branch -> public/dev/
.pages_template:
image: $CUSTOM_IMAGE
before_script:
- python -m pip install -U pip
- git fetch --tags --prune --quiet
- git fetch origin "$CI_DEFAULT_BRANCH" --depth 1 --quiet
- mkdir -p public
script:
# --- stable -> public/ (latest tag) ---
- LATEST_TAG="$(git tag --sort=-v:refname | head -n1)"
- git worktree add --force stable "$LATEST_TAG"
- cd stable
- pip install ".[documentation]"
- sphinx-build doc/ "$CI_PROJECT_DIR/public/"
- cd "$CI_PROJECT_DIR"
- git worktree remove --force stable
# --- latest -> public/dev/ (default branch) ---
- git worktree add --force latest "origin/$CI_DEFAULT_BRANCH"
- cd latest
- pip install ".[documentation]"
- sphinx-build doc/ "$CI_PROJECT_DIR/public/dev/"
- cd "$CI_PROJECT_DIR"
- git worktree remove --force latest
artifacts:
paths: [public/]
expire_in: 7 days
pages:
extends: .pages_template
stage: deploy
rules:
- if: '$CI_COMMIT_BRANCH == "master"'
when: always
- if: '$CI_COMMIT_TAG'
when: always
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
pages_verification:
extends: .pages_template
stage: test
rules:
- if: '$CI_COMMIT_BRANCH != "master" && $CI_COMMIT_TAG == null && $CI_PIPELINE_SOURCE != "schedule"'
when: manual
allow_failure: true
- when: never
pypi:
stage: deploy
image: $CUSTOM_IMAGE
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_TAG'
when: manual
environment:
name: pypi-upload
before_script:
- python -m pip install -U pip build twine
- git fetch --tags --quiet
script:
# On tag pipelines $CI_COMMIT_TAG is set; checkout is usually redundant but harmless
- echo "tag=$CI_COMMIT_TAG"
- if [ -n "$CI_COMMIT_TAG" ]; then git checkout "$CI_COMMIT_TAG"; fi
- python -m build
- ls -l dist/
- twine check dist/*
- twine upload dist/* -u __token__ -p "$PYPI_TOKEN"
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab/ 0000775 0000000 0000000 00000000000 15053353627 0021771 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab/issue_templates/ 0000775 0000000 0000000 00000000000 15053353627 0025177 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab/issue_templates/Bug.md 0000664 0000000 0000000 00000002115 15053353627 0026235 0 ustar 00root root 0000000 0000000 *(If the task is time-capped, start the title with the keyword 'EXPLORE', e.g.,)*
*("EXPLORE: Fix crash on windows 10")*
## Summary
*(Summarize the bug encountered concisely)*
## Steps to reproduce
*(How one can reproduce the issue - this is very important)*
## What is the current bug behavior?
*(What actually happens)*
## What is the expected correct behavior?
*(What you should see instead)*
## Possible fixes
*(If you can, link to the line of code that might be responsible for the problem)*
____________________________________________________________________
***Issue definition review***
*(Before the issue can be moved onto the board it should be discussed with or reviewed by at least one other team member. You can address one or more team members via the following slash (quick action) command):*
`/cc @(username)`
***Labeling***
*(Please suggest labels for the issue, e.g., by using the following slash command):*
`/label ~(label1) ~(label2)`
***Time estimation***
Estimated time can be indicated with the command `/estimate`; use e.g., `/estimate 2d` to indicate two days.
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab/issue_templates/Task.md 0000664 0000000 0000000 00000002351 15053353627 0026424 0 ustar 00root root 0000000 0000000 *(A task is loosely speaking an issue that does not increase user value)*
*(If the task is time-capped, start the title with the keyword 'EXPLORE', e.g.,)*
*("EXPLORE: Figure out how to use customized templates in gitlab")*
## Description
*(Describe the task)*
### Background
*(If needed provide some background)*
## Sub-tasks
***Note!, this section should be completed by a developer and not necessarily the feature requester***
*(Describe the sub-tasks to be carried out, preferably in the form of a list)*
* [ ] *(task 1)*
* [ ] *(task 2)*
* [ ] *(task 3)*
## Demonstration
*(Describe how it can be shown that the task has been implemented successfully)*
______________________________________________________________
***Issue definition review***
*(Before the issue can be moved onto the board it should be discussed with or reviewed by at least one other team member. You can address one or more team members via the following slash (quick action) command):*
`/cc @(username)`
***Labeling***
*(Please suggest labels for the issue, e.g., by using the following slash command):*
`/label ~(label1) ~(label2)`
***Time estimation***
Estimated time can be indicated with the command `/estimate`; use e.g., `/estimate 2d` to indicate two days.
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/.gitlab/issue_templates/User_Story.md 0000664 0000000 0000000 00000002727 15053353627 0027647 0 ustar 00root root 0000000 0000000 *(A user story provides some kind of user value)*
*(If the task is time-capped, start the title with the keyword 'EXPLORE', e.g.,)*
*("EXPLORE: Diffraction pattern from ensembles")*
## Description
*(Write a user story, i.e. describe the feature from the perspective of the user)*
As a < type of user >, I want < some goal > [ so that < some reason > ].
### Background
*(Provide some brief and useful background information if needed)*
## Sub-tasks
***Note!, this section should be completed by a developer and not necessarily the feature requester***
*(Describe the sub-tasks to be carried out, preferably in the form of an task list, in order to complete this task.)*
* [ ] *(e.g. Unit tests)*
* [ ] *(e.g. Update user documentation)*
* [ ] *(e.g. Prepare demonstration)*
* [ ] *(task 4)*
## Demonstration
*(Describe how it can be shown that the user story has been implemented successfully)*
______________________________________________________________
***Issue definition review***
*(Before the issue can be moved onto the board it should be discussed with or reviewed by at least one other team member. You can address one or more team members via the following slash (quick action) command):*
`/cc @(username)`
***Labeling***
*(Please suggest labels for the issue, e.g., by using the following slash command):*
`/label ~(label1) ~(label2)`
***Time estimation***
Estimated time can be indicated with the command `/estimate`; use e.g., `/estimate 2d` to indicate two days.
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/CONTRIBUTING.md 0000664 0000000 0000000 00000013177 15053353627 0022713 0 ustar 00root root 0000000 0000000 Contribution guidelines
=======================
Some general guidelines:
* **Read the contribution guidelines**.
You have done well so far but keep on reading all the way to the **bottom of this page**.
* Use [expressive function and variable names](https://xkcd.com/910/), e.g.,
* Good: `get_number_of_structures` (Python)
* Avoid: `get_nbr_struct` or any variation thereof
* Good: `get_number_of_allowed_elements` (Python)
* Avoid: `get_Mi` or any variation thereof
* Document and comment, document and comment, document and comment, document and comment, document and comment ... (it cannot be said too often).
* Always imagine someone else has to be able to read your code. Hence do your
best at writing [*clean and structured* code](https://www.xkcd.com/1513/).
* Avoid commenting out blocks of code for "later use/reference" in commits.
* When writing C++ code, separate declaration and definition in `*.hpp` and
`*.cpp` files. This is not just a matter of good coding style but
[compilation time during development](https://xkcd.com/303/).
Python
------
Code should be [pep8](https://www.Python.org/dev/peps/pep-0008/) compliant and pass [pyflakes](https://pypi.Python.org/pypi/pyflakes).
Any functions/functionality *must* be properly documented.
This includes [docstrings](https://en.wikipedia.org/wiki/Docstring) for functions, classes, and modules that clearly describe the task performed, the interface (where necessary), the output, and if possible an example.
This package uses [NumPy Style Python Docstrings](http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_numpy.html).
Good job, you are still reading! [Will you make it to the end?](https://xkcd.com/169/)
Please use spaces
-----------------
While you are entitled to [your own opinion](http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/) this project uses spaces instead of tabs.
Even if you are geeky enough to care and like [Silicon Valley](https://www.youtube.com/watch?v=SsoOG6ZeyUI) you should know that [developers who use spaces make more money](https://stackoverflow.blog/2017/06/15/developers-use-spaces-make-money-use-tabs/).
Also the use of spaces is strongly recommended by our beloved [pep8](https://www.Python.org/dev/peps/pep-0008/) standard.
Commits/issues/merge requests
-----------------------------
### Commit messages
When writing commit messages, generating issues, or submitting merge requests, [write meaningful and concise commit messages](https://xkcd.com/1296/).
The first line should not exceed 78 characters. If you require more space, insert an empty line after the "title" and add a longer message below.
In this message, you should again limit yourself to 78 characters *per* line.
### General guidelines
Bug reports, features suggestions, code review etc are handled via gitlab.
The following workflow is strongly [encouraged](https://xkcd.com/1172/):
#### Preparation phase
As an issue reporter:
* Create an issue.
* When creating an issue for a __feature request__, it is good practise to describe who the issue is to be developed for, what should be achieved, and ensure that implementation of the feature result in user value.
Good practice is to write a [user story](https://www.mountaingoatsoftware.com/agile/user-stories), e.g.:
1. _As a user at a neutron source, I would like to be able to compare_
_my acquired powder diffraction data with `icet` simulations, so that_
_I can explain my temperature dependent observations._
2. _As a developer, I would like to easily figure out how to best_
_contribute to the `icet` project._
It is also a good idea to describe how a succesful implementation can be demonstrated.
* When creating a __bug report__, it is important to describe how the bug can be reproduced.
* Invite comments from users, developers, and other stakeholders via the GitLab interface (e.g., use `@username` to address specific team members in issue descriptions, messages, or discussions)
* Review the input and make adjustments according to input.
If the issue is considered to take more than five days to complete, try to split it into smaller ones, each with their own user story.
* Once the issue is ready for development, the product owner or a person appointed by the product owner should move the issue to the `To Do` column.
#### Development phase
As a developer:
* If the issue is not already assigned to you, assign it to yourself.
Move the issue to the `Doing` column.
* Create a branch from the issue via the GitLab interface.
Ensure that other people can see from the issue which branch you are working on.
* Once the work on the issue has been completed *first* clean up your code and review the [items that will be covered during review (see below)](http://commadot.com/wtf-per-minute/).
Make sure that the described demonstration can be done, that there are unit tests (or regression tests in case of bug fixes), and developer and user documentation.
* Create a merge request to initiate the review phase.
#### Review phase
As a reviewer:
* If the merge request up for review is not already assigned to you, assign it to yourself.
* The development related to the issue must be reviewed for
* sufficient test coverage.
* code passes all existing tests
* functionality
* performance
* code quality
* compliance to style guidelines
* addition of new unit tests
* demonstration is fulfilled
* After all comments/questions raised during the review have been addressed, the code can be merged into master by the reviewer.
As a developer:
* The responsibility for making the code compliant with the above points resides with the developer *not* the reviewer.
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/Dockerfile 0000664 0000000 0000000 00000001623 15053353627 0022445 0 ustar 00root root 0000000 0000000 FROM python:3.13-slim-bookworm
ENV DEBIAN_FRONTEND=noninteractive \
PIP_NO_CACHE_DIR=1 \
UV_SYSTEM_PYTHON=1
# OS deps (graphviz+pandoc). Use --no-install-recommends and clean the lists.
RUN apt-get update \
&& apt-get install -y --no-install-recommends graphviz pandoc ca-certificates curl git \
&& rm -rf /var/lib/apt/lists/*
# Add super-fast installer; harmless if unused in CI
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
# One layer, no cache kept
RUN python -m pip install --upgrade pip \
&& pip install --no-cache-dir \
sphinx==8.1.3 \
sphinx-sitemap==2.6.0 \
sphinx-design==0.6.1 \
sphinx-autodoc-typehints==2.4.4 \
pydata-sphinx-theme==0.16.1 \
sphinx-rtd-theme==3.0.2 \
nbsphinx==0.9.5 \
nbconvert==7.16.4 \
jinja2==3.1.6 \
jupyter-core==5.7.2 \
pygments==2.19.1 \
IPython==9.4.0
WORKDIR /work
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/LICENSE 0000664 0000000 0000000 00000002070 15053353627 0021455 0 ustar 00root root 0000000 0000000 MIT License
Copyright (c) 2018-2025 materials-modeling
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/README.rst 0000664 0000000 0000000 00000004642 15053353627 0022146 0 ustar 00root root 0000000 0000000 dynasor
=======
**dynasor** is a tool for calculating total and partial dynamic structure factors as well as related correlation functions from molecular dynamics (MD) simulations.
By analyzing these functions one can access the dynamics of a system without resorting to perturbative approaches.
Moreover by combining in particular the structure factor with the cross sections (or form factors) of, e.g., neutrons, X-rays or electrons, one can predict experimental spectra.
The main input consists of a trajectory from a MD simulation, i.e., a file containing snapshots of the particle coordinates and optionally velocities, that correspond to consecutively and equally spaced points in (simulation) time.
**dynasor** provides both python and a command line interface.
The following snippet illustrates how one can calculate dynamic structure factors using the former.
.. code-block:: python
traj = Trajectory('dump.xyz', trajectory_format='extxyz')
q_points = generate_spherical_qpoints(traj.cell, q_max=20)
sample = compute_dynamic_structure_factors(traj, q_points=q_points, dt=5, window_size=100)
sample.write_to_npy('test.npy')
**dynasor** can be installed via `pip `_ or `conda `_.
Please consult the `installation section of the user guide `_ for details.
The full documentation can be found in the `user guide `_.
For questions and help please use the `dynasor discussion forum on matsci.org `_.
**dynasor** and its development are hosted on `gitlab `_.
When using **dynasor** in your research please cite the following papers:
| *Dynasor – A tool for extracting dynamical structure factors and current correlation functions from molecular dynamics simulations*
| Erik Fransson, Mattias Slabanja, Paul Erhart, and Göran Wahnström
| Advanced Theory and Simulations **4**, 2000240 (2021); DOI:`10.1002/adts.202000240 `_
| *Dynasor 2: From simulation to experiment through correlation functions*
| Esmée Berger, Erik Fransson, Fredrik Eriksson, Eric Lindgren, Göran Wahnström, Thomas Holm Rod, and Paul Erhart
| Computer Physics Communications **316**, 109759 (2025); DOI: `10.1016/j.cpc.2025.109759 `_ dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/benchmarks/ 0000775 0000000 0000000 00000000000 15053353627 0022566 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/benchmarks/numba.ipynb 0000664 0000000 0000000 00000306172 15053353627 0024744 0 ustar 00root root 0000000 0000000 {
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "ce6641c8",
"metadata": {},
"outputs": [],
"source": [
"import itertools\n",
"import timeit\n",
"\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"\n",
"from dynasor.core.reciprocal import calc_rho_q, calc_rho_j_q"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "4760b536",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 2 4 8 16 32 64 128]\n"
]
}
],
"source": [
"sizes = 2**np.arange(1, 8)\n",
"print(sizes)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2bcbacb6",
"metadata": {},
"outputs": [],
"source": [
"def xvq(Nx, Nq):\n",
" \"\"\"Returns suitable arrays used in rho_q and rho_j_q\"\"\"\n",
" x = np.random.normal(size=(Nx, 3))\n",
" v = np.random.normal(size=(Nx, 3))\n",
" q = np.random.normal(size=(Nq, 3))\n",
" return x, v, q"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8ff8bccf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([1.16435931+0.52618282j, 1.15045451-0.28636197j]),\n",
" array([[ 1.66779075+0.12925628j, -0.03102259-0.17115886j,\n",
" 0.8197776 +0.09857148j],\n",
" [ 1.24151343-1.05491643j, -0.13291369-0.15462083j,\n",
" 0.63304868-0.4823513j ]]))"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Here we force numba to compile the functions\n",
"x, v, q = xvq(2, 2)\n",
"calc_rho_q(x, q)\n",
"calc_rho_j_q(x, v, q)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "860011c2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"numba rho_j_q 128 128 7.989435801282525e-05 \r"
]
}
],
"source": [
"# Main loop\n",
"\n",
"data = []\n",
"functions = dict(rho_q='calc_rho_q(x, q)', rho_j_q='calc_rho_j_q(x, v, q)')\n",
"size_pairs = itertools.product(sizes, repeat=2)\n",
"\n",
"for (func, func_str), (Nx, Nq) in itertools.product(\n",
" functions.items(), size_pairs):\n",
" x, v, q = xvq(Nx, Nq)\n",
"\n",
" timer = timeit.Timer(func_str, globals=globals())\n",
" N, T = timer.autorange()\n",
" print('numba', func, Nx, Nq, T/N, end=' '*10 + '\\r')\n",
" data.append(dict(Nx=Nx, Nq=Nq, t=T/N, backend='numba', func=func))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2b72388b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Nx Nq t backend func\n",
"0 2 2 0.000007 numba rho_q\n",
"1 2 4 0.000006 numba rho_q\n",
"2 2 8 0.000007 numba rho_q\n",
"3 2 16 0.000010 numba rho_q\n",
"4 2 32 0.000006 numba rho_q\n",
".. ... ... ... ... ...\n",
"93 128 8 0.000029 numba rho_j_q\n",
"94 128 16 0.000060 numba rho_j_q\n",
"95 128 32 0.000026 numba rho_j_q\n",
"96 128 64 0.000043 numba rho_j_q\n",
"97 128 128 0.000080 numba rho_j_q\n",
"\n",
"[98 rows x 5 columns]\n"
]
}
],
"source": [
"DF = pd.DataFrame(data)\n",
"print(DF)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "f2fa73c6",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, axes = plt.subplots(2, sharex=True, figsize=(8,8))\n",
"\n",
"ax = axes[0]\n",
"for Nx in sorted(set(DF.Nx)):\n",
" df = DF[(DF.Nx == Nx) & (DF.backend=='c') & (DF.func=='rho_q')]\n",
" l, = ax.loglog(df.Nq, df.t, ls='-', label=f'Nx={Nx}')\n",
" df = DF[(DF.Nx == Nx) & (DF.backend=='numba') & (DF.func=='rho_q')]\n",
" ax.loglog(df.Nq, df.t, ls='--', label=f'_Nx={Nx}', color=l.get_color())\n",
"ax.set_ylabel('Timing rho_q')\n",
"\n",
"ax = axes[1]\n",
"for Nx in sorted(set(DF.Nx)):\n",
" df = DF[(DF.Nx == Nx) & (DF.backend=='c') & (DF.func=='rho_j_q')]\n",
" l, = ax.loglog(df.Nq, df.t, ls='-', label=f'Nx={Nx}')\n",
" df = DF[(DF.Nx == Nx) & (DF.backend=='numba') & (DF.func=='rho_j_q')]\n",
" ax.loglog(df.Nq, df.t, ls='--', label=f'_Nx={Nx}', color=l.get_color())\n",
"ax.set_ylabel('Timing rho_j_q')\n",
"\n",
"\n",
"axes[1].set_xlabel('Nq')\n",
"axes[0].plot([],[],ls='--', label='numba')\n",
"axes[0].legend()\n",
"fig.tight_layout()\n",
"fig.savefig('timings.pdf')\n",
"#fig.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/benchmarks/reader/ 0000775 0000000 0000000 00000000000 15053353627 0024030 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/benchmarks/reader/ase_mp.py 0000664 0000000 0000000 00000002046 15053353627 0025650 0 ustar 00root root 0000000 0000000 import timeit
import numpy as np
from ase.io import read, write # noqa
from ase.build import bulk
from dynasor.trajectory.extxyz_trajectory_reader import ExtxyzTrajectoryReader # noqa
fname = 'atoms.extxyz'
frames = 100
atoms = 2000
atoms = bulk('Al').repeat((atoms, 1, 1))
momenta = np.random.random(size=atoms.positions.shape)
atoms.set_momenta(momenta)
atoms.info['Time'] = 1.0
atoms.set_tags(np.ones(len(atoms)))
print(f'Number of atoms: {len(atoms)}')
print(f'Number of frames: {frames}')
print(f'Number of bytes: {frames * len(atoms) * 1.8 / 2**12 / 2**12:.3f} GB')
write(fname, [atoms]*frames)
timer = timeit.Timer("read(fname, index=':')", globals=globals()) # noqa
N, T = timer.autorange()
print(f'Time ASE: {T/N:<10.5f}', flush=True)
T0 = T/N
for n in [2, 3, 4, 5, 6, 8, 12]:
timer = timeit.Timer('list(ExtxyzTrajectoryReader(fname, max_workers=n))', globals=globals())
N, T = timer.autorange()
print(f'Workers: {n} Time: {T/N:<10.5f} Speedup: {T0/(T/N):<10.5f} '
f'Efficiency: {T0/(T/N)/n:<10.5f}', flush=True)
dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/doc/ 0000775 0000000 0000000 00000000000 15053353627 0021216 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/doc/_static/ 0000775 0000000 0000000 00000000000 15053353627 0022644 5 ustar 00root root 0000000 0000000 dynasor-2.3-7207eec533d202b1432de1a1a90a934ead3c1f48/doc/_static/Ni3Al-current-correlation.png 0000664 0000000 0000000 00000106432 15053353627 0030265 0 ustar 00root root 0000000 0000000 PNG
IHDR x zTXtRaw profile type exif xuQ AQDZy>O>$Y>LE..Yn!Oqd|UN泥iV.77,vy7TrKit$誑%;ٰrNރ&DJ42թKm 4pco1'TޏS[ysp/f;z7F<