From 3eae9693c6ccab7013cee46932cd99251f07a76e Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 00:06:27 +0100 Subject: [PATCH 01/20] ci: Add Ruff linting --- .github/workflows/{flake8.yml => lint.yml} | 14 ++++++++------ pyproject.toml | 12 ++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) rename .github/workflows/{flake8.yml => lint.yml} (75%) diff --git a/.github/workflows/flake8.yml b/.github/workflows/lint.yml similarity index 75% rename from .github/workflows/flake8.yml rename to .github/workflows/lint.yml index 88166dd5af..f96eaf430b 100644 --- a/.github/workflows/flake8.yml +++ b/.github/workflows/lint.yml @@ -1,4 +1,4 @@ -name: Flake8 +name: Lint permissions: contents: read @@ -18,10 +18,8 @@ on: - main jobs: - flake8: - + codelint: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v6 - name: Set up Python 3.10 @@ -31,8 +29,12 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install flake8-pyproject + pip install flake8-pyproject ruff - - name: Lint with flake8 + - name: Lint codebase with flake8 run: | flake8 --builtins=ArgumentError . + + - name: Lint codebase with ruff + run: | + ruff check --preview --output-format github diff --git a/pyproject.toml b/pyproject.toml index afa0c02704..bdb0c01d3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,6 +69,18 @@ exclude = ["binder", "docker", "docs", "tests", "examples"] [tool.setuptools_scm] fallback_version = "0+untagged" +[tool.ruff] +line-length = 90 + +[tool.ruff.lint] +# Add the following rule sets +extend-select = ["E", "W", "F", "B", "UP", "SIM", "I"] +# But ignore these inconvenient rules +ignore = ["F403", "E226", "E731", "E275", "F405", "E722", "E741", "W605"] + +[tool.ruff.lint.isort] +known-first-party = ["devito", "examples"] + [tool.flake8] max-line-length = 90 ignore = [ From cc2d0ed6990dabcd5acd3f0d6aaa8acc48ad97b6 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 00:08:14 +0100 Subject: [PATCH 02/20] ci: Add actionlint and hadolint for good measure --- .github/workflows/lint.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f96eaf430b..ac95c45ef5 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -38,3 +38,35 @@ jobs: - name: Lint codebase with ruff run: | ruff check --preview --output-format github + + actionlint: + name: "Lint Github actions YAML files" + # There's a way to add error formatting so GH actions adds messages to code, + # but I can't work out the right number of quotes to get it to work + # https://github.com/rhysd/actionlint/blob/main/docs/usage.md + # #example-error-annotation-on-github-actions + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Check workflow files + uses: docker://rhysd/actionlint:latest + with: + args: -color + + dockerlint: + name: "Lint dockerfiles" + runs-on: ubuntu-latest + container: + image: hadolint/hadolint:latest-alpine + env: + HADOLINT_IGNORE: "DL3005,DL3007,DL3008,DL3015,DL3059" + steps: + - uses: actions/checkout@v3 + - name: Lint dockerfiles inside hadolint container + run: | + for DOCKERFILE in docker/Dockerfile.*; \ + do \ + echo " Linting $DOCKERFILE"; \ + hadolint "$DOCKERFILE" \ + || exit 1; \ + done From 6e1798ac343120ca898799bf2640bed3994f92a9 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 00:32:27 +0100 Subject: [PATCH 03/20] ci: Give codelint a name --- .github/workflows/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ac95c45ef5..67aa0423be 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,6 +19,7 @@ on: jobs: codelint: + name: "Lint the codebase" runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 From 24c0c8192a04e1f46388f44f9b85a63c85c97339 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 13:35:43 +0100 Subject: [PATCH 04/20] misc: Replace ruff I rules with more specific isort rules --- .github/workflows/lint.yml | 6 +++++- pyproject.toml | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 67aa0423be..530f59dfc0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,12 +30,16 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install flake8-pyproject ruff + pip install flake8-pyproject isort ruff - name: Lint codebase with flake8 run: | flake8 --builtins=ArgumentError . + - name: Lint the Python imports with isort + run: | + isort --check-only . + - name: Lint codebase with ruff run: | ruff check --preview --output-format github diff --git a/pyproject.toml b/pyproject.toml index bdb0c01d3a..51b4b333f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,12 +74,15 @@ line-length = 90 [tool.ruff.lint] # Add the following rule sets -extend-select = ["E", "W", "F", "B", "UP", "SIM", "I"] +select = ["E", "W", "F", "B", "UP", "SIM", "RUF022"] # But ignore these inconvenient rules ignore = ["F403", "E226", "E731", "E275", "F405", "E722", "E741", "W605"] -[tool.ruff.lint.isort] -known-first-party = ["devito", "examples"] +[tool.isort] +line_length = 90 +known_first_party = ["devito", "examples"] +multi_line_output = "VERTICAL_GRID_GROUPED" +force_alphabetical_sort_within_sections = true [tool.flake8] max-line-length = 90 From 6f663c6ba572ddec4caccf7614d55cb09f501518 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 18:35:08 +0100 Subject: [PATCH 05/20] misc: Add support for command line spellchequing with typo --- .github/workflows/lint.yml | 9 +++++++++ pyproject.toml | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 530f59dfc0..a2d7c11267 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -44,6 +44,15 @@ jobs: run: | ruff check --preview --output-format github + spellcheck: + name: "Spellcheck everything" + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v4 + - name: Spell Check Repo + uses: crate-ci/typos@v1.38.1 + actionlint: name: "Lint Github actions YAML files" # There's a way to add error formatting so GH actions adds messages to code, diff --git a/pyproject.toml b/pyproject.toml index 51b4b333f9..52e518dcb8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -84,6 +84,24 @@ known_first_party = ["devito", "examples"] multi_line_output = "VERTICAL_GRID_GROUPED" force_alphabetical_sort_within_sections = true +[tool.typos] +# For identifiers (variables, functions, classes and the like): +# Ignore words 2 characters or fewer followed by zero or more digits +# Also ignore collections of 20 or more "word character"s +default.extend-ignore-identifiers-re = ["\\b[[:alpha:]]{1,2}\\d*\\b", "\\b\\w{20,}\\b"] +# For words: +# Ignore words 2 characters or fewer followed by one or more digits +# Also ignore collections of 20 or more "word character"s +default.extend-ignore-words-re = ["\\b[[:alpha:]]{1,2}\\d?\\b", "\\b\\w{20,}\\b"] + +# Only for known words common abbreviations +# IMPORTANT: Add a comment with the meaning! +[tool.typos.default.extend-identifiers] +# arange - numpy.arange +arange = "arange" +# dorder - derivative order +dorder = "dorder" + [tool.flake8] max-line-length = 90 ignore = [ From ac2c99d61021dc391c6e11b3967e59c54bd57121 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 18:41:55 +0100 Subject: [PATCH 06/20] misc: Experiment --- .github/workflows/lint.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a2d7c11267..3fb1b6e852 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -48,10 +48,19 @@ jobs: name: "Spellcheck everything" runs-on: ubuntu-latest steps: - - name: Checkout Actions Repository - uses: actions/checkout@v4 - - name: Spell Check Repo - uses: crate-ci/typos@v1.38.1 + - uses: actions/checkout@v5 + - name: Set up Python 3.10 + uses: actions/setup-python@v6 + with: + python-version: "3.10" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install typos + + - name: Lint codebase with flake8 + run: | + typos --format sarif actionlint: name: "Lint Github actions YAML files" From 8f7d180d85002faa6bc3e01ea1aeeed5a854ad9c Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 18:47:36 +0100 Subject: [PATCH 07/20] misc: Deliberately add a file with a typo --- experiment.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 experiment.txt diff --git a/experiment.txt b/experiment.txt new file mode 100644 index 0000000000..3b4d1bd3df --- /dev/null +++ b/experiment.txt @@ -0,0 +1 @@ +Add a fille with a typo in it. From e50d665030a3fcc435f3154f4233dccdae7a58d5 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 19:15:56 +0100 Subject: [PATCH 08/20] ci: Let's break everything by adding typo annotations --- .github/workflows/lint.yml | 2 +- scripts/typos_json_to_gha.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 scripts/typos_json_to_gha.py diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 3fb1b6e852..dffd80c2f5 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -60,7 +60,7 @@ jobs: - name: Lint codebase with flake8 run: | - typos --format sarif + typos --format json | python scripts/typos_json_to_gha.py actionlint: name: "Lint Github actions YAML files" diff --git a/scripts/typos_json_to_gha.py b/scripts/typos_json_to_gha.py new file mode 100644 index 0000000000..58944f4bb1 --- /dev/null +++ b/scripts/typos_json_to_gha.py @@ -0,0 +1,28 @@ +import json +import sys +from string import Template + + +def main(): + # Standard Github message template for CI annotations + message_template = Template( + '::error file=$path,line=$line_num,col=$byte_offset,endcol=$end_col,' + 'title=$type::`$typo` should be $suggestions' + ) + + for line in sys.stdin: + # Grab the JSON data coming from typos from stdin + data = json.loads(line.rstrip()) + + # Calculate the end column and format the correction + end_col = data['byte_offset'] + len(data['typo']) + suggestions = ', '.join(data['corrections']) + + # Print the templated message to stdout + print(message_template.safe_substitute( + data, end_col=end_col, suggestions=suggestions + )) + + +if __name__ == '__main__': + exit(main()) From 68b64f5c54dc52af70c1f2f57a3e1e818beb927b Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 19:27:04 +0100 Subject: [PATCH 09/20] scripts: Fix gha helper script --- scripts/typos_json_to_gha.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/scripts/typos_json_to_gha.py b/scripts/typos_json_to_gha.py index 58944f4bb1..b474e469b4 100644 --- a/scripts/typos_json_to_gha.py +++ b/scripts/typos_json_to_gha.py @@ -14,14 +14,25 @@ def main(): # Grab the JSON data coming from typos from stdin data = json.loads(line.rstrip()) - # Calculate the end column and format the correction - end_col = data['byte_offset'] + len(data['typo']) - suggestions = ', '.join(data['corrections']) - - # Print the templated message to stdout - print(message_template.safe_substitute( - data, end_col=end_col, suggestions=suggestions - )) + if data['type'] == 'binary_file': + continue + + try: + # Calculate the end column and format the correction + suggestions = ', '.join(data['corrections']) + end_col = data['byte_offset'] + len(data['typo']) + + # Print the templated message to stdout + print(message_template.safe_substitute( + data, end_col=end_col, suggestions=suggestions + )) + except KeyError: + print('KeyError') + print(f'{data}') + except Exception as e: + print('Caught unhandled exception') + print(f'{data}') + print(f'{e}') if __name__ == '__main__': From af8fd4a82b326427792a8ee46fa2f2491e2d02bd Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 19:33:28 +0100 Subject: [PATCH 10/20] scripts: Return non-zero error code, unless stdin is empty --- scripts/typos_json_to_gha.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/typos_json_to_gha.py b/scripts/typos_json_to_gha.py index b474e469b4..62db76f708 100644 --- a/scripts/typos_json_to_gha.py +++ b/scripts/typos_json_to_gha.py @@ -4,6 +4,8 @@ def main(): + error_code = 0 + # Standard Github message template for CI annotations message_template = Template( '::error file=$path,line=$line_num,col=$byte_offset,endcol=$end_col,' @@ -11,6 +13,7 @@ def main(): ) for line in sys.stdin: + error_code = 1 # Grab the JSON data coming from typos from stdin data = json.loads(line.rstrip()) @@ -34,6 +37,8 @@ def main(): print(f'{data}') print(f'{e}') + return error_code + if __name__ == '__main__': exit(main()) From f23989ab6ee8d3654de1aff9f3c45e14d845b034 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 19:45:27 +0100 Subject: [PATCH 11/20] misc: Typos (ironically) --- .github/workflows/lint.yml | 2 +- scripts/typos_json_to_gha.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index dffd80c2f5..f16d3f15a6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -58,7 +58,7 @@ jobs: python -m pip install --upgrade pip pip install typos - - name: Lint codebase with flake8 + - name: Spellcheck the codebase with typos run: | typos --format json | python scripts/typos_json_to_gha.py diff --git a/scripts/typos_json_to_gha.py b/scripts/typos_json_to_gha.py index 62db76f708..1f5fc72bc7 100644 --- a/scripts/typos_json_to_gha.py +++ b/scripts/typos_json_to_gha.py @@ -8,7 +8,7 @@ def main(): # Standard Github message template for CI annotations message_template = Template( - '::error file=$path,line=$line_num,col=$byte_offset,endcol=$end_col,' + '::error file=$path,line=$line_num,col=$byte_offset,endColumn=$end_col,' 'title=$type::`$typo` should be $suggestions' ) From 51835ade6dd2c2eb65205a22a4dce5c272409e62 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Fri, 17 Oct 2025 19:58:41 +0100 Subject: [PATCH 12/20] misc: Remove ./ prefix from path --- scripts/typos_json_to_gha.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/typos_json_to_gha.py b/scripts/typos_json_to_gha.py index 1f5fc72bc7..c7be78ecc6 100644 --- a/scripts/typos_json_to_gha.py +++ b/scripts/typos_json_to_gha.py @@ -8,7 +8,7 @@ def main(): # Standard Github message template for CI annotations message_template = Template( - '::error file=$path,line=$line_num,col=$byte_offset,endColumn=$end_col,' + '::error file=$xpath,line=$line_num,col=$byte_offset,endColumn=$end_col,' 'title=$type::`$typo` should be $suggestions' ) @@ -24,10 +24,12 @@ def main(): # Calculate the end column and format the correction suggestions = ', '.join(data['corrections']) end_col = data['byte_offset'] + len(data['typo']) + # Remove './' from the start of the path + xpath = data['path'].removeprefix('./') # Print the templated message to stdout print(message_template.safe_substitute( - data, end_col=end_col, suggestions=suggestions + data, xpath=xpath, end_col=end_col, suggestions=suggestions )) except KeyError: print('KeyError') From f0eb8b10e25fe43616e94fb6f8972b1c681ce405 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Thu, 13 Nov 2025 18:04:16 +0000 Subject: [PATCH 13/20] misc: Prevent isort from sorting __init__.py --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 52e518dcb8..6375945d87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,6 +83,8 @@ line_length = 90 known_first_party = ["devito", "examples"] multi_line_output = "VERTICAL_GRID_GROUPED" force_alphabetical_sort_within_sections = true +# We should really do some work to eliminate this (circular imports): +skip = ["__init__.py"] [tool.typos] # For identifiers (variables, functions, classes and the like): From 38d5334aaa18cbe4cc24d164d2c370b9df02624b Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Thu, 13 Nov 2025 18:26:06 +0000 Subject: [PATCH 14/20] misc: Change overly strict isort rule --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6375945d87..9732a44a56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,6 @@ ignore = ["F403", "E226", "E731", "E275", "F405", "E722", "E741", "W605"] line_length = 90 known_first_party = ["devito", "examples"] multi_line_output = "VERTICAL_GRID_GROUPED" -force_alphabetical_sort_within_sections = true # We should really do some work to eliminate this (circular imports): skip = ["__init__.py"] From bf4f6df99089c449fe28f8ce6ab248067cec3a08 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Thu, 13 Nov 2025 14:49:35 +0000 Subject: [PATCH 15/20] ci: Shutup CodeQL --- .github/workflows/lint.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f16d3f15a6..f9d87b5738 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,5 +1,4 @@ name: Lint - permissions: contents: read From f79736e3556b08c2f781728014edf0e672aa8443 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Thu, 13 Nov 2025 16:31:01 +0000 Subject: [PATCH 16/20] misc: Add a configuration for running pre-commit hooks --- .pre-commit-config.yaml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000..58af58f97b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + - repo: https://github.com/pycqa/isort + rev: 5.13.2 + hooks: + # Run isort to check only (don't modify files) + - id: isort + args: [ --check-only ] + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.14.4 + hooks: + # Run the linter to check only (don't modify files) + - id: ruff-check + - repo: https://github.com/crate-ci/typos + rev: v1.39.1 + hooks: + - id: typos + args: [] + - repo: https://github.com/rhysd/actionlint + rev: v1.7.8 + hooks: + - id: actionlint-docker + - repo: https://github.com/hadolint/hadolint + rev: v2.12.0 + hooks: + - id: hadolint-docker From 397dec36b785edf0c3b5e83ec67cce535a62e600 Mon Sep 17 00:00:00 2001 From: Jack Betteridge Date: Thu, 13 Nov 2025 16:49:57 +0000 Subject: [PATCH 17/20] lint: Remove all the trailing whitespace --- CITATION.md | 4 ++-- README.md | 4 ++-- auto_lint.sh | 22 ++++++++++++++++++++++ docker/Dockerfile.amd | 4 ++-- docker/Dockerfile.cpu | 2 +- docker/Dockerfile.nvidia | 4 ++-- docker/README.md | 4 ++-- docker/Singularity.nvidia.def | 24 ++++++++++++------------ docker/run-jupyterlab.sh | 2 +- examples/README.md | 2 +- examples/seismic/abc_methods/README.md | 4 ++-- examples/seismic/self_adjoint/README.md | 6 +++--- 12 files changed, 52 insertions(+), 30 deletions(-) create mode 100755 auto_lint.sh diff --git a/CITATION.md b/CITATION.md index 6230370506..9e8d183d29 100644 --- a/CITATION.md +++ b/CITATION.md @@ -41,8 +41,8 @@ Additionally, if you use Devito for distributed runs, you may want to cite the f @misc{bisbas2024automatedmpixcodegeneration, title={Automated MPI-X code generation for scalable finite-difference solvers}, author={Bisbas, George and Nelson, Rhodri and Louboutin, Mathias and Luporini, Fabio and Kelly, Paul H.J. and Gorman, Gerard}, - booktitle={2025 IEEE International Parallel and Distributed Processing Symposium (IPDPS)}, - title={Automated MPI-X Code Generation for Scalable Finite-Difference Solvers}, + booktitle={2025 IEEE International Parallel and Distributed Processing Symposium (IPDPS)}, + title={Automated MPI-X Code Generation for Scalable Finite-Difference Solvers}, year={2025}, volume={}, number={}, diff --git a/README.md b/README.md index 0e2155fc7b..e234164857 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ provided with Devito or create your own notebooks. instructions and other options. If you encounter a problem during installation, please see the [installation issues](https://github.com/devitocodes/devito/wiki/Installation-Issues) we -have seen in the past. +have seen in the past. ## Resources @@ -126,4 +126,4 @@ are facing issues or just trying it out, join the [conversation](https://join.slack.com/t/devitocodes/shared_invite/zt-2hgp6891e-jQDcepOWPQwxL5JJegYKSA). ## Interactive jupyter notebooks -The tutorial jupyter notebook are available interactively at the public [binder](https://mybinder.org/v2/gh/devitocodes/devito/main) jupyterhub. +The tutorial jupyter notebook are available interactively at the public [binder](https://mybinder.org/v2/gh/devitocodes/devito/main) jupyterhub. diff --git a/auto_lint.sh b/auto_lint.sh new file mode 100755 index 0000000000..1281fd1ce4 --- /dev/null +++ b/auto_lint.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +pre-commit run --all-files trailing-whitespace +git add --all +git commit --no-verify -m "lint: Remove all the trailing whitespace" + +pre-commit run --all-files end-of-file-fixer +git add --all +git commit --no-verify -m "lint: Fix ends of files" + +isort . +git add --all +git commit --no-verify -m "lint: Re-sort all imports with new isort rules" + +ruff check --fix +git add --all +git commit --no-verify -m "lint: First pass with ruff --fix" + +# Don't run these +# ruff check --fix --unsafe-fixes +# git add --all +# git commit --no-verify -m "lint: Second pass with ruff --fix --unsafe-fixes" diff --git a/docker/Dockerfile.amd b/docker/Dockerfile.amd index 907d6d9c06..67b65151f2 100644 --- a/docker/Dockerfile.amd +++ b/docker/Dockerfile.amd @@ -84,8 +84,8 @@ RUN rm -rf /tmp/ucx && rm -rf /tmp/ompi # Adding OpenMPI and UCX to Environment ENV PATH=$OMPI_HOME/bin:$UCX_HOME/bin:$PATH \ LD_LIBRARY_PATH=$OMPI_HOME/lib:$UCX_HOME/lib:$LD_LIBRARY_PATH \ - C_INCLUDE_PATH=$OMPI_HOME/include:$UCX_HOME/include:$C_INCLUDE_PATH \ - CPLUS_INCLUDE_PATH=$OMPI_HOME/include:$UCX_HOME/include:$CPLUS_INCLUDE_PATH \ + C_INCLUDE_PATH=$OMPI_HOME/include:$UCX_HOME/include:$C_INCLUDE_PATH \ + CPLUS_INCLUDE_PATH=$OMPI_HOME/include:$UCX_HOME/include:$CPLUS_INCLUDE_PATH \ CPATH=$OMPI_HOME/include:$UCX_HOME/include:$CPATH \ INCLUDE=$OMPI_HOME/include:$UCX_HOME/include:$INCLUDE \ PKG_CONFIG_PATH=$OMPI_HOME/lib/pkgconfig:$UCX_HOME/lib/pkgconfig:$PKG_CONFIG_PATH diff --git a/docker/Dockerfile.cpu b/docker/Dockerfile.cpu index 43cf96b18c..7e27266a09 100644 --- a/docker/Dockerfile.cpu +++ b/docker/Dockerfile.cpu @@ -4,7 +4,7 @@ # architectures using GCC compilers and OpenMPI. ############################################################## -# Base image +# Base image FROM ubuntu:22.04 AS base ARG gcc="" diff --git a/docker/Dockerfile.nvidia b/docker/Dockerfile.nvidia index a8adfe329a..66e4cba5e7 100644 --- a/docker/Dockerfile.nvidia +++ b/docker/Dockerfile.nvidia @@ -121,8 +121,8 @@ RUN echo "$HPCSDK_HOME/cuda/lib" >> /etc/ld.so.conf.d/nvidia.conf && \ echo "$HPCSDK_HOME/compilers/lib" >> /etc/ld.so.conf.d/nvidia.conf && \ echo "$HPCSDK_HOME/comm_libs/mpi/lib" >> /etc/ld.so.conf.d/nvidia.conf && \ echo "$HPCSDK_CUPTI/lib64" >> /etc/ld.so.conf.d/nvidia.conf && \ - echo "$HPCSDK_HOME/math_libs/lib64" >> /etc/ld.so.conf.d/nvidia.conf - + echo "$HPCSDK_HOME/math_libs/lib64" >> /etc/ld.so.conf.d/nvidia.conf + # Compiler, CUDA, and Library paths # CUDA_HOME has been deprecated but keep for now because of other dependencies (@mloubout). ENV CUDA_HOME=$HPCSDK_HOME/cuda diff --git a/docker/README.md b/docker/README.md index 33f863dd01..3903e92ebd 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,6 +1,6 @@ # [Devito] Docker image library -In order to facilitate the dissemination, usage, and development of Devito, we provide a series of Docker images. These images support numerous architectures and compilers and are tagged accordingly. You can find all the available images at [DevitoHub](https://hub.docker.com/r/devitocodes/). The following describes the available images and the workflow to build it yourself. +In order to facilitate the dissemination, usage, and development of Devito, we provide a series of Docker images. These images support numerous architectures and compilers and are tagged accordingly. You can find all the available images at [DevitoHub](https://hub.docker.com/r/devitocodes/). The following describes the available images and the workflow to build it yourself. ## [Devito] images @@ -17,7 +17,7 @@ These images provide a working environment for any CPU architecture and come wit To run this image locally, you will first need to install `docker`. Then, the following commands will get you started: ```bash -# Pull image and start a bash shell +# Pull image and start a bash shell docker run --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 devitocodes/devito:gcc-latest /bin/bash docker run --rm -it -p 8888:8888 -p 8787:8787 -p 8786:8786 --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm devitocodes/devito:gcc-latest /bin/bash diff --git a/docker/Singularity.nvidia.def b/docker/Singularity.nvidia.def index 2b450b5823..3530a0016b 100644 --- a/docker/Singularity.nvidia.def +++ b/docker/Singularity.nvidia.def @@ -3,14 +3,14 @@ From: python:3.8 %help ############################################################## -# This Dockerfile contains the additional NVIDIA compilers, -# libraries, and plugins to enable OpenACC and NVIDIA GPU +# This Dockerfile contains the additional NVIDIA compilers, +# libraries, and plugins to enable OpenACC and NVIDIA GPU # acceleration of Devito codes. # -# BUILD: +# BUILD: # singularity build --fakeroot devito.nvidia.sif docker/Singularity.nvidia.def # -# RUN: +# RUN: # singularity run --nv --writable-tmpfs devito.nvidia.sif ############################################################## @@ -75,11 +75,11 @@ export DEVITO_LANGUAGE="openacc" export DEVITO_PLATFORM=nvidiaX # Options: [unset, 1] For PGI openacc; Should only be set after a first execution of the benchmark -# export DEVITO_JIT_BACKDOOR=1 +# export DEVITO_JIT_BACKDOOR=1 # Enable logging, Options: [unset, PERF, DEBUG] export DEVITO_LOGGING=DEBUG -#export PGI_ACC_TIME=1 +#export PGI_ACC_TIME=1 # Set the home directory to our app user's home. export HOME=/app @@ -89,7 +89,7 @@ export APP_HOME=/app export DEBIAN_FRONTEND=noninteractive -# nodesource: nvdashboard requires nodejs>=10 +# nodesource: nvdashboard requires nodejs>=10 echo 'deb [trusted=yes] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' > /etc/apt/sources.list.d/nvhpc.list && \ apt-get update -y && \ apt-get install -y -q \ @@ -113,7 +113,7 @@ rm -rf /var/lib/apt/lists/* export HPCSDK_HOME=/opt/nvidia/hpc_sdk/Linux_x86_64/2022 export HPCSDK_CUPTI=/opt/nvidia/hpc_sdk/Linux_x86_64/2022/cuda/11.6/extras/CUPTI - + # Compiler, CUDA, and Library paths export CUDA_HOME=$HPCSDK_HOME/cuda export NVHPC_CUDA_HOME=$HPCSDK_HOME/cuda @@ -128,7 +128,7 @@ python3 -m venv /venv && \ /venv/bin/pip install --no-cache-dir -r /app/requirements-optional.txt && \ /venv/bin/pip install --no-cache-dir -r /app/requirements-nvidia.txt && \ rm -rf ~/.cache/pip - + # MPI ROOT USER DEFAULTS export CPATH=$HPCSDK_HOME/comm_libs/mpi/include:${CPATH} export CFLAGS=-noswitcherror @@ -137,10 +137,10 @@ export CFLAGS=-noswitcherror # Do Nothing #MPI 4 #rm -f $HPCSDK_HOME/comm_libs/mpi && \ -#ln -sf $HPCSDK_HOME/comm_libs/openmpi4/openmpi-4.0.5 $HPCSDK_HOME/comm_libs/mpi ; +#ln -sf $HPCSDK_HOME/comm_libs/openmpi4/openmpi-4.0.5 $HPCSDK_HOME/comm_libs/mpi ; #HPCX rm -f $HPCSDK_HOME/comm_libs/mpi && \ -ln -sf $HPCSDK_HOME/comm_libs/hpcx/latest/ompi $HPCSDK_HOME/comm_libs/mpi ; +ln -sf $HPCSDK_HOME/comm_libs/hpcx/latest/ompi $HPCSDK_HOME/comm_libs/mpi ; /venv/bin/pip install --no-cache-dir -r /app/requirements-mpi.txt && \ rm -rf ~/.cache/pip @@ -149,7 +149,7 @@ export CFLAGS= chmod -R 755 /app chmod 777 /app chmod 777 /print-defaults /jupyter /tests /entrypoint.sh && \ - /venv/bin/jupyter serverextension enable dask_labextension + /venv/bin/jupyter serverextension enable dask_labextension # /venv/bin/jupyter lab workspaces import /app/nvdashboard.json %runscript diff --git a/docker/run-jupyterlab.sh b/docker/run-jupyterlab.sh index e1516dd51f..e50a65aca7 100644 --- a/docker/run-jupyterlab.sh +++ b/docker/run-jupyterlab.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -/venv/bin/jupyter-lab --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' +/venv/bin/jupyter-lab --ip=0.0.0.0 --port=8888 --allow-root --NotebookApp.token='' diff --git a/examples/README.md b/examples/README.md index 391c7d1e4b..3960faae88 100644 --- a/examples/README.md +++ b/examples/README.md @@ -38,7 +38,7 @@ A set of more advanced examples are available in `seismic`: equations. * `seismic/self-adjoint`: Self-adjoint energy conserving pseudo-acoustic operators, including notebooks for implementation of the nonlinear forward, - the forward and adjoint linearized Jacobian, and tests proving accuracy and + the forward and adjoint linearized Jacobian, and tests proving accuracy and correctness. Further: diff --git a/examples/seismic/abc_methods/README.md b/examples/seismic/abc_methods/README.md index 7adcafb8d6..9e633c4e32 100644 --- a/examples/seismic/abc_methods/README.md +++ b/examples/seismic/abc_methods/README.md @@ -4,7 +4,7 @@ Institute of Mathematics and Statistics - Applied Mathematics Department (felipe.augusto.guedes@gmail.com, saulo@ime.usp.br, pedrosp@ime.usp.br) -**Important Informations:** These notebooks are part of the Project Software Technologies for Modeling and Inversion (STMI) at RCGI in the University of Sao Paulo. +**Important Informations:** These notebooks are part of the Project Software Technologies for Modeling and Inversion (STMI) at RCGI in the University of Sao Paulo. The objective of these notebooks is to present several schemes which are designed to reduce artificial reflections on boundaries in the numerical solution of the acoustic wave equation with finite differences. We consider several methods, covering absorbing boundary conditions and absorbing boundary layers. Among the schemes, we have implemented: @@ -21,6 +21,6 @@ The computational implementation of the methods above is done within the framewo - 3. PML implementation; - 4. HABC (Hybrid absorbing boundary conditions. These encompass also the absorbing boundary conditions A1, A2 and Higdon).; -The notebooks bring a theoretical description of the methods together with the Devito implementation, which can be used for the simulations of interest. We choose a reference problem, described in the notebook Introduction to Acoustic Problem. The spatial and temporal discretizations used throughout the notebooks are also presented in this introductory notebook, together with other relevant concepts to be used overall. Therefore, one should first assimilate the contents of this notebook. +The notebooks bring a theoretical description of the methods together with the Devito implementation, which can be used for the simulations of interest. We choose a reference problem, described in the notebook Introduction to Acoustic Problem. The spatial and temporal discretizations used throughout the notebooks are also presented in this introductory notebook, together with other relevant concepts to be used overall. Therefore, one should first assimilate the contents of this notebook. In the remaining notebooks, we incrementally describe several numerical techniques to reduce artificial boundary reflections. It is better to follow the order of the notebooks, since concepts are used afterward. We include simulations demonstrating the use of the methods. By changing some parameters, the user would be able to carry out several tests. diff --git a/examples/seismic/self_adjoint/README.md b/examples/seismic/self_adjoint/README.md index a0f569463d..cd005ff685 100644 --- a/examples/seismic/self_adjoint/README.md +++ b/examples/seismic/self_adjoint/README.md @@ -12,7 +12,7 @@ These operators are based on simplfications of the systems presented in: The goal of this series of tutorials is to generate -- and then test for correctness -- the modeling and inversion capability in Devito for variable density visco- acoustics. We use an energy conserving form of the wave equation that is *self adjoint*, which allows the same modeling system to be used for all for all phases of finite difference evolution required for quasi-Newton optimization: - **nonlinear forward**, nonlinear with respect to the model parameters -- **Jacobian forward**, linearized with respect to the model parameters +- **Jacobian forward**, linearized with respect to the model parameters - **Jacobian adjoint**, linearized with respect to the model parameters These notebooks first implement and then test for correctness for three types of modeling physics. @@ -57,7 +57,7 @@ These notebooks first implement and then test for correctness for three types of name='IsoJacobianAdjOperator', **kwargs) ``` - With Equation order 1, all tests pass - - With Equation order 2, there are different outcomes for tests + - With Equation order 2, there are different outcomes for tests - Possibly there is a different path chosen through the AST, and different c code is generated? - [ ] replace the conditional logic in the stencil with comprehension @@ -90,7 +90,7 @@ These notebooks first implement and then test for correctness for three types of - [X] Jacobian operator adjoint test, with respect to model/data - [X] Skew symmetry test for shifted derivatives -## To save generated code +## To save generated code ``` f = open("operator.c", "w") From 530d1af4cccb050b030c4b0e22d85756e2f41c73 Mon Sep 17 00:00:00 2001 From: JDBetteridge Date: Wed, 24 Dec 2025 16:44:34 +0000 Subject: [PATCH 18/20] lint: Fix ends of files --- .deploy_key.enc | 2 +- .github/workflows/triggers.yml | 2 +- CODE_OF_CONDUCT.md | 1 - benchmarks/user/advisor/README.md | 1 - binder/README.md | 2 +- devito/ir/__init__.py | 2 +- devito/ir/cgen/__init__.py | 2 +- docker/README.md | 2 +- docker/entrypoint.sh | 2 +- environment-dev.yml | 2 +- examples/checkpointing/checkpoint.py | 2 +- examples/performance/resources/RoofsData.json | 2 +- examples/seismic/self_adjoint/README.md | 2 +- requirements-mpi.txt | 2 +- requirements-optional.txt | 2 +- requirements-testing.txt | 2 +- 16 files changed, 14 insertions(+), 16 deletions(-) diff --git a/.deploy_key.enc b/.deploy_key.enc index 941b7ab589..3a22ad5618 100644 --- a/.deploy_key.enc +++ b/.deploy_key.enc @@ -1 +1 @@ -gAAAAABeDg5ZyNUhS3dc25RQZvpvHGAkmK6zQU8i3YRb9yUTC4MCQ0nkl215UQh0kNYoRcxaeJ7ecRYUjBamraRCVaaWvNal8DV9Ba9abHVZVA3T1rv7ptbcAmMgUK6e4LMc7xGB5w2GBTEjLSc9oGOhAiuFD-OPU6WVwEskiRD4D0SAmuRuI_8fTdpuV10plvGJNXM48TrDWabBnp2F2x-6GB0jqtuq6Z6yXIJ-cmgWRXzVAEj9NjYgKD3xeB4-8Mv9O1RMhazlRMQX5NFvcdNYPhdxIr0olFsoXhcavOmpsMNljLfl1MVnLtCp2QHzAjjIMKGtmBDYILUvKXdknmHi3hGcz_tTLCfSk976Qycf5pQwhlxNsoMfr4p3m3EvL7rXfwZCcctwiIZFzZn7SayMV1IMYUEAWR6JwbaUU93AHw_VrGM-urqMJIzZ_TMQ96RbFgwIjSB8352tOFbya-f1zDFupFDLwY2_XN4wrEactgvkvXI8aunJbBwP-u_YE4JjWU4EGUHebbwUSiDGk7GZ9Ji3KWsRq1QRv5anJMkGjrUSzkLv-5AJBgPz2DOtV6Y19KdqytKXyefE1cGhAXJfjlADkkWy7XikYxXoNSenBH0ccWujp_zn3XRnGc_IvcCyYYGON0VuGPKDDx3amZEGLBgdktkHYwoGkfLpPJygFkJB0-w4hJOsGNi1OQJMfqG5FcrsKBlSvvpsvMCSW_8eY4yQjb7P9DLF2A0kLoTANjg-8bVCUPxYVLMmXMnhJDdyJlq7cqwIcu-8-NgzDPfJFantgSLM2k066BOZpqsZqnaa2TouE9B9Ql3G4cgqEllWhY0v2keQpv3bvQBo9PU-zxztgs5yMrbuK2T2xn3nGyFuj3pchuWhlZiQptkAEi7GcM-iZ5n9WPUC_0qtusaXuddZPAvLLYxECqs9u-14eRykOmvHKRVKNg-AGaOtK602qxZhx3xgHwetHwOipmf-WsL54p7mxn37JyNoUk_O_gCkx5tRmUbCEFupILcfoHnR13cjozm6pqtquJfK1XxHBzHf6e-2DWuooLy3PI-vKKWce9QSjTQgOmxb6XVzdQIJ9vJB4GYgfeevRe9j73OWrKh2VGurVnt_K2wuhjOPRsHlTKMhpfPWlwLFHXdqTDZswRowdaOhcizvamsdI_rNAlRiyB4HQYXVdGLzYQMDEU-dm4psB-xO3UzmHKwGmPXaqsh4pzrC2j3UU4oznI3HE-Qqgj4XEXhilZ8RMmoQWvOhnl_WH7fxxAn7UE80J70w9X2S3yzV_evwPlIJtDc-e7-Rf2GzCln11zTBgOQ9u3aBK-8gLYZV3AF0yxOPpYy0BZAsRUJmrR6K8i3tvFc0_pZIAFwtB2esxJDsA-25CXKaphwGH-ikRl8Ls7WJeffjhPbexfgdbPHwxxanXdh0KMLs47BCOxCy0aardlTHj44wP6pNXD6URnM-d7Aj-SmEmCTBciNexmYlRwRPOb0DdnV5oMH4PABMLvxiB_Lr7LNk5lPdgOzOLCeLnjHyygISTLUKbn9_J-40xomVZfakAkryodCYWK8kSWQ1vTVROwkgpTxA108Yh8AOnBjEUs8csrtmI04ujTnJL7AYoQ0LnsVRMjUqKfWQ_jPt5wTOh-CKjWpBSCpH-OjXbnN0L_bw4vEEfH1YEA4Wi5jcQghEbIBdUcjRsdtfNUZTAVPG0m-EaYDpfEf7UWv-A9z6YhVlLOH67f5uIiskX_bIaiq7A7X3ahgWUzhNVpMjETrpNnu0hE4yI462wtMhEZDv4hO0mT_EeidTCC12609p8clPiWDiO4dTD8ivWqWVZgiK9EIurmxCZE1T489tuzpCZLcwya5Pu5Ddxv8jRzdSdRbX4lju8fCgCYmRS5C5N0VG_2t3bFqxpr8PsHndfobu5MyVCgyAzebOPksMD0ZXJjjhD10_gMU7Njkv5nLpXBIyk3dOkABVBxk5kmd1j1ftQS7j-AcGnvnagIwYFaXWPfgtIRMFoBnRbaJzqSkyobeApAqWN6EhinC8CL9mC1mC9VE6qWykabg1Ev0O7Ke6lRvd9Yl14W1yqr507izMP8uFosjYkZj69FNiWg90I3jDgp0N5MsS3GweVT3ewBYA5AOcQiCmOf4Tcm-TKsYyIJVHrnxOZjD9wDFtviixlYb9GNYIlcvBmuLAWzZh_EUWXW2GRmW-_Y5jZfMUtE6mZVVuKBkKoy8MeiAPcfHg7a-x9Ri_YxArHzUHO0xzI2Zve4K9B3KeZaiIqGf6tIAW3BjFp6L-XnsulBkM7_A847l8vhs-om3wflTUCURuxlxVg0dFokkvIaxQUyeE2Fz-rkmWKHj1M9MLNQIEQ46laSKt4wjEutwsAH_2ycy_HpEsTk4NeGTbS0-RVMxl5OQBy4g6lBvUGMZ4Qm7UuslO5oSzTF8zYsziLX7remEgiIvRdhcMSkU11d4DLASwNNW_fYyacXH4X_fNBIvWdnIjcgrHGYiMNRZ-B6unFEqecfTzJX4zuJ11v1vbh631UnJnY1mOUJ9qTbK0GKrBYpc1dWpq6rRY8LC9xMbCFYFeTVQ8Zgh1IaGsYcnwhZnhbz8_xCsdznjkFKHOM0ttUetXbbSi2GvysJRJiuwnpdZCqjT8VCCvjPBZ7CaBSjb-_yF6T3zTNz3kPJtHA04pPBBhRxSMYPUdAJJfkfZdfjDDON_Qq41EkJhu2bv3MKkcgXSXxtI4j78iXnmg2dWUIjrTIkn__SbqtD5OS_1AIzSssHkuG5TV4iI6yHzTuyFhOAlUv4FOCY_ivIlueBXMC-ZFJ7w2N8gHwwlyfeEkW9RUh8UATkYhEPu4CS4CSNFdRsXBtdJ1cAez2YE88VVcKvE4jiZwFtw78D6CNkYfEJqA8csnLd87_8xSXhNWK238H_Tp3gLlNrMvZpSDEHwEV4pRM_V-HRGcY3jQ0WLCfyqdvJsMu6wBQlNlWpuFJUKiiH6dyu2QKghBQGiZD62AQswtQW4U7nTJZxI3IGEdkluUSd0JI1AUsWRWwpzNYIXhudF3ovPbUsSm0HDrt3wj9tdM6rJ6qcBR44wsIN0p39Jkd5K37-4riH_gOkuvZprE__b_cgfTCaMqCdO88rSDWr9GZkmjllInAp8SvBuuwvFtLy5raMPmxI8OKBdrGfmvbmUHNwQ19Je68cr40Pfmhk08S8yONFQITnC2V1jDxhu4SAX4pW-rQ8yOHXQ9Irb39k9D1HE0y4Dbo54uZZdqtC0EIY3kS2wxxRS8qv1t7Vrj1LVone_jnavXexVG0PBvtiolRtPWNAGLlq53NyJvCSQgOaT4KdwH_euJXYHLQ8N0rA8yICmTzNV_w2SpeZ-NKQIdlEz3Z0W7DqgI8gW8WNGIBKKvh5JdgWQeFHlyo1o4hjLp8R-5LDabjM36reOwCmZT5rdzeOdhkX_vk-PngneBRyOoW4ALQJrmzRiNqGbMw2mM3XOKxCmHASC7zJnyBSTus1ttKJbdoSl2yqAqeB1ClagU3GSuv2Ms577VxoB65z5Sm_LnGeX6ZEWUYhLzj0FKFaE2dTiXR01NYVSymVbTOHpYs4fLEmAjk--O6mwJW62SIVkgXlT13u6pncv97TIxLe8549jkOA4maFcVGmP2YPLgQ_Lx_EMzfa8lvJnOaVSPi020mV8Eli8AWbMoNENK_5pMPhWPWEgZNoPeeQaYQcP5VAKPR7WzocXgf8E5NELlTefe8mwxyuPumGn0u-vYUAKpMRfMEZMawSqnLf8Y2Ujyf488YSS9emX6laOl-oyFGMlv4cRLZF82a2akb2F0sO9-GmLMCv6Rqi6ySjsfpD14N162AibMG2Xl-8j2bDUqFlGAWW6_vwwZ_crZbHq1u6Z3fzr9iTr2cH_2BiN4lbJzw3yZLV7-RP9cDq5kTCzggFXRIxW7w0Q8mgyQjskeKxHbpXKSn1lWoUMX2wtZQl9OYisOVBeF-xeKi2YM8C1JRNRFE8nvLddAaqBgWVUQza5vRJOLqOD-PbIjWv60ifbHT90RwuHK8alvkNoc46eIZhSA6tYL5SmJtJUEBnqUxwb1EjyhlphD1q8h_WL-UXHtjE4uGQzHHFpXK3VPdH9qXF5zkmtMA87CiuRc8Jo-VDMCgKq208-zSj_8y-oTkDGb71bsszulB-GaG3Rn5L1fqvWMeGgwbksEyvwrgej8dhomyNg1YnzoyRXtdX4LyVOPGvx7JlBBE85vLQ697SgXD3SkRhr7ceZQHeWV8Cgq1Tvbnz88JK48fDBgGPnMP6lydp2hxKX_dW19iPycDEkmDALh-2U0_ZpiGPqA48E8cAf3HOYCpuzzdkzhvu-DOQU1WqbcUiPQeeWo1tS-1_HAXT18yRjMJZTQUJivVBq03meNQc-ZWFAcpxAtsNaS5fDLiNF51tatJA-N8y_WuiNUHlpxMgjPWGoR8Q== \ No newline at end of file +gAAAAABeDg5ZyNUhS3dc25RQZvpvHGAkmK6zQU8i3YRb9yUTC4MCQ0nkl215UQh0kNYoRcxaeJ7ecRYUjBamraRCVaaWvNal8DV9Ba9abHVZVA3T1rv7ptbcAmMgUK6e4LMc7xGB5w2GBTEjLSc9oGOhAiuFD-OPU6WVwEskiRD4D0SAmuRuI_8fTdpuV10plvGJNXM48TrDWabBnp2F2x-6GB0jqtuq6Z6yXIJ-cmgWRXzVAEj9NjYgKD3xeB4-8Mv9O1RMhazlRMQX5NFvcdNYPhdxIr0olFsoXhcavOmpsMNljLfl1MVnLtCp2QHzAjjIMKGtmBDYILUvKXdknmHi3hGcz_tTLCfSk976Qycf5pQwhlxNsoMfr4p3m3EvL7rXfwZCcctwiIZFzZn7SayMV1IMYUEAWR6JwbaUU93AHw_VrGM-urqMJIzZ_TMQ96RbFgwIjSB8352tOFbya-f1zDFupFDLwY2_XN4wrEactgvkvXI8aunJbBwP-u_YE4JjWU4EGUHebbwUSiDGk7GZ9Ji3KWsRq1QRv5anJMkGjrUSzkLv-5AJBgPz2DOtV6Y19KdqytKXyefE1cGhAXJfjlADkkWy7XikYxXoNSenBH0ccWujp_zn3XRnGc_IvcCyYYGON0VuGPKDDx3amZEGLBgdktkHYwoGkfLpPJygFkJB0-w4hJOsGNi1OQJMfqG5FcrsKBlSvvpsvMCSW_8eY4yQjb7P9DLF2A0kLoTANjg-8bVCUPxYVLMmXMnhJDdyJlq7cqwIcu-8-NgzDPfJFantgSLM2k066BOZpqsZqnaa2TouE9B9Ql3G4cgqEllWhY0v2keQpv3bvQBo9PU-zxztgs5yMrbuK2T2xn3nGyFuj3pchuWhlZiQptkAEi7GcM-iZ5n9WPUC_0qtusaXuddZPAvLLYxECqs9u-14eRykOmvHKRVKNg-AGaOtK602qxZhx3xgHwetHwOipmf-WsL54p7mxn37JyNoUk_O_gCkx5tRmUbCEFupILcfoHnR13cjozm6pqtquJfK1XxHBzHf6e-2DWuooLy3PI-vKKWce9QSjTQgOmxb6XVzdQIJ9vJB4GYgfeevRe9j73OWrKh2VGurVnt_K2wuhjOPRsHlTKMhpfPWlwLFHXdqTDZswRowdaOhcizvamsdI_rNAlRiyB4HQYXVdGLzYQMDEU-dm4psB-xO3UzmHKwGmPXaqsh4pzrC2j3UU4oznI3HE-Qqgj4XEXhilZ8RMmoQWvOhnl_WH7fxxAn7UE80J70w9X2S3yzV_evwPlIJtDc-e7-Rf2GzCln11zTBgOQ9u3aBK-8gLYZV3AF0yxOPpYy0BZAsRUJmrR6K8i3tvFc0_pZIAFwtB2esxJDsA-25CXKaphwGH-ikRl8Ls7WJeffjhPbexfgdbPHwxxanXdh0KMLs47BCOxCy0aardlTHj44wP6pNXD6URnM-d7Aj-SmEmCTBciNexmYlRwRPOb0DdnV5oMH4PABMLvxiB_Lr7LNk5lPdgOzOLCeLnjHyygISTLUKbn9_J-40xomVZfakAkryodCYWK8kSWQ1vTVROwkgpTxA108Yh8AOnBjEUs8csrtmI04ujTnJL7AYoQ0LnsVRMjUqKfWQ_jPt5wTOh-CKjWpBSCpH-OjXbnN0L_bw4vEEfH1YEA4Wi5jcQghEbIBdUcjRsdtfNUZTAVPG0m-EaYDpfEf7UWv-A9z6YhVlLOH67f5uIiskX_bIaiq7A7X3ahgWUzhNVpMjETrpNnu0hE4yI462wtMhEZDv4hO0mT_EeidTCC12609p8clPiWDiO4dTD8ivWqWVZgiK9EIurmxCZE1T489tuzpCZLcwya5Pu5Ddxv8jRzdSdRbX4lju8fCgCYmRS5C5N0VG_2t3bFqxpr8PsHndfobu5MyVCgyAzebOPksMD0ZXJjjhD10_gMU7Njkv5nLpXBIyk3dOkABVBxk5kmd1j1ftQS7j-AcGnvnagIwYFaXWPfgtIRMFoBnRbaJzqSkyobeApAqWN6EhinC8CL9mC1mC9VE6qWykabg1Ev0O7Ke6lRvd9Yl14W1yqr507izMP8uFosjYkZj69FNiWg90I3jDgp0N5MsS3GweVT3ewBYA5AOcQiCmOf4Tcm-TKsYyIJVHrnxOZjD9wDFtviixlYb9GNYIlcvBmuLAWzZh_EUWXW2GRmW-_Y5jZfMUtE6mZVVuKBkKoy8MeiAPcfHg7a-x9Ri_YxArHzUHO0xzI2Zve4K9B3KeZaiIqGf6tIAW3BjFp6L-XnsulBkM7_A847l8vhs-om3wflTUCURuxlxVg0dFokkvIaxQUyeE2Fz-rkmWKHj1M9MLNQIEQ46laSKt4wjEutwsAH_2ycy_HpEsTk4NeGTbS0-RVMxl5OQBy4g6lBvUGMZ4Qm7UuslO5oSzTF8zYsziLX7remEgiIvRdhcMSkU11d4DLASwNNW_fYyacXH4X_fNBIvWdnIjcgrHGYiMNRZ-B6unFEqecfTzJX4zuJ11v1vbh631UnJnY1mOUJ9qTbK0GKrBYpc1dWpq6rRY8LC9xMbCFYFeTVQ8Zgh1IaGsYcnwhZnhbz8_xCsdznjkFKHOM0ttUetXbbSi2GvysJRJiuwnpdZCqjT8VCCvjPBZ7CaBSjb-_yF6T3zTNz3kPJtHA04pPBBhRxSMYPUdAJJfkfZdfjDDON_Qq41EkJhu2bv3MKkcgXSXxtI4j78iXnmg2dWUIjrTIkn__SbqtD5OS_1AIzSssHkuG5TV4iI6yHzTuyFhOAlUv4FOCY_ivIlueBXMC-ZFJ7w2N8gHwwlyfeEkW9RUh8UATkYhEPu4CS4CSNFdRsXBtdJ1cAez2YE88VVcKvE4jiZwFtw78D6CNkYfEJqA8csnLd87_8xSXhNWK238H_Tp3gLlNrMvZpSDEHwEV4pRM_V-HRGcY3jQ0WLCfyqdvJsMu6wBQlNlWpuFJUKiiH6dyu2QKghBQGiZD62AQswtQW4U7nTJZxI3IGEdkluUSd0JI1AUsWRWwpzNYIXhudF3ovPbUsSm0HDrt3wj9tdM6rJ6qcBR44wsIN0p39Jkd5K37-4riH_gOkuvZprE__b_cgfTCaMqCdO88rSDWr9GZkmjllInAp8SvBuuwvFtLy5raMPmxI8OKBdrGfmvbmUHNwQ19Je68cr40Pfmhk08S8yONFQITnC2V1jDxhu4SAX4pW-rQ8yOHXQ9Irb39k9D1HE0y4Dbo54uZZdqtC0EIY3kS2wxxRS8qv1t7Vrj1LVone_jnavXexVG0PBvtiolRtPWNAGLlq53NyJvCSQgOaT4KdwH_euJXYHLQ8N0rA8yICmTzNV_w2SpeZ-NKQIdlEz3Z0W7DqgI8gW8WNGIBKKvh5JdgWQeFHlyo1o4hjLp8R-5LDabjM36reOwCmZT5rdzeOdhkX_vk-PngneBRyOoW4ALQJrmzRiNqGbMw2mM3XOKxCmHASC7zJnyBSTus1ttKJbdoSl2yqAqeB1ClagU3GSuv2Ms577VxoB65z5Sm_LnGeX6ZEWUYhLzj0FKFaE2dTiXR01NYVSymVbTOHpYs4fLEmAjk--O6mwJW62SIVkgXlT13u6pncv97TIxLe8549jkOA4maFcVGmP2YPLgQ_Lx_EMzfa8lvJnOaVSPi020mV8Eli8AWbMoNENK_5pMPhWPWEgZNoPeeQaYQcP5VAKPR7WzocXgf8E5NELlTefe8mwxyuPumGn0u-vYUAKpMRfMEZMawSqnLf8Y2Ujyf488YSS9emX6laOl-oyFGMlv4cRLZF82a2akb2F0sO9-GmLMCv6Rqi6ySjsfpD14N162AibMG2Xl-8j2bDUqFlGAWW6_vwwZ_crZbHq1u6Z3fzr9iTr2cH_2BiN4lbJzw3yZLV7-RP9cDq5kTCzggFXRIxW7w0Q8mgyQjskeKxHbpXKSn1lWoUMX2wtZQl9OYisOVBeF-xeKi2YM8C1JRNRFE8nvLddAaqBgWVUQza5vRJOLqOD-PbIjWv60ifbHT90RwuHK8alvkNoc46eIZhSA6tYL5SmJtJUEBnqUxwb1EjyhlphD1q8h_WL-UXHtjE4uGQzHHFpXK3VPdH9qXF5zkmtMA87CiuRc8Jo-VDMCgKq208-zSj_8y-oTkDGb71bsszulB-GaG3Rn5L1fqvWMeGgwbksEyvwrgej8dhomyNg1YnzoyRXtdX4LyVOPGvx7JlBBE85vLQ697SgXD3SkRhr7ceZQHeWV8Cgq1Tvbnz88JK48fDBgGPnMP6lydp2hxKX_dW19iPycDEkmDALh-2U0_ZpiGPqA48E8cAf3HOYCpuzzdkzhvu-DOQU1WqbcUiPQeeWo1tS-1_HAXT18yRjMJZTQUJivVBq03meNQc-ZWFAcpxAtsNaS5fDLiNF51tatJA-N8y_WuiNUHlpxMgjPWGoR8Q== diff --git a/.github/workflows/triggers.yml b/.github/workflows/triggers.yml index 12d74cf7f0..a2cdbbb096 100644 --- a/.github/workflows/triggers.yml +++ b/.github/workflows/triggers.yml @@ -27,4 +27,4 @@ jobs: with: token: ${{ secrets.PRO_SUBMODULE }} repository: devitocodespro/devitopro - event-type: update-submodule \ No newline at end of file + event-type: update-submodule diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2b6c4fe48a..9a29507f8c 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -76,4 +76,3 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq - diff --git a/benchmarks/user/advisor/README.md b/benchmarks/user/advisor/README.md index b4d0a14cb5..35f713c25a 100644 --- a/benchmarks/user/advisor/README.md +++ b/benchmarks/user/advisor/README.md @@ -85,4 +85,3 @@ advixe-cl --snapshot --project-dir= pack -- / Date: Wed, 24 Dec 2025 16:53:12 +0000 Subject: [PATCH 19/20] lint: First pass with ruff --fix --- benchmarks/user/advisor/roofline.py | 4 +- devito/arch/archinfo.py | 6 +- devito/arch/compiler.py | 41 ++--- devito/builtins/arithmetic.py | 2 +- devito/builtins/initializers.py | 2 +- devito/builtins/utils.py | 9 +- devito/core/arm.py | 8 +- devito/core/cpu.py | 18 +- devito/core/gpu.py | 23 ++- devito/core/intel.py | 13 +- devito/core/power.py | 8 +- devito/data/allocators.py | 12 +- devito/data/meta.py | 13 +- devito/data/utils.py | 16 +- devito/deprecations.py | 2 +- devito/finite_differences/differentiable.py | 16 +- .../finite_differences/finite_difference.py | 12 +- devito/finite_differences/rsfd.py | 2 +- devito/finite_differences/tools.py | 2 +- devito/ir/cgen/printer.py | 4 +- devito/ir/equations/algorithms.py | 2 +- devito/ir/equations/equation.py | 11 +- devito/ir/iet/efunc.py | 17 +- devito/ir/iet/nodes.py | 54 ++++-- devito/ir/iet/utils.py | 8 +- devito/ir/iet/visitors.py | 20 ++- devito/ir/stree/algorithms.py | 2 +- devito/ir/stree/tree.py | 11 +- devito/ir/support/basic.py | 4 +- devito/ir/support/guards.py | 19 ++- devito/ir/support/space.py | 15 +- devito/ir/support/syncs.py | 14 +- devito/ir/support/utils.py | 17 +- devito/ir/support/vector.py | 6 +- devito/logger.py | 17 +- devito/mpi/distributed.py | 15 +- devito/mpi/halo_scheme.py | 4 +- devito/mpi/routines.py | 2 +- devito/operations/solve.py | 2 +- devito/passes/clusters/asynchrony.py | 2 +- devito/passes/clusters/misc.py | 15 +- devito/passes/clusters/utils.py | 2 +- devito/passes/iet/languages/openacc.py | 2 +- devito/passes/iet/languages/openmp.py | 18 +- devito/passes/iet/languages/targets.py | 12 +- devito/passes/iet/languages/utils.py | 2 +- devito/passes/iet/misc.py | 9 +- devito/passes/iet/parpragma.py | 9 +- devito/symbolics/manipulation.py | 19 ++- devito/symbolics/queries.py | 24 ++- devito/symbolics/search.py | 13 +- devito/tools/abc.py | 2 +- devito/tools/data_structures.py | 16 +- devito/tools/memoization.py | 2 +- devito/tools/threading.py | 2 +- devito/tools/utils.py | 36 +++- devito/types/array.py | 12 +- devito/types/basic.py | 12 +- devito/types/caching.py | 2 +- devito/types/dense.py | 11 +- devito/types/dimension.py | 23 ++- devito/types/grid.py | 6 +- devito/types/misc.py | 25 ++- devito/types/object.py | 2 +- devito/types/parallel.py | 24 ++- devito/types/relational.py | 2 +- devito/types/sparse.py | 9 +- devito/types/tensor.py | 4 +- devito/types/utils.py | 19 ++- examples/cfd/01_convection.ipynb | 6 +- examples/cfd/01_convection_revisited.ipynb | 18 +- examples/cfd/02_convection_nonlinear.ipynb | 9 +- examples/cfd/03_diffusion.ipynb | 7 +- examples/cfd/03_diffusion_nonuniform.ipynb | 10 +- examples/cfd/04_burgers.ipynb | 36 ++-- examples/cfd/05_laplace.ipynb | 10 +- examples/cfd/06_poisson.ipynb | 10 +- examples/cfd/07_cavity_flow.ipynb | 57 ++++--- examples/cfd/08_shallow_water_equation.ipynb | 7 +- examples/cfd/09_Darcy_flow_equation.ipynb | 14 +- examples/cfd/example_diffusion.py | 2 +- examples/compiler/02_indexification.ipynb | 2 +- examples/compiler/04_iet-B.ipynb | 10 +- examples/finance/bs_ivbp.ipynb | 22 +-- examples/misc/linalg.py | 9 +- examples/performance/01_gpu.ipynb | 6 +- examples/performance/utils.py | 2 +- .../seismic/abc_methods/01_introduction.ipynb | 25 ++- examples/seismic/abc_methods/02_damping.ipynb | 61 ++++--- examples/seismic/abc_methods/03_pml.ipynb | 77 +++++---- examples/seismic/abc_methods/04_habc.ipynb | 154 +++++++++--------- examples/seismic/acoustic/accuracy.ipynb | 29 ++-- examples/seismic/model.py | 9 +- examples/seismic/preset_models.py | 2 +- .../sa_01_iso_implementation1.ipynb | 53 +++--- .../sa_02_iso_implementation2.ipynb | 43 +++-- .../self_adjoint/sa_03_iso_correctness.ipynb | 43 +++-- examples/seismic/source.py | 12 +- examples/seismic/tti/wavesolver.py | 1 - examples/seismic/tutorials/01_modelling.ipynb | 6 +- examples/seismic/tutorials/02_rtm.ipynb | 20 +-- examples/seismic/tutorials/03_fwi.ipynb | 45 +++-- examples/seismic/tutorials/04_dask.ipynb | 32 ++-- .../seismic/tutorials/04_dask_pickling.ipynb | 67 ++++---- .../tutorials/05_staggered_acoustic.ipynb | 2 +- examples/seismic/tutorials/06_elastic.ipynb | 6 +- .../06_elastic_varying_parameters.ipynb | 8 +- .../tutorials/07.1_dispersion_relation.ipynb | 4 +- .../seismic/tutorials/07_DRP_schemes.ipynb | 18 +- .../seismic/tutorials/08_snapshotting.ipynb | 24 +-- .../seismic/tutorials/10_nmo_correction.ipynb | 8 +- .../seismic/tutorials/11_viscoacoustic.ipynb | 82 +++++----- .../seismic/tutorials/12_time_blocking.ipynb | 53 +++--- .../seismic/tutorials/13_LSRTM_acoustic.ipynb | 94 +++++------ .../tutorials/14_creating_synthetics.ipynb | 10 +- .../seismic/tutorials/15_tti_qp_pure.ipynb | 8 +- examples/seismic/utils.py | 6 +- examples/timestepping/superstep.ipynb | 4 +- examples/userapi/00_sympy.ipynb | 10 +- examples/userapi/03_subdomains.ipynb | 8 +- examples/userapi/04_boundary_conditions.ipynb | 6 +- .../userapi/05_conditional_dimension.ipynb | 2 +- examples/userapi/06_sparse_operations.ipynb | 4 +- .../userapi/07_functions_on_subdomains.ipynb | 4 +- tests/test_data.py | 26 +-- tests/test_derivatives.py | 2 +- tests/test_operator.py | 2 +- tests/test_save.py | 2 +- tests/test_subdomains.py | 8 +- tests/test_tensors.py | 4 +- 130 files changed, 1215 insertions(+), 895 deletions(-) diff --git a/benchmarks/user/advisor/roofline.py b/benchmarks/user/advisor/roofline.py index 60ac495420..6add2a22e4 100644 --- a/benchmarks/user/advisor/roofline.py +++ b/benchmarks/user/advisor/roofline.py @@ -130,7 +130,7 @@ def roofline(name, project, scale, precision, mode, th): # y = bandwidth * x x1, x2 = 0, min(width, max_compute_bandwidth / bandwidth) y1, y2 = 0, x2*bandwidth - label = '{} {:.0f} GB/s'.format(roof.name, bandwidth) + label = f'{roof.name} {bandwidth:.0f} GB/s' ax.plot([x1, x2], [y1, y2], '-', label=label) memory_roofs.append(((x1, x2), (y1, y2))) @@ -140,7 +140,7 @@ def roofline(name, project, scale, precision, mode, th): bandwidth /= scale # scale down as requested by the user x1, x2 = max(bandwidth / max_memory_bandwidth, 0), width y1, y2 = bandwidth, bandwidth - label = '{} {:.0f} GFLOPS'.format(roof.name, bandwidth) + label = f'{roof.name} {bandwidth:.0f} GFLOPS' ax.plot([x1, x2], [y1, y2], '-', label=label) compute_roofs.append(((x1, x2), (y1, y2))) diff --git a/devito/arch/archinfo.py b/devito/arch/archinfo.py index 54274c1729..7f6f769c0f 100644 --- a/devito/arch/archinfo.py +++ b/devito/arch/archinfo.py @@ -52,7 +52,7 @@ def get_cpu_info(): # Obtain textual cpu info try: - with open('/proc/cpuinfo', 'r') as f: + with open('/proc/cpuinfo') as f: lines = f.readlines() except FileNotFoundError: lines = [] @@ -731,9 +731,7 @@ def get_platform(): elif 'intel' in brand: # Most likely a desktop i3/i5/i7 return platform_registry['intel64'] - elif 'power8' in brand: - return platform_registry['power8'] - elif 'power9' in brand: + elif 'power8' in brand or 'power9' in brand: return platform_registry['power8'] elif 'arm' in brand: return platform_registry['arm'] diff --git a/devito/arch/compiler.py b/devito/arch/compiler.py index 6083286cab..ad6e7484d1 100644 --- a/devito/arch/compiler.py +++ b/devito/arch/compiler.py @@ -25,7 +25,7 @@ from devito.tools import (as_list, change_directory, filter_ordered, memoized_func, make_tempdir) -__all__ = ['sniff_mpi_distro', 'compiler_registry'] +__all__ = ['compiler_registry', 'sniff_mpi_distro'] @memoized_func @@ -53,11 +53,7 @@ def sniff_compiler_version(cc, allow_fail=False): ver = ver.strip() if ver.startswith("gcc"): compiler = "gcc" - elif ver.startswith("clang"): - compiler = "clang" - elif ver.startswith("Apple LLVM"): - compiler = "clang" - elif ver.startswith("Homebrew clang"): + elif ver.startswith("clang") or ver.startswith("Apple LLVM") or ver.startswith("Homebrew clang"): compiler = "clang" elif ver.startswith("Intel"): compiler = "icx" @@ -340,22 +336,21 @@ def make(self, loc, args): logfile = path.join(self.get_jit_dir(), f"{hash_key}.log") errfile = path.join(self.get_jit_dir(), f"{hash_key}.err") - with change_directory(loc): - with open(logfile, "w") as lf: - with open(errfile, "w") as ef: - - command = ['make'] + args - lf.write("Compilation command:\n") - lf.write(" ".join(command)) - lf.write("\n\n") - try: - check_call(command, stderr=ef, stdout=lf) - except CalledProcessError as e: - raise CompilationError(f'Command "{e.cmd}" return error status' - f'{e.returncode}. ' - f'Unable to compile code.\n' - f'Compile log in {logfile}\n' - f'Compile errors in {errfile}\n') + with change_directory(loc), open(logfile, "w") as lf: + with open(errfile, "w") as ef: + + command = ['make'] + args + lf.write("Compilation command:\n") + lf.write(" ".join(command)) + lf.write("\n\n") + try: + check_call(command, stderr=ef, stdout=lf) + except CalledProcessError as e: + raise CompilationError(f'Command "{e.cmd}" return error status' + f'{e.returncode}. ' + f'Unable to compile code.\n' + f'Compile log in {logfile}\n' + f'Compile errors in {errfile}\n') debug(f"Make <{' '.join(args)}>") def _cmdline(self, files, object=False): @@ -393,7 +388,7 @@ def jit_compile(self, soname, code): # Warning: dropping `code` on the floor in favor to whatever is written # within `src_file` try: - with open(src_file, 'r') as f: + with open(src_file) as f: code = f.read() code = f'{code}/* Backdoor edit at {time.ctime()}*/ \n' # Bypass the devito JIT cache diff --git a/devito/builtins/arithmetic.py b/devito/builtins/arithmetic.py index 350f5257bb..2996f595a8 100644 --- a/devito/builtins/arithmetic.py +++ b/devito/builtins/arithmetic.py @@ -3,7 +3,7 @@ import devito as dv from devito.builtins.utils import make_retval, check_builtins_args -__all__ = ['norm', 'sumall', 'sum', 'inner', 'mmin', 'mmax'] +__all__ = ['inner', 'mmax', 'mmin', 'norm', 'sum', 'sumall'] @dv.switchconfig(log_level='ERROR') diff --git a/devito/builtins/initializers.py b/devito/builtins/initializers.py index 99c4f386b0..1b5b66937a 100644 --- a/devito/builtins/initializers.py +++ b/devito/builtins/initializers.py @@ -4,7 +4,7 @@ from devito.tools import as_tuple, as_list from devito.builtins.utils import check_builtins_args, nbl_to_padsize, pad_outhalo -__all__ = ['assign', 'smooth', 'gaussian_smooth', 'initialize_function'] +__all__ = ['assign', 'gaussian_smooth', 'initialize_function', 'smooth'] @dv.switchconfig(log_level='ERROR') diff --git a/devito/builtins/utils.py b/devito/builtins/utils.py index a83dd765a8..ce6b61d957 100644 --- a/devito/builtins/utils.py +++ b/devito/builtins/utils.py @@ -7,8 +7,13 @@ from devito.symbolics import uxreplace from devito.tools import as_tuple -__all__ = ['make_retval', 'nbl_to_padsize', 'pad_outhalo', 'abstract_args', - 'check_builtins_args'] +__all__ = [ + 'abstract_args', + 'check_builtins_args', + 'make_retval', + 'nbl_to_padsize', + 'pad_outhalo', +] accumulator_mapper = { diff --git a/devito/core/arm.py b/devito/core/arm.py index f990ef31e0..9649f5aaa6 100644 --- a/devito/core/arm.py +++ b/devito/core/arm.py @@ -2,8 +2,12 @@ Cpu64AdvCOperator) from devito.passes.iet import OmpTarget, CXXOmpTarget -__all__ = ['ArmAdvCOperator', 'ArmAdvOmpOperator', 'ArmAdvCXXOperator', - 'ArmAdvCXXOmpOperator'] +__all__ = [ + 'ArmAdvCOperator', + 'ArmAdvCXXOmpOperator', + 'ArmAdvCXXOperator', + 'ArmAdvOmpOperator', +] ArmAdvOperator = Cpu64AdvOperator diff --git a/devito/core/cpu.py b/devito/core/cpu.py index 8cbef8b9f6..73d120bb78 100644 --- a/devito/core/cpu.py +++ b/devito/core/cpu.py @@ -14,10 +14,20 @@ check_stability) from devito.tools import timed_pass -__all__ = ['Cpu64NoopCOperator', 'Cpu64NoopOmpOperator', 'Cpu64AdvCOperator', - 'Cpu64AdvOmpOperator', 'Cpu64FsgCOperator', 'Cpu64FsgOmpOperator', - 'Cpu64CustomOperator', 'Cpu64CustomCXXOperator', 'Cpu64AdvCXXOperator', - 'Cpu64AdvCXXOmpOperator', 'Cpu64FsgCXXOperator', 'Cpu64FsgCXXOmpOperator'] +__all__ = [ + 'Cpu64AdvCOperator', + 'Cpu64AdvCXXOmpOperator', + 'Cpu64AdvCXXOperator', + 'Cpu64AdvOmpOperator', + 'Cpu64CustomCXXOperator', + 'Cpu64CustomOperator', + 'Cpu64FsgCOperator', + 'Cpu64FsgCXXOmpOperator', + 'Cpu64FsgCXXOperator', + 'Cpu64FsgOmpOperator', + 'Cpu64NoopCOperator', + 'Cpu64NoopOmpOperator', +] class Cpu64OperatorMixin: diff --git a/devito/core/gpu.py b/devito/core/gpu.py index ed1bb58c81..108b1ab46b 100644 --- a/devito/core/gpu.py +++ b/devito/core/gpu.py @@ -15,12 +15,23 @@ relax_incr_dimensions, check_stability) from devito.tools import as_tuple, timed_pass -__all__ = ['DeviceNoopOperator', 'DeviceAdvOperator', 'DeviceCustomOperator', - 'DeviceNoopOmpOperator', 'DeviceAdvOmpOperator', 'DeviceFsgOmpOperator', - 'DeviceCustomOmpOperator', 'DeviceNoopAccOperator', 'DeviceAdvAccOperator', - 'DeviceFsgAccOperator', 'DeviceCustomAccOperator', 'DeviceNoopCXXOmpOperator', - 'DeviceAdvCXXOmpOperator', 'DeviceFsgCXXOmpOperator', - 'DeviceCustomCXXOmpOperator'] +__all__ = [ + 'DeviceAdvAccOperator', + 'DeviceAdvCXXOmpOperator', + 'DeviceAdvOmpOperator', + 'DeviceAdvOperator', + 'DeviceCustomAccOperator', + 'DeviceCustomCXXOmpOperator', + 'DeviceCustomOmpOperator', + 'DeviceCustomOperator', + 'DeviceFsgAccOperator', + 'DeviceFsgCXXOmpOperator', + 'DeviceFsgOmpOperator', + 'DeviceNoopAccOperator', + 'DeviceNoopCXXOmpOperator', + 'DeviceNoopOmpOperator', + 'DeviceNoopOperator', +] class DeviceOperatorMixin: diff --git a/devito/core/intel.py b/devito/core/intel.py index 9e378ffc12..8478189f92 100644 --- a/devito/core/intel.py +++ b/devito/core/intel.py @@ -3,9 +3,16 @@ Cpu64AdvCXXOperator, Cpu64AdvCXXOmpOperator, Cpu64FsgCXXOperator, Cpu64FsgCXXOmpOperator) -__all__ = ['Intel64AdvCOperator', 'Intel64AdvOmpOperator', 'Intel64FsgCOperator', - 'Intel64FsgOmpOperator', 'Intel64CXXAdvCOperator', 'Intel64AdvCXXOmpOperator', - 'Intel64FsgCXXOperator', 'Intel64FsgCXXOmpOperator'] +__all__ = [ + 'Intel64AdvCOperator', + 'Intel64AdvCXXOmpOperator', + 'Intel64AdvOmpOperator', + 'Intel64CXXAdvCOperator', + 'Intel64FsgCOperator', + 'Intel64FsgCXXOmpOperator', + 'Intel64FsgCXXOperator', + 'Intel64FsgOmpOperator', +] Intel64AdvCOperator = Cpu64AdvCOperator diff --git a/devito/core/power.py b/devito/core/power.py index 65cf4c3cf3..2ae711dcc9 100644 --- a/devito/core/power.py +++ b/devito/core/power.py @@ -1,8 +1,12 @@ from devito.core.cpu import (Cpu64AdvCOperator, Cpu64AdvOmpOperator, Cpu64AdvCXXOperator, Cpu64AdvCXXOmpOperator) -__all__ = ['PowerAdvCOperator', 'PowerAdvOmpOperator', - 'PowerCXXAdvCOperator', 'PowerAdvCXXOmpOperator'] +__all__ = [ + 'PowerAdvCOperator', + 'PowerAdvCXXOmpOperator', + 'PowerAdvOmpOperator', + 'PowerCXXAdvCOperator', +] PowerAdvCOperator = Cpu64AdvCOperator PowerAdvOmpOperator = Cpu64AdvOmpOperator diff --git a/devito/data/allocators.py b/devito/data/allocators.py index 6b109a2cc2..eb2fc7bc45 100644 --- a/devito/data/allocators.py +++ b/devito/data/allocators.py @@ -11,9 +11,15 @@ from devito.parameters import configuration from devito.tools import is_integer, infer_datasize -__all__ = ['ALLOC_ALIGNED', 'ALLOC_NUMA_LOCAL', 'ALLOC_NUMA_ANY', - 'ALLOC_KNL_MCDRAM', 'ALLOC_KNL_DRAM', 'ALLOC_GUARD', - 'default_allocator'] +__all__ = [ + 'ALLOC_ALIGNED', + 'ALLOC_GUARD', + 'ALLOC_KNL_DRAM', + 'ALLOC_KNL_MCDRAM', + 'ALLOC_NUMA_ANY', + 'ALLOC_NUMA_LOCAL', + 'default_allocator', +] class AbstractMemoryAllocator: diff --git a/devito/data/meta.py b/devito/data/meta.py index a3b74647a5..41412c9996 100644 --- a/devito/data/meta.py +++ b/devito/data/meta.py @@ -1,7 +1,16 @@ from devito.tools import Tag -__all__ = ['DOMAIN', 'CORE', 'OWNED', 'HALO', 'NOPAD', 'FULL', - 'LEFT', 'RIGHT', 'CENTER'] +__all__ = [ + 'CENTER', + 'CORE', + 'DOMAIN', + 'FULL', + 'HALO', + 'LEFT', + 'NOPAD', + 'OWNED', + 'RIGHT', +] class DataRegion(Tag): diff --git a/devito/data/utils.py b/devito/data/utils.py index c0e241a723..d76db9d13a 100644 --- a/devito/data/utils.py +++ b/devito/data/utils.py @@ -2,9 +2,19 @@ from devito.tools import Tag, as_tuple, as_list, is_integer -__all__ = ['Index', 'NONLOCAL', 'PROJECTED', 'index_is_basic', 'index_apply_modulo', - 'index_dist_to_repl', 'convert_index', 'index_handle_oob', - 'loc_data_idx', 'mpi_index_maps', 'flip_idx'] +__all__ = [ + 'NONLOCAL', + 'PROJECTED', + 'Index', + 'convert_index', + 'flip_idx', + 'index_apply_modulo', + 'index_dist_to_repl', + 'index_handle_oob', + 'index_is_basic', + 'loc_data_idx', + 'mpi_index_maps', +] class Index(Tag): diff --git a/devito/deprecations.py b/devito/deprecations.py index 2723cb31bb..dbba9a7665 100644 --- a/devito/deprecations.py +++ b/devito/deprecations.py @@ -2,7 +2,7 @@ from warnings import warn -class DevitoDeprecation(): +class DevitoDeprecation: @cached_property def coeff_warn(self): diff --git a/devito/finite_differences/differentiable.py b/devito/finite_differences/differentiable.py index c45b543398..be4625bc61 100644 --- a/devito/finite_differences/differentiable.py +++ b/devito/finite_differences/differentiable.py @@ -21,8 +21,16 @@ from devito.types import Array, DimensionTuple, Evaluable, StencilDimension from devito.types.basic import AbstractFunction, Indexed -__all__ = ['Differentiable', 'DiffDerivative', 'IndexDerivative', 'EvalDerivative', - 'Weights', 'Real', 'Imag', 'Conj'] +__all__ = [ + 'Conj', + 'DiffDerivative', + 'Differentiable', + 'EvalDerivative', + 'Imag', + 'IndexDerivative', + 'Real', + 'Weights', +] class Differentiable(sympy.Expr, Evaluable): @@ -613,9 +621,7 @@ def _gather_for_diff(self): ref_inds = func_args.indices_ref.getters for f in self.args: - if f not in self._args_diff: - new_args.append(f) - elif f is func_args or isinstance(f, DifferentiableFunction): + if f not in self._args_diff or f is func_args or isinstance(f, DifferentiableFunction): new_args.append(f) else: ind_f = f.indices_ref.getters diff --git a/devito/finite_differences/finite_difference.py b/devito/finite_differences/finite_difference.py index 58a051347e..15abd179ce 100644 --- a/devito/finite_differences/finite_difference.py +++ b/devito/finite_differences/finite_difference.py @@ -7,8 +7,16 @@ from .tools import (left, right, generate_indices, centered, direct, transpose, check_input, fd_weights_registry, process_weights) -__all__ = ['first_derivative', 'cross_derivative', 'generic_derivative', - 'left', 'right', 'centered', 'transpose', 'generate_indices'] +__all__ = [ + 'centered', + 'cross_derivative', + 'first_derivative', + 'generate_indices', + 'generic_derivative', + 'left', + 'right', + 'transpose', +] # Number of digits for FD coefficients to avoid roundup errors and non-deterministic # code generation diff --git a/devito/finite_differences/rsfd.py b/devito/finite_differences/rsfd.py index 6f6ecf8a93..12e13a2c64 100644 --- a/devito/finite_differences/rsfd.py +++ b/devito/finite_differences/rsfd.py @@ -4,7 +4,7 @@ from .differentiable import Weights, DiffDerivative from .tools import generate_indices, fd_weights_registry -__all__ = ['drot', 'd45'] +__all__ = ['d45', 'drot'] smapper = {1: (1, 1, 1), 2: (1, 1, -1), 3: (1, -1, 1), 4: (1, -1, -1)} diff --git a/devito/finite_differences/tools.py b/devito/finite_differences/tools.py index 7786629999..8c3398f7cd 100644 --- a/devito/finite_differences/tools.py +++ b/devito/finite_differences/tools.py @@ -273,7 +273,7 @@ def generate_indices(expr, dim, order, side=None, matvec=None, x0=None, nweights f"({order + 1}) for order {order} scheme." f" Reducing order to {order}") # Evaluation point - x0 = sympify(((x0 or {}).get(dim) or expr.indices_ref[dim])) + x0 = sympify((x0 or {}).get(dim) or expr.indices_ref[dim]) # If provided a pure number, assume it's a valid index if x0.is_Number: diff --git a/devito/ir/cgen/printer.py b/devito/ir/cgen/printer.py index e4bff5de80..2d2ecd4e07 100644 --- a/devito/ir/cgen/printer.py +++ b/devito/ir/cgen/printer.py @@ -420,7 +420,7 @@ def _print_Fallback(self, expr): # Lifted from SymPy so that we go through our own `_print_math_func` -for k in ('exp log sin cos tan ceiling floor').split(): +for k in ['exp', 'log', 'sin', 'cos', 'tan', 'ceiling', 'floor']: setattr(BasePrinter, f'_print_{k}', BasePrinter._print_math_func) @@ -432,7 +432,7 @@ def _print_Fallback(self, expr): # Sympy 1.11 has introduced a bug in `_print_Add`, so we enforce here # to always use the correct one from our printer if Version(sympy.__version__) >= Version("1.11"): - setattr(sympy.printing.str.StrPrinter, '_print_Add', BasePrinter._print_Add) + sympy.printing.str.StrPrinter._print_Add = BasePrinter._print_Add def ccode(expr, printer=None, **settings): diff --git a/devito/ir/equations/algorithms.py b/devito/ir/equations/algorithms.py index ce844887aa..310c17ecf3 100644 --- a/devito/ir/equations/algorithms.py +++ b/devito/ir/equations/algorithms.py @@ -13,7 +13,7 @@ from devito.data.allocators import DataReference from devito.logger import warning -__all__ = ['dimension_sort', 'lower_exprs', 'concretize_subdims'] +__all__ = ['concretize_subdims', 'dimension_sort', 'lower_exprs'] def dimension_sort(expr): diff --git a/devito/ir/equations/equation.py b/devito/ir/equations/equation.py index f83dc39c94..be40773f3c 100644 --- a/devito/ir/equations/equation.py +++ b/devito/ir/equations/equation.py @@ -11,8 +11,15 @@ from devito.tools import Pickable, Tag, frozendict from devito.types import Eq, Inc, ReduceMax, ReduceMin, relational_min -__all__ = ['LoweredEq', 'ClusterizedEq', 'DummyEq', 'OpInc', 'OpMin', 'OpMax', - 'identity_mapper'] +__all__ = [ + 'ClusterizedEq', + 'DummyEq', + 'LoweredEq', + 'OpInc', + 'OpMax', + 'OpMin', + 'identity_mapper', +] class IREq(sympy.Eq, Pickable): diff --git a/devito/ir/iet/efunc.py b/devito/ir/iet/efunc.py index 10aa8920e6..c2207094c8 100644 --- a/devito/ir/iet/efunc.py +++ b/devito/ir/iet/efunc.py @@ -5,9 +5,20 @@ from devito.symbolics import uxreplace from devito.tools import as_tuple -__all__ = ['ElementalFunction', 'ElementalCall', 'make_efunc', 'make_callable', - 'EntryFunction', 'AsyncCallable', 'AsyncCall', 'ThreadCallable', - 'DeviceFunction', 'DeviceCall', 'KernelLaunch', 'CommCallable'] +__all__ = [ + 'AsyncCall', + 'AsyncCallable', + 'CommCallable', + 'DeviceCall', + 'DeviceFunction', + 'ElementalCall', + 'ElementalFunction', + 'EntryFunction', + 'KernelLaunch', + 'ThreadCallable', + 'make_callable', + 'make_efunc', +] # ElementalFunction machinery diff --git a/devito/ir/iet/nodes.py b/devito/ir/iet/nodes.py index 3b979ddaf3..1f1fa8e5c6 100644 --- a/devito/ir/iet/nodes.py +++ b/devito/ir/iet/nodes.py @@ -23,14 +23,48 @@ Symbol) from devito.types.object import AbstractObject, LocalObject -__all__ = ['Node', 'MultiTraversable', 'Block', 'Expression', 'Callable', - 'Call', 'ExprStmt', 'Conditional', 'Iteration', 'List', 'Section', - 'TimedList', 'Prodder', 'MetaCall', 'PointerCast', 'HaloSpot', - 'Definition', 'ExpressionBundle', 'AugmentedExpression', 'Break', - 'Increment', 'Return', 'While', 'ListMajor', 'ParallelIteration', - 'ParallelBlock', 'Dereference', 'Lambda', 'SyncSpot', 'Pragma', - 'DummyExpr', 'BlankLine', 'ParallelTree', 'BusyWait', 'UsingNamespace', - 'Using', 'CallableBody', 'Transfer', 'EmptyList', 'Switch'] +__all__ = [ + 'AugmentedExpression', + 'BlankLine', + 'Block', + 'Break', + 'BusyWait', + 'Call', + 'Callable', + 'CallableBody', + 'Conditional', + 'Definition', + 'Dereference', + 'DummyExpr', + 'EmptyList', + 'ExprStmt', + 'Expression', + 'ExpressionBundle', + 'HaloSpot', + 'Increment', + 'Iteration', + 'Lambda', + 'List', + 'ListMajor', + 'MetaCall', + 'MultiTraversable', + 'Node', + 'ParallelBlock', + 'ParallelIteration', + 'ParallelTree', + 'PointerCast', + 'Pragma', + 'Prodder', + 'Return', + 'Section', + 'Switch', + 'SyncSpot', + 'TimedList', + 'Transfer', + 'Using', + 'UsingNamespace', + 'While', +] # First-class IET nodes @@ -446,8 +480,8 @@ def is_initializable(self): """ True if it can be an initializing assignment, False otherwise. """ - return (((self.is_scalar and not self.is_reduction) or - (self.is_tensor and isinstance(self.expr.rhs, ListInitializer)))) + return ((self.is_scalar and not self.is_reduction) or + (self.is_tensor and isinstance(self.expr.rhs, ListInitializer))) @property def defines(self): diff --git a/devito/ir/iet/utils.py b/devito/ir/iet/utils.py index 0ffe7c3d36..1f693a7299 100644 --- a/devito/ir/iet/utils.py +++ b/devito/ir/iet/utils.py @@ -5,8 +5,12 @@ from devito.tools import filter_ordered from devito.types import Global -__all__ = ['filter_iterations', 'retrieve_iteration_tree', 'derive_parameters', - 'maybe_alias'] +__all__ = [ + 'derive_parameters', + 'filter_iterations', + 'maybe_alias', + 'retrieve_iteration_tree', +] class IterationTree(tuple): diff --git a/devito/ir/iet/visitors.py b/devito/ir/iet/visitors.py index 8f6ae8f02f..111a31b8eb 100644 --- a/devito/ir/iet/visitors.py +++ b/devito/ir/iet/visitors.py @@ -29,10 +29,22 @@ IndexedData, DeviceMap) -__all__ = ['FindApplications', 'FindNodes', 'FindWithin', 'FindSections', - 'FindSymbols', 'MapExprStmts', 'MapHaloSpots', 'MapNodes', - 'IsPerfectIteration', 'printAST', 'CGen', 'CInterface', 'Transformer', - 'Uxreplace'] +__all__ = [ + 'CGen', + 'CInterface', + 'FindApplications', + 'FindNodes', + 'FindSections', + 'FindSymbols', + 'FindWithin', + 'IsPerfectIteration', + 'MapExprStmts', + 'MapHaloSpots', + 'MapNodes', + 'Transformer', + 'Uxreplace', + 'printAST', +] class Visitor(GenericVisitor): diff --git a/devito/ir/stree/algorithms.py b/devito/ir/stree/algorithms.py index a85b93460d..07e8094700 100644 --- a/devito/ir/stree/algorithms.py +++ b/devito/ir/stree/algorithms.py @@ -117,7 +117,7 @@ def stree_build(clusters, profiler=None, **kwargs): candidates = tuple(reversed(tip.ancestors[1:] + (tip,))) if not any(i.is_Iteration and i.dim.is_Time for i in candidates) and \ - not candidates[-1] is stree: + candidates[-1] is not stree: attach_section(candidates[-1]) continue diff --git a/devito/ir/stree/tree.py b/devito/ir/stree/tree.py index 252349d9e6..b04fb2942f 100644 --- a/devito/ir/stree/tree.py +++ b/devito/ir/stree/tree.py @@ -2,8 +2,15 @@ from devito.ir.support import WithLock, PrefetchUpdate -__all__ = ["ScheduleTree", "NodeSection", "NodeIteration", "NodeConditional", - "NodeSync", "NodeExprs", "NodeHalo"] +__all__ = [ + "NodeConditional", + "NodeExprs", + "NodeHalo", + "NodeIteration", + "NodeSection", + "NodeSync", + "ScheduleTree", +] class ScheduleTree(NodeMixin): diff --git a/devito/ir/support/basic.py b/devito/ir/support/basic.py index 102be7a006..c55b772c4a 100644 --- a/devito/ir/support/basic.py +++ b/devito/ir/support/basic.py @@ -1,7 +1,7 @@ from collections.abc import Iterable from itertools import chain, product from functools import cached_property -from typing import Callable +from collections.abc import Callable from sympy import S, Expr import sympy @@ -19,7 +19,7 @@ CriticalRegion, Function, Symbol, Temp, TempArray, TBArray) -__all__ = ['IterationInstance', 'TimedAccess', 'Scope', 'ExprGeometry'] +__all__ = ['ExprGeometry', 'IterationInstance', 'Scope', 'TimedAccess'] class IndexMode(Tag): diff --git a/devito/ir/support/guards.py b/devito/ir/support/guards.py index a014db8abb..4ccdfa89e9 100644 --- a/devito/ir/support/guards.py +++ b/devito/ir/support/guards.py @@ -17,9 +17,18 @@ from devito.tools import Pickable, as_tuple, frozendict, split from devito.types import Dimension, LocalObject -__all__ = ['GuardFactor', 'GuardBound', 'GuardBoundNext', 'BaseGuardBound', - 'BaseGuardBoundNext', 'GuardOverflow', 'Guards', 'GuardExpr', - 'GuardSwitch', 'GuardCaseSwitch'] +__all__ = [ + 'BaseGuardBound', + 'BaseGuardBoundNext', + 'GuardBound', + 'GuardBoundNext', + 'GuardCaseSwitch', + 'GuardExpr', + 'GuardFactor', + 'GuardOverflow', + 'GuardSwitch', + 'Guards', +] class AbstractGuard: @@ -445,9 +454,7 @@ def simplify_and(relation, v): covered = True try: - if type(a) in (Gt, Ge) and v.rhs > a.rhs: - new_args.append(v) - elif type(a) in (Lt, Le) and v.rhs < a.rhs: + if type(a) in (Gt, Ge) and v.rhs > a.rhs or type(a) in (Lt, Le) and v.rhs < a.rhs: new_args.append(v) else: new_args.append(a) diff --git a/devito/ir/support/space.py b/devito/ir/support/space.py index f43351001c..2e532b7c1c 100644 --- a/devito/ir/support/space.py +++ b/devito/ir/support/space.py @@ -12,9 +12,18 @@ toposort) from devito.types import Dimension, ModuloDimension -__all__ = ['NullInterval', 'Interval', 'IntervalGroup', 'IterationSpace', - 'IterationInterval', 'DataSpace', 'Forward', 'Backward', 'Any', - 'null_ispace'] +__all__ = [ + 'Any', + 'Backward', + 'DataSpace', + 'Forward', + 'Interval', + 'IntervalGroup', + 'IterationInterval', + 'IterationSpace', + 'NullInterval', + 'null_ispace', +] # The default Stamp, used by all new Intervals diff --git a/devito/ir/support/syncs.py b/devito/ir/support/syncs.py index d8dec1686e..44dc39cf67 100644 --- a/devito/ir/support/syncs.py +++ b/devito/ir/support/syncs.py @@ -9,8 +9,18 @@ from devito.tools import Pickable, as_tuple, filter_ordered, frozendict from .utils import IMask -__all__ = ['WaitLock', 'ReleaseLock', 'WithLock', 'InitArray', 'SyncArray', - 'PrefetchUpdate', 'SnapOut', 'SnapIn', 'Ops', 'normalize_syncs'] +__all__ = [ + 'InitArray', + 'Ops', + 'PrefetchUpdate', + 'ReleaseLock', + 'SnapIn', + 'SnapOut', + 'SyncArray', + 'WaitLock', + 'WithLock', + 'normalize_syncs', +] class SyncOp(Pickable): diff --git a/devito/ir/support/utils.py b/devito/ir/support/utils.py index 0e75619cbc..32dd3a9b88 100644 --- a/devito/ir/support/utils.py +++ b/devito/ir/support/utils.py @@ -8,9 +8,20 @@ from devito.types import (Dimension, DimensionTuple, Indirection, ModuloDimension, StencilDimension) -__all__ = ['AccessMode', 'Stencil', 'IMask', 'detect_accesses', 'detect_io', - 'pull_dims', 'unbounded', 'minimum', 'maximum', 'minmax_index', - 'extrema', 'erange'] +__all__ = [ + 'AccessMode', + 'IMask', + 'Stencil', + 'detect_accesses', + 'detect_io', + 'erange', + 'extrema', + 'maximum', + 'minimum', + 'minmax_index', + 'pull_dims', + 'unbounded', +] class AccessMode: diff --git a/devito/ir/support/vector.py b/devito/ir/support/vector.py index 1fa90379af..4aa74ba060 100644 --- a/devito/ir/support/vector.py +++ b/devito/ir/support/vector.py @@ -6,7 +6,7 @@ from devito.tools import as_tuple, is_integer, memoized_meth from devito.types import Dimension -__all__ = ['Vector', 'LabeledVector', 'vmin', 'vmax'] +__all__ = ['LabeledVector', 'Vector', 'vmax', 'vmin'] class Vector(tuple): @@ -253,9 +253,7 @@ def distance(self, other): """ try: # Handle quickly the special (yet relevant) cases `other == 0` - if is_integer(other) and other == 0: - return self - elif all(i == 0 for i in other) and self.rank == other.rank: + if is_integer(other) and other == 0 or all(i == 0 for i in other) and self.rank == other.rank: return self except TypeError: pass diff --git a/devito/logger.py b/devito/logger.py index f3390aef86..1efa6f1b9b 100644 --- a/devito/logger.py +++ b/devito/logger.py @@ -4,9 +4,20 @@ import sys from contextlib import contextmanager -__all__ = ('set_log_level', 'set_log_noperf', 'is_log_enabled_for', 'switch_log_level', - 'log', 'warning', 'error', 'perf', 'hint', - 'RED', 'GREEN', 'BLUE') +__all__ = ( + 'BLUE', + 'GREEN', + 'RED', + 'error', + 'hint', + 'is_log_enabled_for', + 'log', + 'perf', + 'set_log_level', + 'set_log_noperf', + 'switch_log_level', + 'warning', +) logger = logging.getLogger('Devito') diff --git a/devito/mpi/distributed.py b/devito/mpi/distributed.py index 431a8fbec1..3c251d0a22 100644 --- a/devito/mpi/distributed.py +++ b/devito/mpi/distributed.py @@ -64,8 +64,15 @@ def __getattr__(self, name): return None -__all__ = ['Distributor', 'SubDistributor', 'SparseDistributor', 'MPI', - 'CustomTopology', 'devito_mpi_init', 'devito_mpi_finalize'] +__all__ = [ + 'MPI', + 'CustomTopology', + 'Distributor', + 'SparseDistributor', + 'SubDistributor', + 'devito_mpi_finalize', + 'devito_mpi_init', +] def devito_mpi_init(): @@ -803,7 +810,7 @@ def __init__(self, comm=None): self.comm = comm def _arg_values(self, *args, **kwargs): - grid = kwargs.get('grid', None) + grid = kwargs.get('grid') # Update `comm` based on object attached to `grid` if grid is not None: return grid.distributor._obj_comm._arg_defaults() @@ -856,7 +863,7 @@ def _arg_defaults(self): return values def _arg_values(self, *args, **kwargs): - grid = kwargs.get('grid', None) + grid = kwargs.get('grid') # Update `nb` based on object attached to `grid` if grid is not None: return grid.distributor._obj_neighborhood._arg_defaults() diff --git a/devito/mpi/halo_scheme.py b/devito/mpi/halo_scheme.py index 9e7bfca40e..062b0a35b6 100644 --- a/devito/mpi/halo_scheme.py +++ b/devito/mpi/halo_scheme.py @@ -523,9 +523,7 @@ def classify(exprs, ispace): mapper = {} for f, r in scope.reads.items(): - if not f.is_DiscreteFunction: - continue - elif f.grid is None: + if not f.is_DiscreteFunction or f.grid is None: continue # In the case of custom topologies, we ignore the Dimensions that aren't diff --git a/devito/mpi/routines.py b/devito/mpi/routines.py index dcf04e8f44..c646951a12 100644 --- a/devito/mpi/routines.py +++ b/devito/mpi/routines.py @@ -1398,7 +1398,7 @@ def __init__(self, arguments, **kwargs): super().__init__('MPI_Allreduce', arguments, **kwargs) -class ReductionBuilder(object): +class ReductionBuilder: """ Build IET routines performing MPI reductions. diff --git a/devito/operations/solve.py b/devito/operations/solve.py index 0203dbe26d..a6d1a55910 100644 --- a/devito/operations/solve.py +++ b/devito/operations/solve.py @@ -7,7 +7,7 @@ from devito.finite_differences.derivative import Derivative from devito.tools import as_tuple -__all__ = ['solve', 'linsolve'] +__all__ = ['linsolve', 'solve'] class SolveError(Exception): diff --git a/devito/passes/clusters/asynchrony.py b/devito/passes/clusters/asynchrony.py index bfbe7a0bba..557ca7c5c2 100644 --- a/devito/passes/clusters/asynchrony.py +++ b/devito/passes/clusters/asynchrony.py @@ -9,7 +9,7 @@ from devito.tools import OrderedSet, is_integer, timed_pass from devito.types import CustomDimension, Lock -__all__ = ['tasking', 'memcpy_prefetch'] +__all__ = ['memcpy_prefetch', 'tasking'] def async_trigger(c, dims): diff --git a/devito/passes/clusters/misc.py b/devito/passes/clusters/misc.py index fff9f71e63..46bc8707da 100644 --- a/devito/passes/clusters/misc.py +++ b/devito/passes/clusters/misc.py @@ -10,7 +10,7 @@ from devito.tools import DAG, Stamp, as_tuple, flatten, frozendict, timed_pass from devito.types import Hyperplane -__all__ = ['Lift', 'fuse', 'optimize_pows', 'fission', 'optimize_hyperplanes'] +__all__ = ['Lift', 'fission', 'fuse', 'optimize_hyperplanes', 'optimize_pows'] class Lift(Queue): @@ -369,17 +369,8 @@ def is_cross(source, sink): # and forbid any sort of fusion. Fences have the same effect elif (any(scope.d_anti_gen()) or any(i.is_iaw for i in scope.d_output_gen()) or - any(c.is_fence for c in flatten(cgroups[n:n1+1]))): - dag.add_edge(cg0, cg1) - - # Any flow-dependences along an inner Dimension (i.e., a Dimension - # that doesn't appear in `prefix`) impose that `cg1` follows `cg0` - elif any(not (i.cause and i.cause & prefix) - for i in scope.d_flow_gen()): - dag.add_edge(cg0, cg1) - - # Clearly, output dependences must be honored - elif any(scope.d_output_gen()): + any(c.is_fence for c in flatten(cgroups[n:n1+1]))) or any(not (i.cause and i.cause & prefix) + for i in scope.d_flow_gen()) or any(scope.d_output_gen()): dag.add_edge(cg0, cg1) return dag diff --git a/devito/passes/clusters/utils.py b/devito/passes/clusters/utils.py index 7a48f3c486..ff9cc2d95e 100644 --- a/devito/passes/clusters/utils.py +++ b/devito/passes/clusters/utils.py @@ -2,7 +2,7 @@ from devito.tools import as_tuple from devito.types import CriticalRegion, Eq, Symbol -__all__ = ['is_memcpy', 'make_critical_sequence', 'in_critical_region'] +__all__ = ['in_critical_region', 'is_memcpy', 'make_critical_sequence'] def is_memcpy(expr): diff --git a/devito/passes/iet/languages/openacc.py b/devito/passes/iet/languages/openacc.py index a6c33992ad..706b45bb17 100644 --- a/devito/passes/iet/languages/openacc.py +++ b/devito/passes/iet/languages/openacc.py @@ -15,7 +15,7 @@ from devito.tools import filter_ordered, UnboundTuple from devito.types import Symbol -__all__ = ['DeviceAccizer', 'DeviceAccDataManager', 'AccOrchestrator'] +__all__ = ['AccOrchestrator', 'DeviceAccDataManager', 'DeviceAccizer'] class DeviceAccIteration(PragmaIteration): diff --git a/devito/passes/iet/languages/openmp.py b/devito/passes/iet/languages/openmp.py index bdbee7fe3e..c12de9a617 100644 --- a/devito/passes/iet/languages/openmp.py +++ b/devito/passes/iet/languages/openmp.py @@ -20,10 +20,20 @@ from devito.symbolics import CondEq, DefFunction from devito.tools import filter_ordered -__all__ = ['SimdOmpizer', 'Ompizer', 'OmpIteration', 'OmpRegion', - 'DeviceOmpizer', 'DeviceOmpIteration', 'DeviceOmpDataManager', - 'OmpDataManager', 'OmpOrchestrator', 'DeviceOmpOrchestrator', - 'CXXOmpDataManager', 'CXXOmpOrchestrator'] +__all__ = [ + 'CXXOmpDataManager', + 'CXXOmpOrchestrator', + 'DeviceOmpDataManager', + 'DeviceOmpIteration', + 'DeviceOmpOrchestrator', + 'DeviceOmpizer', + 'OmpDataManager', + 'OmpIteration', + 'OmpOrchestrator', + 'OmpRegion', + 'Ompizer', + 'SimdOmpizer', +] class OmpRegion(ParallelBlock): diff --git a/devito/passes/iet/languages/targets.py b/devito/passes/iet/languages/targets.py index 09fd05b661..2993a5b3e6 100644 --- a/devito/passes/iet/languages/targets.py +++ b/devito/passes/iet/languages/targets.py @@ -9,8 +9,16 @@ AccOrchestrator, AccPrinter) from devito.passes.iet.instrument import instrument -__all__ = ['CTarget', 'OmpTarget', 'COmpTarget', 'DeviceOmpTarget', 'DeviceAccTarget', - 'CXXTarget', 'CXXOmpTarget', 'DeviceCXXOmpTarget'] +__all__ = [ + 'COmpTarget', + 'CTarget', + 'CXXOmpTarget', + 'CXXTarget', + 'DeviceAccTarget', + 'DeviceCXXOmpTarget', + 'DeviceOmpTarget', + 'OmpTarget', +] class Target: diff --git a/devito/passes/iet/languages/utils.py b/devito/passes/iet/languages/utils.py index b37e6364ca..e22e345791 100644 --- a/devito/passes/iet/languages/utils.py +++ b/devito/passes/iet/languages/utils.py @@ -4,7 +4,7 @@ from devito.exceptions import InvalidOperator from devito.ir import List -__all__ = ['joins', '_atomic_add_split'] +__all__ = ['_atomic_add_split', 'joins'] def joins(*symbols): diff --git a/devito/passes/iet/misc.py b/devito/passes/iet/misc.py index 000763332e..dd1bf2814b 100644 --- a/devito/passes/iet/misc.py +++ b/devito/passes/iet/misc.py @@ -17,8 +17,13 @@ from devito.tools import Bunch, as_mapper, filter_ordered, split, as_tuple from devito.types import FIndexed -__all__ = ['avoid_denormals', 'hoist_prodders', 'relax_incr_dimensions', - 'generate_macros', 'minimize_symbols'] +__all__ = [ + 'avoid_denormals', + 'generate_macros', + 'hoist_prodders', + 'minimize_symbols', + 'relax_incr_dimensions', +] @iet_pass diff --git a/devito/passes/iet/parpragma.py b/devito/passes/iet/parpragma.py index c8443ceb79..880d819e2e 100644 --- a/devito/passes/iet/parpragma.py +++ b/devito/passes/iet/parpragma.py @@ -18,8 +18,13 @@ from devito.tools import as_tuple, flatten, is_integer, prod from devito.types import Symbol -__all__ = ['PragmaSimdTransformer', 'PragmaShmTransformer', - 'PragmaDeviceAwareTransformer', 'PragmaLangBB', 'PragmaTransfer'] +__all__ = [ + 'PragmaDeviceAwareTransformer', + 'PragmaLangBB', + 'PragmaShmTransformer', + 'PragmaSimdTransformer', + 'PragmaTransfer', +] class PragmaTransformer(LangTransformer): diff --git a/devito/symbolics/manipulation.py b/devito/symbolics/manipulation.py index e43494974d..70a4f49cd0 100644 --- a/devito/symbolics/manipulation.py +++ b/devito/symbolics/manipulation.py @@ -25,10 +25,21 @@ from devito.types.equation import Eq from devito.types.relational import Le, Lt, Gt, Ge -__all__ = ['xreplace_indices', 'pow_to_mul', 'indexify', 'subs_op_args', - 'normalize_args', 'uxreplace', 'Uxmapper', 'subs_if_composite', - 'reuse_if_untouched', 'evalrel', 'flatten_args', 'unevaluate', - 'as_long'] +__all__ = [ + 'Uxmapper', + 'as_long', + 'evalrel', + 'flatten_args', + 'indexify', + 'normalize_args', + 'pow_to_mul', + 'reuse_if_untouched', + 'subs_if_composite', + 'subs_op_args', + 'unevaluate', + 'uxreplace', + 'xreplace_indices', +] def uxreplace(expr, rule): diff --git a/devito/symbolics/queries.py b/devito/symbolics/queries.py index 2496a0aeb9..dec4728254 100644 --- a/devito/symbolics/queries.py +++ b/devito/symbolics/queries.py @@ -10,10 +10,26 @@ from devito.types.object import AbstractObject -__all__ = ['q_leaf', 'q_indexed', 'q_terminal', 'q_function', 'q_routine', - 'q_terminalop', 'q_indirect', 'q_constant', 'q_affine', 'q_linear', - 'q_identity', 'q_symbol', 'q_comp_acc', 'q_multivar', 'q_monoaffine', - 'q_dimension', 'q_positive', 'q_negative'] +__all__ = [ + 'q_affine', + 'q_comp_acc', + 'q_constant', + 'q_dimension', + 'q_function', + 'q_identity', + 'q_indexed', + 'q_indirect', + 'q_leaf', + 'q_linear', + 'q_monoaffine', + 'q_multivar', + 'q_negative', + 'q_positive', + 'q_routine', + 'q_symbol', + 'q_terminal', + 'q_terminalop', +] # The following SymPy objects are considered tree leaves: diff --git a/devito/symbolics/search.py b/devito/symbolics/search.py index 9c801470ac..94072520ef 100644 --- a/devito/symbolics/search.py +++ b/devito/symbolics/search.py @@ -9,9 +9,16 @@ q_symbol, q_dimension, q_derivative) from devito.tools import as_tuple -__all__ = ['retrieve_indexed', 'retrieve_functions', 'retrieve_function_carriers', - 'retrieve_terminals', 'retrieve_symbols', 'retrieve_dimensions', - 'retrieve_derivatives', 'search'] +__all__ = [ + 'retrieve_derivatives', + 'retrieve_dimensions', + 'retrieve_function_carriers', + 'retrieve_functions', + 'retrieve_indexed', + 'retrieve_symbols', + 'retrieve_terminals', + 'search', +] Expression = sympy.Basic | np.number | int | float diff --git a/devito/tools/abc.py b/devito/tools/abc.py index 162b3287d3..4fe295ee07 100644 --- a/devito/tools/abc.py +++ b/devito/tools/abc.py @@ -2,7 +2,7 @@ from hashlib import sha1 -__all__ = ['Tag', 'Signer', 'Reconstructable', 'Pickable', 'Singleton', 'Stamp'] +__all__ = ['Pickable', 'Reconstructable', 'Signer', 'Singleton', 'Stamp', 'Tag'] class Tag(abc.ABC): diff --git a/devito/tools/data_structures.py b/devito/tools/data_structures.py index bf411900cd..1e7e46ad54 100644 --- a/devito/tools/data_structures.py +++ b/devito/tools/data_structures.py @@ -10,9 +10,19 @@ from devito.tools.utils import as_tuple, filter_ordered, humanbytes from devito.tools.algorithms import toposort -__all__ = ['Bunch', 'EnrichedTuple', 'ReducerMap', 'DefaultOrderedDict', - 'OrderedSet', 'Ordering', 'DAG', 'frozendict', - 'UnboundTuple', 'UnboundedMultiTuple', 'MemoryEstimate'] +__all__ = [ + 'DAG', + 'Bunch', + 'DefaultOrderedDict', + 'EnrichedTuple', + 'MemoryEstimate', + 'OrderedSet', + 'Ordering', + 'ReducerMap', + 'UnboundTuple', + 'UnboundedMultiTuple', + 'frozendict', +] class Bunch: diff --git a/devito/tools/memoization.py b/devito/tools/memoization.py index b0733dac56..b24a9166f6 100644 --- a/devito/tools/memoization.py +++ b/devito/tools/memoization.py @@ -3,7 +3,7 @@ from itertools import tee from typing import TypeVar -__all__ = ['memoized_func', 'memoized_meth', 'memoized_generator', 'CacheInstances'] +__all__ = ['CacheInstances', 'memoized_func', 'memoized_generator', 'memoized_meth'] class memoized_func: diff --git a/devito/tools/threading.py b/devito/tools/threading.py index 6a0beb59f2..5e661644c7 100644 --- a/devito/tools/threading.py +++ b/devito/tools/threading.py @@ -1,6 +1,6 @@ import threading -__all__ = ['sympy_mutex', 'safe_dict_copy'] +__all__ = ['safe_dict_copy', 'sympy_mutex'] sympy_mutex = threading.RLock() diff --git a/devito/tools/utils.py b/devito/tools/utils.py index 546c5cd49f..51adefd158 100644 --- a/devito/tools/utils.py +++ b/devito/tools/utils.py @@ -8,12 +8,36 @@ import numpy as np import sympy -__all__ = ['prod', 'as_tuple', 'is_integer', 'generator', 'grouper', 'split', - 'roundm', 'powerset', 'invert', 'flatten', 'single_or', 'filter_ordered', - 'as_mapper', 'filter_sorted', 'pprint', 'sweep', 'all_equal', 'as_list', - 'indices_to_slices', 'indices_to_sections', 'transitive_closure', - 'humanbytes', 'contains_val', 'sorted_priority', 'as_set', 'is_number', - 'smart_lt', 'smart_gt'] +__all__ = [ + 'all_equal', + 'as_list', + 'as_mapper', + 'as_set', + 'as_tuple', + 'contains_val', + 'filter_ordered', + 'filter_sorted', + 'flatten', + 'generator', + 'grouper', + 'humanbytes', + 'indices_to_sections', + 'indices_to_slices', + 'invert', + 'is_integer', + 'is_number', + 'powerset', + 'pprint', + 'prod', + 'roundm', + 'single_or', + 'smart_gt', + 'smart_lt', + 'sorted_priority', + 'split', + 'sweep', + 'transitive_closure', +] def prod(iterable, initial=1): diff --git a/devito/types/array.py b/devito/types/array.py index cb1815f644..845eef1976 100644 --- a/devito/types/array.py +++ b/devito/types/array.py @@ -9,8 +9,16 @@ from devito.types.basic import AbstractFunction, LocalType from devito.types.utils import CtypesFactory, DimensionTuple -__all__ = ['Array', 'ArrayMapped', 'ArrayObject', 'PointerArray', 'Bundle', - 'ComponentAccess', 'Bag', 'BundleView'] +__all__ = [ + 'Array', + 'ArrayMapped', + 'ArrayObject', + 'Bag', + 'Bundle', + 'BundleView', + 'ComponentAccess', + 'PointerArray', +] class ArrayBasic(AbstractFunction, LocalType): diff --git a/devito/types/basic.py b/devito/types/basic.py index db455e8924..b49d030031 100644 --- a/devito/types/basic.py +++ b/devito/types/basic.py @@ -19,8 +19,14 @@ from devito.types.lazy import Evaluable from devito.types.utils import DimensionTuple, Offset, Size -__all__ = ['Symbol', 'Scalar', 'Indexed', 'IndexedData', 'DeviceMap', - 'IrregularFunctionInterface'] +__all__ = [ + 'DeviceMap', + 'Indexed', + 'IndexedData', + 'IrregularFunctionInterface', + 'Scalar', + 'Symbol', +] class CodeSymbol: @@ -1587,7 +1593,7 @@ def flat(self): return self._mat def __init_finalize__(self, *args, **kwargs): - self._name = kwargs.get('name', None) + self._name = kwargs.get('name') __hash__ = sympy.ImmutableDenseMatrix.__hash__ diff --git a/devito/types/caching.py b/devito/types/caching.py index 948ae09e88..a1e359bd4d 100644 --- a/devito/types/caching.py +++ b/devito/types/caching.py @@ -7,7 +7,7 @@ from devito.tools import safe_dict_copy -__all__ = ['Cached', 'Uncached', '_SymbolCache', 'CacheManager'] +__all__ = ['CacheManager', 'Cached', 'Uncached', '_SymbolCache'] _SymbolCache = {} """The symbol cache.""" diff --git a/devito/types/dense.py b/devito/types/dense.py index f36d4ba98f..eef4682c65 100644 --- a/devito/types/dense.py +++ b/devito/types/dense.py @@ -30,7 +30,7 @@ Buffer, DimensionTuple, NODE, CELL, Size, Staggering, host_layer ) -__all__ = ['Function', 'TimeFunction', 'SubFunction', 'TempFunction'] +__all__ = ['Function', 'SubFunction', 'TempFunction', 'TimeFunction'] RegionMeta = namedtuple('RegionMeta', 'offset size') @@ -341,12 +341,9 @@ def _size_outhalo(self): if self._distributor.is_parallel and (any(left) or any(right)): try: - warning_msg = """A space order of {0} and a halo size of {1} has been - set but the current rank ({2}) has a domain size of - only {3}""".format(self._space_order, - max(self._size_inhalo), - self._distributor.myrank, - min(self.grid.shape_local)) + warning_msg = f"""A space order of {self._space_order} and a halo size of {max(self._size_inhalo)} has been + set but the current rank ({self._distributor.myrank}) has a domain size of + only {min(self.grid.shape_local)}""" if not self._distributor.is_boundary_rank: warning(warning_msg) else: diff --git a/devito/types/dimension.py b/devito/types/dimension.py index 6e000349e9..d83efece3c 100644 --- a/devito/types/dimension.py +++ b/devito/types/dimension.py @@ -17,11 +17,24 @@ from devito.types.relational import relational_min, relational_max -__all__ = ['Dimension', 'SpaceDimension', 'TimeDimension', 'DefaultDimension', - 'CustomDimension', 'SteppingDimension', 'SubDimension', - 'MultiSubDimension', 'ConditionalDimension', 'ModuloDimension', - 'IncrDimension', 'BlockDimension', 'StencilDimension', - 'VirtualDimension', 'Spacing', 'dimensions'] +__all__ = [ + 'BlockDimension', + 'ConditionalDimension', + 'CustomDimension', + 'DefaultDimension', + 'Dimension', + 'IncrDimension', + 'ModuloDimension', + 'MultiSubDimension', + 'SpaceDimension', + 'Spacing', + 'StencilDimension', + 'SteppingDimension', + 'SubDimension', + 'TimeDimension', + 'VirtualDimension', + 'dimensions', +] SubDimensionThickness = namedtuple('SubDimensionThickness', 'left right') diff --git a/devito/types/grid.py b/devito/types/grid.py index 6107799ce0..005d92dded 100644 --- a/devito/types/grid.py +++ b/devito/types/grid.py @@ -20,7 +20,7 @@ MultiSubDimension, DefaultDimension) from devito.deprecations import deprecations -__all__ = ['Grid', 'SubDomain', 'SubDomainSet', 'Border'] +__all__ = ['Border', 'Grid', 'SubDomain', 'SubDomainSet'] GlobalLocal = namedtuple('GlobalLocal', 'glb loc') @@ -621,7 +621,7 @@ def __subdomain_finalize_legacy__(self, grid): except ValueError: side, thickness = v constructor = {'left': SubDimension.left, - 'right': SubDimension.right}.get(side, None) + 'right': SubDimension.right}.get(side) if constructor is None: raise ValueError(f"Expected sides 'left|right', not `{side}`") @@ -820,7 +820,7 @@ class SubDomainSet(MultiSubDomain): def __init__(self, **kwargs): self._n_domains = kwargs.get('N', 1) - self._global_bounds = kwargs.get('bounds', None) + self._global_bounds = kwargs.get('bounds') super().__init__(**kwargs) try: diff --git a/devito/types/misc.py b/devito/types/misc.py index 8cdad91b07..599d606b60 100644 --- a/devito/types/misc.py +++ b/devito/types/misc.py @@ -12,10 +12,27 @@ from devito.types.basic import IndexedData from devito.tools import CustomDtype, Pickable, as_tuple, frozendict -__all__ = ['Timer', 'Pointer', 'VolatileInt', 'FIndexed', 'Wildcard', 'Fence', - 'Global', 'Hyperplane', 'Indirection', 'Temp', 'TempArray', 'Jump', - 'nop', 'WeakFence', 'CriticalRegion', 'Auto', 'AutoRef', 'auto', - 'size_t'] +__all__ = [ + 'Auto', + 'AutoRef', + 'CriticalRegion', + 'FIndexed', + 'Fence', + 'Global', + 'Hyperplane', + 'Indirection', + 'Jump', + 'Pointer', + 'Temp', + 'TempArray', + 'Timer', + 'VolatileInt', + 'WeakFence', + 'Wildcard', + 'auto', + 'nop', + 'size_t', +] class Timer(CompositeObject): diff --git a/devito/types/object.py b/devito/types/object.py index 637e19dea0..05fb6e1069 100644 --- a/devito/types/object.py +++ b/devito/types/object.py @@ -8,7 +8,7 @@ from devito.types.basic import Basic, LocalType from devito.types.utils import CtypesFactory -__all__ = ['Object', 'LocalObject', 'CompositeObject'] +__all__ = ['CompositeObject', 'LocalObject', 'Object'] class AbstractObject(Basic, sympy.Basic, Pickable): diff --git a/devito/types/parallel.py b/devito/types/parallel.py index 4383e6c208..89ebaab520 100644 --- a/devito/types/parallel.py +++ b/devito/types/parallel.py @@ -20,10 +20,26 @@ from devito.types.dimension import CustomDimension from devito.types.misc import Fence, VolatileInt -__all__ = ['NThreads', 'NThreadsNested', 'NThreadsNonaffine', 'NThreadsBase', - 'DeviceID', 'ThreadID', 'Lock', 'ThreadArray', 'PThreadArray', - 'SharedData', 'NPThreads', 'DeviceRM', 'QueueID', 'Barrier', 'TBArray', - 'ThreadPoolSync', 'ThreadCommit', 'ThreadWait'] +__all__ = [ + 'Barrier', + 'DeviceID', + 'DeviceRM', + 'Lock', + 'NPThreads', + 'NThreads', + 'NThreadsBase', + 'NThreadsNested', + 'NThreadsNonaffine', + 'PThreadArray', + 'QueueID', + 'SharedData', + 'TBArray', + 'ThreadArray', + 'ThreadCommit', + 'ThreadID', + 'ThreadPoolSync', + 'ThreadWait', +] class NThreadsAbstract(Scalar): diff --git a/devito/types/relational.py b/devito/types/relational.py index 47d9768c54..731ec29bc7 100644 --- a/devito/types/relational.py +++ b/devito/types/relational.py @@ -3,7 +3,7 @@ import sympy -__all__ = ['Le', 'Lt', 'Ge', 'Gt', 'Ne', 'relational_min', 'relational_max'] +__all__ = ['Ge', 'Gt', 'Le', 'Lt', 'Ne', 'relational_max', 'relational_min'] class AbstractRel: diff --git a/devito/types/sparse.py b/devito/types/sparse.py index afedbaaee3..eaee37528a 100644 --- a/devito/types/sparse.py +++ b/devito/types/sparse.py @@ -21,8 +21,13 @@ from devito.types.utils import IgnoreDimSort -__all__ = ['SparseFunction', 'SparseTimeFunction', 'PrecomputedSparseFunction', - 'PrecomputedSparseTimeFunction', 'MatrixSparseTimeFunction'] +__all__ = [ + 'MatrixSparseTimeFunction', + 'PrecomputedSparseFunction', + 'PrecomputedSparseTimeFunction', + 'SparseFunction', + 'SparseTimeFunction', +] _interpolators = {'linear': LinearInterpolator, 'sinc': SincInterpolator} diff --git a/devito/types/tensor.py b/devito/types/tensor.py index 30d5e9980b..177f83e9f0 100644 --- a/devito/types/tensor.py +++ b/devito/types/tensor.py @@ -114,7 +114,7 @@ def __subfunc_setup__(cls, *args, **kwargs): raise TypeError("Need either `grid` or `dimensions`") else: dims = grid.dimensions - stagg = kwargs.get("staggered", None) + stagg = kwargs.get("staggered") name = kwargs.get("name") symm = kwargs.get('symmetric', True) diag = kwargs.get('diagonal', False) @@ -341,7 +341,7 @@ def __subfunc_setup__(cls, *args, **kwargs): raise TypeError("Need either `grid` or `dimensions`") else: dims = grid.dimensions - stagg = kwargs.get("staggered", None) + stagg = kwargs.get("staggered") name = kwargs.get("name") for i, d in enumerate(dims): sub_kwargs = cls._component_kwargs(i, **kwargs) diff --git a/devito/types/utils.py b/devito/types/utils.py index 53b0d0b928..d8a7877cf1 100644 --- a/devito/types/utils.py +++ b/devito/types/utils.py @@ -5,9 +5,22 @@ from devito.tools import EnrichedTuple, Tag # Additional Function-related APIs -__all__ = ['Buffer', 'DimensionTuple', 'NODE', 'CELL', 'Size', 'Offset', - 'IgnoreDimSort', 'HierarchyLayer', 'HostLayer', 'DeviceLayer', - 'DiskLayer', 'host_layer', 'device_layer', 'disk_layer'] +__all__ = [ + 'CELL', + 'NODE', + 'Buffer', + 'DeviceLayer', + 'DimensionTuple', + 'DiskLayer', + 'HierarchyLayer', + 'HostLayer', + 'IgnoreDimSort', + 'Offset', + 'Size', + 'device_layer', + 'disk_layer', + 'host_layer', +] class Buffer(Tag): diff --git a/examples/cfd/01_convection.ipynb b/examples/cfd/01_convection.ipynb index 8cdbd9dc60..7a7fe3b6c6 100644 --- a/examples/cfd/01_convection.ipynb +++ b/examples/cfd/01_convection.ipynb @@ -112,17 +112,17 @@ "for n in range(nt + 1):\n", " # Copy previous result into a new buffer\n", " un = u.copy()\n", - " \n", + "\n", " # Update the new result with a 3-point stencil\n", " u[1:, 1:] = (un[1:, 1:] - (c * dt / dy * (un[1:, 1:] - un[1:, :-1])) -\n", " (c * dt / dx * (un[1:, 1:] - un[:-1, 1:])))\n", "\n", - " # Apply boundary conditions. \n", + " # Apply boundary conditions.\n", " u[0, :] = 1. # left\n", " u[-1, :] = 1. # right\n", " u[:, 0] = 1. # bottom\n", " u[:, -1] = 1. # top\n", - " # Note that in the above expressions the NumPy index -1 corresponds to the final point of the array along the indexed dimension, \n", + " # Note that in the above expressions the NumPy index -1 corresponds to the final point of the array along the indexed dimension,\n", " # i.e. here u[-1, :] is equivalent to u[80, :].\n" ] }, diff --git a/examples/cfd/01_convection_revisited.ipynb b/examples/cfd/01_convection_revisited.ipynb index 1b734099e7..e7be39a448 100644 --- a/examples/cfd/01_convection_revisited.ipynb +++ b/examples/cfd/01_convection_revisited.ipynb @@ -30,7 +30,7 @@ "metadata": {}, "outputs": [], "source": [ - "from examples.cfd import plot_field, init_hat, init_smooth\n", + "from examples.cfd import plot_field, init_smooth\n", "import numpy as np\n", "%matplotlib inline\n", "\n", @@ -106,12 +106,12 @@ "for n in range(nt + 1):\n", " # Copy previous result into a new buffer\n", " un = u.copy()\n", - " \n", + "\n", " # Update the new result with a 3-point stencil\n", " u[1:, 1:] = (un[1:, 1:] - (c * dt / dy * (un[1:, 1:] - un[1:, :-1])) -\n", " (c * dt / dx * (un[1:, 1:] - un[:-1, 1:])))\n", - " \n", - " # Apply boundary conditions. \n", + "\n", + " # Apply boundary conditions.\n", " # Note: -1 here is the last index in the array, not the one at x=-1 or y=-1.\n", " u[0, :] = 1. # left\n", " u[-1, :] = 1. # right\n", @@ -238,7 +238,7 @@ } ], "source": [ - "from devito import solve \n", + "from devito import solve\n", "from sympy import nsimplify, pprint\n", "\n", "stencil = solve(eq, u.forward)\n", @@ -287,13 +287,13 @@ "init_smooth(field=u.data[1], dx=dx, dy=dy)\n", "\n", "# Apply boundary conditions.\n", - "# Note that as the u.data method is from numpy, we can use the \n", + "# Note that as the u.data method is from numpy, we can use the\n", "# -1 syntax to represent the last item in the array.\n", "u.data[:, 0, :] = 1.\n", "u.data[:, -1, :] = 1.\n", "u.data[:, :, 0] = 1.\n", "u.data[:, :, -1] = 1.\n", - " \n", + "\n", "# Create an Operator that updates the forward stencil\n", "# point in the interior subdomain only.\n", "op = Operator(Eq(u.forward, stencil, subdomain=grid.interior))\n", @@ -346,8 +346,8 @@ "init_smooth(field=u.data[1], dx=dx, dy=dy)\n", "\n", "# For defining BCs, we generally to explicitly set rows/columns\n", - "# in our field using an expression. We can use Devito's \"indexed\" \n", - "# notation to do this. A u in this instance is a sympy function \n", + "# in our field using an expression. We can use Devito's \"indexed\"\n", + "# notation to do this. A u in this instance is a sympy function\n", "# we cannot use the numpy shortcut u[-1] to refer to the last location:\n", "x, y = grid.dimensions\n", "t = grid.stepping_dim\n", diff --git a/examples/cfd/02_convection_nonlinear.ipynb b/examples/cfd/02_convection_nonlinear.ipynb index e77326274f..bd3559d268 100644 --- a/examples/cfd/02_convection_nonlinear.ipynb +++ b/examples/cfd/02_convection_nonlinear.ipynb @@ -36,7 +36,6 @@ "source": [ "from examples.cfd import plot_field, init_hat\n", "import numpy as np\n", - "import sympy\n", "%matplotlib inline\n", "\n", "# Some variable declarations\n", @@ -114,23 +113,23 @@ "for n in range(nt + 1): ##loop across number of time steps\n", " un = u.copy()\n", " vn = v.copy()\n", - " u[1:, 1:] = (un[1:, 1:] - \n", + " u[1:, 1:] = (un[1:, 1:] -\n", " (un[1:, 1:] * c * dt / dy * (un[1:, 1:] - un[1:, :-1])) -\n", " vn[1:, 1:] * c * dt / dx * (un[1:, 1:] - un[:-1, 1:]))\n", " v[1:, 1:] = (vn[1:, 1:] -\n", " (un[1:, 1:] * c * dt / dy * (vn[1:, 1:] - vn[1:, :-1])) -\n", " vn[1:, 1:] * c * dt / dx * (vn[1:, 1:] - vn[:-1, 1:]))\n", - " \n", + "\n", " u[0, :] = 1\n", " u[-1, :] = 1\n", " u[:, 0] = 1\n", " u[:, -1] = 1\n", - " \n", + "\n", " v[0, :] = 1\n", " v[-1, :] = 1\n", " v[:, 0] = 1\n", " v[:, -1] = 1\n", - " \n", + "\n", "plot_field(u)" ] }, diff --git a/examples/cfd/03_diffusion.ipynb b/examples/cfd/03_diffusion.ipynb index 2861815528..0fbd64c580 100644 --- a/examples/cfd/03_diffusion.ipynb +++ b/examples/cfd/03_diffusion.ipynb @@ -57,9 +57,9 @@ "outputs": [], "source": [ "def diffuse(u, nt):\n", - " for n in range(nt + 1): \n", + " for n in range(nt + 1):\n", " un = u.copy()\n", - " u[1:-1, 1:-1] = (un[1:-1,1:-1] + \n", + " u[1:-1, 1:-1] = (un[1:-1,1:-1] +\n", " nu * dt / dy**2 * (un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +\n", " nu * dt / dx**2 * (un[2:,1: -1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))\n", " u[0, :] = 1\n", @@ -139,7 +139,7 @@ "u = np.empty((nx, ny))\n", "init_hat(field=u, dx=dx, dy=dy, value=1)\n", "\n", - "# Field initialization. \n", + "# Field initialization.\n", "# This will create 4 equally spaced 10x10 hat functions of various values.\n", "u[ nx//4:nx//4+10 , ny//4:ny//4+10 ] = 2\n", "u[ 3*nx//4:3*nx//4+10 , ny//4:ny//4+10 ] = 3\n", @@ -187,7 +187,6 @@ "source": [ "from devito import Grid, TimeFunction, Eq, solve\n", "from sympy.abc import a\n", - "from sympy import nsimplify\n", "\n", "# Initialize `u` for space order 2\n", "grid = Grid(shape=(nx, ny), extent=(2., 2.))\n", diff --git a/examples/cfd/03_diffusion_nonuniform.ipynb b/examples/cfd/03_diffusion_nonuniform.ipynb index 5a6d5337fd..e42a2c6a26 100644 --- a/examples/cfd/03_diffusion_nonuniform.ipynb +++ b/examples/cfd/03_diffusion_nonuniform.ipynb @@ -44,8 +44,8 @@ "\n", "visc = np.full((nx, ny), nu) # Initialize viscosity\n", "visc[nx//4-offset:nx//4+offset, 1:-1] = 0.0001 # Adding a material with different viscosity\n", - "visc[1:-1,nx//4-offset:nx//4+offset ] = 0.0001 \n", - "visc[3*nx//4-offset:3*nx//4+offset, 1:-1] = 0.0001 \n", + "visc[1:-1,nx//4-offset:nx//4+offset ] = 0.0001\n", + "visc[3*nx//4-offset:3*nx//4+offset, 1:-1] = 0.0001\n", "\n", "visc_nb = visc[1:-1,1:-1]\n", "\n", @@ -80,9 +80,9 @@ "outputs": [], "source": [ "def diffuse(u, nt ,visc):\n", - " for n in range(nt + 1): \n", + " for n in range(nt + 1):\n", " un = u.copy()\n", - " u[1:-1, 1:-1] = (un[1:-1,1:-1] + \n", + " u[1:-1, 1:-1] = (un[1:-1,1:-1] +\n", " visc*dt / dy**2 * (un[1:-1, 2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +\n", " visc*dt / dx**2 * (un[2:,1: -1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))\n", " u[0, :] = 1\n", @@ -341,7 +341,7 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "from devito import Operator, Constant, Eq, solve, Function\n", + "from devito import Operator, Eq, solve, Function\n", "\n", "\n", "# Reset our data field and ICs\n", diff --git a/examples/cfd/04_burgers.ipynb b/examples/cfd/04_burgers.ipynb index e2a70610e7..1ad8811331 100644 --- a/examples/cfd/04_burgers.ipynb +++ b/examples/cfd/04_burgers.ipynb @@ -200,36 +200,36 @@ " vn = v.copy()\n", "\n", " u[1:-1, 1:-1] = (un[1:-1, 1:-1] -\n", - " dt / dy * un[1:-1, 1:-1] * \n", - " (un[1:-1, 1:-1] - un[1:-1, 0:-2]) - \n", - " dt / dx * vn[1:-1, 1:-1] * \n", - " (un[1:-1, 1:-1] - un[0:-2, 1:-1]) + \n", - " nu * dt / dy**2 * \n", - " (un[1:-1,2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) + \n", - " nu * dt / dx**2 * \n", + " dt / dy * un[1:-1, 1:-1] *\n", + " (un[1:-1, 1:-1] - un[1:-1, 0:-2]) -\n", + " dt / dx * vn[1:-1, 1:-1] *\n", + " (un[1:-1, 1:-1] - un[0:-2, 1:-1]) +\n", + " nu * dt / dy**2 *\n", + " (un[1:-1,2:] - 2 * un[1:-1, 1:-1] + un[1:-1, 0:-2]) +\n", + " nu * dt / dx**2 *\n", " (un[2:, 1:-1] - 2 * un[1:-1, 1:-1] + un[0:-2, 1:-1]))\n", - " \n", - " v[1:-1, 1:-1] = (vn[1:-1, 1:-1] - \n", + "\n", + " v[1:-1, 1:-1] = (vn[1:-1, 1:-1] -\n", " dt / dy * un[1:-1, 1:-1] *\n", " (vn[1:-1, 1:-1] - vn[1:-1, 0:-2]) -\n", - " dt / dx * vn[1:-1, 1:-1] * \n", - " (vn[1:-1, 1:-1] - vn[0:-2, 1:-1]) + \n", - " nu * dt / dy**2 * \n", + " dt / dx * vn[1:-1, 1:-1] *\n", + " (vn[1:-1, 1:-1] - vn[0:-2, 1:-1]) +\n", + " nu * dt / dy**2 *\n", " (vn[1:-1, 2:] - 2 * vn[1:-1, 1:-1] + vn[1:-1, 0:-2]) +\n", " nu * dt / dx**2 *\n", " (vn[2:, 1:-1] - 2 * vn[1:-1, 1:-1] + vn[0:-2, 1:-1]))\n", - " \n", + "\n", " u[0, :] = 1\n", " u[-1, :] = 1\n", " u[:, 0] = 1\n", " u[:, -1] = 1\n", - " \n", + "\n", " v[0, :] = 1\n", " v[-1, :] = 1\n", " v[:, 0] = 1\n", " v[:, -1] = 1\n", - " \n", - " \n", + "\n", + "\n", " # A figure of the wave state will be produced for each batch\n", " if (n%batch_size) == 0:\n", " print (\"Batch:\",n/(batch_size))\n", @@ -486,9 +486,9 @@ } ], "source": [ - "from devito import VectorTimeFunction, grad, div, NODE\n", + "from devito import VectorTimeFunction, grad\n", "x, y = grid.dimensions\n", - "# Reinitialise \n", + "# Reinitialise\n", "U = VectorTimeFunction(name='U', grid=grid, space_order=2)\n", "init_hat(field=U[0].data[0], dx=dx, dy=dy, value=2.)\n", "init_hat(field=U[1].data[0], dx=dx, dy=dy, value=2.)\n", diff --git a/examples/cfd/05_laplace.ipynb b/examples/cfd/05_laplace.ipynb index 9700c65c80..74ee48608e 100644 --- a/examples/cfd/05_laplace.ipynb +++ b/examples/cfd/05_laplace.ipynb @@ -65,14 +65,14 @@ " p[1:-1, 1:-1] = ((dx**2 * (pn[2:, 1:-1] + pn[0:-2, 1:-1]) +\n", " dy**2 * (pn[1:-1, 2:] + pn[1:-1, 0:-2])) /\n", " (2 * (dx**2 + dy**2)))\n", - " \n", + "\n", " p[0, :] = 0 # p = 0 @ x = 0\n", " p[-1, :] = bc_y # p = y @ x = 2\n", " p[:, 0] = p[:, 1] # dp/dy = 0 @ y = 0\n", " p[:, -1] = p[:, -2] # dp/dy = 0 @ y = 1\n", " l1norm = (np.sum(np.abs(p[:]) - np.abs(pn[:])) /\n", " np.sum(np.abs(pn[:])))\n", - " \n", + "\n", " return p" ] }, @@ -294,7 +294,7 @@ " # This call implies a deep data copy\n", " pn.data[:] = p.data[:]\n", " op(p=p, pn=pn)\n", - " \n", + "\n", " l1norm = (np.sum(np.abs(p.data[:]) - np.abs(pn.data[:])) /\n", " np.sum(np.abs(pn.data[:])))\n", "\n", @@ -371,12 +371,12 @@ "\n", " # Apply operator\n", " op(p=_p, pn=_pn)\n", - " \n", + "\n", " # Compute L1 norm\n", " l1norm = (np.sum(np.abs(_p.data[:]) - np.abs(_pn.data[:])) /\n", " np.sum(np.abs(_pn.data[:])))\n", " counter += 1\n", - " \n", + "\n", "plot_field(p.data, ymax=1.0, view=(30, 225))" ] } diff --git a/examples/cfd/06_poisson.ipynb b/examples/cfd/06_poisson.ipynb index a3accb5865..8fd2e7875e 100644 --- a/examples/cfd/06_poisson.ipynb +++ b/examples/cfd/06_poisson.ipynb @@ -31,7 +31,7 @@ "metadata": {}, "outputs": [], "source": [ - "from examples.cfd import plot_field, init_hat\n", + "from examples.cfd import plot_field\n", "import numpy as np\n", "%matplotlib inline\n", "\n", @@ -86,14 +86,14 @@ " pd = p.copy()\n", " p[1:-1,1:-1] = (((pd[1:-1, 2:] + pd[1:-1, :-2]) * dy**2 +\n", " (pd[2:, 1:-1] + pd[:-2, 1:-1]) * dx**2 -\n", - " b[1:-1, 1:-1] * dx**2 * dy**2) / \n", + " b[1:-1, 1:-1] * dx**2 * dy**2) /\n", " (2 * (dx**2 + dy**2)))\n", "\n", " p[0, :] = 0\n", " p[nx-1, :] = 0\n", " p[:, 0] = 0\n", " p[:, ny-1] = 0\n", - " \n" + "\n" ] }, { @@ -237,11 +237,11 @@ "metadata": {}, "outputs": [], "source": [ - "# Now with Devito we will turn `p` into `TimeFunction` object \n", + "# Now with Devito we will turn `p` into `TimeFunction` object\n", "# to make all the buffer switching implicit\n", "p = TimeFunction(name='p', grid=grid, space_order=2)\n", "p.data[:] = 0.\n", - " \n", + "\n", "\n", "# Initialise the source term `b`\n", "b = Function(name='b', grid=grid)\n", diff --git a/examples/cfd/07_cavity_flow.ipynb b/examples/cfd/07_cavity_flow.ipynb index 15bf225c88..de5b61acaa 100644 --- a/examples/cfd/07_cavity_flow.ipynb +++ b/examples/cfd/07_cavity_flow.ipynb @@ -130,7 +130,7 @@ "\n", "u = np.zeros((nx, ny))\n", "v = np.zeros((nx, ny))\n", - "p = np.zeros((nx, ny)) " + "p = np.zeros((nx, ny))" ] }, { @@ -147,9 +147,9 @@ "outputs": [], "source": [ "def build_up_b(b, rho, dt, u, v, dx, dy):\n", - " \n", - " b[1:-1, 1:-1] = (rho * (1 / dt * \n", - " ((u[2:, 1:-1] - u[0:-2, 1:-1]) / \n", + "\n", + " b[1:-1, 1:-1] = (rho * (1 / dt *\n", + " ((u[2:, 1:-1] - u[0:-2, 1:-1]) /\n", " (2 * dx) + (v[1:-1, 2:] - v[1:-1, 0:-2]) / (2 * dy)) -\n", " ((u[2:, 1:-1] - u[0:-2, 1:-1]) / (2 * dx))**2 -\n", " 2 * ((u[1:-1, 2:] - u[1:-1, 0:-2]) / (2 * dy) *\n", @@ -175,21 +175,21 @@ "def pressure_poisson(p, dx, dy, b):\n", " pn = np.empty_like(p)\n", " pn = p.copy()\n", - " \n", + "\n", " for q in range(nit):\n", " pn = p.copy()\n", - " p[1:-1, 1:-1] = (((pn[2:, 1:-1] + pn[0:-2, 1:-1]) * dy**2 + \n", + " p[1:-1, 1:-1] = (((pn[2:, 1:-1] + pn[0:-2, 1:-1]) * dy**2 +\n", " (pn[1:-1, 2:] + pn[1:-1, 0:-2]) * dx**2) /\n", " (2 * (dx**2 + dy**2)) -\n", - " dx**2 * dy**2 / (2 * (dx**2 + dy**2)) * \n", + " dx**2 * dy**2 / (2 * (dx**2 + dy**2)) *\n", " b[1:-1,1:-1])\n", - " \n", + "\n", " p[-1, :] = p[-2, :] # dp/dx = 0 at x = 2\n", " p[:, 0] = p[:, 1] # dp/dy = 0 at y = 0\n", " p[0, :] = p[1, :] # dp/dx = 0 at x = 0\n", " p[:, -1] = p[:, -2] # p = 0 at y = 2\n", - " p[0, 0] = 0 \n", - " \n", + " p[0, 0] = 0\n", + "\n", " return p, pn" ] }, @@ -210,15 +210,15 @@ " un = np.empty_like(u)\n", " vn = np.empty_like(v)\n", " b = np.zeros((nx, ny))\n", - " \n", + "\n", " for n in range(0,nt):\n", " un = u.copy()\n", " vn = v.copy()\n", - " \n", + "\n", " b = build_up_b(b, rho, dt, u, v, dx, dy)\n", " p = pressure_poisson(p, dx, dy, b)[0]\n", " pn = pressure_poisson(p, dx, dy, b)[1]\n", - " \n", + "\n", " u[1:-1, 1:-1] = (un[1:-1, 1:-1]-\n", " un[1:-1, 1:-1] * dt / dx *\n", " (un[1:-1, 1:-1] - un[0:-2, 1:-1]) -\n", @@ -245,12 +245,12 @@ " u[0, :] = 0\n", " u[-1, :] = 0\n", " u[:, -1] = 1 # Set velocity on cavity lid equal to 1\n", - " \n", + "\n", " v[:, 0] = 0\n", " v[:, -1] = 0\n", " v[0, :] = 0\n", " v[-1, :] = 0\n", - " \n", + "\n", " return u, v, p, pn" ] }, @@ -450,8 +450,7 @@ } ], "source": [ - "from devito import TimeFunction, Function, \\\n", - "Eq, solve, Operator, configuration\n", + "from devito import TimeFunction, Eq, solve, Operator, configuration\n", "\n", "# Build Required Functions and derivatives:\n", "# --------------------------------------\n", @@ -476,20 +475,20 @@ "stencil_u =solve(eq_u , u.forward)\n", "stencil_v =solve(eq_v , v.forward)\n", "stencil_p=solve(eq_p, p)\n", - " \n", + "\n", "update_u =Eq(u.forward, stencil_u)\n", "update_v =Eq(v.forward, stencil_v)\n", - "update_p =Eq(p.forward, stencil_p) \n", + "update_p =Eq(p.forward, stencil_p)\n", "\n", "# Boundary Conds. u=v=0 for all sides\n", - "bc_u = [Eq(u[t+1, 0, y], 0)] \n", - "bc_u += [Eq(u[t+1, nx-1, y], 0)] \n", - "bc_u += [Eq(u[t+1, x, 0], 0)] \n", + "bc_u = [Eq(u[t+1, 0, y], 0)]\n", + "bc_u += [Eq(u[t+1, nx-1, y], 0)]\n", + "bc_u += [Eq(u[t+1, x, 0], 0)]\n", "bc_u += [Eq(u[t+1, x, ny-1], 1)] # except u=1 for y=2\n", - "bc_v = [Eq(v[t+1, 0, y], 0)] \n", - "bc_v += [Eq(v[t+1, nx-1, y], 0)] \n", - "bc_v += [Eq(v[t+1, x, ny-1], 0)] \n", - "bc_v += [Eq(v[t+1, x, 0], 0)] \n", + "bc_v = [Eq(v[t+1, 0, y], 0)]\n", + "bc_v += [Eq(v[t+1, nx-1, y], 0)]\n", + "bc_v += [Eq(v[t+1, x, ny-1], 0)]\n", + "bc_v += [Eq(v[t+1, x, 0], 0)]\n", "\n", "bc_p = [Eq(p[t+1, 0, y],p[t+1, 1,y])] # dpn/dx = 0 for x=0.\n", "bc_p += [Eq(p[t+1,nx-1, y],p[t+1,nx-2, y])] # dpn/dx = 0 for x=2.\n", @@ -541,12 +540,12 @@ "#NBVAL_IGNORE_OUTPUT\n", "fig = pyplot.figure(figsize=(11,7), dpi=100)\n", "# Plotting the pressure field as a contour.\n", - "pyplot.contourf(X, Y, p.data[0], alpha=0.5, cmap=cm.viridis) \n", + "pyplot.contourf(X, Y, p.data[0], alpha=0.5, cmap=cm.viridis)\n", "pyplot.colorbar()\n", "# Plotting the pressure field outlines.\n", - "pyplot.contour(X, Y, p.data[0], cmap=cm.viridis) \n", + "pyplot.contour(X, Y, p.data[0], cmap=cm.viridis)\n", "# Plotting velocity field.\n", - "pyplot.quiver(X[::2,::2], Y[::2,::2], u.data[0,::2,::2], v.data[0,::2,::2]) \n", + "pyplot.quiver(X[::2,::2], Y[::2,::2], u.data[0,::2,::2], v.data[0,::2,::2])\n", "pyplot.xlabel('X')\n", "pyplot.ylabel('Y');\n" ] diff --git a/examples/cfd/08_shallow_water_equation.ipynb b/examples/cfd/08_shallow_water_equation.ipynb index 090d01d934..60610c2cd6 100644 --- a/examples/cfd/08_shallow_water_equation.ipynb +++ b/examples/cfd/08_shallow_water_equation.ipynb @@ -112,9 +112,9 @@ " and is responsible for saving the snapshots required for the following\n", " animations.\n", " \"\"\"\n", - " \n", + "\n", " eps = np.finfo(grid.dtype).eps\n", - " \n", + "\n", " # Friction term expresses the loss of amplitude from the friction with the seafloor\n", " frictionTerm = g * alpha**2 * sqrt(M**2 + N**2) / D**(7./3.)\n", "\n", @@ -152,7 +152,6 @@ "outputs": [], "source": [ "from IPython.display import HTML, display\n", - "import matplotlib.pyplot as plt\n", "import matplotlib.animation as animation\n", "\n", "\n", @@ -163,7 +162,7 @@ "\n", " plt.xlabel('x')\n", " plt.ylabel('z')\n", - " plt.title(title) \n", + " plt.title(title)\n", "\n", " def update(i):\n", " matrice.set_array(eta.data[i, :, :].T)\n", diff --git a/examples/cfd/09_Darcy_flow_equation.ipynb b/examples/cfd/09_Darcy_flow_equation.ipynb index 7a6189c6a1..a4efc75a1f 100644 --- a/examples/cfd/09_Darcy_flow_equation.ipynb +++ b/examples/cfd/09_Darcy_flow_equation.ipynb @@ -118,7 +118,7 @@ "\n", " coeff = np.random.randn(N, *self.size)\n", " coeff = self.sqrt_eig * coeff\n", - " \n", + "\n", "\n", " return fft.ifftn(coeff).real" ] @@ -143,7 +143,7 @@ "# Silence the runtime performance logging\n", "configuration['log-level'] = 'ERROR'\n", "\n", - "# Number of grid points on [0,1]^2 \n", + "# Number of grid points on [0,1]^2\n", "s = 256\n", "\n", "# Create s x s grid with spacing 1\n", @@ -258,7 +258,7 @@ }, "outputs": [], "source": [ - "# Forcing function, f(x) = 1 \n", + "# Forcing function, f(x) = 1\n", "f = np.ones((s, s))\n", "\n", "# Create function on grid\n", @@ -374,16 +374,16 @@ " The forcing function f(x) = 1\n", " '''\n", "def darcy_flow_2d(perm, f):\n", - " \n", + "\n", " # a(x) is the coefficients\n", " # f is the forcing function\n", " # initialize a, f with inputs permeability and forcing\n", " f1.data[:] = f[:]\n", " initialize_function(a, perm, 0)\n", - " \n", + "\n", " # call operator for the 15,000th pseudo-timestep\n", " op(time= 15000)\n", - " \n", + "\n", " return np.array(u.data[0])" ] }, @@ -458,7 +458,7 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "# plot to show the output: \n", + "# plot to show the output:\n", "ax1 = plt.subplot(221)\n", "ax2 = plt.subplot(222)\n", "ax3 = plt.subplot(212)\n", diff --git a/examples/cfd/example_diffusion.py b/examples/cfd/example_diffusion.py index cd9cffc6b2..4acdcdeeca 100644 --- a/examples/cfd/example_diffusion.py +++ b/examples/cfd/example_diffusion.py @@ -29,7 +29,7 @@ def ring_initial(spacing=0.01): np.linspace(0., 1., ny, dtype=np.float32)) ui = np.zeros((nx, ny), dtype=np.float32) r = (xx - .5)**2. + (yy - .5)**2. - ui[np.logical_and(.05 <= r, r <= .1)] = 1. + ui[np.logical_and(r >= .05, r <= .1)] = 1. return ui diff --git a/examples/compiler/02_indexification.ipynb b/examples/compiler/02_indexification.ipynb index b997d49c18..793d8b008f 100644 --- a/examples/compiler/02_indexification.ipynb +++ b/examples/compiler/02_indexification.ipynb @@ -272,7 +272,7 @@ } ], "source": [ - "a.function is b.function " + "a.function is b.function" ] }, { diff --git a/examples/compiler/04_iet-B.ipynb b/examples/compiler/04_iet-B.ipynb index e0da83cdff..5f49f72e78 100644 --- a/examples/compiler/04_iet-B.ipynb +++ b/examples/compiler/04_iet-B.ipynb @@ -70,11 +70,11 @@ "symbs = {'a': Scalar(name='a'),\n", " 'b': Constant(name='b'),\n", " 'c': Array(name='c', shape=(3,), dimensions=(dims['i'],)).indexify(),\n", - " 'd': Array(name='d', \n", - " shape=(3,3), \n", + " 'd': Array(name='d',\n", + " shape=(3,3),\n", " dimensions=(dims['j'],dims['k'])).indexify(),\n", - " 'e': Function(name='e', \n", - " shape=(3,3,3), \n", + " 'e': Function(name='e',\n", + " shape=(3,3,3),\n", " dimensions=(dims['t0'],dims['t1'],dims['i'])).indexify(),\n", " 'f': TimeFunction(name='f', grid=grid).indexify()}\n", "symbs" @@ -198,7 +198,7 @@ " # for k\n", " # expr0\n", " return iters[0](iters[1](iters[2](exprs[0])))\n", - " \n", + "\n", "def get_block2(exprs, iters):\n", " # Non-perfect simple loop nest:\n", " # for i\n", diff --git a/examples/finance/bs_ivbp.ipynb b/examples/finance/bs_ivbp.ipynb index e59d6ec2b0..3b1970ed92 100644 --- a/examples/finance/bs_ivbp.ipynb +++ b/examples/finance/bs_ivbp.ipynb @@ -36,14 +36,11 @@ } ], "source": [ - "from devito import (Eq, Grid, TimeFunction, Operator, solve, Constant, \n", - " SpaceDimension, configuration, SubDomain, centered)\n", + "from devito import (Eq, Grid, TimeFunction, Operator, solve, Constant,\n", + " SpaceDimension, configuration, centered)\n", "\n", - "from mpl_toolkits.mplot3d import Axes3D\n", - "from mpl_toolkits.mplot3d.axis3d import Axis\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", - "from matplotlib import cm\n", "\n", "from sympy.stats import Normal, cdf\n", "import numpy as np\n", @@ -94,7 +91,7 @@ "dt0 = 0.0005\n", "ds0 = 1.0\n", "nt = (int)(tmax / dt0) + 1\n", - "ns = int((smax - smin) / ds0) + 1 \n", + "ns = int((smax - smin) / ds0) + 1\n", "\n", "shape = (ns, )\n", "origin =(smin, )\n", @@ -263,7 +260,7 @@ "\n", "# Run our operators\n", "startDevito = timer.time()\n", - " \n", + "\n", "# Apply operator\n", "op.apply(dt=dt0)\n", "\n", @@ -408,7 +405,6 @@ "source": [ "#NBVAL_IGNORE_OUTPUT\n", "\n", - "from mpl_toolkits.mplot3d import Axes3D\n", "\n", "# Trim the padding off smin and smax\n", "trim_data = v.data[:, padding:-padding]\n", @@ -497,14 +493,14 @@ "source": [ "#NBVAL_IGNORE_OUTPUT\n", "\n", - "# Derived formula for Black Scholes call from \n", + "# Derived formula for Black Scholes call from\n", "# https://aaronschlegel.me/black-scholes-formula-python.html\n", "def call_value_bs(S, K, T, r, sigma):\n", " N = Normal('x', 0.0, 1.0)\n", - " \n", + "\n", " d1 = (np.log(S / K) + (r + 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))\n", " d2 = (np.log(S / K) + (r - 0.5 * sigma ** 2) * T) / (sigma * np.sqrt(T))\n", - " \n", + "\n", " call = (S * cdf(N)(d1) - K * np.exp(-r * T) * cdf(N)(d2))\n", " return call\n", "\n", @@ -524,7 +520,7 @@ "\n", "print(\"devito pde timesteps: %12.6s, %12.6fs runtime\" % (nt-1, endDevito - startDevito))\n", "print(\"call_value_bs timesteps: %12.6s, %12.6fs runtime\" % (len(time), endBF - startBF))\n", - " \n", + "\n", "s2 = np.linspace(smin, smax, shape[0])\n", "plt.figure(figsize=(12,10))\n", "\n", @@ -600,7 +596,7 @@ "\n", " rms = np.sqrt(np.float64(l2 / len(x_range)))\n", " vals.append(rms)\n", - " \n", + "\n", "plt.figure(figsize=(12,10))\n", "plt.plot(t_range, np.array(vals))" ] diff --git a/examples/misc/linalg.py b/examples/misc/linalg.py index fbe226940f..45aadfb41e 100644 --- a/examples/misc/linalg.py +++ b/examples/misc/linalg.py @@ -3,8 +3,13 @@ from devito import Inc, Operator, Function, dimensions, info from devito.tools import as_tuple -__all__ = ['mat_vec', 'transpose_mat_vec', 'mat_mat', 'mat_mat_sum', - 'chain_contractions'] +__all__ = [ + 'chain_contractions', + 'mat_mat', + 'mat_mat_sum', + 'mat_vec', + 'transpose_mat_vec', +] @click.group(chain=True) diff --git a/examples/performance/01_gpu.ipynb b/examples/performance/01_gpu.ipynb index 2bf4a3eeaf..54eeb2e9fc 100644 --- a/examples/performance/01_gpu.ipynb +++ b/examples/performance/01_gpu.ipynb @@ -18,7 +18,7 @@ "# Some imports we will need below\n", "import numpy as np\n", "from devito import *\n", - "import matplotlib.pyplot as plt \n", + "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, @@ -123,7 +123,7 @@ " np.linspace(0., 1., ny, dtype=np.float32))\n", "r = (xx - .5)**2. + (yy - .5)**2.\n", "# Inserting the ring\n", - "u.data[0, np.logical_and(.05 <= r, r <= .1)] = 1." + "u.data[0, np.logical_and(r >= .05, r <= .1)] = 1." ] }, { @@ -204,7 +204,7 @@ "# We also need the `gpu-fit` option to tell Devito that `u` will definitely\n", "# fit in the GPU memory. This is necessary every time a TimeFunction with\n", "# `save != None` is used. Otherwise, Devito could generate code such that\n", - "# `u` gets streamed between the CPU and the GPU, but for this advanced \n", + "# `u` gets streamed between the CPU and the GPU, but for this advanced\n", "# feature you will need `devitopro`.\n", "op = Operator([step], platform='nvidiaX', opt=('advanced', {'gpu-fit': u}))" ] diff --git a/examples/performance/utils.py b/examples/performance/utils.py index 82e3294d46..c941f889fb 100644 --- a/examples/performance/utils.py +++ b/examples/performance/utils.py @@ -1,6 +1,6 @@ import difflib -__all__ = ['unidiff_output', 'print_kernel'] +__all__ = ['print_kernel', 'unidiff_output'] def unidiff_output(expected, actual): diff --git a/examples/seismic/abc_methods/01_introduction.ipynb b/examples/seismic/abc_methods/01_introduction.ipynb index 526c485eba..1d3b94f8e4 100644 --- a/examples/seismic/abc_methods/01_introduction.ipynb +++ b/examples/seismic/abc_methods/01_introduction.ipynb @@ -190,8 +190,7 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plot\n", - "import math as mt\n", - "import matplotlib.ticker as mticker \n", + "import matplotlib.ticker as mticker\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "from matplotlib import cm" ] @@ -248,11 +247,11 @@ "nptx = 101\n", "nptz = 101\n", "x0 = 0.\n", - "x1 = 1000. \n", + "x1 = 1000.\n", "compx = x1-x0\n", "z0 = 0.\n", "z1 = 1000.\n", - "compz = z1-z0;\n", + "compz = z1-z0\n", "hx = (x1-x0)/(nptx-1)\n", "hz = (z1-z0)/(nptz-1)" ] @@ -333,10 +332,10 @@ "metadata": {}, "outputs": [], "source": [ - "v0 = np.zeros((nptx,nptz)) \n", - "p0 = 0 \n", + "v0 = np.zeros((nptx,nptz))\n", + "p0 = 0\n", "p1 = int((1/2)*nptz)\n", - "p2 = nptz \n", + "p2 = nptz\n", "v0[0:nptx,p0:p1] = 1.5\n", "v0[0:nptx,p1:p2] = 2.5" ] @@ -435,9 +434,9 @@ "outputs": [], "source": [ "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "CFL = 0.4\n", - "vmax = np.amax(v0) \n", + "vmax = np.amax(v0)\n", "dtmax = np.float64((min(hx,hz)*CFL)/(vmax))\n", "ntmax = int((tn-t0)/dtmax)+1\n", "dt0 = np.float64((tn-t0)/ntmax)" @@ -488,8 +487,8 @@ "metadata": {}, "outputs": [], "source": [ - "(hxs,hzs) = grid.spacing_map \n", - "(x, z) = grid.dimensions \n", + "(hxs,hzs) = grid.spacing_map\n", + "(x, z) = grid.dimensions\n", "t = grid.stepping_dim\n", "dt = grid.stepping_dim.spacing" ] @@ -945,7 +944,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2d(U): \n", + "def graph2d(U):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(3)\n", @@ -1023,7 +1022,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2drec(rec): \n", + "def graph2drec(rec):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscaled = 1/10**(3)\n", diff --git a/examples/seismic/abc_methods/02_damping.ipynb b/examples/seismic/abc_methods/02_damping.ipynb index bff4447bc5..60114f8991 100644 --- a/examples/seismic/abc_methods/02_damping.ipynb +++ b/examples/seismic/abc_methods/02_damping.ipynb @@ -150,8 +150,7 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plot\n", - "import math as mt\n", - "import matplotlib.ticker as mticker \n", + "import matplotlib.ticker as mticker\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "from matplotlib import cm" ] @@ -194,11 +193,11 @@ "nptx = 101\n", "nptz = 101\n", "x0 = 0.\n", - "x1 = 1000. \n", + "x1 = 1000.\n", "compx = x1-x0\n", "z0 = 0.\n", "z1 = 1000.\n", - "compz = z1-z0;\n", + "compz = z1-z0\n", "hxv = (x1-x0)/(nptx-1)\n", "hzv = (z1-z0)/(nptz-1)" ] @@ -393,32 +392,32 @@ "metadata": {}, "outputs": [], "source": [ - "v0 = np.zeros((nptx,nptz)) \n", + "v0 = np.zeros((nptx,nptz))\n", "X0 = np.linspace(x0,x1,nptx)\n", "Z0 = np.linspace(z0,z1,nptz)\n", - " \n", + "\n", "x10 = x0+lx\n", "x11 = x1-lx\n", - " \n", + "\n", "z10 = z0\n", "z11 = z1 - lz\n", "\n", "xm = 0.5*(x10+x11)\n", "zm = 0.5*(z10+z11)\n", - " \n", + "\n", "pxm = 0\n", "pzm = 0\n", - " \n", + "\n", "for i in range(0,nptx):\n", " if(X0[i]==xm): pxm = i\n", - " \n", + "\n", "for j in range(0,nptz):\n", " if(Z0[j]==zm): pzm = j\n", - " \n", - "p0 = 0 \n", + "\n", + "p0 = 0\n", "p1 = pzm\n", "p2 = nptz\n", - " \n", + "\n", "v0[0:nptx,p0:p1] = 1.5\n", "v0[0:nptx,p1:p2] = 2.5" ] @@ -507,9 +506,9 @@ "outputs": [], "source": [ "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "CFL = 0.4\n", - "vmax = np.amax(v0) \n", + "vmax = np.amax(v0)\n", "dtmax = np.float64((min(hxv,hzv)*CFL)/(vmax))\n", "ntmax = int((tn-t0)/dtmax)+1\n", "dt0 = np.float64((tn-t0)/ntmax)" @@ -545,8 +544,8 @@ "metadata": {}, "outputs": [], "source": [ - "(hx,hz) = grid.spacing_map \n", - "(x, z) = grid.dimensions \n", + "(hx,hz) = grid.spacing_map\n", + "(x, z) = grid.dimensions\n", "t = grid.stepping_dim\n", "dt = grid.stepping_dim.spacing" ] @@ -724,10 +723,10 @@ "metadata": {}, "outputs": [], "source": [ - "x0pml = x0 + npmlx*hxv \n", - "x1pml = x1 - npmlx*hxv \n", - "z0pml = z0 \n", - "z1pml = z1 - npmlz*hzv " + "x0pml = x0 + npmlx*hxv\n", + "x1pml = x1 - npmlx*hxv\n", + "z0pml = z0\n", + "z1pml = z1 - npmlz*hzv" ] }, { @@ -754,7 +753,7 @@ "\n", " quibar = 1.5*np.log(1.0/0.001)/(40)\n", " cte = 1./vmax\n", - " \n", + "\n", " a = np.where(x<=x0pml,(np.abs(x-x0pml)/lx),np.where(x>=x1pml,(np.abs(x-x1pml)/lx),0.))\n", " b = np.where(z<=z0pml,(np.abs(z-z0pml)/lz),np.where(z>=z1pml,(np.abs(z-z1pml)/lz),0.))\n", " adamp = quibar*(a-(1./(2.*np.pi))*np.sin(2.*np.pi*a))/hxv\n", @@ -778,13 +777,13 @@ "outputs": [], "source": [ "def generatemdamp():\n", - " \n", - " X0 = np.linspace(x0,x1,nptx) \n", - " Z0 = np.linspace(z0,z1,nptz) \n", - " X0grid,Z0grid = np.meshgrid(X0,Z0) \n", - " D0 = np.zeros((nptx,nptz)) \n", + "\n", + " X0 = np.linspace(x0,x1,nptx)\n", + " Z0 = np.linspace(z0,z1,nptz)\n", + " X0grid,Z0grid = np.meshgrid(X0,Z0)\n", + " D0 = np.zeros((nptx,nptz))\n", " D0 = np.transpose(fdamp(X0grid,Z0grid))\n", - " \n", + "\n", " return D0" ] }, @@ -817,7 +816,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2damp(D): \n", + "def graph2damp(D):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(-3)\n", @@ -1076,7 +1075,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2d(U): \n", + "def graph2d(U):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(3)\n", @@ -1141,7 +1140,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2drec(rec): \n", + "def graph2drec(rec):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscaled = 1/10**(3)\n", diff --git a/examples/seismic/abc_methods/03_pml.ipynb b/examples/seismic/abc_methods/03_pml.ipynb index 6fff176e8d..3be3fc9deb 100644 --- a/examples/seismic/abc_methods/03_pml.ipynb +++ b/examples/seismic/abc_methods/03_pml.ipynb @@ -155,8 +155,7 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plot\n", - "import math as mt\n", - "import matplotlib.ticker as mticker \n", + "import matplotlib.ticker as mticker\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "from matplotlib import cm" ] @@ -197,7 +196,7 @@ "nptx = 101\n", "nptz = 101\n", "x0 = 0.\n", - "x1 = 1000. \n", + "x1 = 1000.\n", "compx = x1-x0\n", "z0 = 0.\n", "z1 = 1000.\n", @@ -393,32 +392,32 @@ "v1 = np.zeros((nptx-1,nptz-1))\n", "X0 = np.linspace(x0,x1,nptx)\n", "Z0 = np.linspace(z0,z1,nptz)\n", - " \n", + "\n", "x10 = x0+lx\n", "x11 = x1-lx\n", - " \n", + "\n", "z10 = z0\n", "z11 = z1 - lz\n", "\n", "xm = 0.5*(x10+x11)\n", "zm = 0.5*(z10+z11)\n", - " \n", + "\n", "pxm = 0\n", "pzm = 0\n", - " \n", + "\n", "for i in range(0,nptx):\n", " if(X0[i]==xm): pxm = i\n", - " \n", + "\n", "for j in range(0,nptz):\n", " if(Z0[j]==zm): pzm = j\n", - " \n", - "p0 = 0 \n", + "\n", + "p0 = 0\n", "p1 = pzm\n", "p2 = nptz\n", "v0[0:nptx,p0:p1] = 1.5\n", "v0[0:nptx,p1:p2] = 2.5\n", "\n", - "p0 = 0 \n", + "p0 = 0\n", "p1 = pzm\n", "p2 = nptz-1\n", "v1[0:nptx-1,p0:p1] = 1.5\n", @@ -509,9 +508,9 @@ "outputs": [], "source": [ "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "CFL = 0.4\n", - "vmax = np.amax(v0) \n", + "vmax = np.amax(v0)\n", "dtmax = np.float64((min(hxv,hzv)*CFL)/(vmax))\n", "ntmax = int((tn-t0)/dtmax)+1\n", "dt0 = np.float64((tn-t0)/ntmax)" @@ -540,8 +539,8 @@ "metadata": {}, "outputs": [], "source": [ - "(hx,hz) = grid.spacing_map \n", - "(x, z) = grid.dimensions \n", + "(hx,hz) = grid.spacing_map\n", + "(x, z) = grid.dimensions\n", "t = grid.stepping_dim\n", "dt = grid.stepping_dim.spacing" ] @@ -765,10 +764,10 @@ "metadata": {}, "outputs": [], "source": [ - "x0pml = x0 + npmlx*hxv \n", - "x1pml = x1 - npmlx*hxv \n", - "z0pml = z0 \n", - "z1pml = z1 - npmlz*hzv " + "x0pml = x0 + npmlx*hxv\n", + "x1pml = x1 - npmlx*hxv\n", + "z0pml = z0\n", + "z1pml = z1 - npmlz*hzv" ] }, { @@ -785,16 +784,16 @@ "outputs": [], "source": [ "def fdamp(x,z,i):\n", - " \n", + "\n", " quibar = 0.05\n", - " \n", + "\n", " if(i==1):\n", " a = np.where(x<=x0pml,(np.abs(x-x0pml)/lx),np.where(x>=x1pml,(np.abs(x-x1pml)/lx),0.))\n", " fdamp = quibar*(a-(1./(2.*np.pi))*np.sin(2.*np.pi*a))\n", " if(i==2):\n", " a = np.where(z<=z0pml,(np.abs(z-z0pml)/lz),np.where(z>=z1pml,(np.abs(z-z1pml)/lz),0.))\n", " fdamp = quibar*(a-(1./(2.*np.pi))*np.sin(2.*np.pi*a))\n", - " \n", + "\n", " return fdamp" ] }, @@ -816,25 +815,25 @@ "outputs": [], "source": [ "def generatemdamp():\n", - " \n", - " X0 = np.linspace(x0,x1,nptx) \n", + "\n", + " X0 = np.linspace(x0,x1,nptx)\n", " Z0 = np.linspace(z0,z1,nptz)\n", " X0grid,Z0grid = np.meshgrid(X0,Z0)\n", " X1 = np.linspace((x0+0.5*hxv),(x1-0.5*hxv),nptx-1)\n", " Z1 = np.linspace((z0+0.5*hzv),(z1-0.5*hzv),nptz-1)\n", " X1grid,Z1grid = np.meshgrid(X1,Z1)\n", - " \n", + "\n", " D01 = np.zeros((nptx,nptz))\n", " D02 = np.zeros((nptx,nptz))\n", " D11 = np.zeros((nptx,nptz))\n", " D12 = np.zeros((nptx,nptz))\n", - " \n", + "\n", " D01 = np.transpose(fdamp(X0grid,Z0grid,1))\n", " D02 = np.transpose(fdamp(X0grid,Z0grid,2))\n", - " \n", + "\n", " D11 = np.transpose(fdamp(X1grid,Z1grid,1))\n", " D12 = np.transpose(fdamp(X1grid,Z1grid,2))\n", - " \n", + "\n", " return D01, D02, D11, D12" ] }, @@ -860,7 +859,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2damp(D): \n", + "def graph2damp(D):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(-3)\n", @@ -1057,23 +1056,23 @@ "outputs": [], "source": [ "# White Region\n", - "pde01 = Eq(u.dt2-u.laplace*vel0**2) \n", + "pde01 = Eq(u.dt2-u.laplace*vel0**2)\n", "\n", "# Blue Region\n", - "pde02a = u.dt2 + (dampx0+dampz0)*u.dtc + (dampx0*dampz0)*u - u.laplace*vel0*vel0 \n", + "pde02a = u.dt2 + (dampx0+dampz0)*u.dtc + (dampx0*dampz0)*u - u.laplace*vel0*vel0\n", "pde02b = - (0.5/hx)*(phi1[t,x,z-1]+phi1[t,x,z]-phi1[t,x-1,z-1]-phi1[t,x-1,z])\n", "pde02c = - (0.5/hz)*(phi2[t,x-1,z]+phi2[t,x,z]-phi2[t,x-1,z-1]-phi2[t,x,z-1])\n", "pde02 = Eq(pde02a + pde02b + pde02c)\n", "\n", "pde10 = phi1.dt + dampx1*0.5*(phi1.forward+phi1)\n", - "a1 = u[t+1,x+1,z] + u[t+1,x+1,z+1] - u[t+1,x,z] - u[t+1,x,z+1] \n", - "a2 = u[t,x+1,z] + u[t,x+1,z+1] - u[t,x,z] - u[t,x,z+1] \n", + "a1 = u[t+1,x+1,z] + u[t+1,x+1,z+1] - u[t+1,x,z] - u[t+1,x,z+1]\n", + "a2 = u[t,x+1,z] + u[t,x+1,z+1] - u[t,x,z] - u[t,x,z+1]\n", "pde11 = -(dampz1-dampx1)*0.5*(0.5/hx)*(a1+a2)*vel1**2\n", "pde1 = Eq(pde10+pde11)\n", - " \n", - "pde20 = phi2.dt + dampz1*0.5*(phi2.forward+phi2) \n", - "b1 = u[t+1,x,z+1] + u[t+1,x+1,z+1] - u[t+1,x,z] - u[t+1,x+1,z] \n", - "b2 = u[t,x,z+1] + u[t,x+1,z+1] - u[t,x,z] - u[t,x+1,z] \n", + "\n", + "pde20 = phi2.dt + dampz1*0.5*(phi2.forward+phi2)\n", + "b1 = u[t+1,x,z+1] + u[t+1,x+1,z+1] - u[t+1,x,z] - u[t+1,x+1,z]\n", + "b2 = u[t,x,z+1] + u[t,x+1,z+1] - u[t,x,z] - u[t,x+1,z]\n", "pde21 = -(dampx1-dampz1)*0.5*(0.5/hz)*(b1+b2)*vel1**2\n", "pde2 = Eq(pde20+pde21)" ] @@ -1245,7 +1244,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2d(U): \n", + "def graph2d(U):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(3)\n", @@ -1310,7 +1309,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2drec(rec): \n", + "def graph2drec(rec):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscaled = 1/10**(3)\n", diff --git a/examples/seismic/abc_methods/04_habc.ipynb b/examples/seismic/abc_methods/04_habc.ipynb index 607c0dbe3f..cf338f8fba 100644 --- a/examples/seismic/abc_methods/04_habc.ipynb +++ b/examples/seismic/abc_methods/04_habc.ipynb @@ -204,8 +204,7 @@ "\n", "import numpy as np\n", "import matplotlib.pyplot as plot\n", - "import math as mt\n", - "import matplotlib.ticker as mticker \n", + "import matplotlib.ticker as mticker\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "from matplotlib import cm" ] @@ -229,7 +228,6 @@ "from examples.seismic import TimeAxis\n", "from examples.seismic import RickerSource\n", "from examples.seismic import Receiver\n", - "from examples.seismic import plot_velocity\n", "from devito import SubDomain, Grid, NODE, TimeFunction, Function, Eq, solve, Operator" ] }, @@ -249,11 +247,11 @@ "nptx = 101\n", "nptz = 101\n", "x0 = 0.\n", - "x1 = 1000. \n", + "x1 = 1000.\n", "compx = x1-x0\n", "z0 = 0.\n", "z1 = 1000.\n", - "compz = z1-z0;\n", + "compz = z1-z0\n", "hxv = (x1-x0)/(nptx-1)\n", "hzv = (z1-z0)/(nptz-1)" ] @@ -440,32 +438,32 @@ "metadata": {}, "outputs": [], "source": [ - "v0 = np.zeros((nptx,nptz)) \n", + "v0 = np.zeros((nptx,nptz))\n", "X0 = np.linspace(x0,x1,nptx)\n", "Z0 = np.linspace(z0,z1,nptz)\n", - " \n", + "\n", "x10 = x0+lx\n", "x11 = x1-lx\n", - " \n", + "\n", "z10 = z0\n", "z11 = z1 - lz\n", "\n", "xm = 0.5*(x10+x11)\n", "zm = 0.5*(z10+z11)\n", - " \n", + "\n", "pxm = 0\n", "pzm = 0\n", - " \n", + "\n", "for i in range(0,nptx):\n", " if(X0[i]==xm): pxm = i\n", - " \n", + "\n", "for j in range(0,nptz):\n", " if(Z0[j]==zm): pzm = j\n", - " \n", - "p0 = 0 \n", + "\n", + "p0 = 0\n", "p1 = pzm\n", "p2 = nptz\n", - " \n", + "\n", "v0[0:nptx,p0:p1] = 1.5\n", "v0[0:nptx,p1:p2] = 2.5" ] @@ -554,9 +552,9 @@ "outputs": [], "source": [ "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "CFL = 0.4\n", - "vmax = np.amax(v0) \n", + "vmax = np.amax(v0)\n", "dtmax = np.float64((min(hxv,hzv)*CFL)/(vmax))\n", "ntmax = int((tn-t0)/dtmax)+1\n", "dt0 = np.float64((tn-t0)/ntmax)" @@ -592,8 +590,8 @@ "metadata": {}, "outputs": [], "source": [ - "(hx,hz) = grid.spacing_map \n", - "(x, z) = grid.dimensions \n", + "(hx,hz) = grid.spacing_map\n", + "(x, z) = grid.dimensions\n", "t = grid.stepping_dim\n", "dt = grid.stepping_dim.spacing" ] @@ -758,69 +756,69 @@ "outputs": [], "source": [ "def generateweights():\n", - " \n", + "\n", " weightsx = np.zeros(npmlx)\n", " weightsz = np.zeros(npmlz)\n", " Mweightsx = np.zeros((nptx,nptz))\n", " Mweightsz = np.zeros((nptx,nptz))\n", - " \n", + "\n", " if(habcw==1):\n", - " \n", + "\n", " for i in range(0,npmlx):\n", " weightsx[i] = (npmlx-i)/(npmlx)\n", - " \n", + "\n", " for i in range(0,npmlz):\n", " weightsz[i] = (npmlz-i)/(npmlz)\n", - " \n", + "\n", " if(habcw==2):\n", - " \n", + "\n", " mx = 2\n", " mz = 2\n", - " \n", + "\n", " if(habctype==3):\n", - " \n", - " alphax = 1.0 + 0.15*(npmlx-mx) \n", + "\n", + " alphax = 1.0 + 0.15*(npmlx-mx)\n", " alphaz = 1.0 + 0.15*(npmlz-mz)\n", - " \n", + "\n", " else:\n", - " \n", - " alphax = 1.5 + 0.07*(npmlx-mx) \n", + "\n", + " alphax = 1.5 + 0.07*(npmlx-mx)\n", " alphaz = 1.5 + 0.07*(npmlz-mz)\n", - " \n", + "\n", " for i in range(0,npmlx):\n", - " \n", + "\n", " if(0<=i<=(mx)):\n", " weightsx[i] = 1\n", " elif((mx+1)<=i<=npmlx-1):\n", " weightsx[i] = ((npmlx-i)/(npmlx-mx))**(alphax)\n", " else:\n", " weightsx[i] = 0\n", - " \n", + "\n", " for i in range(0,npmlz):\n", - " \n", + "\n", " if(0<=i<=(mz)):\n", " weightsz[i] = 1\n", " elif((mz+1)<=i<=npmlz-1):\n", " weightsz[i] = ((npmlz-i)/(npmlz-mz))**(alphaz)\n", " else:\n", " weightsz[i] = 0\n", - " \n", + "\n", " for k in range(0,npmlx):\n", - " \n", + "\n", " ai = k\n", - " af = nptx - k - 1 \n", + " af = nptx - k - 1\n", " bi = 0\n", " bf = nptz - k\n", " Mweightsx[ai,bi:bf] = weightsx[k]\n", " Mweightsx[af,bi:bf] = weightsx[k]\n", - " \n", + "\n", " for k in range(0,npmlz):\n", - " \n", + "\n", " ai = k\n", - " af = nptx - k \n", - " bf = nptz - k - 1 \n", + " af = nptx - k\n", + " bf = nptz - k - 1\n", " Mweightsz[ai:af,bf] = weightsz[k]\n", - " \n", + "\n", " return Mweightsx,Mweightsz" ] }, @@ -853,7 +851,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2dweight(D): \n", + "def graph2dweight(D):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(-3)\n", @@ -1116,10 +1114,10 @@ "outputs": [], "source": [ "if(habctype==2):\n", - " \n", + "\n", " # Region B_{1}\n", " cte11 = (1/(2*dt**2)) + (1/(2*dt*hx))*vel[x,z]\n", - " cte21 = -(1/(2*dt**2)) + (1/(2*dt*hx))*vel[x,z] - (1/(2*hz**2))*vel[x,z]*vel[x,z] \n", + " cte21 = -(1/(2*dt**2)) + (1/(2*dt*hx))*vel[x,z] - (1/(2*hz**2))*vel[x,z]*vel[x,z]\n", " cte31 = -(1/(2*dt**2)) - (1/(2*dt*hx))*vel[x,z]\n", " cte41 = (1/(dt**2))\n", " cte51 = (1/(4*hz**2))*vel[x,z]**2\n", @@ -1127,14 +1125,14 @@ " aux1 = (cte21*(u3[x+1,z] + u1[x,z]) + cte31*u1[x+1,z] + cte41*(u2[x,z]+u2[x+1,z]) + cte51*(u3[x+1,z+1] + u3[x+1,z-1] + u1[x,z+1] + u1[x,z-1]))/cte11\n", " pde1 = (1-weightsx[x,z])*u3[x,z] + weightsx[x,z]*aux1\n", " stencil1 = Eq(u.forward,pde1,subdomain = grid.subdomains['d1'])\n", - " \n", + "\n", " # Region B_{3}\n", " cte12 = (1/(2*dt**2)) + (1/(2*dt*hx))*vel[x,z]\n", " cte22 = -(1/(2*dt**2)) + (1/(2*dt*hx))*vel[x,z] - (1/(2*hz**2))*vel[x,z]**2\n", " cte32 = -(1/(2*dt**2)) - (1/(2*dt*hx))*vel[x,z]\n", " cte42 = (1/(dt**2))\n", " cte52 = (1/(4*hz**2))*vel[x,z]*vel[x,z]\n", - " \n", + "\n", " aux2 = (cte22*(u3[x-1,z] + u1[x,z]) + cte32*u1[x-1,z] + cte42*(u2[x,z]+u2[x-1,z]) + cte52*(u3[x-1,z+1] + u3[x-1,z-1] + u1[x,z+1] + u1[x,z-1]))/cte12\n", " pde2 = (1-weightsx[x,z])*u3[x,z] + weightsx[x,z]*aux2\n", " stencil2 = Eq(u.forward,pde2,subdomain = grid.subdomains['d2'])\n", @@ -1151,26 +1149,26 @@ " stencil3 = Eq(u.forward,pde3,subdomain = grid.subdomains['d3'])\n", "\n", " # Red point rigth side\n", - " stencil4 = [Eq(u[t+1,nptx-1-k,nptz-1-k],(1-weightsz[nptx-1-k,nptz-1-k])*u3[nptx-1-k,nptz-1-k] + \n", - " weightsz[nptx-1-k,nptz-1-k]*(((-(1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-1-k,nptz-2-k] \n", - " + ((1/(4*hx)) - (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-2-k,nptz-1-k] \n", - " + ((1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-2-k,nptz-2-k] \n", - " + (-(1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-1-k,nptz-1-k] \n", - " + (-(1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-1-k,nptz-2-k] \n", - " + ((1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-2-k,nptz-1-k] \n", + " stencil4 = [Eq(u[t+1,nptx-1-k,nptz-1-k],(1-weightsz[nptx-1-k,nptz-1-k])*u3[nptx-1-k,nptz-1-k] +\n", + " weightsz[nptx-1-k,nptz-1-k]*(((-(1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-1-k,nptz-2-k]\n", + " + ((1/(4*hx)) - (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-2-k,nptz-1-k]\n", + " + ((1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u3[nptx-2-k,nptz-2-k]\n", + " + (-(1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-1-k,nptz-1-k]\n", + " + (-(1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-1-k,nptz-2-k]\n", + " + ((1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-2-k,nptz-1-k]\n", " + ((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))*u2[nptx-2-k,nptz-2-k])\n", - " / (((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt))))) for k in range(0,npmlz)] \n", + " / ((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[nptx-1-k,nptz-1-k]*dt)))) for k in range(0,npmlz)]\n", "\n", " # Red point left side\n", - " stencil5 = [Eq(u[t+1,k,nptz-1-k],(1-weightsx[k,nptz-1-k] )*u3[k,nptz-1-k] \n", - " + weightsx[k,nptz-1-k]*(( (-(1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k,nptz-2-k] \n", - " + ((1/(4*hx)) - (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k+1,nptz-1-k] \n", - " + ((1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k+1,nptz-2-k] \n", - " + (-(1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k,nptz-1-k] \n", - " + (-(1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k,nptz-2-k] \n", - " + ((1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k+1,nptz-1-k] \n", + " stencil5 = [Eq(u[t+1,k,nptz-1-k],(1-weightsx[k,nptz-1-k] )*u3[k,nptz-1-k]\n", + " + weightsx[k,nptz-1-k]*(( (-(1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k,nptz-2-k]\n", + " + ((1/(4*hx)) - (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k+1,nptz-1-k]\n", + " + ((1/(4*hx)) + (1/(4*hz)) - (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u3[k+1,nptz-2-k]\n", + " + (-(1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k,nptz-1-k]\n", + " + (-(1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k,nptz-2-k]\n", + " + ((1/(4*hx)) - (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k+1,nptz-1-k]\n", " + ((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))*u2[k+1,nptz-2-k])\n", - " / (((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt))))) for k in range(0,npmlx)]" + " / ((1/(4*hx)) + (1/(4*hz)) + (np.sqrt(2))/(4*vel[k,nptz-1-k]*dt)))) for k in range(0,npmlx)]" ] }, { @@ -1200,23 +1198,23 @@ " gama121 = np.cos(alpha1)*(a1)*(1/dt)\n", " gama131 = np.cos(alpha1)*(1-b1)*(1/hx)*vel[x,z]\n", " gama141 = np.cos(alpha1)*(b1)*(1/hx)*vel[x,z]\n", - " \n", + "\n", " gama211 = np.cos(alpha2)*(1-a2)*(1/dt)\n", " gama221 = np.cos(alpha2)*(a2)*(1/dt)\n", " gama231 = np.cos(alpha2)*(1-b2)*(1/hx)*vel[x,z]\n", " gama241 = np.cos(alpha2)*(b2)*(1/hx)*vel[x,z]\n", - " \n", + "\n", " c111 = gama111 + gama131\n", " c121 = -gama111 + gama141\n", " c131 = gama121 - gama131\n", " c141 = -gama121 - gama141\n", - " \n", + "\n", " c211 = gama211 + gama231\n", " c221 = -gama211 + gama241\n", " c231 = gama221 - gama231\n", " c241 = -gama221 - gama241\n", "\n", - " aux1 = ( u2[x,z]*(-c111*c221-c121*c211) + u3[x+1,z]*(-c111*c231-c131*c211) + u2[x+1,z]*(-c111*c241-c121*c231-c141*c211-c131*c221) \n", + " aux1 = ( u2[x,z]*(-c111*c221-c121*c211) + u3[x+1,z]*(-c111*c231-c131*c211) + u2[x+1,z]*(-c111*c241-c121*c231-c141*c211-c131*c221)\n", " + u1[x,z]*(-c121*c221) + u1[x+1,z]*(-c121*c241-c141*c221) + u3[x+2,z]*(-c131*c231) +u2[x+2,z]*(-c131*c241-c141*c231)\n", " + u1[x+2,z]*(-c141*c241))/(c111*c211)\n", " pde1 = (1-weightsx[x,z])*u3[x,z] + weightsx[x,z]*aux1\n", @@ -1227,23 +1225,23 @@ " gama122 = np.cos(alpha1)*(a1)*(1/dt)\n", " gama132 = np.cos(alpha1)*(1-b1)*(1/hx)*vel[x,z]\n", " gama142 = np.cos(alpha1)*(b1)*(1/hx)*vel[x,z]\n", - " \n", + "\n", " gama212 = np.cos(alpha2)*(1-a2)*(1/dt)\n", " gama222 = np.cos(alpha2)*(a2)*(1/dt)\n", " gama232 = np.cos(alpha2)*(1-b2)*(1/hx)*vel[x,z]\n", " gama242 = np.cos(alpha2)*(b2)*(1/hx)*vel[x,z]\n", - " \n", + "\n", " c112 = gama112 + gama132\n", " c122 = -gama112 + gama142\n", " c132 = gama122 - gama132\n", " c142 = -gama122 - gama142\n", - " \n", + "\n", " c212 = gama212 + gama232\n", " c222 = -gama212 + gama242\n", " c232 = gama222 - gama232\n", " c242 = -gama222 - gama242\n", "\n", - " aux2 = ( u2[x,z]*(-c112*c222-c122*c212) + u3[x-1,z]*(-c112*c232-c132*c212) + u2[x-1,z]*(-c112*c242-c122*c232-c142*c212-c132*c222) \n", + " aux2 = ( u2[x,z]*(-c112*c222-c122*c212) + u3[x-1,z]*(-c112*c232-c132*c212) + u2[x-1,z]*(-c112*c242-c122*c232-c142*c212-c132*c222)\n", " + u1[x,z]*(-c122*c222) + u1[x-1,z]*(-c122*c242-c142*c222) + u3[x-2,z]*(-c132*c232) +u2[x-2,z]*(-c132*c242-c142*c232)\n", " + u1[x-2,z]*(-c142*c242))/(c112*c212)\n", " pde2 = (1-weightsx[x,z])*u3[x,z] + weightsx[x,z]*aux2\n", @@ -1254,23 +1252,23 @@ " gama123 = np.cos(alpha1)*(a1)*(1/dt)\n", " gama133 = np.cos(alpha1)*(1-b1)*(1/hz)*vel[x,z]\n", " gama143 = np.cos(alpha1)*(b1)*(1/hz)*vel[x,z]\n", - " \n", + "\n", " gama213 = np.cos(alpha2)*(1-a2)*(1/dt)\n", " gama223 = np.cos(alpha2)*(a2)*(1/dt)\n", " gama233 = np.cos(alpha2)*(1-b2)*(1/hz)*vel[x,z]\n", " gama243 = np.cos(alpha2)*(b2)*(1/hz)*vel[x,z]\n", - " \n", + "\n", " c113 = gama113 + gama133\n", " c123 = -gama113 + gama143\n", " c133 = gama123 - gama133\n", " c143 = -gama123 - gama143\n", - " \n", + "\n", " c213 = gama213 + gama233\n", " c223 = -gama213 + gama243\n", " c233 = gama223 - gama233\n", " c243 = -gama223 - gama243\n", "\n", - " aux3 = ( u2[x,z]*(-c113*c223-c123*c213) + u3[x,z-1]*(-c113*c233-c133*c213) + u2[x,z-1]*(-c113*c243-c123*c233-c143*c213-c133*c223) \n", + " aux3 = ( u2[x,z]*(-c113*c223-c123*c213) + u3[x,z-1]*(-c113*c233-c133*c213) + u2[x,z-1]*(-c113*c243-c123*c233-c143*c213-c133*c223)\n", " + u1[x,z]*(-c123*c223) + u1[x,z-1]*(-c123*c243-c143*c223) + u3[x,z-2]*(-c133*c233) +u2[x,z-2]*(-c133*c243-c143*c233)\n", " + u1[x,z-2]*(-c143*c243))/(c113*c213)\n", " pde3 = (1-weightsz[x,z])*u3[x,z] + weightsz[x,z]*aux3\n", @@ -1412,13 +1410,13 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2d(U,i): \n", + "def graph2d(U,i):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscale = 1/10**(3)\n", " x0pml = x0 + npmlx*hxv\n", " x1pml = x1 - npmlx*hxv\n", - " z0pml = z0 \n", + " z0pml = z0\n", " z1pml = z1 - npmlz*hzv\n", " scale = np.amax(U[npmlx:-npmlx,0:-npmlz])/10.\n", " extent = [fscale*x0pml,fscale*x1pml,fscale*z1pml,fscale*z0pml]\n", @@ -1483,7 +1481,7 @@ "metadata": {}, "outputs": [], "source": [ - "def graph2drec(rec,i): \n", + "def graph2drec(rec,i):\n", " plot.figure()\n", " plot.figure(figsize=(16,8))\n", " fscaled = 1/10**(3)\n", diff --git a/examples/seismic/acoustic/accuracy.ipynb b/examples/seismic/acoustic/accuracy.ipynb index aef7fd876b..b9e4aa6533 100644 --- a/examples/seismic/acoustic/accuracy.ipynb +++ b/examples/seismic/acoustic/accuracy.ipynb @@ -9,11 +9,10 @@ "import numpy as np\n", "from scipy.special import hankel2\n", "from examples.seismic.acoustic import AcousticWaveSolver\n", - "from examples.seismic import Model, RickerSource, Receiver, TimeAxis, AcquisitionGeometry\n", + "from examples.seismic import Model, AcquisitionGeometry\n", "from devito import set_log_level\n", "\n", "import matplotlib.pyplot as plt\n", - "from matplotlib import cm\n", "%matplotlib inline" ] }, @@ -146,9 +145,9 @@ " \"and a physical extent of (%sm, %sm)\" % (*model.grid.shape, *model.grid.extent))\n", "print(\"Source is at the center with coordinates (%sm, %sm)\" % tuple(src_coordinates[0]))\n", "print(\"Receiver (single receiver) is located at (%sm, %sm) \" % tuple(rec_coordinates[0]))\n", - " \n", + "\n", "# Note: gets time sampling from model.critical_dt\n", - "geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates, \n", + "geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates,\n", " t0=t0, tn=tn, src_type='Ricker', f0=f0, t0w=1.5/f0)" ] }, @@ -225,12 +224,12 @@ " U_a = np.zeros((nf), dtype=complex)\n", " for a in range(1, nf-1):\n", " k = 2 * np.pi * faxis[a] / c0\n", - " tmp = k * np.sqrt(((rx - sx))**2 + ((rz - sz))**2)\n", + " tmp = k * np.sqrt(((rx - sx))**2 + (rz - sz)**2)\n", " U_a[a] = -1j * np.pi * hankel2(0.0, tmp) * R[a]\n", "\n", " # Do inverse fft on 0:dt:T and you have analytical solution\n", " U_t = 1.0/(2.0 * np.pi) * np.real(np.fft.ifft(U_a[:], nt))\n", - " \n", + "\n", " # The analytic solution needs be scaled by dx^2 to convert to pressure\n", " return np.real(U_t) * (model.spacing[0]**2)" ] @@ -262,9 +261,9 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "print(\"Numerical data min,max,abs; %+.6e %+.6e %+.6e\" % \n", + "print(\"Numerical data min,max,abs; %+.6e %+.6e %+.6e\" %\n", " (np.min(ref_rec.data), np.max(ref_rec.data), np.max(np.abs(ref_rec.data)) ))\n", - "print(\"Analytic data min,max,abs; %+.6e %+.6e %+.6e\" % \n", + "print(\"Analytic data min,max,abs; %+.6e %+.6e %+.6e\" %\n", " (np.min(U_t), np.max(U_t), (np.max(np.abs(U_t)))))" ] }, @@ -409,14 +408,14 @@ " rec_coordinates = np.empty((1, 2))\n", " rec_coordinates[:, :] = 260.\n", "\n", - " geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates, \n", + " geometry = AcquisitionGeometry(model, rec_coordinates, src_coordinates,\n", " t0=t0, tn=tn, src_type='Ricker', f0=f0, t0w=1.5/f0)\n", "\n", - " # Note: incorrect data size will be generated here due to AcquisitionGeometry bug ... \n", + " # Note: incorrect data size will be generated here due to AcquisitionGeometry bug ...\n", " # temporarily fixed below by resizing the output from the solver\n", " geometry.resample(dt[i])\n", " print(\"geometry.time_axes; \", geometry.time_axis)\n", - " \n", + "\n", " solver = AcousticWaveSolver(model, geometry, time_order=2, space_order=8)\n", " ref_rec1, ref_u1, _ = solver.forward(dt=dt[i])\n", " ref_rec1_data = ref_rec1.data[0:nnt[i],:]\n", @@ -429,7 +428,7 @@ "\n", " ratio_d = dt[i-1]/dt[i] if i > 0 else 1.0\n", " ratio_e = error_time[i-1]/error_time[i] if i > 0 else 1.0\n", - " print(\"error for dt=%.4f is %12.6e -- ratio dt^2,ratio err; %12.6f %12.6f \\n\" % \n", + " print(\"error for dt=%.4f is %12.6e -- ratio dt^2,ratio err; %12.6f %12.6f \\n\" %\n", " (dt[i], error_time[i], ratio_d**2, ratio_e))\n", " errors_plot.append((geometry.time_axis.time_values, U_t1[:-1] - ref_rec1_data[:-1, 0]))" ] @@ -594,19 +593,19 @@ " rec_coordinates = np.empty((1, 2))\n", " rec_coordinates[:, :] = 260.\n", "\n", - " geometry = AcquisitionGeometry(model_space, rec_coordinates, src_coordinates, \n", + " geometry = AcquisitionGeometry(model_space, rec_coordinates, src_coordinates,\n", " t0=t0, tn=tn, src_type='Ricker', f0=f0, t0w=1.5/f0)\n", "\n", " solver = AcousticWaveSolver(model_space, geometry, time_order=2, space_order=spc)\n", " loc_rec, loc_u, summary = solver.forward()\n", "\n", - " # Note: we need to correct for fixed spacing pressure corrections in both analytic \n", + " # Note: we need to correct for fixed spacing pressure corrections in both analytic\n", " # (run at the old model spacing) and numerical (run at the new model spacing) solutions\n", " c_ana = 1 / model.spacing[0]**2\n", " c_num = 1 / model_space.spacing[0]**2\n", "\n", " # Compare to reference solution\n", - " # Note: we need to normalize by the factor of grid spacing squared \n", + " # Note: we need to normalize by the factor of grid spacing squared\n", " errorl2[ind_o, ind_spc] = np.linalg.norm(loc_rec.data[:-1, 0] * c_num - U_t[:-1] * c_ana, 2) / np.sqrt(U_t.shape[0] - 1)\n", " timing[ind_o, ind_spc] = np.max([v for _, v in summary.timings.items()])\n", " print(\"starting space order %s with (%s, %s) grid points the error is %s for %s seconds runtime\" %\n", diff --git a/examples/seismic/model.py b/examples/seismic/model.py index c40ee232fe..16d8f7a3a6 100644 --- a/examples/seismic/model.py +++ b/examples/seismic/model.py @@ -10,8 +10,13 @@ from devito.builtins import initialize_function, gaussian_smooth, mmax, mmin from devito.tools import as_tuple -__all__ = ['SeismicModel', 'Model', 'ModelElastic', - 'ModelViscoelastic', 'ModelViscoacoustic'] +__all__ = [ + 'Model', + 'ModelElastic', + 'ModelViscoacoustic', + 'ModelViscoelastic', + 'SeismicModel', +] def initialize_damp(damp, padsizes, spacing, abc_type="damp", fs=False): diff --git a/examples/seismic/preset_models.py b/examples/seismic/preset_models.py index 5748bc383f..a2ab9fbf28 100644 --- a/examples/seismic/preset_models.py +++ b/examples/seismic/preset_models.py @@ -277,7 +277,7 @@ def demo_model(preset, **kwargs): nbl = kwargs.pop('nbl', 20) # Read 2D Marmousi model from devitocodes/data repo - data_path = kwargs.get('data_path', None) + data_path = kwargs.get('data_path') if data_path is None: raise ValueError("Path to devitocodes/data not found! Please specify with " "'data_path='") diff --git a/examples/seismic/self_adjoint/sa_01_iso_implementation1.ipynb b/examples/seismic/self_adjoint/sa_01_iso_implementation1.ipynb index 13abfdfceb..7cd6905201 100644 --- a/examples/seismic/self_adjoint/sa_01_iso_implementation1.ipynb +++ b/examples/seismic/self_adjoint/sa_01_iso_implementation1.ipynb @@ -146,16 +146,13 @@ "source": [ "import numpy as np\n", "from examples.seismic import RickerSource, Receiver, TimeAxis\n", - "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant, \n", - " Eq, Operator, solve, configuration, norm)\n", - "from devito.finite_differences import Derivative\n", - "from devito.builtins import gaussian_smooth\n", + "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant,\n", + " Eq, Operator, configuration, norm)\n", "from examples.seismic.self_adjoint import setup_w_over_q\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from matplotlib import cm\n", - "from timeit import default_timer as timer\n", - "# These lines force images to be displayed in the notebook, and scale up fonts \n", + "# These lines force images to be displayed in the notebook, and scale up fonts\n", "%matplotlib inline\n", "mpl.rc('font', size=14)\n", "\n", @@ -230,18 +227,18 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "\n", - "# Make 1D grid to test derivatives \n", + "# Make 1D grid to test derivatives\n", "n = 101\n", "d = 1.0\n", "shape = (n, )\n", - "spacing = (1 / (n-1), ) \n", + "spacing = (1 / (n-1), )\n", "origin = (0., )\n", "extent = (d * (n-1), )\n", "dtype = np.float64\n", "\n", "# Initialize Devito grid and Functions for input(f1,g1) and output(f2,g2)\n", - "# Note that space_order=8 allows us to use an 8th order finite difference \n", - "# operator by properly setting up grid accesses with halo cells \n", + "# Note that space_order=8 allows us to use an 8th order finite difference\n", + "# operator by properly setting up grid accesses with halo cells\n", "grid1d = Grid(shape=shape, extent=extent, origin=origin, dtype=dtype)\n", "x = grid1d.dimensions[0]\n", "f1 = Function(name='f1', grid=grid1d, space_order=8)\n", @@ -367,13 +364,13 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "\n", - "# Show the FD coefficients generated by Devito \n", + "# Show the FD coefficients generated by Devito\n", "# for the forward 1/2 cell shifted first derivative operator\n", "print(\"\\n\\nForward +1/2 cell shift;\")\n", "print(\"..................................\")\n", "print(f1.dx(x0=x+0.5*x.spacing).evaluate)\n", "\n", - "# Show the FD coefficients generated by Devito \n", + "# Show the FD coefficients generated by Devito\n", "# for the backward 1/2 cell shifted first derivative operator\n", "print(\"\\n\\nBackward -1/2 cell shift;\")\n", "print(\"..................................\")\n", @@ -523,15 +520,15 @@ "origin_pad = tuple([o - s*npad for o, s in zip(origin, spacing)])\n", "extent_pad = tuple([s*(n-1) for s, n in zip(spacing, shape_pad)])\n", "\n", - "# Define the dimensions \n", + "# Define the dimensions\n", "# Note if you do not specify dimensions, you get in order x,y,z\n", - "x = SpaceDimension(name='x', spacing=Constant(name='h_x', \n", + "x = SpaceDimension(name='x', spacing=Constant(name='h_x',\n", " value=extent_pad[0]/(shape_pad[0]-1)))\n", - "z = SpaceDimension(name='z', spacing=Constant(name='h_z', \n", + "z = SpaceDimension(name='z', spacing=Constant(name='h_z',\n", " value=extent_pad[1]/(shape_pad[1]-1)))\n", "\n", - "# Initialize the Devito grid \n", - "grid = Grid(extent=extent_pad, shape=shape_pad, origin=origin_pad, \n", + "# Initialize the Devito grid\n", + "grid = Grid(extent=extent_pad, shape=shape_pad, origin=origin_pad,\n", " dimensions=(x, z), dtype=dtype)\n", "\n", "print(\"shape; \", shape)\n", @@ -578,11 +575,11 @@ } ], "source": [ - "# Create the velocity and buoyancy fields. \n", + "# Create the velocity and buoyancy fields.\n", "# - We use a wholespace velocity of 1500 m/s\n", "# - We use a wholespace density of 1 g/cm^3\n", "# - These are scalar fields so we use Function to define them\n", - "# - We specify space_order to establish the appropriate size halo on the edges \n", + "# - We specify space_order to establish the appropriate size halo on the edges\n", "space_order = 8\n", "\n", "# Wholespace velocity\n", @@ -768,7 +765,7 @@ "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(np.transpose(m.data), cmap=cm.jet, \n", + "plt.imshow(np.transpose(m.data), cmap=cm.jet,\n", " vmin=vmin, vmax=vmax, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='Velocity (m/msec)')\n", "plt.plot([origin[0], origin[0], extent[0], extent[0], origin[0]],\n", @@ -916,7 +913,7 @@ "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(np.transpose(q025.data), cmap=cm.jet, \n", + "plt.imshow(np.transpose(q025.data), cmap=cm.jet,\n", " vmin=lmin, vmax=lmax, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='log10(Q)')\n", "plt.plot([origin[0], origin[0], extent[0], extent[0], origin[0]],\n", @@ -975,7 +972,7 @@ "# Define the TimeFunction\n", "u = TimeFunction(name=\"u\", grid=grid, time_order=2, space_order=space_order)\n", "\n", - "# Get the symbols for dimensions for t, x, z \n", + "# Get the symbols for dimensions for t, x, z\n", "# We need these below in order to write the source injection and the\n", "t,x,z = u.dimensions" ] @@ -1000,7 +997,7 @@ "# Source injection, with appropriate scaling\n", "src_term = src.inject(field=u.forward, expr=src * t.spacing**2 * m**2 / b)\n", "\n", - "# Receiver extraction \n", + "# Receiver extraction\n", "rec_term = rec.interpolate(expr=u.forward)" ] }, @@ -1429,7 +1426,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Continuous integration hooks \n", + "# Continuous integration hooks\n", "# We ensure the norm of these computed wavefields is repeatable\n", "assert np.isclose(norm(uQ25), 26.749, atol=0, rtol=1e-3)\n", "assert np.isclose(norm(u), 161.131, atol=0, rtol=1e-3)\n", @@ -1480,7 +1477,7 @@ "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(np.transpose(uQ25.data[1,:,:] / amax_Q100), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(uQ25.data[1,:,:] / amax_Q100), cmap=\"seismic\",\n", " vmin=-1, vmax=+1, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='Amplitude')\n", "plt.plot([origin[0], origin[0], extent[0], extent[0], origin[0]],\n", @@ -1552,7 +1549,7 @@ "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(recQ25.data[:,:] / amax_Q100, cmap=\"seismic\", \n", + "plt.imshow(recQ25.data[:,:] / amax_Q100, cmap=\"seismic\",\n", " vmin=-1, vmax=+1, extent=plt_extent, aspect=\"auto\")\n", "plt.colorbar(orientation='horizontal', label='Amplitude')\n", "plt.xlabel(\"X Coordinate (m)\")\n", @@ -1591,7 +1588,7 @@ "# NBVAL_IGNORE_OUTPUT\n", "\n", "# Define the partial_differential equation\n", - "# Note the backward shifted time derivative is obtained via u.dt(x0=t-0.5*t.spacing) \n", + "# Note the backward shifted time derivative is obtained via u.dt(x0=t-0.5*t.spacing)\n", "pde = (b / m**2) * (wOverQ_100 * u.dt(x0=t-0.5*t.spacing) + u.dt2) -\\\n", " (b * u.dx(x0=x+0.5*x.spacing)).dx(x0=x-0.5*x.spacing) -\\\n", " (b * u.dz(x0=z+0.5*z.spacing)).dz(x0=z-0.5*z.spacing)\n", @@ -1600,7 +1597,7 @@ "# t1 = timer()\n", "# stencil = Eq(u.forward, solve(pde, u.forward))\n", "# t2 = timer()\n", - "# print(\"solve ran in %.4f seconds.\" % (t2-t1)) \n", + "# print(\"solve ran in %.4f seconds.\" % (t2-t1))\n", "# stencil" ] }, diff --git a/examples/seismic/self_adjoint/sa_02_iso_implementation2.ipynb b/examples/seismic/self_adjoint/sa_02_iso_implementation2.ipynb index 9796ff40ad..e70aca879b 100644 --- a/examples/seismic/self_adjoint/sa_02_iso_implementation2.ipynb +++ b/examples/seismic/self_adjoint/sa_02_iso_implementation2.ipynb @@ -258,24 +258,21 @@ "source": [ "import numpy as np\n", "from examples.seismic import RickerSource, Receiver, TimeAxis\n", - "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant, \n", - " Eq, Operator, solve, configuration, norm)\n", - "from devito.finite_differences import Derivative\n", - "from devito.builtins import gaussian_smooth\n", + "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant,\n", + " Eq, Operator, configuration, norm)\n", "from examples.seismic.self_adjoint import setup_w_over_q\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from matplotlib import cm\n", - "from timeit import default_timer as timer\n", "\n", - "# These lines force images to be displayed in the notebook, and scale up fonts \n", + "# These lines force images to be displayed in the notebook, and scale up fonts\n", "%matplotlib inline\n", "mpl.rc('font', size=14)\n", "\n", "# Make white background for plots, not transparent\n", "plt.rcParams['figure.facecolor'] = 'white'\n", "\n", - "# We define 32 bit floating point as the precision type \n", + "# We define 32 bit floating point as the precision type\n", "dtype = np.float32\n", "\n", "# Set logging to debug, captures statistics on the performance of operators\n", @@ -332,15 +329,15 @@ "origin_pad = tuple([o - s*npad for o, s in zip(origin, spacing)])\n", "extent_pad = tuple([s*(n-1) for s, n in zip(spacing, shape_pad)])\n", "\n", - "# Define the dimensions \n", + "# Define the dimensions\n", "# Note if you do not specify dimensions, you get in order x,y,z\n", - "x = SpaceDimension(name='x', spacing=Constant(name='h_x', \n", + "x = SpaceDimension(name='x', spacing=Constant(name='h_x',\n", " value=extent_pad[0]/(shape_pad[0]-1)))\n", - "z = SpaceDimension(name='z', spacing=Constant(name='h_z', \n", + "z = SpaceDimension(name='z', spacing=Constant(name='h_z',\n", " value=extent_pad[1]/(shape_pad[1]-1)))\n", "\n", - "# Initialize the Devito grid \n", - "grid = Grid(extent=extent_pad, shape=shape_pad, origin=origin_pad, \n", + "# Initialize the Devito grid\n", + "grid = Grid(extent=extent_pad, shape=shape_pad, origin=origin_pad,\n", " dimensions=(x, z), dtype=dtype)\n", "\n", "print(\"shape; \", shape)\n", @@ -391,7 +388,7 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "\n", - "# Create the velocity and buoyancy fields as in the nonlinear notebook \n", + "# Create the velocity and buoyancy fields as in the nonlinear notebook\n", "space_order = 8\n", "\n", "# Wholespace velocity\n", @@ -567,7 +564,7 @@ "plt.figure(figsize=(12,12))\n", "\n", "plt.subplot(2, 2, 1)\n", - "plt.imshow(np.transpose(m0.data), cmap=cm.jet, \n", + "plt.imshow(np.transpose(m0.data), cmap=cm.jet,\n", " vmin=vmin, vmax=vmax, extent=plt_extent)\n", "plt.plot(abcX, abcZ, 'gray', linewidth=4, linestyle=':', label=\"Absorbing Boundary\")\n", "plt.plot(src_nl.coordinates.data[:, 0], src_nl.coordinates.data[:, 1], \\\n", @@ -593,7 +590,7 @@ "plt.title(\"Background Density\")\n", "\n", "plt.subplot(2, 2, 3)\n", - "plt.imshow(np.transpose(dm.data), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(dm.data), cmap=\"seismic\",\n", " vmin=pmin, vmax=pmax, extent=plt_extent)\n", "plt.plot(abcX, abcZ, 'gray', linewidth=4, linestyle=':', label=\"Absorbing Boundary\")\n", "plt.plot(src_nl.coordinates.data[:, 0], src_nl.coordinates.data[:, 1], \\\n", @@ -645,7 +642,7 @@ "duFwd = TimeFunction(name=\"duFwd\", grid=grid, time_order=2, space_order=space_order, save=None)\n", "duAdj = TimeFunction(name=\"duAdj\", grid=grid, time_order=2, space_order=space_order, save=None)\n", "\n", - "# Get the dimensions for t, x, z \n", + "# Get the dimensions for t, x, z\n", "t,x,z = u0.dimensions" ] }, @@ -740,7 +737,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Continuous integration hooks \n", + "# Continuous integration hooks\n", "# We ensure the norm of these computed wavefields is repeatable\n", "# print(norm(u0))\n", "assert np.isclose(norm(u0), 3098.012, atol=0, rtol=1e-2)" @@ -796,7 +793,7 @@ "# The linearized forward time update equation\n", "eq_time_update_ln_fwd = (t.spacing**2 * m0**2 / b) * \\\n", " ((b * duFwd.dx(x0=x+x.spacing/2)).dx(x0=x-x.spacing/2) +\n", - " (b * duFwd.dz(x0=z+z.spacing/2)).dz(x0=z-z.spacing/2) + \n", + " (b * duFwd.dz(x0=z+z.spacing/2)).dz(x0=z-z.spacing/2) +\n", " 2 * b * dm * m0**-3 * (wOverQ * u0.dt(x0=t-t.spacing/2) + u0.dt2)) +\\\n", " (2 - t.spacing * wOverQ) * duFwd + \\\n", " (t.spacing * wOverQ - 1) * duFwd.backward\n", @@ -821,7 +818,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Continuous integration hooks \n", + "# Continuous integration hooks\n", "# We ensure the norm of these computed wavefields is repeatable\n", "# print(norm(duFwd))\n", "assert np.isclose(norm(duFwd), 227.063, atol=0, rtol=1e-3)" @@ -875,7 +872,7 @@ "plt.figure(figsize=(12,12))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(np.transpose(u0.data[kt,:,:]), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(u0.data[kt,:,:]), cmap=\"seismic\",\n", " vmin=-amax_nl, vmax=+amax_nl, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='Amplitude')\n", "plt.plot(abcX, abcZ, 'gray', linewidth=4, linestyle=':', label=\"Absorbing Boundary\")\n", @@ -1017,7 +1014,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Continuous integration hooks \n", + "# Continuous integration hooks\n", "# We ensure the norm of these computed wavefields is repeatable\n", "# print(norm(duAdj))\n", "assert np.isclose(norm(duAdj), 19218.924, atol=0, rtol=1e-3)" @@ -1073,7 +1070,7 @@ "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(1, 2, 1)\n", - "plt.imshow(np.transpose(dm.data), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(dm.data), cmap=\"seismic\",\n", " vmin=-1, vmax=+1, extent=plt_extent, aspect=\"auto\")\n", "plt.plot(abcX, abcZ, 'gray', linewidth=4, linestyle=':', label=\"Absorbing Boundary\")\n", "plt.plot(src_nl.coordinates.data[:, 0], src_nl.coordinates.data[:, 1], \\\n", @@ -1086,7 +1083,7 @@ "plt.title(\"Velocity Perturbation\")\n", "\n", "plt.subplot(1, 2, 2)\n", - "plt.imshow(np.transpose(dmAdj.data), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(dmAdj.data), cmap=\"seismic\",\n", " vmin=-1, vmax=+1, extent=plt_extent, aspect=\"auto\")\n", "plt.plot(abcX, abcZ, 'gray', linewidth=4, linestyle=':', label=\"Absorbing Boundary\")\n", "plt.plot(src_nl.coordinates.data[:, 0], src_nl.coordinates.data[:, 1], \\\n", diff --git a/examples/seismic/self_adjoint/sa_03_iso_correctness.ipynb b/examples/seismic/self_adjoint/sa_03_iso_correctness.ipynb index abd3524132..3756ac364e 100644 --- a/examples/seismic/self_adjoint/sa_03_iso_correctness.ipynb +++ b/examples/seismic/self_adjoint/sa_03_iso_correctness.ipynb @@ -209,19 +209,14 @@ "source": [ "from scipy.special import hankel2\n", "import numpy as np\n", - "from examples.seismic import RickerSource, Receiver, TimeAxis, Model, AcquisitionGeometry\n", - "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant, \n", - " Eq, Operator, solve, configuration, norm)\n", - "from devito.finite_differences import Derivative\n", - "from devito.builtins import gaussian_smooth\n", + "from examples.seismic import RickerSource, TimeAxis, Model, AcquisitionGeometry\n", + "from devito import (Grid, Function, Eq, Operator, configuration, norm)\n", "from examples.seismic.self_adjoint import (acoustic_sa_setup, setup_w_over_q,\n", " SaIsoAcousticWaveSolver)\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", - "from matplotlib import cm\n", - "from timeit import default_timer as timer\n", "\n", - "# These lines force images to be displayed in the notebook, and scale up fonts \n", + "# These lines force images to be displayed in the notebook, and scale up fonts\n", "%matplotlib inline\n", "mpl.rc('font', size=14)\n", "\n", @@ -274,7 +269,7 @@ " timepad = np.linspace(tmin, tmaxpad, ntpad)\n", " print(time_axis)\n", " print(time_axis_pad)\n", - " srcpad = RickerSource(name='srcpad', grid=v.grid, f0=fpeak, npoint=1, \n", + " srcpad = RickerSource(name='srcpad', grid=v.grid, f0=fpeak, npoint=1,\n", " time_range=time_axis_pad, t0w=t0w)\n", " nf = int(ntpad / 2 + 1)\n", " fnyq = 1.0 / (2 * dt)\n", @@ -289,7 +284,7 @@ " # Compute the Hankel function and multiply by the source spectrum\n", " U_a = np.zeros((nf), dtype=complex)\n", " for a in range(1, nf - 1):\n", - " w = 2 * np.pi * faxis[a] \n", + " w = 2 * np.pi * faxis[a]\n", " r = np.sqrt((rx - sx)**2 + (rz - sz)**2)\n", " U_a[a] = -1j * np.pi * hankel2(0.0, w * r / v0) * R[a]\n", "\n", @@ -361,7 +356,7 @@ "model = Model(origin=origin, shape=shape, vp=v0, b=b0, spacing=spacing, nbl=npad,\n", " space_order=space_order, bcs=init_damp, dtype=dtype, dt=dt)\n", "\n", - "# Source and reciver coordinates \n", + "# Source and reciver coordinates\n", "src_coords = np.empty((1, 2), dtype=dtype)\n", "rec_coords = np.empty((1, 2), dtype=dtype)\n", "src_coords[:, :] = np.array(model.domain_size) * .5\n", @@ -406,7 +401,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Continuous integration hooks \n", + "# Continuous integration hooks\n", "# We ensure the norm of these computed wavefields is repeatable\n", "assert np.isclose(np.linalg.norm(recAna), 0.0524, atol=0, rtol=1e-3)\n", "assert np.isclose(norm(recNum), 0.0524, atol=0, rtol=1e-3)\n", @@ -438,14 +433,14 @@ "z1 = origin[1] - model.nbl * model.spacing[1]\n", "z2 = model.domain_size[1] + model.nbl * model.spacing[1]\n", "\n", - "xABC1 = origin[0] \n", + "xABC1 = origin[0]\n", "xABC2 = model.domain_size[0]\n", "zABC1 = origin[1]\n", "zABC2 = model.domain_size[1]\n", "\n", "plt_extent = [x1, x2, z2, z1]\n", - "abc_pairsX = [xABC1, xABC1, xABC2, xABC2, xABC1] \n", - "abc_pairsZ = [zABC1, zABC2, zABC2, zABC1, zABC1] \n", + "abc_pairsX = [xABC1, xABC1, xABC2, xABC2, xABC1]\n", + "abc_pairsZ = [zABC1, zABC2, zABC2, zABC1, zABC1]\n", "\n", "plt.figure(figsize=(12.5,12.5))\n", "\n", @@ -454,9 +449,9 @@ "amax = 1.1 * np.max(np.abs(recNum.data[:]))\n", "plt.imshow(uNum.data[1,:,:], vmin=-amax, vmax=+amax, cmap=\"seismic\",\n", " aspect=\"auto\", extent=plt_extent)\n", - "plt.plot(src_coords[0, 0], src_coords[0, 1], 'r*', markersize=15, label='Source') \n", - "plt.plot(rec_coords[0, 0], rec_coords[0, 1], 'k^', markersize=11, label='Receiver') \n", - "plt.plot(abc_pairsX, abc_pairsZ, 'black', linewidth=4, linestyle=':', \n", + "plt.plot(src_coords[0, 0], src_coords[0, 1], 'r*', markersize=15, label='Source')\n", + "plt.plot(rec_coords[0, 0], rec_coords[0, 1], 'k^', markersize=11, label='Receiver')\n", + "plt.plot(abc_pairsX, abc_pairsZ, 'black', linewidth=4, linestyle=':',\n", " label=\"ABC\")\n", "plt.legend(loc=\"upper left\", bbox_to_anchor=(0.0, 0.9, 0.35, .1), framealpha=1.0)\n", "plt.xlabel('x position (m)')\n", @@ -811,11 +806,11 @@ "\n", "msize = 10\n", "\n", - "plt.plot(np.log10(scale), np.log10(expected1) - np.log10(expected1[0]), '+', label='1st order expected', \n", + "plt.plot(np.log10(scale), np.log10(expected1) - np.log10(expected1[0]), '+', label='1st order expected',\n", " linestyle='solid', linewidth=1.5, markersize=10, color='black')\n", "plt.plot(np.log10(scale), np.log10(norm1) - np.log10(norm1[0]), 'o', label='1st order actual',\n", " linestyle='solid', linewidth=1.5, markersize=10, color='blue')\n", - "plt.plot(np.log10(scale), np.log10(expected2) - np.log10(expected2[0]), 'x', label='2nd order expected', \n", + "plt.plot(np.log10(scale), np.log10(expected2) - np.log10(expected2[0]), 'x', label='2nd order expected',\n", " linestyle='solid', linewidth=1.5, markersize=10, color='black')\n", "plt.plot(np.log10(scale), np.log10(norm2) - np.log10(norm2[0]), 'd', label='2nd order actual',\n", " linestyle='solid', linewidth=1.5, markersize=10, color='red')\n", @@ -1090,18 +1085,18 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "\n", - "# Make 1D grid to test derivatives \n", + "# Make 1D grid to test derivatives\n", "n = 101\n", "d = 1.0\n", "shape = (n, )\n", - "spacing = (1 / (n-1), ) \n", + "spacing = (1 / (n-1), )\n", "origin = (0., )\n", "extent = (d * (n-1), )\n", "dtype = np.float64\n", "\n", "# Initialize Devito grid and Functions for input(f1,g1) and output(f2,g2)\n", - "# Note that space_order=8 allows us to use an 8th order finite difference \n", - "# operator by properly setting up grid accesses with halo cells \n", + "# Note that space_order=8 allows us to use an 8th order finite difference\n", + "# operator by properly setting up grid accesses with halo cells\n", "grid1d = Grid(shape=shape, extent=extent, origin=origin, dtype=dtype)\n", "x = grid1d.dimensions[0]\n", "f1 = Function(name='f1', grid=grid1d, space_order=8)\n", diff --git a/examples/seismic/source.py b/examples/seismic/source.py index 18fa1893aa..d0a44d612d 100644 --- a/examples/seismic/source.py +++ b/examples/seismic/source.py @@ -8,8 +8,16 @@ from devito.types import SparseTimeFunction -__all__ = ['PointSource', 'Receiver', 'Shot', 'WaveletSource', - 'RickerSource', 'GaborSource', 'DGaussSource', 'TimeAxis'] +__all__ = [ + 'DGaussSource', + 'GaborSource', + 'PointSource', + 'Receiver', + 'RickerSource', + 'Shot', + 'TimeAxis', + 'WaveletSource', +] class TimeAxis: diff --git a/examples/seismic/tti/wavesolver.py b/examples/seismic/tti/wavesolver.py index 6915744def..2534bef750 100644 --- a/examples/seismic/tti/wavesolver.py +++ b/examples/seismic/tti/wavesolver.py @@ -1,4 +1,3 @@ -# coding: utf-8 from devito import (Function, TimeFunction, warning, NODE, DevitoCheckpoint, CheckpointOperator, Revolver) from devito.tools import memoized_meth diff --git a/examples/seismic/tutorials/01_modelling.ipynb b/examples/seismic/tutorials/01_modelling.ipynb index 1ab98e0b50..5fe0e78a8c 100644 --- a/examples/seismic/tutorials/01_modelling.ipynb +++ b/examples/seismic/tutorials/01_modelling.ipynb @@ -320,8 +320,8 @@ } ], "source": [ - "# In order to represent the wavefield u and the square slowness we need symbolic objects \n", - "# corresponding to time-space-varying field (u, TimeFunction) and \n", + "# In order to represent the wavefield u and the square slowness we need symbolic objects\n", + "# corresponding to time-space-varying field (u, TimeFunction) and\n", "# space-varying field (m, Function)\n", "from devito import TimeFunction\n", "\n", @@ -356,7 +356,7 @@ ], "source": [ "# This discrete PDE can be solved in a time-marching way updating u(t+dt) from the previous time step\n", - "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as \n", + "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as\n", "# a time marching updating equation known as a stencil using customized SymPy functions\n", "from devito import Eq, solve\n", "\n", diff --git a/examples/seismic/tutorials/02_rtm.ipynb b/examples/seismic/tutorials/02_rtm.ipynb index 3489e20d73..350d98bab0 100644 --- a/examples/seismic/tutorials/02_rtm.ipynb +++ b/examples/seismic/tutorials/02_rtm.ipynb @@ -225,7 +225,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Compute synthetic data with forward operator \n", + "# Compute synthetic data with forward operator\n", "from examples.seismic.acoustic import AcousticWaveSolver\n", "\n", "solver = AcousticWaveSolver(model, geometry, space_order=4)\n", @@ -238,7 +238,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Compute initial data with forward operator \n", + "# Compute initial data with forward operator\n", "smooth_d, _, _ = solver.forward(vp=model0.vp)" ] }, @@ -352,18 +352,18 @@ "\n", " u = TimeFunction(name='u', grid=model.grid, time_order=2, space_order=4,\n", " save=geometry.nt)\n", - " \n", + "\n", " # Define the wave equation, but with a negated damping term\n", " eqn = model.m * v.dt2 - v.laplace + model.damp * v.dt.T\n", "\n", " # Use `solve` to rearrange the equation into a stencil expression\n", " stencil = Eq(v.backward, solve(eqn, v.backward))\n", - " \n", + "\n", " # Define residual injection at the location of the forward receivers\n", " dt = model.critical_dt\n", " residual = PointSource(name='residual', grid=model.grid,\n", " time_range=geometry.time_axis,\n", - " coordinates=geometry.rec_positions) \n", + " coordinates=geometry.rec_positions)\n", " res_term = residual.inject(field=v.backward, expr=residual * dt**2 / model.m)\n", "\n", " # Correlate u and v for the current time step and add it to the image\n", @@ -500,20 +500,20 @@ "\n", "for i in range(nshots):\n", " print('Imaging source %d out of %d' % (i+1, nshots))\n", - " \n", + "\n", " # Update source location\n", " geometry.src_positions[0, :] = source_locations[i, :]\n", "\n", " # Generate synthetic data from true model\n", " true_d, _, _ = solver.forward(vp=model.vp)\n", - " \n", + "\n", " # Compute smooth data and full forward wavefield u0\n", " smooth_d, u0, _ = solver.forward(vp=model0.vp, save=True)\n", - " \n", - " # Compute gradient from the data residual \n", + "\n", + " # Compute gradient from the data residual\n", " v = TimeFunction(name='v', grid=model.grid, time_order=2, space_order=4)\n", " residual = smooth_d.data - true_d.data\n", - " op_imaging(u=u0, v=v, vp=model0.vp, dt=model0.critical_dt, \n", + " op_imaging(u=u0, v=v, vp=model0.vp, dt=model0.critical_dt,\n", " residual=residual)\n" ] }, diff --git a/examples/seismic/tutorials/03_fwi.ipynb b/examples/seismic/tutorials/03_fwi.ipynb index ae0616f5b6..83bf629448 100644 --- a/examples/seismic/tutorials/03_fwi.ipynb +++ b/examples/seismic/tutorials/03_fwi.ipynb @@ -54,7 +54,7 @@ "outputs": [], "source": [ "nshots = 9 # Number of shots to create gradient from\n", - "nreceivers = 101 # Number of receiver locations per shot \n", + "nreceivers = 101 # Number of receiver locations per shot\n", "fwi_iterations = 5 # Number of outer FWI iterations" ] }, @@ -165,7 +165,7 @@ "from examples.seismic import AcquisitionGeometry\n", "\n", "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "f0 = 0.010\n", "# First, position source centrally in all dimensions, then set depth\n", "src_coordinates = np.empty((1, 2))\n", @@ -225,7 +225,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Compute synthetic data with forward operator \n", + "# Compute synthetic data with forward operator\n", "from examples.seismic.acoustic import AcousticWaveSolver\n", "\n", "solver = AcousticWaveSolver(model, geometry, space_order=4)\n", @@ -238,7 +238,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Compute initial data with forward operator \n", + "# Compute initial data with forward operator\n", "smooth_d, _, _ = solver.forward(vp=model0.vp)" ] }, @@ -379,7 +379,7 @@ "def compute_residual(residual, dobs, dsyn):\n", " if residual.grid.distributor.is_parallel:\n", " # If we run with MPI, we have to compute the residual via an operator\n", - " # First make sure we can take the difference and that receivers are at the \n", + " # First make sure we can take the difference and that receivers are at the\n", " # same position\n", " assert np.allclose(dobs.coordinates.data[:], dsyn.coordinates.data)\n", " assert np.allclose(residual.coordinates.data[:], dsyn.coordinates.data)\n", @@ -390,7 +390,7 @@ " else:\n", " # A simple data difference is enough in serial\n", " residual.data[:] = dsyn.data[:] - dobs.data[:]\n", - " \n", + "\n", " return residual" ] }, @@ -400,41 +400,40 @@ "metadata": {}, "outputs": [], "source": [ - "# Create FWI gradient kernel \n", - "from devito import Function, TimeFunction, norm\n", + "# Create FWI gradient kernel\n", + "from devito import Function, norm\n", "from examples.seismic import Receiver\n", "\n", - "import scipy\n", - "def fwi_gradient(vp_in): \n", + "def fwi_gradient(vp_in):\n", " # Create symbols to hold the gradient\n", " grad = Function(name=\"grad\", grid=model.grid)\n", " # Create placeholders for the data residual and data\n", " residual = Receiver(name='residual', grid=model.grid,\n", - " time_range=geometry.time_axis, \n", + " time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", " d_obs = Receiver(name='d_obs', grid=model.grid,\n", - " time_range=geometry.time_axis, \n", + " time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", " d_syn = Receiver(name='d_syn', grid=model.grid,\n", - " time_range=geometry.time_axis, \n", + " time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", " objective = 0.\n", " for i in range(nshots):\n", " # Update source location\n", " geometry.src_positions[0, :] = source_locations[i, :]\n", - " \n", + "\n", " # Generate synthetic data from true model\n", " _, _, _ = solver.forward(vp=model.vp, rec=d_obs)\n", - " \n", + "\n", " # Compute smooth data and full forward wavefield u0\n", " _, u0, _ = solver.forward(vp=vp_in, save=True, rec=d_syn)\n", - " \n", - " # Compute gradient from data residual and update objective function \n", + "\n", + " # Compute gradient from data residual and update objective function\n", " compute_residual(residual, d_obs, d_syn)\n", - " \n", + "\n", " objective += .5*norm(residual)**2\n", " solver.gradient(rec=residual, u=u0, vp=vp_in, grad=grad)\n", - " \n", + "\n", " return objective, grad" ] }, @@ -590,19 +589,19 @@ " # Compute the functional value and gradient for the current\n", " # model estimate\n", " phi, direction = fwi_gradient(model0.vp)\n", - " \n", + "\n", " # Store the history of the functional values\n", " history[i] = phi\n", - " \n", + "\n", " # Artificial Step length for gradient descent\n", " # In practice this would be replaced by a Linesearch (Wolfe, ...)\n", " # that would guarantee functional decrease Phi(m-alpha g) <= epsilon Phi(m)\n", " # where epsilon is a minimum decrease constant\n", " alpha = .05 / mmax(direction)\n", - " \n", + "\n", " # Update the model estimate and enforce minimum/maximum values\n", " update_with_box(model0.vp , alpha , direction)\n", - " \n", + "\n", " # Log the progress made\n", " print('Objective value is %f at iteration %d' % (phi, i+1))" ] diff --git a/examples/seismic/tutorials/04_dask.ipynb b/examples/seismic/tutorials/04_dask.ipynb index a7becc9e1b..9084f2a3de 100644 --- a/examples/seismic/tutorials/04_dask.ipynb +++ b/examples/seismic/tutorials/04_dask.ipynb @@ -133,7 +133,7 @@ "\n", "# Set up acquisiton geometry\n", "t0 = 0.\n", - "tn = 1000. \n", + "tn = 1000.\n", "f0 = 0.010\n", "\n", "# Set up source geometry, but define 5 sources instead of just one.\n", @@ -203,9 +203,9 @@ " for i in range(geometry.nsrc):\n", "\n", " # Geometry for current shot\n", - " geometry_i = AcquisitionGeometry(model, geometry.rec_positions, geometry.src_positions[i,:], \n", + " geometry_i = AcquisitionGeometry(model, geometry.rec_positions, geometry.src_positions[i,:],\n", " geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n", - " \n", + "\n", " # Call serial modeling function for each index\n", " futures.append(client.submit(forward_modeling_single_shot, model, geometry_i, save=save, dt=dt))\n", "\n", @@ -264,11 +264,11 @@ "# Start Dask cluster\n", "if USE_GPU_AWARE_DASK:\n", " from dask_cuda import LocalCUDACluster\n", - " cluster = LocalCUDACluster(threads_per_worker=1, death_timeout=600) \n", + " cluster = LocalCUDACluster(threads_per_worker=1, death_timeout=600)\n", "else:\n", " from distributed import LocalCluster\n", " cluster = LocalCluster(n_workers=nsources, death_timeout=600)\n", - " \n", + "\n", "client = Client(cluster)\n", "\n", "# Compute observed data in parallel (inverse crime). In real life we would read the SEG-Y data here.\n", @@ -338,7 +338,7 @@ " # Devito objects for gradient and data residual\n", " grad = Function(name=\"grad\", grid=model.grid)\n", " residual = Receiver(name='rec', grid=model.grid,\n", - " time_range=geometry.time_axis, \n", + " time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", " solver = AcousticWaveSolver(model, geometry, space_order=4)\n", "\n", @@ -346,13 +346,13 @@ " d_pred, u0 = solver.forward(vp=model.vp, save=True)[0:2]\n", " residual.data[:] = d_pred.data[:] - d_obs.resample(geometry.dt).data[:][0:d_pred.data.shape[0], :]\n", "\n", - " # Function value and gradient \n", + " # Function value and gradient\n", " fval = .5*np.linalg.norm(residual.data.flatten())**2\n", " solver.gradient(rec=residual, u=u0, vp=model.vp, grad=grad)\n", - " \n", + "\n", " # Convert to numpy array and remove absorbing boundaries\n", " grad_crop = np.array(grad.data[:])[model.nbl:-model.nbl, model.nbl:-model.nbl]\n", - " \n", + "\n", " return fval, grad_crop" ] }, @@ -376,9 +376,9 @@ " for i in range(geometry.nsrc):\n", "\n", " # Geometry for current shot\n", - " geometry_i = AcquisitionGeometry(model, geometry.rec_positions, geometry.src_positions[i,:], \n", + " geometry_i = AcquisitionGeometry(model, geometry.rec_positions, geometry.src_positions[i,:],\n", " geometry.t0, geometry.tn, f0=geometry.f0, src_type=geometry.src_type)\n", - " \n", + "\n", " # Call serial FWI objective function for each shot location\n", " futures.append(client.submit(fwi_objective_single_shot, model, geometry_i, d_obs[i]))\n", "\n", @@ -519,14 +519,14 @@ "source": [ "# Wrapper for scipy optimizer: x is current model in squared slowness [s^2/km^2]\n", "def loss(x, model, geometry, d_obs):\n", - " \n", + "\n", " # Convert x to velocity\n", " v_curr = 1.0/np.sqrt(x.reshape(model.shape))\n", - " \n", + "\n", " # Overwrite current velocity in geometry (don't update boundary region)\n", " model.update('vp', v_curr.reshape(model.shape))\n", - " \n", - " # Evaluate objective function \n", + "\n", + " # Evaluate objective function\n", " fval, grad = fwi_objective_multi_shots(model, geometry, d_obs)\n", " return fval, grad.flatten().astype(np.float64) # scipy expects double precision vector" ] @@ -888,7 +888,7 @@ "# FWI with L-BFGS\n", "ftol = 0.1\n", "maxiter = 5\n", - "result = optimize.minimize(loss, m0, args=(model0, geometry0, d_obs), method='L-BFGS-B', jac=True, \n", + "result = optimize.minimize(loss, m0, args=(model0, geometry0, d_obs), method='L-BFGS-B', jac=True,\n", " callback=fwi_callback, bounds=bounds, options={'ftol':ftol, 'maxiter':maxiter, 'disp':True})" ] }, diff --git a/examples/seismic/tutorials/04_dask_pickling.ipynb b/examples/seismic/tutorials/04_dask_pickling.ipynb index d8fbf4d456..d1de2fd35a 100644 --- a/examples/seismic/tutorials/04_dask_pickling.ipynb +++ b/examples/seismic/tutorials/04_dask_pickling.ipynb @@ -92,30 +92,26 @@ "\n", "import numpy as np\n", "\n", - "import scipy\n", - "from scipy import signal, optimize\n", + "from scipy import optimize\n", "\n", - "from devito import Grid\n", "\n", "from distributed import Client, LocalCluster, wait\n", "\n", "import cloudpickle as pickle\n", "\n", "# Import acoustic solver, source and receiver modules.\n", - "from examples.seismic import Model, demo_model, AcquisitionGeometry, Receiver\n", + "from examples.seismic import demo_model, AcquisitionGeometry, Receiver\n", "from examples.seismic.acoustic import AcousticWaveSolver\n", - "from examples.seismic import AcquisitionGeometry\n", "\n", "# Import convenience function for plotting results\n", "from examples.seismic import plot_image\n", - "from examples.seismic import plot_shotrecord\n", "\n", "\n", "def get_true_model():\n", " ''' Define the test phantom; in this case we are using\n", " a simple circle so we can easily see what is going on.\n", " '''\n", - " return demo_model('circle-isotropic', vp_circle=3.0, vp_background=2.5, \n", + " return demo_model('circle-isotropic', vp_circle=3.0, vp_background=2.5,\n", " origin=param['origin'], shape=param['shape'],\n", " spacing=param['spacing'], nbl=param['nbl'])\n", "\n", @@ -124,7 +120,7 @@ " '''\n", " # Make sure both model are on the same grid\n", " grid = get_true_model().grid\n", - " return demo_model('circle-isotropic', vp_circle=2.5, vp_background=2.5, \n", + " return demo_model('circle-isotropic', vp_circle=2.5, vp_background=2.5,\n", " origin=param['origin'], shape=param['shape'],\n", " spacing=param['spacing'], nbl=param['nbl'],\n", " grid=grid)\n", @@ -134,7 +130,7 @@ " '''\n", " model = get_initial_model()\n", " v_curr = 1.0/np.sqrt(x.reshape(model.shape))\n", - " \n", + "\n", " if astype:\n", " model.update('vp', v_curr.astype(astype).reshape(model.shape))\n", " else:\n", @@ -146,26 +142,26 @@ " worker to get the current model.\n", " \"\"\"\n", " pkl = pickle.load(open(filename, \"rb\"))\n", - " \n", + "\n", " return pkl['model']\n", "\n", "def dump_model(filename, model):\n", " ''' Dump model to disk.\n", " '''\n", " pickle.dump({'model':model}, open(filename, \"wb\"))\n", - " \n", + "\n", "def load_shot_data(shot_id, dt):\n", " ''' Load shot data from disk, resampling to the model time step.\n", " '''\n", " pkl = pickle.load(open(\"shot_%d.p\"%shot_id, \"rb\"))\n", - " \n", + "\n", " return pkl['geometry'], pkl['rec'].resample(dt)\n", "\n", "def dump_shot_data(shot_id, rec, geometry):\n", " ''' Dump shot data to disk.\n", " '''\n", " pickle.dump({'rec':rec, 'geometry': geometry}, open('shot_%d.p'%shot_id, \"wb\"))\n", - " \n", + "\n", "def generate_shotdata_i(param):\n", " \"\"\" Inversion crime alert! Here the worker is creating the\n", " 'observed' data using the real model. For a real case\n", @@ -174,12 +170,12 @@ " # Reconstruct objects\n", " with open(\"arguments.pkl\", \"rb\") as cp_file:\n", " cp = pickle.load(cp_file)\n", - " \n", + "\n", " solver = cp['solver']\n", "\n", " # source position changes according to the index\n", " shot_id=param['shot_id']\n", - " \n", + "\n", " solver.geometry.src_positions[0,:]=[20, shot_id*1000./(param['nshots']-1)]\n", " true_d = solver.forward()[0]\n", " dump_shot_data(shot_id, true_d.resample(4.0), solver.geometry.src_positions)\n", @@ -188,10 +184,10 @@ " # Pick devito objects (save on disk)\n", " cp = {'solver': solver}\n", " with open(\"arguments.pkl\", \"wb\") as cp_file:\n", - " pickle.dump(cp, cp_file) \n", + " pickle.dump(cp, cp_file)\n", "\n", " work = [dict(param) for i in range(param['nshots'])]\n", - " # synthetic data is generated here twice: serial(loop below) and parallel (via dask map functionality) \n", + " # synthetic data is generated here twice: serial(loop below) and parallel (via dask map functionality)\n", " for i in range(param['nshots']):\n", " work[i]['shot_id'] = i\n", " generate_shotdata_i(work[i])\n", @@ -283,7 +279,6 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "from examples.seismic import plot_shotrecord\n", "\n", "# Client setup\n", "cluster = LocalCluster(n_workers=2, death_timeout=600)\n", @@ -299,7 +294,7 @@ "rec_coordinates = np.empty((nreceivers, len(param['shape'])))\n", "rec_coordinates[:, 1] = np.linspace(param['spacing'][0], true_model.domain_size[0] - param['spacing'][0], num=nreceivers)\n", "rec_coordinates[:, 0] = 980. # 20m from the right end\n", - "# Geometry \n", + "# Geometry\n", "geometry = AcquisitionGeometry(true_model, rec_coordinates, src_coordinates,\n", " param['t0'], param['tn'], src_type='Ricker',\n", " f0=param['f0'])\n", @@ -335,13 +330,13 @@ " def __init__(self, f, g):\n", " self.f = f\n", " self.g = g\n", - " \n", + "\n", " def __add__(self, other):\n", " f = self.f + other.f\n", " g = self.g + other.g\n", - " \n", + "\n", " return fg_pair(f, g)\n", - " \n", + "\n", " def __radd__(self, other):\n", " if other == 0:\n", " return self\n", @@ -378,25 +373,25 @@ " # it only worked reliably with Dask main. Therefore, the\n", " # the model is communicated via a file.\n", " model0 = load_model(param['model'])\n", - " \n", + "\n", " dt = model0.critical_dt\n", " nbl = model0.nbl\n", "\n", " # Get src_position and data\n", " src_positions, rec = load_shot_data(param['shot_id'], dt)\n", "\n", - " # Set up solver -- load the solver used above in the generation of the syntethic data. \n", + " # Set up solver -- load the solver used above in the generation of the syntethic data.\n", " with open(\"arguments.pkl\", \"rb\") as cp_file:\n", " cp = pickle.load(cp_file)\n", " solver = cp['solver']\n", - " \n", + "\n", " # Set attributes to solver\n", " solver.geometry.src_positions=src_positions\n", " solver.geometry.resample(dt)\n", "\n", " # Compute simulated data and full forward wavefield u0\n", " d, u0 = solver.forward(vp=model0.vp, dt=dt, save=True)[0:2]\n", - " \n", + "\n", " # Compute the data misfit (residual) and objective function\n", " residual = Receiver(name='rec', grid=model0.grid,\n", " time_range=solver.geometry.time_axis,\n", @@ -410,11 +405,11 @@ " # backpropagates the data misfit through the model.\n", " grad = Function(name=\"grad\", grid=model0.grid)\n", " solver.gradient(rec=residual, u=u0, vp=model0.vp, dt=dt, grad=grad)\n", - " \n", + "\n", " # Copying here to avoid a (probably overzealous) destructor deleting\n", " # the gradient before Dask has had a chance to communicate it.\n", - " g = np.array(grad.data[:])[nbl:-nbl, nbl:-nbl] \n", - " \n", + " g = np.array(grad.data[:])[nbl:-nbl, nbl:-nbl]\n", + "\n", " # return the objective functional and gradient.\n", " return fg_pair(f, g)" ] @@ -444,13 +439,13 @@ " work = [dict(param) for i in range(param['nshots'])]\n", " for i in range(param['nshots']):\n", " work[i]['shot_id'] = i\n", - " \n", + "\n", " # Distribute worklist to workers.\n", " fgi = c.map(fwi_gradient_i, work, retries=1)\n", - " \n", + "\n", " # Perform reduction.\n", " fg = c.submit(sum, fgi).result()\n", - " \n", + "\n", " # L-BFGS in scipy expects a flat array in 64-bit floats.\n", " return fg.f, fg.g.flatten().astype(np.float64)" ] @@ -469,13 +464,12 @@ "metadata": {}, "outputs": [], "source": [ - "from scipy import optimize\n", "\n", "# Many optimization methods in scipy.optimize.minimize accept a callback\n", "# function that can operate on the solution after every iteration. Here\n", "# we use this to monitor the true relative solution error.\n", "relative_error = []\n", - "def fwi_callbacks(x): \n", + "def fwi_callbacks(x):\n", " # Calculate true relative error\n", " true_vp = get_true_model().vp.data[param['nbl']:-param['nbl'], param['nbl']:-param['nbl']]\n", " true_m = 1.0 / (true_vp.reshape(-1).astype(np.float64))**2\n", @@ -489,12 +483,12 @@ " # Initial guess\n", " v0 = model.vp.data[param['nbl']:-param['nbl'], param['nbl']:-param['nbl']]\n", " m0 = 1.0 / (v0.reshape(-1).astype(np.float64))**2\n", - " \n", + "\n", " # Define bounding box constraints on the solution.\n", " vmin = 1.4 # do not allow velocities slower than water\n", " vmax = 4.0\n", " bounds = [(1.0/vmax**2, 1.0/vmin**2) for _ in range(np.prod(model.shape))] # in [s^2/km^2]\n", - " \n", + "\n", " result = optimize.minimize(fwi_gradient,\n", " m0, args=(param, ), method='L-BFGS-B', jac=True,\n", " bounds=bounds, callback=fwi_callbacks,\n", @@ -879,7 +873,6 @@ "#NBVAL_SKIP\n", "\n", "# Plot FWI result\n", - "from examples.seismic import plot_image\n", "\n", "slices = tuple(slice(param['nbl'],-param['nbl']) for _ in range(2))\n", "vp = 1.0/np.sqrt(result['x'].reshape(true_model.shape))\n", diff --git a/examples/seismic/tutorials/05_staggered_acoustic.ipynb b/examples/seismic/tutorials/05_staggered_acoustic.ipynb index 1d1ce958f7..03f6c62b45 100644 --- a/examples/seismic/tutorials/05_staggered_acoustic.ipynb +++ b/examples/seismic/tutorials/05_staggered_acoustic.ipynb @@ -18,7 +18,7 @@ "from examples.seismic import plot_image\n", "import numpy as np\n", "\n", - "from sympy import init_printing, latex\n", + "from sympy import init_printing\n", "init_printing(use_latex='mathjax')" ] }, diff --git a/examples/seismic/tutorials/06_elastic.ipynb b/examples/seismic/tutorials/06_elastic.ipynb index 0c4c7163b0..4ee235fc8f 100644 --- a/examples/seismic/tutorials/06_elastic.ipynb +++ b/examples/seismic/tutorials/06_elastic.ipynb @@ -28,11 +28,11 @@ "outputs": [], "source": [ "from devito import *\n", - "from examples.seismic.source import WaveletSource, RickerSource, GaborSource, TimeAxis\n", + "from examples.seismic.source import WaveletSource, RickerSource, TimeAxis\n", "from examples.seismic import plot_image\n", "import numpy as np\n", "\n", - "from sympy import init_printing, latex\n", + "from sympy import init_printing\n", "init_printing(use_latex='mathjax')" ] }, @@ -57,7 +57,7 @@ "outputs": [], "source": [ "class DGaussSource(WaveletSource):\n", - " \n", + "\n", " def wavelet(self, f0, t):\n", " a = 0.004\n", " return -2.*a*(t - 1/f0) * np.exp(-a * (t - 1/f0)**2)\n", diff --git a/examples/seismic/tutorials/06_elastic_varying_parameters.ipynb b/examples/seismic/tutorials/06_elastic_varying_parameters.ipynb index 58468db8cd..4358debc87 100644 --- a/examples/seismic/tutorials/06_elastic_varying_parameters.ipynb +++ b/examples/seismic/tutorials/06_elastic_varying_parameters.ipynb @@ -23,17 +23,17 @@ "source": [ "from devito import *\n", "from examples.seismic.source import RickerSource, Receiver, TimeAxis\n", - "from examples.seismic import plot_image, demo_model\n", + "from examples.seismic import demo_model\n", "import numpy as np\n", "\n", "import matplotlib.pyplot as plt\n", "\n", - "from sympy import init_printing, latex\n", + "from sympy import init_printing\n", "init_printing(use_latex='mathjax')\n", "\n", "# Some ploting setup\n", "plt.rc('font', family='serif')\n", - "plt.rc('xtick', labelsize=20) \n", + "plt.rc('xtick', labelsize=20)\n", "plt.rc('ytick', labelsize=20)" ] }, @@ -938,7 +938,7 @@ "from devito import div45, grad45\n", "\n", "all_node = [[NODE for _ in range(model.grid.dim)] for _ in range(model.grid.dim)]\n", - "all_vert = [model.grid.dimensions for _ in range(model.grid.dim)] \n", + "all_vert = [model.grid.dimensions for _ in range(model.grid.dim)]\n", "\n", "so = 8\n", "v_rsfd = VectorTimeFunction(name='vr', grid=model.grid, space_order=so, time_order=1, staggered=all_vert)\n", diff --git a/examples/seismic/tutorials/07.1_dispersion_relation.ipynb b/examples/seismic/tutorials/07.1_dispersion_relation.ipynb index 9970615f1b..9a16f497d6 100644 --- a/examples/seismic/tutorials/07.1_dispersion_relation.ipynb +++ b/examples/seismic/tutorials/07.1_dispersion_relation.ipynb @@ -790,7 +790,7 @@ " if not isinstance(first_arrival, np.ndarray):\n", " arrival = time[np.argmax(np.abs(data)>0.01, axis=0)]\n", " ax.plot(space, arrival, c='red', lw=1)\n", - " ax.annotate(f'first arrival',\n", + " ax.annotate('first arrival',\n", " xy=((extents[1] - extents[0])/2, arrival[arrival.size//2]), xycoords='data',\n", " xytext=(5, 5), textcoords='offset points', fontsize=12, color='red',\n", " path_effects=[patheffects.withStroke(linewidth=2, foreground=\"k\")]\n", @@ -815,7 +815,7 @@ " ax.set_aspect((extent[1] - extent[0])/(2*clip))\n", " if first_arrival is not None:\n", " ax.axvline(first_arrival, c='red', ls='--', lw=1)\n", - " ax.annotate(f'first arrival',\n", + " ax.annotate('first arrival',\n", " xy=(first_arrival, 0), xycoords='data',\n", " xytext=(-70, 5), textcoords='offset points', fontsize=12, color='red'\n", " )\n", diff --git a/examples/seismic/tutorials/07_DRP_schemes.ipynb b/examples/seismic/tutorials/07_DRP_schemes.ipynb index c990b517a0..7eae8a7019 100644 --- a/examples/seismic/tutorials/07_DRP_schemes.ipynb +++ b/examples/seismic/tutorials/07_DRP_schemes.ipynb @@ -242,7 +242,7 @@ "pde = model.m * u.dt2 - H + model.damp * u.dt\n", "\n", "# This discrete PDE can be solved in a time-marching way updating u(t+dt) from the previous time step\n", - "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as \n", + "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as\n", "# a time marching updating equation known as a stencil using customized SymPy functions\n", "from devito import solve\n", "\n", @@ -387,7 +387,7 @@ " # but the bottom 80 (+boundary layer) cells in the z-direction, which is achieved via\n", " # the following notation:\n", " return {x: x, z: ('left', 80+nbl)}\n", - " \n", + "\n", "class Lower(SubDomain):\n", " name = 'lower'\n", " def define(self, dimensions):\n", @@ -424,7 +424,7 @@ "source": [ "#NBVAL_IGNORE_OUTPUT\n", "\n", - "# Create our model passing it our 'upper' and 'lower' subdomains: \n", + "# Create our model passing it our 'upper' and 'lower' subdomains:\n", "model = Model(vp=v, origin=origin, shape=shape, spacing=spacing,\n", " space_order=order, nbl=nbl, bcs=\"damp\")\n", "\n", @@ -482,14 +482,14 @@ "# Define our custom FD coefficients:\n", "x, z = model.grid.dimensions\n", "# Upper layer\n", - "weights_u = np.array([ 2.00462e-03, -1.63274e-02, 7.72781e-02, \n", - " -3.15476e-01, 1.77768e+00, -3.05033e+00, \n", - " 1.77768e+00, -3.15476e-01, 7.72781e-02, \n", + "weights_u = np.array([ 2.00462e-03, -1.63274e-02, 7.72781e-02,\n", + " -3.15476e-01, 1.77768e+00, -3.05033e+00,\n", + " 1.77768e+00, -3.15476e-01, 7.72781e-02,\n", " -1.63274e-02, 2.00462e-03])\n", "# Lower layer\n", - "weights_l = np.array([ 0. , 0. , 0.0274017, \n", - " -0.223818, 1.64875 , -2.90467, \n", - " 1.64875 , -0.223818, 0.0274017, \n", + "weights_l = np.array([ 0. , 0. , 0.0274017,\n", + " -0.223818, 1.64875 , -2.90467,\n", + " 1.64875 , -0.223818, 0.0274017,\n", " 0. , 0. ])\n", "# Create the Devito Coefficient objects:\n", "ux_u_coeffs = weights_u/x.spacing**2\n", diff --git a/examples/seismic/tutorials/08_snapshotting.ipynb b/examples/seismic/tutorials/08_snapshotting.ipynb index fd84501ac7..5474ff2a72 100644 --- a/examples/seismic/tutorials/08_snapshotting.ipynb +++ b/examples/seismic/tutorials/08_snapshotting.ipynb @@ -27,7 +27,7 @@ "#NBVAL_IGNORE_OUTPUT\n", "%reset -f\n", "import numpy as np\n", - "import matplotlib.pyplot as plt \n", + "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, @@ -123,7 +123,7 @@ " name='src',\n", " grid=model.grid,\n", " f0=f0,\n", - " time_range=time_range) \n", + " time_range=time_range)\n", "\n", "src.coordinates.data[0, :] = np.array(model.domain_size) * .5\n", "src.coordinates.data[0, -1] = 20. # Depth is 20m\n", @@ -142,10 +142,10 @@ " receiver=rec.coordinates.data[::4, :])\n", "\n", "#Used for reshaping\n", - "vnx = nx+20 \n", + "vnx = nx+20\n", "vnz = nz+20\n", "\n", - "# Set symbolics for the wavefield object `u`, setting save on all time steps \n", + "# Set symbolics for the wavefield object `u`, setting save on all time steps\n", "# (which can occupy a lot of memory), to later collect snapshots (naive method):\n", "\n", "u = TimeFunction(name=\"u\", grid=model.grid, time_order=2,\n", @@ -250,8 +250,8 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "fobj = open(\"naivsnaps.bin\", \"rb\") \n", - "snaps = np.fromfile(fobj, dtype = np.float32) \n", + "fobj = open(\"naivsnaps.bin\", \"rb\")\n", + "snaps = np.fromfile(fobj, dtype = np.float32)\n", "snaps = np.reshape(snaps, (nsnaps, vnx, vnz)) #reshape vec2mtx, devito format. nx first\n", "fobj.close()\n", "\n", @@ -261,11 +261,11 @@ "plot_num = 5 # Number of images to plot\n", "\n", "for i in range(0, nsnaps, int(nsnaps/plot_num)):\n", - " plt.subplot(1, plot_num+1, imcnt+1);\n", + " plt.subplot(1, plot_num+1, imcnt+1)\n", " imcnt = imcnt + 1\n", " plt.imshow(np.transpose(snaps[i,:,:]), vmin=-1, vmax=1, cmap=\"seismic\")\n", "\n", - "plt.show() " + "plt.show()" ] }, { @@ -362,7 +362,7 @@ "\n", "#Part 3 #############\n", "print(\"Saving snaps file\")\n", - "print(\"Dimensions: nz = {:d}, nx = {:d}\".format(nz + 2 * nb, nx + 2 * nb))\n", + "print(f\"Dimensions: nz = {nz + 2 * nb:d}, nx = {nx + 2 * nb:d}\")\n", "filename = \"snaps2.bin\"\n", "usave.data.tofile(filename)\n", "#####################" @@ -403,12 +403,12 @@ "imcnt = 1 # Image counter for plotting\n", "plot_num = 5 # Number of images to plot\n", "for i in range(0, plot_num):\n", - " plt.subplot(1, plot_num, i+1);\n", + " plt.subplot(1, plot_num, i+1)\n", " imcnt = imcnt + 1\n", " ind = i * int(nsnaps/plot_num)\n", " plt.imshow(np.transpose(snaps[ind,:,:]), vmin=-1, vmax=1, cmap=\"seismic\")\n", "\n", - "plt.show() " + "plt.show()" ] }, { @@ -3360,7 +3360,7 @@ "\n", "plt.xlabel('x')\n", "plt.ylabel('z')\n", - "plt.title('Modelling one shot over a 2-layer velocity model with Devito.') \n", + "plt.title('Modelling one shot over a 2-layer velocity model with Devito.')\n", "\n", "def update(i):\n", " matrice.set_array(snapsObj[i, :, :].T)\n", diff --git a/examples/seismic/tutorials/10_nmo_correction.ipynb b/examples/seismic/tutorials/10_nmo_correction.ipynb index 6fc9e23ce8..7abafd6aad 100644 --- a/examples/seismic/tutorials/10_nmo_correction.ipynb +++ b/examples/seismic/tutorials/10_nmo_correction.ipynb @@ -239,7 +239,7 @@ "mpl.rc('figure', figsize=(8, 6))\n", "\n", "def plot_traces(rec, xb, xe, t0, tn, colorbar=True):\n", - " scale = np.max(rec)/100 \n", + " scale = np.max(rec)/100\n", " extent = [xb, xe, 1e-3*tn, t0]\n", " plot = plt.imshow(rec, cmap=cm.gray, vmin=-scale, vmax=scale, extent=extent)\n", " plt.xlabel('X position (km)')\n", @@ -342,7 +342,7 @@ "source": [ "vnmo = 1500\n", "vguide = SparseFunction(name='v', grid=grid, npoint=ns)\n", - "vguide.data[:] = vnmo " + "vguide.data[:] = vnmo" ] }, { @@ -397,7 +397,7 @@ "t_0 = SparseFunction(name='t0', grid=grid, npoint=ns, dimensions=[sample], shape=[grid.shape[0]])\n", "tt = SparseFunction(name='tt', grid=grid, npoint=nrcv, dimensions=grid.dimensions, shape=grid.shape)\n", "snmo = SparseFunction(name='snmo', grid=grid, npoint=nrcv, dimensions=grid.dimensions, shape=grid.shape)\n", - "s = SparseFunction(name='s', grid=grid, dtype=np.intc, npoint=nrcv, dimensions=grid.dimensions, \n", + "s = SparseFunction(name='s', grid=grid, dtype=np.intc, npoint=nrcv, dimensions=grid.dimensions,\n", " shape=grid.shape)" ] }, @@ -484,7 +484,7 @@ "op2 = Operator([E4])\n", "op2()\n", "\n", - "stack = snmo.data.sum(axis=1) # We can stack traces and create a ZO section!!! \n", + "stack = snmo.data.sum(axis=1) # We can stack traces and create a ZO section!!!\n", "\n", "plot_traces(snmo.data, rec.coordinates.data[0][0]/1000, rec.coordinates.data[nrcv-1][0]/1000, t0, tn)" ] diff --git a/examples/seismic/tutorials/11_viscoacoustic.ipynb b/examples/seismic/tutorials/11_viscoacoustic.ipynb index d7471243d0..b883f31677 100644 --- a/examples/seismic/tutorials/11_viscoacoustic.ipynb +++ b/examples/seismic/tutorials/11_viscoacoustic.ipynb @@ -117,8 +117,8 @@ "import matplotlib.pyplot as plt\n", "\n", "from devito import *\n", - "from examples.seismic.source import RickerSource, WaveletSource, TimeAxis\n", - "from examples.seismic import ModelViscoacoustic, plot_image, setup_geometry, plot_velocity" + "from examples.seismic.source import RickerSource, TimeAxis\n", + "from examples.seismic import ModelViscoacoustic" ] }, { @@ -179,8 +179,8 @@ ], "source": [ "#NBVAL_IGNORE_OUTPUT\n", - "model = ModelViscoacoustic(space_order=space_order, vp=v, qp=qp, b=1/rho, \n", - " origin=origin, shape=shape, spacing=spacing, \n", + "model = ModelViscoacoustic(space_order=space_order, vp=v, qp=qp, b=1/rho,\n", + " origin=origin, shape=shape, spacing=spacing,\n", " nbl=nbl)" ] }, @@ -240,7 +240,7 @@ "metadata": {}, "outputs": [], "source": [ - "f0 = 0.005 # peak/dominant frequency \n", + "f0 = 0.005 # peak/dominant frequency\n", "b = model.b\n", "rho = 1./b\n", "\n", @@ -279,18 +279,18 @@ "def src_rec(p, model):\n", " src = RickerSource(name='src', grid=model.grid, f0=f0, time_range=time_range)\n", " src.coordinates.data[0, :] = np.array(model.domain_size) * .5\n", - " src.coordinates.data[0, -1] = 8. \n", + " src.coordinates.data[0, -1] = 8.\n", "\n", " # Create symbol for receivers\n", " rec = Receiver(name='rec', grid=model.grid, npoint=shape[0], time_range=time_range)\n", "\n", " # Prescribe even spacing for receivers along the x-axis\n", " rec.coordinates.data[:, 0] = np.linspace(0, model.domain_size[0], num=shape[0])\n", - " rec.coordinates.data[:, 1] = 8. \n", + " rec.coordinates.data[:, 1] = 8.\n", "\n", " src_term = src.inject(field=p.forward, expr=(s*src))\n", " rec_term = rec.interpolate(expr=p)\n", - " \n", + "\n", " return src_term + rec_term, src, rec" ] }, @@ -328,7 +328,7 @@ "outputs": [], "source": [ "def plot_v_and_p(model, v, p):\n", - " \n", + "\n", " slices = [slice(model.nbl, -model.nbl), slice(model.nbl, -model.nbl)]\n", " scale = .5*1e-3\n", "\n", @@ -392,7 +392,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Stencil created from Blanch and Symes (1995) / Dutta and Schuster (2014) \n", + "# Stencil created from Blanch and Symes (1995) / Dutta and Schuster (2014)\n", "def SLS(model, p, r, v):\n", "\n", " # Bulk modulus\n", @@ -400,7 +400,7 @@ "\n", " # Define PDE to v\n", " pde_v = v.dt + b * grad(p)\n", - " u_v = Eq(v.forward, damp * solve(pde_v, v.forward)) \n", + " u_v = Eq(v.forward, damp * solve(pde_v, v.forward))\n", "\n", " # Define PDE to r\n", " pde_r = r.dt + (1. / t_s) * (r + tt * bm * div(v.forward))\n", @@ -409,7 +409,7 @@ " # Define PDE to p\n", " pde_p = p.dt + bm * (tt + 1.) * div(v.forward) + r.forward\n", " u_p = Eq(p.forward, damp * solve(pde_p, p.forward))\n", - " \n", + "\n", " return [u_v, u_r, u_p]" ] }, @@ -421,27 +421,27 @@ "source": [ "# Seismic Modelling from Blanch and Symes (1995) / Dutta and Schuster (2014) viscoacoustic wave equation.\n", "def modelling_SLS(model):\n", - " \n", + "\n", " # Create symbols for particle velocity, pressure field, memory variable, source and receivers\n", - " \n", + "\n", " v = VectorTimeFunction(name=\"v\", grid=model.grid, time_order=1, space_order=space_order)\n", "\n", - " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order, \n", + " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order,\n", " staggered=NODE)\n", "\n", - " r = TimeFunction(name=\"r\", grid=model.grid, time_order=1, space_order=space_order, \n", + " r = TimeFunction(name=\"r\", grid=model.grid, time_order=1, space_order=space_order,\n", " staggered=NODE)\n", - " \n", + "\n", " # define the source injection and create interpolation expression for receivers\n", - " \n", + "\n", " src_rec_expr, src, rec = src_rec(p, model)\n", - " \n", + "\n", " eqn = SLS(model, p, r, v)\n", - " \n", + "\n", " op = Operator(eqn + src_rec_expr, subs=model.spacing_map)\n", - " \n", + "\n", " op(time=time_range.num-1, dt=dt, src=src, rec=rec)\n", - " \n", + "\n", " return rec, v, p" ] }, @@ -564,7 +564,7 @@ "# Stencil created from Ren et al. (2014) viscoacoustic wave equation.\n", "def KV(model, p, v):\n", "\n", - " # Angular frequency \n", + " # Angular frequency\n", " w = 2. * np.pi * f0\n", "\n", " # Define PDE to v\n", @@ -575,7 +575,7 @@ " pde_p = p.dt + lam * div(v.forward) - (lam / (w * model.qp)) * div(b * grad(p, shift=.5), shift=-.5)\n", "\n", " u_p = Eq(p.forward, damp * solve(pde_p, p.forward))\n", - " \n", + "\n", " return [u_v, u_p]" ] }, @@ -587,24 +587,24 @@ "source": [ "# Seismic Modelling from Ren et al. (2014) viscoacoustic wave equation.\n", "def modelling_KV(model):\n", - " \n", + "\n", " # Create symbols for particle velocity, pressure field, source and receivers\n", "\n", " v = VectorTimeFunction(name=\"v\", grid=model.grid, time_order=1, space_order=space_order)\n", "\n", - " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order, \n", + " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order,\n", " staggered=NODE)\n", "\n", " # define the source injection and create interpolation expression for receivers\n", - " \n", + "\n", " src_rec_expr, src, rec = src_rec(p, model)\n", - " \n", + "\n", " eqn = KV(model, p, v)\n", - " \n", + "\n", " op = Operator(eqn + src_rec_expr, subs=model.spacing_map)\n", - " \n", + "\n", " op(time=time_range.num-1, dt=dt, src=src, rec=rec)\n", - " \n", + "\n", " return rec, v, p" ] }, @@ -725,7 +725,7 @@ "# Stencil created from Deng and McMechan (2007) viscoacoustic wave equation.\n", "def Maxwell(model, p, v):\n", "\n", - " # Angular frequency \n", + " # Angular frequency\n", " w = 2. * np.pi * f0\n", "\n", " # Define PDE to v\n", @@ -735,7 +735,7 @@ " # Define PDE to p\n", " pde_p = p.dt + lam * div(v.forward) + (w / model.qp) * p\n", " u_p = Eq(p.forward, damp * solve(pde_p, p.forward))\n", - " \n", + "\n", " return [u_v, u_p]" ] }, @@ -747,24 +747,24 @@ "source": [ "# Seismic Modelling from Deng and McMechan (2007) viscoacoustic wave equation.\n", "def modelling_Maxwell(model):\n", - " \n", + "\n", " # Create symbols for particle velocity, pressure field, source and receivers\n", - " \n", + "\n", " v = VectorTimeFunction(name=\"v\", grid=model.grid, time_order=1, space_order=space_order)\n", "\n", - " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order, \n", + " p = TimeFunction(name=\"p\", grid=model.grid, time_order=1, space_order=space_order,\n", " staggered=NODE)\n", "\n", " # define the source injection and create interpolation expression for receivers\n", - " \n", + "\n", " src_rec_expr, src, rec = src_rec(p, model)\n", - " \n", + "\n", " eqn = Maxwell(model, p, v)\n", - " \n", + "\n", " op = Operator(eqn + src_rec_expr, subs=model.spacing_map)\n", - " \n", + "\n", " op(time=time_range.num-1, dt=dt, src=src, rec=rec)\n", - " \n", + "\n", " return rec, v, p" ] }, diff --git a/examples/seismic/tutorials/12_time_blocking.ipynb b/examples/seismic/tutorials/12_time_blocking.ipynb index 65df5f8507..5d3882cdc0 100644 --- a/examples/seismic/tutorials/12_time_blocking.ipynb +++ b/examples/seismic/tutorials/12_time_blocking.ipynb @@ -295,7 +295,6 @@ "# NBVAL_IGNORE_OUTPUT\n", "\n", "# Install pyzfp package in the current Jupyter kernel\n", - "import sys\n", "!{sys.executable} -m pip install blosc\n", "import blosc" ] @@ -317,7 +316,7 @@ "source": [ "import numpy as np\n", "from examples.seismic import RickerSource, Receiver, TimeAxis\n", - "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant, \n", + "from devito import (Grid, Function, TimeFunction, SpaceDimension, Constant,\n", " Eq, Operator, configuration, norm, Buffer)\n", "from examples.seismic.self_adjoint import setup_w_over_q\n", "import matplotlib as mpl\n", @@ -326,7 +325,7 @@ "import copy\n", "import os\n", "\n", - "# These lines force images to be displayed in the notebook, and scale up fonts \n", + "# These lines force images to be displayed in the notebook, and scale up fonts\n", "%matplotlib inline\n", "mpl.rc('font', size=14)\n", "\n", @@ -410,11 +409,11 @@ "origin = (0., 0.) # Origin of coordinate system, specified in m.\n", "extent = tuple([s*(n-1) for s, n in zip(spacing, shape)])\n", "\n", - "# Define the dimensions \n", + "# Define the dimensions\n", "x = SpaceDimension(name='x', spacing=Constant(name='h_x', value=extent[0]/(shape[0]-1)))\n", "z = SpaceDimension(name='z', spacing=Constant(name='h_z', value=extent[1]/(shape[1]-1)))\n", "\n", - "# Initialize the Devito grid \n", + "# Initialize the Devito grid\n", "dtype = np.float32\n", "grid = Grid(extent=extent, shape=shape, origin=origin, dimensions=(x, z), dtype=dtype)\n", "\n", @@ -428,7 +427,7 @@ "print(\"grid.extent; \", grid.extent)\n", "print(\"grid.spacing_map;\", grid.spacing_map)\n", "\n", - "# Create velocity and buoyancy fields. \n", + "# Create velocity and buoyancy fields.\n", "space_order = 8\n", "m0 = Function(name='m0', grid=grid, space_order=space_order)\n", "b = Function(name='b', grid=grid, space_order=space_order)\n", @@ -523,9 +522,9 @@ "\n", "plt.figure(figsize=(12,14))\n", "\n", - "# plot velocity \n", + "# plot velocity\n", "plt.subplot(2, 2, 1)\n", - "plt.imshow(np.transpose(m0.data), cmap=cm.jet, \n", + "plt.imshow(np.transpose(m0.data), cmap=cm.jet,\n", " vmin=vmin, vmax=vmax, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='Velocity (m/msec)')\n", "plt.plot(nl_rec1.coordinates.data[:, 0], nl_rec1.coordinates.data[:, 1], \\\n", @@ -551,7 +550,7 @@ "\n", "# plot velocity perturbation\n", "plt.subplot(2, 2, 3)\n", - "plt.imshow(np.transpose(dm.data), cmap=\"seismic\", \n", + "plt.imshow(np.transpose(dm.data), cmap=\"seismic\",\n", " vmin=pmin, vmax=pmax, extent=plt_extent)\n", "plt.colorbar(orientation='horizontal', label='Velocity (m/msec)')\n", "plt.plot(nl_rec1.coordinates.data[:, 0], nl_rec1.coordinates.data[:, 1], \\\n", @@ -659,7 +658,7 @@ "v1 = TimeFunction(name=\"v1\", grid=grid, time_order=2, space_order=space_order, save=nt)\n", "v2 = TimeFunction(name=\"v2\", grid=grid, time_order=2, space_order=space_order, save=Buffer(M))\n", "\n", - "# get time and space dimensions \n", + "# get time and space dimensions\n", "t,x,z = u1.dimensions\n", "\n", "# Source terms (see notebooks linked above for more detail)\n", @@ -912,7 +911,7 @@ "# Number of time blocks\n", "N = int((nt-1) / M) + 1\n", "\n", - "# Open a binary file in append mode to save the wavefield chunks \n", + "# Open a binary file in append mode to save the wavefield chunks\n", "filename = \"timeblocking.nonlinear.bin\"\n", "\n", "if os.path.exists(filename):\n", @@ -924,7 +923,7 @@ "file_length = np.zeros(nt, dtype=np.int64)\n", "\n", "# The length of the data type, 4 bytes for float32\n", - "itemsize = v2.data[0,:,:].dtype.itemsize \n", + "itemsize = v2.data[0,:,:].dtype.itemsize\n", "\n", "# The length of a an uncompressed wavefield, used to compute compression ratio below\n", "len0 = 4.0 * np.prod(v2._data[0,:,:].shape)\n", @@ -944,15 +943,15 @@ "\n", " # assign\n", " v2_all[kt,:,:] = v2.data[(kt%M),:,:]\n", - " \n", + "\n", " # compression\n", - " c = blosc.compress_ptr(v2._data[(kt%M),:,:].__array_interface__['data'][0], \n", - " np.prod(v2._data[(kt%M),:,:].shape), \n", + " c = blosc.compress_ptr(v2._data[(kt%M),:,:].__array_interface__['data'][0],\n", + " np.prod(v2._data[(kt%M),:,:].shape),\n", " v2._data[(kt%M),:,:].dtype.itemsize, 9, True, 'zstd')\n", "\n", " # compression ratio\n", " cratio = len0 / (1.0 * len(c))\n", - " \n", + "\n", " # serialization\n", " file_offset[kt] = f.tell()\n", " f.write(c)\n", @@ -962,9 +961,9 @@ "# rms_v1 = np.linalg.norm(v1.data[kt,:,:].reshape(-1))\n", "# rms_v2 = np.linalg.norm(v2_all[kt,:,:].reshape(-1))\n", "# rms_12 = np.linalg.norm(v1.data[kt,:,:].reshape(-1) - v2_all[kt,:,:].reshape(-1))\n", - "# print(\"kt1,kt2,len,cratio,|u1|,|u2|,|v1-v2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" % \n", + "# print(\"kt1,kt2,len,cratio,|u1|,|u2|,|v1-v2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" %\n", "# (kt1, kt2, kt2 - kt1 + 1, cratio, rms_v1, rms_v2, rms_12), flush=True)\n", - " \n", + "\n", "# Close the binary file\n", "f.close()" ] @@ -1300,8 +1299,8 @@ "for kN in range(0,N,1):\n", " kt1 = max((kN + 0) * M, 1)\n", " kt2 = min((kN + 1) * M - 1, nt-2)\n", - " \n", - " # 1. Seek to file_offset[kt] \n", + "\n", + " # 1. Seek to file_offset[kt]\n", " # 2. Read file_length[kt1] bytes from file\n", " # 3. Decompress wavefield and assign to v2 Buffer\n", " for kt in range(kt1,kt2+1):\n", @@ -1312,13 +1311,13 @@ "\n", " # Run the operator for this time block\n", " lf_op2(time_m=kt1, time_M=kt2)\n", - " \n", + "\n", " # Uncomment these lines to see per time step outputs\n", "# for kt in range(kt1,kt2+1):\n", "# rms_du1 = np.linalg.norm(duFwd1.data[kt,:,:].reshape(-1))\n", "# rms_du2 = np.linalg.norm(duFwd2.data[kt,:,:].reshape(-1))\n", "# rms_d12 = np.linalg.norm(duFwd1.data[kt,:,:].reshape(-1) - duFwd2.data[kt,:,:].reshape(-1))\n", - "# print(\"kt1,kt2,len,cratio,|du1|,|du2|,|du1-du2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" % \n", + "# print(\"kt1,kt2,len,cratio,|du1|,|du2|,|du1-du2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" %\n", "# (kt1, kt2, kt2 - kt1 + 1, cratio[kt], rms_du1, rms_du2, rms_d12), flush=True)" ] }, @@ -1659,8 +1658,8 @@ "for kN in range(N-1,-1,-1):\n", " kt1 = max((kN + 0) * M, 1)\n", " kt2 = min((kN + 1) * M - 1, nt-2)\n", - " \n", - " # 1. Seek to file_offset[kt] \n", + "\n", + " # 1. Seek to file_offset[kt]\n", " # 2. Read file_length[kt1] bytes from file\n", " # 3. Decompress wavefield and assign to v2 Buffer\n", " for kt in range(kt1,kt2+1,+1):\n", @@ -1671,13 +1670,13 @@ "\n", " # Run the operator for this time block\n", " la_op2(time_m=kt1, time_M=kt2)\n", - " \n", + "\n", " # Uncomment these lines to see per time step outputs\n", "# for kt in range(kt2,kt1-1,-1):\n", "# rms_du1 = np.linalg.norm(duAdj1.data[kt,:,:].reshape(-1))\n", "# rms_du2 = np.linalg.norm(duAdj2.data[kt,:,:].reshape(-1))\n", "# rms_d12 = np.linalg.norm(duAdj1.data[kt,:,:].reshape(-1) - duAdj2.data[kt,:,:].reshape(-1))\n", - "# print(\"kt2,kt1,kt,cratio,|du1|,|du2|,|du1-du2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" % \n", + "# print(\"kt2,kt1,kt,cratio,|du1|,|du2|,|du1-du2|; %3d %3d %3d %10.4f %12.6e %12.6e %12.6e\" %\n", "# (kt2, kt1, kt, cratio[kt], rms_du1, rms_du2, rms_d12), flush=True)" ] }, @@ -1738,7 +1737,7 @@ "norm_dm1 = np.linalg.norm(dm1.data.reshape(-1))\n", "norm_dm12 = np.linalg.norm(dm1.data.reshape(-1) - dm2.data.reshape(-1))\n", "\n", - "print(\"Relative norm of difference wavefield,gradient; %+.4e %+.4e\" % \n", + "print(\"Relative norm of difference wavefield,gradient; %+.4e %+.4e\" %\n", " (norm_du12 / norm_du1, norm_dm12 /norm_dm1))\n", "\n", "assert norm_du12 / norm_du1 < 1e-7\n", diff --git a/examples/seismic/tutorials/13_LSRTM_acoustic.ipynb b/examples/seismic/tutorials/13_LSRTM_acoustic.ipynb index 404de83f9c..26d3eb5cca 100644 --- a/examples/seismic/tutorials/13_LSRTM_acoustic.ipynb +++ b/examples/seismic/tutorials/13_LSRTM_acoustic.ipynb @@ -126,17 +126,15 @@ "%matplotlib inline\n", "import numpy as np\n", "\n", - "from devito import Operator,Eq,solve,Grid,SparseFunction,norm\n", - "from devito import TimeFunction,Function\n", + "from devito import Operator,Eq,norm\n", + "from devito import Function\n", "from devito import gaussian_smooth\n", "from devito import mmax\n", "\n", - "from devito.logger import info\n", "\n", "from examples.seismic import Model\n", - "from examples.seismic import plot_velocity,plot_shotrecord\n", + "from examples.seismic import plot_velocity\n", "from examples.seismic import Receiver\n", - "from examples.seismic import PointSource\n", "from examples.seismic import plot_image,AcquisitionGeometry\n", "from examples.seismic import TimeAxis\n", "\n", @@ -144,9 +142,7 @@ "from examples.seismic.acoustic import AcousticWaveSolver\n", "\n", "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.axes_grid1 import ImageGrid\n", "from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable\n", - "import matplotlib.ticker as plticker\n", "\n", "from devito import configuration\n", "configuration['log-level'] = 'WARNING'" @@ -195,7 +191,7 @@ "# Define a velocity profile. The velocity is in km/s\n", "vp_top = 1.5\n", "\n", - "v[:] = vp_top # Top velocity \n", + "v[:] = vp_top # Top velocity\n", "v[:, 30:65]= vp_top +0.5\n", "v[:, 65:101]= vp_top +1.5\n", "v[40:60, 35:55]= vp_top+1\n", @@ -206,7 +202,7 @@ "model0 = Model(vp=v, origin=origin, shape=shape, spacing=spacing,\n", " space_order=8, bcs=init_damp,nbl=npad,dtype=dtype)\n", "\n", - "dt = model.critical_dt \n", + "dt = model.critical_dt\n", "s = model.grid.stepping_dim.spacing\n", "time_range = TimeAxis(start=t0, stop=tn, step=dt)\n", "nt=time_range.num" @@ -263,7 +259,7 @@ "# First, position source centrally in all dimensions, then set depth\n", "src_coordinates = np.empty((1, 2))\n", "src_coordinates[0, :] = np.array(model.domain_size) * .5\n", - "src_coordinates[0, -1] = 30. \n", + "src_coordinates[0, -1] = 30.\n", "\n", "# Define acquisition geometry: receivers\n", "\n", @@ -303,57 +299,57 @@ "outputs": [], "source": [ "def lsrtm_gradient(dm):\n", - " \n", + "\n", " residual = Receiver(name='residual', grid=model.grid, time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", - " \n", + "\n", " d_obs = Receiver(name='d_obs', grid=model.grid,time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", "\n", " d_syn = Receiver(name='d_syn', grid=model.grid,time_range=geometry.time_axis,\n", " coordinates=geometry.rec_positions)\n", - " \n", + "\n", " grad_full = Function(name='grad_full', grid=model.grid)\n", - " \n", + "\n", " grad_illum = Function(name='grad_illum', grid=model.grid)\n", - " \n", + "\n", " src_illum = Function (name =\"src_illum\", grid = model.grid)\n", "\n", " # Using devito's reference of virtual source\n", " dm_true = (solver.model.vp.data**(-2) - model0.vp.data**(-2))\n", - " \n", + "\n", " objective = 0.\n", " u0 = None\n", " for i in range(nshots):\n", - " \n", + "\n", " #Observed Data using Born's operator\n", " geometry.src_positions[0, :] = source_locations[i, :]\n", "\n", " _, u0, _ = solver.forward(vp=model0.vp, save=True, u=u0)\n", - " \n", + "\n", " _, _, _,_ = solver.jacobian(dm_true, vp=model0.vp, rec = d_obs)\n", - " \n", + "\n", " #Calculated Data using Born's operator\n", " solver.jacobian(dm, vp=model0.vp, rec = d_syn)\n", - " \n", + "\n", " residual.data[:] = d_syn.data[:]- d_obs.data[:]\n", - " \n", + "\n", " grad_shot,_ = solver.gradient(rec=residual, u=u0, vp=model0.vp)\n", - " \n", + "\n", " src_illum_upd = Eq(src_illum, src_illum + u0**2)\n", " op_src = Operator([src_illum_upd])\n", " op_src.apply()\n", - " \n", + "\n", " grad_sum = Eq(grad_full, grad_full + grad_shot)\n", " op_grad = Operator([grad_sum])\n", " op_grad.apply()\n", - " \n", + "\n", " objective += .5*norm(residual)**2\n", - " \n", + "\n", " grad_f = Eq(grad_illum, grad_full/(src_illum+10**-9))\n", " op_gradf = Operator([grad_f])\n", " op_gradf.apply()\n", - " \n", + "\n", " return objective,grad_illum,d_obs,d_syn" ] }, @@ -388,31 +384,31 @@ "outputs": [], "source": [ "def get_alfa(grad_iter,image_iter,niter_lsrtm):\n", - " \n", - " \n", + "\n", + "\n", " term1 = np.dot(image_iter.reshape(-1), image_iter.reshape(-1))\n", - " \n", + "\n", " term2 = np.dot(image_iter.reshape(-1), grad_iter.reshape(-1))\n", - " \n", + "\n", " term3 = np.dot(grad_iter.reshape(-1), grad_iter.reshape(-1))\n", - " \n", + "\n", " if niter_lsrtm == 0:\n", - " \n", + "\n", " alfa = .05 / mmax(grad_full)\n", - " \n", + "\n", " else:\n", " abb1 = term1 / term2\n", - " \n", + "\n", " abb2 = term2 / term3\n", - " \n", + "\n", " abb3 = abb2 / abb1\n", - " \n", + "\n", " if abb3 > 0 and abb3 < 1:\n", " alfa = abb2\n", " else:\n", " alfa = abb1\n", - " \n", - " return alfa " + "\n", + " return alfa" ] }, { @@ -579,7 +575,7 @@ "history = np.zeros((niter, 1)) #objective function\n", "\n", "image_prev = np.zeros((model0.vp.shape[0],model0.vp.shape[1]))\n", - " \n", + "\n", "grad_prev = np.zeros((model0.vp.shape[0],model0.vp.shape[1]))\n", "\n", "yk = np.zeros((model0.vp.shape[0],model0.vp.shape[1]))\n", @@ -587,29 +583,29 @@ "sk = np.zeros((model0.vp.shape[0],model0.vp.shape[1]))\n", "\n", "for k in range(niter) :\n", - " \n", + "\n", " dm = image_up_dev # Reflectivity for Calculated data via Born\n", "\n", " print('LSRTM Iteration',k+1)\n", - " \n", + "\n", " objective,grad_full,d_obs,d_syn = lsrtm_gradient(dm)\n", - " \n", + "\n", " history[k] = objective\n", - " \n", + "\n", " yk = grad_full.data - grad_prev\n", - " \n", + "\n", " sk = image_up_dev - image_prev\n", "\n", " alfa = get_alfa(yk,sk,k)\n", - " \n", + "\n", " grad_prev = grad_full.data\n", "\n", " image_prev = image_up_dev\n", - " \n", + "\n", " image_up_dev = image_up_dev - alfa*grad_full.data\n", - " \n", + "\n", " if k == 0: # Saving the first migration using Born operator.\n", - " \n", + "\n", " image = image_up_dev" ] }, @@ -664,7 +660,7 @@ " vmin=-.05,\n", " vmax=.05,\n", " cmap=cmap,extent=extent)\n", - " \n", + "\n", " plt.xlabel('X position (km)')\n", " plt.ylabel('Depth (km)')\n", "\n", diff --git a/examples/seismic/tutorials/14_creating_synthetics.ipynb b/examples/seismic/tutorials/14_creating_synthetics.ipynb index 3dc601852a..bb27537db3 100644 --- a/examples/seismic/tutorials/14_creating_synthetics.ipynb +++ b/examples/seismic/tutorials/14_creating_synthetics.ipynb @@ -66,7 +66,7 @@ " ! pip install gempy==2.2.9\n", " # Import gempy\n", " import gempy as gp\n", - " \n", + "\n", "try:\n", " # Import jinja2 (used for colour coding geology)\n", " import jinja2\n", @@ -74,14 +74,12 @@ " # Install jinja2\n", " ! pip install jinja2\n", " # Import jinja2\n", - " import jinja2\n", - " \n", + "\n", "try:\n", " # Check vtk notebook backend is installed\n", " import ipyvtklink\n", "except ModuleNotFoundError:\n", - " ! pip install ipyvtklink\n", - " import ipyvtklink" + " ! pip install ipyvtklink" ] }, { @@ -1299,7 +1297,7 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "# This discrete PDE can be solved in a time-marching way updating u(t+dt) from the previous time step\n", - "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as \n", + "# Devito as a shortcut for u(t+dt) which is u.forward. We can then rewrite the PDE as\n", "# a time marching updating equation known as a stencil using customized SymPy functions\n", "\n", "stencil = dv.Eq(u.forward, dv.solve(pde, u.forward))\n", diff --git a/examples/seismic/tutorials/15_tti_qp_pure.ipynb b/examples/seismic/tutorials/15_tti_qp_pure.ipynb index 4013a14e1e..c936aae461 100644 --- a/examples/seismic/tutorials/15_tti_qp_pure.ipynb +++ b/examples/seismic/tutorials/15_tti_qp_pure.ipynb @@ -47,7 +47,7 @@ "source": [ "import numpy as np\n", "from devito import (Function, TimeFunction, cos, sin, solve,\n", - " Eq, Operator, configuration, norm)\n", + " Eq, Operator)\n", "from examples.seismic import TimeAxis, RickerSource, Receiver, demo_model\n", "from matplotlib import pyplot as plt" ] @@ -67,11 +67,11 @@ "metadata": {}, "outputs": [], "source": [ - "# NBVAL_IGNORE_OUTPUT \n", + "# NBVAL_IGNORE_OUTPUT\n", "\n", "shape = (101,101) # 101x101 grid\n", "spacing = (10.,10.) # spacing of 10 meters\n", - "origin = (0.,0.) \n", + "origin = (0.,0.)\n", "nbl = 0 # number of pad points\n", "\n", "model = demo_model('layers-tti', spacing=spacing, space_order=8,\n", @@ -192,7 +192,7 @@ "source": [ "# NBVAL_IGNORE_OUTPUT\n", "\n", - "# time stepping \n", + "# time stepping\n", "p = TimeFunction(name=\"p\", grid=model.grid, time_order=2, space_order=2)\n", "q = Function(name=\"q\", grid=model.grid, space_order=8)\n", "\n", diff --git a/examples/seismic/utils.py b/examples/seismic/utils.py index 6491d9ca5a..d691c101c8 100644 --- a/examples/seismic/utils.py +++ b/examples/seismic/utils.py @@ -7,7 +7,7 @@ from .source import * -__all__ = ['AcquisitionGeometry', 'setup_geometry', 'seismic_args'] +__all__ = ['AcquisitionGeometry', 'seismic_args', 'setup_geometry'] def setup_geometry(model, tn, f0=0.010, interpolation='linear', **kwargs): @@ -79,8 +79,8 @@ def __init__(self, model, rec_positions, src_positions, t0, tn, **kwargs): self._src_type = kwargs.get('src_type') assert (self.src_type in sources or self.src_type is None) self._f0 = kwargs.get('f0') - self._a = kwargs.get('a', None) - self._t0w = kwargs.get('t0w', None) + self._a = kwargs.get('a') + self._t0w = kwargs.get('t0w') if self._src_type is not None and self._f0 is None: error("Peak frequency must be provided in KHz" + " for source of type %s" % self._src_type) diff --git a/examples/timestepping/superstep.ipynb b/examples/timestepping/superstep.ipynb index c67b445087..d71a9cd7cc 100644 --- a/examples/timestepping/superstep.ipynb +++ b/examples/timestepping/superstep.ipynb @@ -54,13 +54,11 @@ "metadata": {}, "outputs": [], "source": [ - "from sympy import pprint\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", - "from time import perf_counter\n", "\n", - "from devito import Grid, Function, TimeFunction, VectorTimeFunction, Eq, solve, Operator, ConditionalDimension, exp, SparseTimeFunction\n", + "from devito import Grid, Function, TimeFunction, Eq, solve, Operator, ConditionalDimension, SparseTimeFunction\n", "from devito.timestepping.superstep import superstep_generator, superstep_solution_transfer" ] }, diff --git a/examples/userapi/00_sympy.ipynb b/examples/userapi/00_sympy.ipynb index 8a205b8c68..431cf31534 100644 --- a/examples/userapi/00_sympy.ipynb +++ b/examples/userapi/00_sympy.ipynb @@ -337,8 +337,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Type solution here\n", - "from sympy import solve" + "# Type solution here" ] }, { @@ -457,8 +456,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Solution here\n", - "from sympy import solve" + "# Solution here" ] }, { @@ -976,8 +974,8 @@ } ], "source": [ - "from IPython.core.display import Image \n", - "Image(filename='figures/comic.png') " + "from IPython.core.display import Image\n", + "Image(filename='figures/comic.png')" ] }, { diff --git a/examples/userapi/03_subdomains.ipynb b/examples/userapi/03_subdomains.ipynb index 34402f40ad..8c73671543 100644 --- a/examples/userapi/03_subdomains.ipynb +++ b/examples/userapi/03_subdomains.ipynb @@ -603,9 +603,9 @@ "outputs": [], "source": [ "import numpy as np\n", - "from devito import (TimeFunction, VectorTimeFunction, TensorTimeFunction,\n", - " div, grad, curl, diag)\n", - "from examples.seismic import ModelElastic, plot_velocity, TimeAxis, RickerSource, plot_image" + "from devito import (VectorTimeFunction, TensorTimeFunction,\n", + " div, grad, diag)\n", + "from examples.seismic import ModelElastic, TimeAxis, RickerSource, plot_image" ] }, { @@ -689,7 +689,7 @@ " def define(self, dimensions):\n", " x, y, z = dimensions\n", " return {x: x, y: y, z: ('left', l1+nbl)}\n", - " \n", + "\n", "class Lower(SubDomain):\n", " name = 'lower'\n", " def define(self, dimensions):\n", diff --git a/examples/userapi/04_boundary_conditions.ipynb b/examples/userapi/04_boundary_conditions.ipynb index 2ab20396b1..d154dc64ba 100644 --- a/examples/userapi/04_boundary_conditions.ipynb +++ b/examples/userapi/04_boundary_conditions.ipynb @@ -432,11 +432,11 @@ " The field being updated: 'pressure' or 'velocity'\n", " \"\"\"\n", " lhs, rhs = eq.evaluate.args\n", - " \n", + "\n", " # Get vertical subdimension and its parent\n", " yfs = subdomain.dimensions[-1]\n", " y = yfs.parent\n", - " \n", + "\n", " # Functions present in stencil\n", " funcs = retrieve_functions(rhs)\n", " mapper = {}\n", @@ -457,7 +457,7 @@ " # Substitute where index is negative for +ve where index is positive\n", " mapper.update({f: f.subs({yind: INT(abs(yind))})})\n", " return Eq(lhs, rhs.subs(mapper), subdomain=subdomain)\n", - " \n", + "\n", "fs_p = free_surface_top(eq_p, freesurface, 'pressure')\n", "fs_v = free_surface_top(eq_v, freesurface, 'velocity')" ] diff --git a/examples/userapi/05_conditional_dimension.ipynb b/examples/userapi/05_conditional_dimension.ipynb index 467a729d82..c8d50d629d 100644 --- a/examples/userapi/05_conditional_dimension.ipynb +++ b/examples/userapi/05_conditional_dimension.ipynb @@ -587,7 +587,7 @@ "ci = ConditionalDimension(name='ci', parent=i, factor=factor)\n", "\n", "g = Function(name='g', shape=(size,), dimensions=(i,))\n", - "# Intialize g \n", + "# Intialize g\n", "g.data[:,]= list(range(size))\n", "f = Function(name='f', shape=(int(size/factor),), dimensions=(ci,))\n", "\n", diff --git a/examples/userapi/06_sparse_operations.ipynb b/examples/userapi/06_sparse_operations.ipynb index b4c131e247..b150474ac8 100644 --- a/examples/userapi/06_sparse_operations.ipynb +++ b/examples/userapi/06_sparse_operations.ipynb @@ -36,7 +36,7 @@ "from devito import *\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from matplotlib.ticker import AutoMinorLocator, FixedLocator" + "from matplotlib.ticker import FixedLocator" ] }, { @@ -693,7 +693,7 @@ "outputs": [], "source": [ "coeffs = np.ones((5, 2, 5))\n", - "s = PrecomputedSparseTimeFunction(name=\"s\", grid=grid, npoint=npoint, nt=nt, \n", + "s = PrecomputedSparseTimeFunction(name=\"s\", grid=grid, npoint=npoint, nt=nt,\n", " interpolation_coeffs=coeffs,\n", " coordinates=coords, r=2)\n", "\n", diff --git a/examples/userapi/07_functions_on_subdomains.ipynb b/examples/userapi/07_functions_on_subdomains.ipynb index c0aecdbb7b..4c8d1a50da 100644 --- a/examples/userapi/07_functions_on_subdomains.ipynb +++ b/examples/userapi/07_functions_on_subdomains.ipynb @@ -1051,7 +1051,7 @@ "nt = time_range.num # number of time steps\n", "\n", "f0 = 0.040 # Source peak frequency is 10Hz (0.010 kHz)\n", - "src = RickerSource(name='src', grid=model.grid, f0=f0, time_range=time_range) \n", + "src = RickerSource(name='src', grid=model.grid, f0=f0, time_range=time_range)\n", "\n", "src.coordinates.data[0, :] = np.array(model.domain_size) * .5\n", "src.coordinates.data[0, -1] = 20. # Depth is 20m" @@ -2770,7 +2770,7 @@ "nt = time_range.num # number of time steps\n", "\n", "f0 = 0.030 # Source peak frequency is 30Hz (0.030 kHz)\n", - "src = RickerSource(name='src', grid=grid1, f0=f0, time_range=time_range) \n", + "src = RickerSource(name='src', grid=grid1, f0=f0, time_range=time_range)\n", "\n", "src.coordinates.data[0, :] = 500.\n", "src.coordinates.data[0, -1] = 350. # Depth is 350m" diff --git a/tests/test_data.py b/tests/test_data.py index cf430dc744..eac3aa1c43 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -665,9 +665,7 @@ def test_getitem(self, mode): assert np.all(result[3] == [[3, 2, 1, 0]]) result1 = np.array(f.data[5, 6:1:-1]) - if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y]: - assert result1.size == 0 - elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: + if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y] or LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: assert result1.size == 0 elif RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: assert np.all(result1 == [[46, 45]]) @@ -675,9 +673,7 @@ def test_getitem(self, mode): assert np.all(result1 == [[44, 43, 42]]) result2 = np.array(f.data[6:4:-1, 6:1:-1]) - if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y]: - assert result2.size == 0 - elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: + if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y] or LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: assert result2.size == 0 elif RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: assert np.all(result2[0] == [[54, 53]]) @@ -687,9 +683,7 @@ def test_getitem(self, mode): assert np.all(result2[1] == [[44, 43, 42]]) result3 = np.array(f.data[6:4:-1, 2:7]) - if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y]: - assert result3.size == 0 - elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: + if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y] or LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: assert result3.size == 0 elif RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: assert np.all(result3[0] == [[50, 51]]) @@ -784,9 +778,7 @@ def test_setitem(self, mode): [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]) - elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: - assert np.all(np.array(g.data)) == 0 - elif RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: + elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y] or RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: assert np.all(np.array(g.data)) == 0 else: assert np.all(np.array(g.data)) == 0 @@ -921,11 +913,7 @@ def test_niche_slicing(self, mode): t.data[:] = b tdat0 = np.array(f.data[-2::, -2::]) - if LEFT in glb_pos_map0[x0] and LEFT in glb_pos_map0[y0]: - assert tdat0.size == 0 - elif LEFT in glb_pos_map0[x0] and RIGHT in glb_pos_map0[y0]: - assert tdat0.size == 0 - elif RIGHT in glb_pos_map0[x0] and LEFT in glb_pos_map0[y0]: + if LEFT in glb_pos_map0[x0] and LEFT in glb_pos_map0[y0] or LEFT in glb_pos_map0[x0] and RIGHT in glb_pos_map0[y0] or RIGHT in glb_pos_map0[x0] and LEFT in glb_pos_map0[y0]: assert tdat0.size == 0 else: assert np.all(tdat0 == [[54, 55], @@ -1091,9 +1079,7 @@ def test_neg_start_stop(self, mode): h.data[8:10, 0:4] = f.data[slices] - if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y]: - assert np.count_nonzero(h.data[:]) == 0 - elif LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: + if LEFT in glb_pos_map[x] and LEFT in glb_pos_map[y] or LEFT in glb_pos_map[x] and RIGHT in glb_pos_map[y]: assert np.count_nonzero(h.data[:]) == 0 elif RIGHT in glb_pos_map[x] and LEFT in glb_pos_map[y]: assert np.all(np.array(h.data) == [[0, 0, 0, 0, 0, 0], diff --git a/tests/test_derivatives.py b/tests/test_derivatives.py index 8872abb743..312572173a 100644 --- a/tests/test_derivatives.py +++ b/tests/test_derivatives.py @@ -300,7 +300,7 @@ def test_fd_space_45(self, staggered, space_order, ndim): Dpolynome = diff(polynome) Dpolyvalues = np.array([Dpolynome.subs(x, xi) for xi in xx_s], np.float32) # FD derivative, symbolic - u_deriv = getattr(u, 'dx45') + u_deriv = u.dx45 # Compute numerical FD stencil = Eq(du, u_deriv) op = Operator(stencil, subs={d.spacing: dx for d in grid.dimensions}) diff --git a/tests/test_operator.py b/tests/test_operator.py index 1ef4bfc7e3..c73a25664a 100644 --- a/tests/test_operator.py +++ b/tests/test_operator.py @@ -2302,7 +2302,7 @@ def test_to_json(self): summary.to_json("memory_estimate_output.json") - with open("memory_estimate_output.json", "r") as infile: + with open("memory_estimate_output.json") as infile: json_object = json.load(infile) assert json_object['name'] == summary.name diff --git a/tests/test_save.py b/tests/test_save.py index 995558572c..b3c8fd487b 100644 --- a/tests/test_save.py +++ b/tests/test_save.py @@ -8,7 +8,7 @@ def initial(nt, nx, ny): np.linspace(0., 1., ny, dtype=np.float32)) ui = np.zeros((nt, nx, ny), dtype=np.float32) r = (xx - .5)**2. + (yy - .5)**2. - ui[0, np.logical_and(.05 <= r, r <= .1)] = 1. + ui[0, np.logical_and(r >= .05, r <= .1)] = 1. return ui diff --git a/tests/test_subdomains.py b/tests/test_subdomains.py index 2924aa4c78..03d6d9ef9e 100644 --- a/tests/test_subdomains.py +++ b/tests/test_subdomains.py @@ -375,14 +375,14 @@ class MySubdomains2(SubDomainSet): bounds_xm = np.array([1, Nx/2+1], dtype=np.int32) bounds_xM = np.array([Nx/2+1, 1], dtype=np.int32) - bounds_ym = int(1) + bounds_ym = 1 bounds_yM = int(Ny/2+1) bounds1 = (bounds_xm, bounds_xM, bounds_ym, bounds_yM) bounds_xm = np.array([1, Nx/2+1], dtype=np.int32) bounds_xM = np.array([Nx/2+1, 1], dtype=np.int32) bounds_ym = int(Ny/2+1) - bounds_yM = int(1) + bounds_yM = 1 bounds2 = (bounds_xm, bounds_xM, bounds_ym, bounds_yM) grid = Grid(extent=(Nx, Ny), shape=(Nx, Ny)) @@ -474,14 +474,14 @@ class MySubdomains2(SubDomainSet): bounds_xm = np.array([1, Nx/2+1], dtype=np.int32) bounds_xM = np.array([Nx/2+1, 1], dtype=np.int32) - bounds_ym = int(1) + bounds_ym = 1 bounds_yM = int(Ny/2+1) bounds1 = (bounds_xm, bounds_xM, bounds_ym, bounds_yM) bounds_xm = np.array([1, Nx/2+1], dtype=np.int32) bounds_xM = np.array([Nx/2+1, 1], dtype=np.int32) bounds_ym = int(Ny/2+1) - bounds_yM = int(1) + bounds_yM = 1 bounds2 = (bounds_xm, bounds_xM, bounds_ym, bounds_yM) grid = Grid(extent=(Nx, Ny), shape=(Nx, Ny)) diff --git a/tests/test_tensors.py b/tests/test_tensors.py index 63b3f2bae5..2f3090fee4 100644 --- a/tests/test_tensors.py +++ b/tests/test_tensors.py @@ -253,7 +253,7 @@ def test_non_devito_tens(func1): f1 = func1(name="f1", grid=grid, components=comps) f2 = func1(name="f2", grid=grid) - assert f1.T == f1 + assert f1 == f1.T assert isinstance(f1.T, sympy.ImmutableDenseMatrix) # No devito object in the matrix components, should return a pure sympy Matrix assert ~isinstance(f1.T, func1) @@ -275,7 +275,7 @@ def test_partial_devito_tens(func1): f1 = func1(name="f1", grid=grid, components=comps) - assert f1.T == f1 + assert f1 == f1.T assert isinstance(f1.T, func1) # Should have original grid assert f1[0, 2].grid == grid From 9b5069cdd2f4bb6fcdddb321baec02fa67b9e602 Mon Sep 17 00:00:00 2001 From: JDBetteridge Date: Wed, 24 Dec 2025 17:01:58 +0000 Subject: [PATCH 20/20] lint: Re-sort all imports with new isort rules --- auto_lint.sh | 22 -------- benchmarks/regression/benchmarks/arguments.py | 3 +- benchmarks/regression/benchmarks/codegen.py | 1 - .../regression/benchmarks/simple_operators.py | 3 +- benchmarks/user/advisor/roofline.py | 12 ++--- benchmarks/user/advisor/run_advisor.py | 7 ++- benchmarks/user/benchmark.py | 26 ++++----- conftest.py | 14 ++--- devito/arch/archinfo.py | 16 +++--- devito/arch/compiler.py | 27 +++++----- devito/builtins/arithmetic.py | 2 +- devito/builtins/initializers.py | 2 +- devito/checkpointing/checkpoint.py | 1 + devito/core/arm.py | 5 +- devito/core/autotuning.py | 5 +- devito/core/cpu.py | 15 +++--- devito/core/gpu.py | 14 ++--- devito/core/intel.py | 8 +-- devito/core/operator.py | 7 +-- devito/core/power.py | 5 +- devito/data/allocators.py | 4 +- devito/data/data.py | 2 +- devito/data/decomposition.py | 2 +- devito/data/utils.py | 2 +- devito/finite_differences/differentiable.py | 13 +++-- devito/finite_differences/elementary.py | 1 - .../finite_differences/finite_difference.py | 9 ++-- devito/finite_differences/rsfd.py | 5 +- devito/finite_differences/tools.py | 4 +- devito/ir/cgen/printer.py | 8 ++- devito/ir/clusters/algorithms.py | 16 +++--- devito/ir/clusters/analysis.py | 5 +- devito/ir/clusters/cluster.py | 13 +++-- devito/ir/clusters/visitors.py | 1 - devito/ir/equations/algorithms.py | 17 +++--- devito/ir/equations/equation.py | 8 +-- devito/ir/iet/algorithms.py | 6 +-- devito/ir/iet/nodes.py | 21 ++++---- devito/ir/iet/visitors.py | 31 ++++++----- devito/ir/stree/algorithms.py | 12 +++-- devito/ir/stree/tree.py | 4 +- devito/ir/support/basic.py | 28 +++++----- devito/ir/support/guards.py | 4 +- devito/ir/support/space.py | 13 ++--- devito/ir/support/symregistry.py | 5 +- devito/ir/support/syncs.py | 1 + devito/ir/support/utils.py | 10 ++-- devito/mpatches/as_independent.py | 5 +- devito/mpatches/rationaltools.py | 2 +- devito/mpi/distributed.py | 18 +++---- devito/mpi/halo_scheme.py | 14 ++--- devito/mpi/routines.py | 32 ++++++----- devito/operations/interpolators.py | 13 ++--- devito/operations/solve.py | 4 +- devito/operator/operator.py | 53 ++++++++++--------- devito/operator/profiling.py | 5 +- devito/parameters.py | 2 +- devito/passes/clusters/aliases.py | 28 +++++----- devito/passes/clusters/asynchrony.py | 6 ++- devito/passes/clusters/blocking.py | 13 +++-- devito/passes/clusters/buffering.py | 15 +++--- devito/passes/clusters/cse.py | 7 +-- devito/passes/clusters/derivatives.py | 2 +- devito/passes/clusters/factorization.py | 5 +- devito/passes/clusters/implicit.py | 2 +- devito/passes/clusters/misc.py | 6 ++- devito/passes/iet/asynchrony.py | 20 +++---- devito/passes/iet/definitions.py | 14 ++--- devito/passes/iet/engine.py | 17 +++--- devito/passes/iet/errors.py | 7 +-- devito/passes/iet/instrument.py | 12 +++-- devito/passes/iet/langbase.py | 12 +++-- devito/passes/iet/languages/C.py | 4 +- devito/passes/iet/languages/CXX.py | 6 +-- devito/passes/iet/languages/openacc.py | 19 ++++--- devito/passes/iet/languages/openmp.py | 27 ++++++---- devito/passes/iet/languages/targets.py | 17 +++--- devito/passes/iet/languages/utils.py | 2 +- devito/passes/iet/linearization.py | 9 ++-- devito/passes/iet/misc.py | 15 +++--- devito/passes/iet/mpi.py | 9 ++-- devito/passes/iet/orchestration.py | 12 +++-- devito/passes/iet/parpragma.py | 18 ++++--- devito/symbolics/extended_dtypes.py | 9 ++-- devito/symbolics/extended_sympy.py | 10 ++-- devito/symbolics/inspection.py | 12 ++--- devito/symbolics/manipulation.py | 23 ++++---- devito/symbolics/queries.py | 8 +-- devito/symbolics/search.py | 5 +- devito/tools/abc.py | 1 - devito/tools/data_structures.py | 8 +-- devito/tools/utils.py | 2 +- devito/types/array.py | 8 +-- devito/types/basic.py | 11 ++-- devito/types/caching.py | 1 - devito/types/dense.py | 29 +++++----- devito/types/dimension.py | 9 ++-- devito/types/equation.py | 6 +-- devito/types/grid.py | 13 ++--- devito/types/misc.py | 5 +- devito/types/object.py | 2 +- devito/types/sparse.py | 22 ++++---- devito/types/tensor.py | 2 + devito/types/utils.py | 1 + examples/cfd/example_diffusion.py | 2 +- examples/cfd/tools.py | 4 +- examples/misc/linalg.py | 2 +- examples/seismic/acoustic/acoustic_example.py | 5 +- examples/seismic/acoustic/operators.py | 4 +- examples/seismic/acoustic/wavesolver.py | 4 +- examples/seismic/elastic/elastic_example.py | 3 +- examples/seismic/elastic/operators.py | 5 +- examples/seismic/elastic/wavesolver.py | 3 +- examples/seismic/inversion/fwi.py | 8 ++- examples/seismic/inversion/inversion_utils.py | 2 +- examples/seismic/model.py | 9 ++-- examples/seismic/plotting.py | 1 + examples/seismic/self_adjoint/example_iso.py | 8 ++- examples/seismic/self_adjoint/operators.py | 2 +- examples/seismic/self_adjoint/test_utils.py | 3 +- .../self_adjoint/test_wavesolver_iso.py | 12 +++-- examples/seismic/self_adjoint/utils.py | 3 +- examples/seismic/self_adjoint/wavesolver.py | 5 +- examples/seismic/source.py | 4 +- examples/seismic/test_seismic_utils.py | 2 +- examples/seismic/tti/operators.py | 3 +- examples/seismic/tti/tti_example.py | 6 +-- examples/seismic/tti/wavesolver.py | 12 +++-- examples/seismic/utils.py | 5 +- examples/seismic/viscoacoustic/operators.py | 7 +-- .../viscoacoustic/viscoacoustic_example.py | 5 +- examples/seismic/viscoacoustic/wavesolver.py | 8 +-- examples/seismic/viscoelastic/operators.py | 5 +- .../viscoelastic/viscoelastic_example.py | 3 +- examples/seismic/viscoelastic/wavesolver.py | 2 +- examples/timestepping/acoustic_superstep.py | 9 +--- tests/test_adjoint.py | 2 +- tests/test_arch.py | 4 +- tests/test_autotuner.py | 6 +-- tests/test_benchmark.py | 7 +-- tests/test_buffering.py | 10 ++-- tests/test_builtins.py | 12 +++-- tests/test_caching.py | 19 ++++--- tests/test_checkpointing.py | 8 +-- tests/test_constant.py | 2 +- tests/test_cse.py | 10 ++-- tests/test_data.py | 13 ++--- tests/test_derivatives.py | 14 ++--- tests/test_differentiable.py | 11 ++-- tests/test_dimension.py | 26 ++++----- tests/test_dle.py | 18 ++++--- tests/test_docstrings.py | 2 +- tests/test_dse.py | 37 +++++++------ tests/test_dtypes.py | 6 +-- tests/test_error_checking.py | 2 +- tests/test_fission.py | 5 +- tests/test_gpu_common.py | 27 +++++----- tests/test_gpu_openacc.py | 13 ++--- tests/test_gpu_openmp.py | 9 ++-- tests/test_gradient.py | 4 +- tests/test_iet.py | 25 ++++----- tests/test_interpolation.py | 18 ++++--- tests/test_ir.py | 22 ++++---- tests/test_linearize.py | 10 ++-- tests/test_lower_clusters.py | 2 +- tests/test_lower_exprs.py | 7 +-- tests/test_mpi.py | 28 +++++----- tests/test_operator.py | 30 +++++------ tests/test_pickle.py | 44 ++++++++------- tests/test_rebuild.py | 2 +- tests/test_resample.py | 2 +- tests/test_roundoff.py | 4 +- tests/test_save.py | 2 +- tests/test_skewing.py | 8 +-- tests/test_sparse.py | 12 ++--- tests/test_staggered_utils.py | 10 ++-- tests/test_subdomains.py | 16 +++--- tests/test_symbolic_coefficients.py | 7 +-- tests/test_symbolics.py | 36 +++++++------ tests/test_tensors.py | 9 ++-- tests/test_threading.py | 8 +-- tests/test_timestepping.py | 2 +- tests/test_tools.py | 13 ++--- tests/test_tti.py | 2 +- tests/test_unexpansion.py | 14 ++--- tests/test_visitors.py | 15 +++--- tests/test_warnings.py | 5 +- 187 files changed, 986 insertions(+), 869 deletions(-) delete mode 100755 auto_lint.sh diff --git a/auto_lint.sh b/auto_lint.sh deleted file mode 100755 index 1281fd1ce4..0000000000 --- a/auto_lint.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -pre-commit run --all-files trailing-whitespace -git add --all -git commit --no-verify -m "lint: Remove all the trailing whitespace" - -pre-commit run --all-files end-of-file-fixer -git add --all -git commit --no-verify -m "lint: Fix ends of files" - -isort . -git add --all -git commit --no-verify -m "lint: Re-sort all imports with new isort rules" - -ruff check --fix -git add --all -git commit --no-verify -m "lint: First pass with ruff --fix" - -# Don't run these -# ruff check --fix --unsafe-fixes -# git add --all -# git commit --no-verify -m "lint: Second pass with ruff --fix --unsafe-fixes" diff --git a/benchmarks/regression/benchmarks/arguments.py b/benchmarks/regression/benchmarks/arguments.py index 181a117917..662ccec7eb 100644 --- a/benchmarks/regression/benchmarks/arguments.py +++ b/benchmarks/regression/benchmarks/arguments.py @@ -1,5 +1,4 @@ -from devito import Grid, Function, TimeFunction, SparseTimeFunction, Eq, Operator - +from devito import Eq, Function, Grid, Operator, SparseTimeFunction, TimeFunction # ASV config repeat = 10 diff --git a/benchmarks/regression/benchmarks/codegen.py b/benchmarks/regression/benchmarks/codegen.py index d86136f6b5..b573e58e13 100644 --- a/benchmarks/regression/benchmarks/codegen.py +++ b/benchmarks/regression/benchmarks/codegen.py @@ -1,6 +1,5 @@ from examples.seismic.tti.tti_example import tti_setup - repeat = 3 diff --git a/benchmarks/regression/benchmarks/simple_operators.py b/benchmarks/regression/benchmarks/simple_operators.py index 839ecc52cf..b5213ea3e5 100644 --- a/benchmarks/regression/benchmarks/simple_operators.py +++ b/benchmarks/regression/benchmarks/simple_operators.py @@ -1,5 +1,4 @@ -from devito import Grid, Function, TimeFunction, Eq, Operator, gaussian_smooth, norm - +from devito import Eq, Function, Grid, Operator, TimeFunction, gaussian_smooth, norm # ASV config repeat = 3 diff --git a/benchmarks/user/advisor/roofline.py b/benchmarks/user/advisor/roofline.py index 6add2a22e4..12578fda92 100644 --- a/benchmarks/user/advisor/roofline.py +++ b/benchmarks/user/advisor/roofline.py @@ -6,20 +6,18 @@ This module has been partly extracted from the examples directory of Intel Advisor 2018. """ -import click import json import math +import os +import sys + +import click import matplotlib -from matplotlib.ticker import ScalarFormatter import matplotlib.pyplot as plt # noqa - import numpy as np import pandas as pd -import sys -import os - from advisor_logging import check, err, log - +from matplotlib.ticker import ScalarFormatter try: import advisor diff --git a/benchmarks/user/advisor/run_advisor.py b/benchmarks/user/advisor/run_advisor.py index 9c0d1554ff..b3cef8387a 100644 --- a/benchmarks/user/advisor/run_advisor.py +++ b/benchmarks/user/advisor/run_advisor.py @@ -1,14 +1,13 @@ -import click import datetime import logging import os import sys - from pathlib import Path -from subprocess import check_output, PIPE, Popen +from subprocess import PIPE, Popen, check_output from tempfile import gettempdir, mkdtemp -from advisor_logging import check, log, progress, log_process +import click +from advisor_logging import check, log, log_process, progress @click.command() diff --git a/benchmarks/user/benchmark.py b/benchmarks/user/benchmark.py index 420f18df02..4439ad6066 100644 --- a/benchmarks/user/benchmark.py +++ b/benchmarks/user/benchmark.py @@ -1,22 +1,24 @@ -import numpy as np -import click import os -from devito import Device, configuration, info, warning, set_log_level, switchconfig, norm +import click +import numpy as np + +from devito import Device, configuration, info, norm, set_log_level, switchconfig, warning from devito.arch.compiler import IntelCompiler from devito.mpi import MPI from devito.operator.profiling import PerformanceSummary from devito.tools import all_equal, as_tuple, sweep from devito.types.dense import DiscreteFunction - -from examples.seismic.acoustic.acoustic_example import run as acoustic_run, acoustic_setup -from examples.seismic.tti.tti_example import run as tti_run, tti_setup -from examples.seismic.elastic.elastic_example import run as elastic_run, elastic_setup -from examples.seismic.self_adjoint.example_iso import run as acoustic_sa_run, \ - acoustic_sa_setup -from examples.seismic.viscoelastic.viscoelastic_example import run as viscoelastic_run, \ - viscoelastic_setup - +from examples.seismic.acoustic.acoustic_example import acoustic_setup +from examples.seismic.acoustic.acoustic_example import run as acoustic_run +from examples.seismic.elastic.elastic_example import elastic_setup +from examples.seismic.elastic.elastic_example import run as elastic_run +from examples.seismic.self_adjoint.example_iso import acoustic_sa_setup +from examples.seismic.self_adjoint.example_iso import run as acoustic_sa_run +from examples.seismic.tti.tti_example import run as tti_run +from examples.seismic.tti.tti_example import tti_setup +from examples.seismic.viscoelastic.viscoelastic_example import run as viscoelastic_run +from examples.seismic.viscoelastic.viscoelastic_example import viscoelastic_setup model_type = { 'viscoelastic': { diff --git a/conftest.py b/conftest.py index 16ae762b4e..3dc51e2eb0 100644 --- a/conftest.py +++ b/conftest.py @@ -6,14 +6,16 @@ from sympy import Add from sympy.printing import sstr -from devito import Eq, configuration, Revolver # noqa +from devito import Eq, Revolver, configuration # noqa +from devito.arch import Arm, Cpu64, Device, get_advisor_path, sniff_mpi_distro +from devito.arch.compiler import ( + IntelCompiler, NvidiaCompiler, OneapiCompiler, compiler_registry +) from devito.checkpointing import NoopRevolver from devito.finite_differences.differentiable import EvalDerivative -from devito.arch import Cpu64, Device, sniff_mpi_distro, Arm, get_advisor_path -from devito.arch.compiler import (compiler_registry, IntelCompiler, OneapiCompiler, - NvidiaCompiler) -from devito.ir.iet import (FindNodes, FindSymbols, Iteration, ParallelBlock, - retrieve_iteration_tree) +from devito.ir.iet import ( + FindNodes, FindSymbols, Iteration, ParallelBlock, retrieve_iteration_tree +) from devito.tools import as_tuple try: diff --git a/devito/arch/archinfo.py b/devito/arch/archinfo.py index 7f6f769c0f..0273e88a22 100644 --- a/devito/arch/archinfo.py +++ b/devito/arch/archinfo.py @@ -1,22 +1,22 @@ """Collection of utilities to detect properties of the underlying architecture.""" -from contextlib import suppress -from functools import cached_property -from subprocess import PIPE, Popen, DEVNULL, run, CalledProcessError -from pathlib import Path import ctypes -import re +import json import os +import re import sys -import json +from contextlib import suppress +from functools import cached_property +from pathlib import Path +from subprocess import DEVNULL, PIPE, CalledProcessError, Popen, run import cpuinfo import numpy as np -from packaging.version import parse, InvalidVersion import psutil +from packaging.version import InvalidVersion, parse from devito.logger import warning -from devito.tools import as_tuple, all_equal, memoized_func +from devito.tools import all_equal, as_tuple, memoized_func __all__ = [ 'platform_registry', 'get_cpu_info', 'get_gpu_info', 'get_visible_devices', diff --git a/devito/arch/compiler.py b/devito/arch/compiler.py index ad6e7484d1..130f0f5a0c 100644 --- a/devito/arch/compiler.py +++ b/devito/arch/compiler.py @@ -1,29 +1,28 @@ +import platform +import time +import warnings from functools import partial from hashlib import sha1 from itertools import filterfalse -from os import environ, path, makedirs -from packaging.version import Version -from subprocess import (DEVNULL, PIPE, CalledProcessError, check_output, - check_call, run) -import platform -import warnings -import time +from os import environ, makedirs, path +from subprocess import DEVNULL, PIPE, CalledProcessError, check_call, check_output, run import numpy.ctypeslib as npct from codepy.jit import compile_from_string -from codepy.toolchain import (GCCToolchain, - call_capture_output as _call_capture_output) +from codepy.toolchain import GCCToolchain +from codepy.toolchain import call_capture_output as _call_capture_output +from packaging.version import Version from devito.arch import ( - AMDGPUX, Cpu64, AppleArm, NvidiaDevice, POWER8, POWER9, Graviton, - Cortex, IntelDevice, get_nvidia_cc, NvidiaArm, check_cuda_runtime, - get_cuda_version, get_m1_llvm_path + AMDGPUX, POWER8, POWER9, AppleArm, Cortex, Cpu64, Graviton, IntelDevice, NvidiaArm, + NvidiaDevice, check_cuda_runtime, get_cuda_version, get_m1_llvm_path, get_nvidia_cc ) from devito.exceptions import CompilationError from devito.logger import debug, warning from devito.parameters import configuration -from devito.tools import (as_list, change_directory, filter_ordered, - memoized_func, make_tempdir) +from devito.tools import ( + as_list, change_directory, filter_ordered, make_tempdir, memoized_func +) __all__ = ['compiler_registry', 'sniff_mpi_distro'] diff --git a/devito/builtins/arithmetic.py b/devito/builtins/arithmetic.py index 2996f595a8..6c19f056be 100644 --- a/devito/builtins/arithmetic.py +++ b/devito/builtins/arithmetic.py @@ -1,7 +1,7 @@ import numpy as np import devito as dv -from devito.builtins.utils import make_retval, check_builtins_args +from devito.builtins.utils import check_builtins_args, make_retval __all__ = ['inner', 'mmax', 'mmin', 'norm', 'sum', 'sumall'] diff --git a/devito/builtins/initializers.py b/devito/builtins/initializers.py index 1b5b66937a..db571c4683 100644 --- a/devito/builtins/initializers.py +++ b/devito/builtins/initializers.py @@ -1,8 +1,8 @@ import numpy as np import devito as dv -from devito.tools import as_tuple, as_list from devito.builtins.utils import check_builtins_args, nbl_to_padsize, pad_outhalo +from devito.tools import as_list, as_tuple __all__ = ['assign', 'gaussian_smooth', 'initialize_function', 'smooth'] diff --git a/devito/checkpointing/checkpoint.py b/devito/checkpointing/checkpoint.py index 3d1522498c..a3c5b8bcb5 100644 --- a/devito/checkpointing/checkpoint.py +++ b/devito/checkpointing/checkpoint.py @@ -1,4 +1,5 @@ from pyrevolve import Checkpoint, Operator + from devito import TimeFunction from devito.tools import flatten diff --git a/devito/core/arm.py b/devito/core/arm.py index 9649f5aaa6..fae5d4c513 100644 --- a/devito/core/arm.py +++ b/devito/core/arm.py @@ -1,6 +1,5 @@ -from devito.core.cpu import (Cpu64AdvOperator, Cpu64AdvCXXOperator, - Cpu64AdvCOperator) -from devito.passes.iet import OmpTarget, CXXOmpTarget +from devito.core.cpu import Cpu64AdvCOperator, Cpu64AdvCXXOperator, Cpu64AdvOperator +from devito.passes.iet import CXXOmpTarget, OmpTarget __all__ = [ 'ArmAdvCOperator', diff --git a/devito/core/autotuning.py b/devito/core/autotuning.py index acc546d92f..ccef3a9e72 100644 --- a/devito/core/autotuning.py +++ b/devito/core/autotuning.py @@ -1,10 +1,11 @@ from collections import OrderedDict -from itertools import combinations, product from functools import total_ordering +from itertools import combinations, product from devito.arch import KNL, KNL7210 from devito.ir import Backward, retrieve_iteration_tree -from devito.logger import perf, warning as _warning +from devito.logger import perf +from devito.logger import warning as _warning from devito.mpi.distributed import MPI, MPINeighborhood from devito.mpi.routines import MPIMsgEnriched from devito.parameters import configuration diff --git a/devito/core/cpu.py b/devito/core/cpu.py index 73d120bb78..b090552838 100644 --- a/devito/core/cpu.py +++ b/devito/core/cpu.py @@ -4,14 +4,15 @@ from devito.exceptions import InvalidOperator from devito.operator.operator import rcompile from devito.passes import stream_dimensions +from devito.passes.clusters import ( + Lift, blocking, buffering, cire, cse, factorize, fission, fuse, optimize_hyperplanes, + optimize_pows +) from devito.passes.equations import collect_derivatives -from devito.passes.clusters import (Lift, blocking, buffering, cire, cse, - factorize, fission, fuse, optimize_pows, - optimize_hyperplanes) -from devito.passes.iet import (CTarget, CXXTarget, COmpTarget, CXXOmpTarget, - avoid_denormals, linearize, - mpiize, hoist_prodders, relax_incr_dimensions, - check_stability) +from devito.passes.iet import ( + COmpTarget, CTarget, CXXOmpTarget, CXXTarget, avoid_denormals, check_stability, + hoist_prodders, linearize, mpiize, relax_incr_dimensions +) from devito.tools import timed_pass __all__ = [ diff --git a/devito/core/gpu.py b/devito/core/gpu.py index 108b1ab46b..eaf68b0a5b 100644 --- a/devito/core/gpu.py +++ b/devito/core/gpu.py @@ -6,13 +6,15 @@ from devito.exceptions import InvalidOperator from devito.operator.operator import rcompile from devito.passes import is_on_device, stream_dimensions +from devito.passes.clusters import ( + Lift, blocking, buffering, cire, cse, factorize, fission, fuse, memcpy_prefetch, + optimize_pows, tasking +) from devito.passes.equations import collect_derivatives -from devito.passes.clusters import (Lift, tasking, memcpy_prefetch, blocking, - buffering, cire, cse, factorize, fission, fuse, - optimize_pows) -from devito.passes.iet import (DeviceOmpTarget, DeviceAccTarget, DeviceCXXOmpTarget, - mpiize, hoist_prodders, linearize, pthreadify, - relax_incr_dimensions, check_stability) +from devito.passes.iet import ( + DeviceAccTarget, DeviceCXXOmpTarget, DeviceOmpTarget, check_stability, hoist_prodders, + linearize, mpiize, pthreadify, relax_incr_dimensions +) from devito.tools import as_tuple, timed_pass __all__ = [ diff --git a/devito/core/intel.py b/devito/core/intel.py index 8478189f92..6ab2f70b5f 100644 --- a/devito/core/intel.py +++ b/devito/core/intel.py @@ -1,7 +1,7 @@ -from devito.core.cpu import (Cpu64AdvCOperator, Cpu64AdvOmpOperator, - Cpu64FsgCOperator, Cpu64FsgOmpOperator, - Cpu64AdvCXXOperator, Cpu64AdvCXXOmpOperator, - Cpu64FsgCXXOperator, Cpu64FsgCXXOmpOperator) +from devito.core.cpu import ( + Cpu64AdvCOperator, Cpu64AdvCXXOmpOperator, Cpu64AdvCXXOperator, Cpu64AdvOmpOperator, + Cpu64FsgCOperator, Cpu64FsgCXXOmpOperator, Cpu64FsgCXXOperator, Cpu64FsgOmpOperator +) __all__ = [ 'Intel64AdvCOperator', diff --git a/devito/core/operator.py b/devito/core/operator.py index 186f5a2c94..10df2eed31 100644 --- a/devito/core/operator.py +++ b/devito/core/operator.py @@ -8,10 +8,11 @@ from devito.ir import FindSymbols from devito.logger import warning from devito.mpi.routines import mpi_registry -from devito.parameters import configuration from devito.operator import Operator -from devito.tools import (as_tuple, is_integer, timed_pass, - UnboundTuple, UnboundedMultiTuple) +from devito.parameters import configuration +from devito.tools import ( + UnboundedMultiTuple, UnboundTuple, as_tuple, is_integer, timed_pass +) from devito.types import NThreads, PThreadArray __all__ = ['CoreOperator', 'CustomOperator', diff --git a/devito/core/power.py b/devito/core/power.py index 2ae711dcc9..0b0fe86533 100644 --- a/devito/core/power.py +++ b/devito/core/power.py @@ -1,5 +1,6 @@ -from devito.core.cpu import (Cpu64AdvCOperator, Cpu64AdvOmpOperator, - Cpu64AdvCXXOperator, Cpu64AdvCXXOmpOperator) +from devito.core.cpu import ( + Cpu64AdvCOperator, Cpu64AdvCXXOmpOperator, Cpu64AdvCXXOperator, Cpu64AdvOmpOperator +) __all__ = [ 'PowerAdvCOperator', diff --git a/devito/data/allocators.py b/devito/data/allocators.py index eb2fc7bc45..dc0decab17 100644 --- a/devito/data/allocators.py +++ b/devito/data/allocators.py @@ -1,15 +1,15 @@ import abc import ctypes -from ctypes.util import find_library import mmap import os import sys +from ctypes.util import find_library import numpy as np from devito.logger import logger from devito.parameters import configuration -from devito.tools import is_integer, infer_datasize +from devito.tools import infer_datasize, is_integer __all__ = [ 'ALLOC_ALIGNED', diff --git a/devito/data/data.py b/devito/data/data.py index 7a49ad77b5..02660ca3f5 100644 --- a/devito/data/data.py +++ b/devito/data/data.py @@ -7,7 +7,7 @@ from devito.data.utils import * from devito.logger import warning from devito.parameters import configuration -from devito.tools import Tag, as_tuple, as_list, is_integer +from devito.tools import Tag, as_list, as_tuple, is_integer __all__ = ['Data'] diff --git a/devito/data/decomposition.py b/devito/data/decomposition.py index 9a4ec7a486..7faa0753c0 100644 --- a/devito/data/decomposition.py +++ b/devito/data/decomposition.py @@ -4,7 +4,7 @@ import numpy as np from devito.data.meta import LEFT -from devito.tools import is_integer, as_tuple +from devito.tools import as_tuple, is_integer __all__ = ['Decomposition'] diff --git a/devito/data/utils.py b/devito/data/utils.py index d76db9d13a..c624fcd7d6 100644 --- a/devito/data/utils.py +++ b/devito/data/utils.py @@ -1,6 +1,6 @@ import numpy as np -from devito.tools import Tag, as_tuple, as_list, is_integer +from devito.tools import Tag, as_list, as_tuple, is_integer __all__ = [ 'NONLOCAL', diff --git a/devito/finite_differences/differentiable.py b/devito/finite_differences/differentiable.py index be4625bc61..3b7eabaa1c 100644 --- a/devito/finite_differences/differentiable.py +++ b/devito/finite_differences/differentiable.py @@ -1,23 +1,26 @@ from collections import ChainMap +from functools import cached_property, singledispatch from itertools import product -from functools import singledispatch, cached_property import numpy as np import sympy from sympy.core.add import _addsort -from sympy.core.mul import _keep_coeff, _mulsort from sympy.core.decorators import call_highest_priority from sympy.core.evalf import evalf_table +from sympy.core.mul import _keep_coeff, _mulsort + try: from sympy.core.core import ordering_of_classes except ImportError: # Moved in 1.13 from sympy.core.basic import ordering_of_classes -from devito.finite_differences.tools import make_shift_x0, coeff_priority +from devito.finite_differences.tools import coeff_priority, make_shift_x0 from devito.logger import warning -from devito.tools import (as_tuple, filter_ordered, flatten, frozendict, - infer_dtype, extract_dtype, is_integer, split, is_number) +from devito.tools import ( + as_tuple, extract_dtype, filter_ordered, flatten, frozendict, infer_dtype, is_integer, + is_number, split +) from devito.types import Array, DimensionTuple, Evaluable, StencilDimension from devito.types.basic import AbstractFunction, Indexed diff --git a/devito/finite_differences/elementary.py b/devito/finite_differences/elementary.py index d45eafca5e..55a0054c03 100644 --- a/devito/finite_differences/elementary.py +++ b/devito/finite_differences/elementary.py @@ -1,5 +1,4 @@ import sympy - from packaging.version import Version from devito.finite_differences.differentiable import DifferentiableFunction, diffify diff --git a/devito/finite_differences/finite_difference.py b/devito/finite_differences/finite_difference.py index 15abd179ce..77545552a1 100644 --- a/devito/finite_differences/finite_difference.py +++ b/devito/finite_differences/finite_difference.py @@ -3,9 +3,12 @@ from sympy import sympify from devito.logger import warning -from .differentiable import EvalDerivative, DiffDerivative, Weights -from .tools import (left, right, generate_indices, centered, direct, transpose, - check_input, fd_weights_registry, process_weights) + +from .differentiable import DiffDerivative, EvalDerivative, Weights +from .tools import ( + centered, check_input, direct, fd_weights_registry, generate_indices, left, + process_weights, right, transpose +) __all__ = [ 'centered', diff --git a/devito/finite_differences/rsfd.py b/devito/finite_differences/rsfd.py index 12e13a2c64..bdf2c08ac5 100644 --- a/devito/finite_differences/rsfd.py +++ b/devito/finite_differences/rsfd.py @@ -1,8 +1,9 @@ from functools import wraps from devito.types.dimension import StencilDimension -from .differentiable import Weights, DiffDerivative -from .tools import generate_indices, fd_weights_registry + +from .differentiable import DiffDerivative, Weights +from .tools import fd_weights_registry, generate_indices __all__ = ['d45', 'drot'] diff --git a/devito/finite_differences/tools.py b/devito/finite_differences/tools.py index 8c3398f7cd..cbf3f4a752 100644 --- a/devito/finite_differences/tools.py +++ b/devito/finite_differences/tools.py @@ -1,8 +1,8 @@ -from functools import wraps, partial +from functools import partial, wraps from itertools import product import numpy as np -from sympy import S, finite_diff_weights, cacheit, sympify, Rational, Expr +from sympy import Expr, Rational, S, cacheit, finite_diff_weights, sympify from devito.logger import warning from devito.tools import Tag, as_tuple diff --git a/devito/ir/cgen/printer.py b/devito/ir/cgen/printer.py index 2d2ecd4e07..fc5c23b904 100644 --- a/devito/ir/cgen/printer.py +++ b/devito/ir/cgen/printer.py @@ -3,22 +3,20 @@ """ import numpy as np import sympy - from mpmath.libmp import prec_to_dps, to_str from packaging.version import Version - from sympy.core import S -from sympy.core.numbers import equal_valued, Float -from sympy.printing.codeprinter import CodePrinter +from sympy.core.numbers import Float, equal_valued from sympy.logic.boolalg import BooleanFunction +from sympy.printing.codeprinter import CodePrinter from sympy.printing.precedence import PRECEDENCE_VALUES, precedence from devito import configuration from devito.arch.compiler import AOMPCompiler from devito.symbolics.inspection import has_integer_args, sympy_dtype from devito.symbolics.queries import q_leaf +from devito.tools import ctypes_to_cstr, ctypes_vector_mapper, dtype_to_ctype from devito.types.basic import AbstractFunction -from devito.tools import ctypes_to_cstr, dtype_to_ctype, ctypes_vector_mapper __all__ = ['BasePrinter', 'ccode'] diff --git a/devito/ir/clusters/algorithms.py b/devito/ir/clusters/algorithms.py index 979d13ee8f..52c868ed12 100644 --- a/devito/ir/clusters/algorithms.py +++ b/devito/ir/clusters/algorithms.py @@ -7,19 +7,19 @@ from devito.exceptions import CompilationError from devito.finite_differences.elementary import Max, Min -from devito.ir.support import (Any, Backward, Forward, IterationSpace, erange, - pull_dims) -from devito.ir.equations import OpMin, OpMax, identity_mapper from devito.ir.clusters.analysis import analyze from devito.ir.clusters.cluster import Cluster, ClusterGroup from devito.ir.clusters.visitors import Queue, cluster_pass -from devito.ir.support import Scope +from devito.ir.equations import OpMax, OpMin, identity_mapper +from devito.ir.support import ( + Any, Backward, Forward, IterationSpace, Scope, erange, pull_dims +) from devito.mpi.halo_scheme import HaloScheme, HaloTouch from devito.mpi.reduction_scheme import DistReduce -from devito.symbolics import (limits_mapper, retrieve_indexed, uxreplace, - xreplace_indices) -from devito.tools import (DefaultOrderedDict, Stamp, as_mapper, flatten, - is_integer, split, timed_pass, toposort) +from devito.symbolics import limits_mapper, retrieve_indexed, uxreplace, xreplace_indices +from devito.tools import ( + DefaultOrderedDict, Stamp, as_mapper, flatten, is_integer, split, timed_pass, toposort +) from devito.types import Array, Eq, Symbol from devito.types.dimension import BOTTOM, ModuloDimension diff --git a/devito/ir/clusters/analysis.py b/devito/ir/clusters/analysis.py index 37b3acddae..5ebae71b0f 100644 --- a/devito/ir/clusters/analysis.py +++ b/devito/ir/clusters/analysis.py @@ -1,7 +1,8 @@ from devito.ir.clusters.cluster import Cluster from devito.ir.clusters.visitors import Queue -from devito.ir.support import (AFFINE, PARALLEL, PARALLEL_INDEP, PARALLEL_IF_ATOMIC, - SEQUENTIAL, Property, Scope) +from devito.ir.support import ( + AFFINE, PARALLEL, PARALLEL_IF_ATOMIC, PARALLEL_INDEP, SEQUENTIAL, Property, Scope +) from devito.ir.support.space import IterationSpace from devito.tools import as_tuple, flatten, timed_pass from devito.types.dimension import Dimension diff --git a/devito/ir/clusters/cluster.py b/devito/ir/clusters/cluster.py index d20d5b21b9..8c5f08835d 100644 --- a/devito/ir/clusters/cluster.py +++ b/devito/ir/clusters/cluster.py @@ -1,22 +1,21 @@ -from itertools import chain from functools import cached_property +from itertools import chain import numpy as np from devito.ir.equations import ClusterizedEq from devito.ir.support import ( - PARALLEL, PARALLEL_IF_PVT, BaseGuardBoundNext, Forward, Interval, IntervalGroup, - IterationSpace, DataSpace, Guards, Properties, Scope, WaitLock, WithLock, - PrefetchUpdate, detect_accesses, detect_io, normalize_properties, - tailor_properties, update_properties, normalize_syncs, minimum, maximum, - null_ispace + PARALLEL, PARALLEL_IF_PVT, BaseGuardBoundNext, DataSpace, Forward, Guards, Interval, + IntervalGroup, IterationSpace, PrefetchUpdate, Properties, Scope, WaitLock, WithLock, + detect_accesses, detect_io, maximum, minimum, normalize_properties, normalize_syncs, + null_ispace, tailor_properties, update_properties ) from devito.mpi.halo_scheme import HaloScheme, HaloTouch from devito.mpi.reduction_scheme import DistReduce from devito.symbolics import estimate_cost from devito.tools import as_tuple, filter_ordered, flatten, infer_dtype from devito.types import ( - Fence, WeakFence, CriticalRegion, ThreadPoolSync, ThreadCommit, ThreadWait + CriticalRegion, Fence, ThreadCommit, ThreadPoolSync, ThreadWait, WeakFence ) __all__ = ["Cluster", "ClusterGroup"] diff --git a/devito/ir/clusters/visitors.py b/devito/ir/clusters/visitors.py index 6ec80eba0f..694de41142 100644 --- a/devito/ir/clusters/visitors.py +++ b/devito/ir/clusters/visitors.py @@ -1,5 +1,4 @@ from collections.abc import Iterable - from itertools import groupby from devito.ir.support import IterationSpace, null_ispace diff --git a/devito/ir/equations/algorithms.py b/devito/ir/equations/algorithms.py index 310c17ecf3..813828e27a 100644 --- a/devito/ir/equations/algorithms.py +++ b/devito/ir/equations/algorithms.py @@ -1,17 +1,18 @@ from collections.abc import Iterable from functools import singledispatch -from devito.symbolics import (retrieve_indexed, uxreplace, retrieve_dimensions, - retrieve_functions) -from devito.tools import (Ordering, as_tuple, flatten, filter_sorted, filter_ordered, - frozendict) -from devito.types import (Dimension, Eq, IgnoreDimSort, SubDimension, - ConditionalDimension) +from devito.data.allocators import DataReference +from devito.logger import warning +from devito.symbolics import ( + retrieve_dimensions, retrieve_functions, retrieve_indexed, uxreplace +) +from devito.tools import ( + Ordering, as_tuple, filter_ordered, filter_sorted, flatten, frozendict +) +from devito.types import ConditionalDimension, Dimension, Eq, IgnoreDimSort, SubDimension from devito.types.array import Array from devito.types.basic import AbstractFunction from devito.types.dimension import MultiSubDimension, Thickness -from devito.data.allocators import DataReference -from devito.logger import warning __all__ = ['concretize_subdims', 'dimension_sort', 'lower_exprs'] diff --git a/devito/ir/equations/equation.py b/devito/ir/equations/equation.py index be40773f3c..8a8e821d94 100644 --- a/devito/ir/equations/equation.py +++ b/devito/ir/equations/equation.py @@ -3,10 +3,12 @@ import numpy as np import sympy -from devito.ir.equations.algorithms import dimension_sort, lower_exprs from devito.finite_differences.differentiable import diff2sympy -from devito.ir.support import (GuardFactor, Interval, IntervalGroup, IterationSpace, - Stencil, detect_io, detect_accesses) +from devito.ir.equations.algorithms import dimension_sort, lower_exprs +from devito.ir.support import ( + GuardFactor, Interval, IntervalGroup, IterationSpace, Stencil, detect_accesses, + detect_io +) from devito.symbolics import IntDiv, limits_mapper, uxreplace from devito.tools import Pickable, Tag, frozendict from devito.types import Eq, Inc, ReduceMax, ReduceMin, relational_min diff --git a/devito/ir/iet/algorithms.py b/devito/ir/iet/algorithms.py index d8bd0652e5..1715c9c2d1 100644 --- a/devito/ir/iet/algorithms.py +++ b/devito/ir/iet/algorithms.py @@ -1,10 +1,10 @@ from collections import OrderedDict from devito.ir.iet import ( - Expression, Increment, Iteration, List, Conditional, SyncSpot, Section, - HaloSpot, ExpressionBundle, Switch + Conditional, Expression, ExpressionBundle, HaloSpot, Increment, Iteration, List, + Section, Switch, SyncSpot ) -from devito.ir.support import GuardSwitch, GuardCaseSwitch +from devito.ir.support import GuardCaseSwitch, GuardSwitch from devito.tools import as_mapper, timed_pass __all__ = ['iet_build'] diff --git a/devito/ir/iet/nodes.py b/devito/ir/iet/nodes.py index 1f1fa8e5c6..1c8ff5fbff 100644 --- a/devito/ir/iet/nodes.py +++ b/devito/ir/iet/nodes.py @@ -3,24 +3,25 @@ import abc import ctypes import inspect -from functools import cached_property from collections import OrderedDict, namedtuple from collections.abc import Iterable +from functools import cached_property import cgen as c from sympy import IndexedBase, sympify from devito.data import FULL from devito.ir.cgen import ccode -from devito.ir.equations import DummyEq, OpInc, OpMin, OpMax -from devito.ir.support import (INBOUND, SEQUENTIAL, PARALLEL, PARALLEL_IF_ATOMIC, - PARALLEL_IF_PVT, VECTORIZED, AFFINE, Property, - Forward, WithLock, PrefetchUpdate, detect_io) -from devito.symbolics import ListInitializer, CallFromPointer -from devito.tools import (Signer, as_tuple, filter_ordered, filter_sorted, flatten, - ctypes_to_cstr) -from devito.types.basic import (AbstractFunction, AbstractSymbol, Basic, Indexed, - Symbol) +from devito.ir.equations import DummyEq, OpInc, OpMax, OpMin +from devito.ir.support import ( + AFFINE, INBOUND, PARALLEL, PARALLEL_IF_ATOMIC, PARALLEL_IF_PVT, SEQUENTIAL, + VECTORIZED, Forward, PrefetchUpdate, Property, WithLock, detect_io +) +from devito.symbolics import CallFromPointer, ListInitializer +from devito.tools import ( + Signer, as_tuple, ctypes_to_cstr, filter_ordered, filter_sorted, flatten +) +from devito.types.basic import AbstractFunction, AbstractSymbol, Basic, Indexed, Symbol from devito.types.object import AbstractObject, LocalObject __all__ = [ diff --git a/devito/ir/iet/visitors.py b/devito/ir/iet/visitors.py index 111a31b8eb..31b9356dce 100644 --- a/devito/ir/iet/visitors.py +++ b/devito/ir/iet/visitors.py @@ -4,30 +4,34 @@ The main Visitor class is adapted from https://github.com/coneoproject/COFFEE. """ +import ctypes from collections import OrderedDict from collections.abc import Callable, Generator, Iterable, Iterator, Sequence from itertools import chain, groupby from typing import Any, Generic, TypeVar -import ctypes import cgen as c from sympy import IndexedBase from sympy.core.function import Application from devito.exceptions import CompilationError -from devito.ir.iet.nodes import (Node, Iteration, Expression, ExpressionBundle, - Call, Lambda, BlankLine, Section, ListMajor) +from devito.ir.iet.nodes import ( + BlankLine, Call, Expression, ExpressionBundle, Iteration, Lambda, ListMajor, Node, + Section +) from devito.ir.support.space import Backward -from devito.symbolics import (FieldFromComposite, FieldFromPointer, - ListInitializer, uxreplace) +from devito.symbolics import ( + FieldFromComposite, FieldFromPointer, ListInitializer, uxreplace +) from devito.symbolics.extended_dtypes import NoDeclStruct -from devito.tools import (GenericVisitor, as_tuple, filter_ordered, - filter_sorted, flatten, is_external_ctype, - c_restrict_void_p, sorted_priority) +from devito.tools import ( + GenericVisitor, as_tuple, c_restrict_void_p, filter_ordered, filter_sorted, flatten, + is_external_ctype, sorted_priority +) +from devito.types import ( + ArrayObject, CompositeObject, DeviceMap, Dimension, IndexedData, Pointer +) from devito.types.basic import AbstractFunction, AbstractSymbol, Basic -from devito.types import (ArrayObject, CompositeObject, Dimension, Pointer, - IndexedData, DeviceMap) - __all__ = [ 'CGen', @@ -1604,8 +1608,9 @@ def generate(self): def sorted_efuncs(efuncs): - from devito.ir.iet.efunc import (CommCallable, DeviceFunction, - ThreadCallable, ElementalFunction) + from devito.ir.iet.efunc import ( + CommCallable, DeviceFunction, ElementalFunction, ThreadCallable + ) priority = { DeviceFunction: 3, diff --git a/devito/ir/stree/algorithms.py b/devito/ir/stree/algorithms.py index 07e8094700..6fb229fdc3 100644 --- a/devito/ir/stree/algorithms.py +++ b/devito/ir/stree/algorithms.py @@ -4,10 +4,14 @@ from sympy import And from devito.ir.clusters import Cluster -from devito.ir.stree.tree import (ScheduleTree, NodeIteration, NodeConditional, - NodeSync, NodeExprs, NodeSection, NodeHalo) -from devito.ir.support import (SEQUENTIAL, Any, Interval, IterationInterval, - IterationSpace, normalize_properties, normalize_syncs) +from devito.ir.stree.tree import ( + NodeConditional, NodeExprs, NodeHalo, NodeIteration, NodeSection, NodeSync, + ScheduleTree +) +from devito.ir.support import ( + SEQUENTIAL, Any, Interval, IterationInterval, IterationSpace, normalize_properties, + normalize_syncs +) from devito.mpi.halo_scheme import HaloScheme from devito.tools import Bunch, DefaultOrderedDict, as_mapper diff --git a/devito/ir/stree/tree.py b/devito/ir/stree/tree.py index b04fb2942f..961afedc65 100644 --- a/devito/ir/stree/tree.py +++ b/devito/ir/stree/tree.py @@ -1,6 +1,6 @@ -from anytree import NodeMixin, PostOrderIter, RenderTree, ContStyle +from anytree import ContStyle, NodeMixin, PostOrderIter, RenderTree -from devito.ir.support import WithLock, PrefetchUpdate +from devito.ir.support import PrefetchUpdate, WithLock __all__ = [ "NodeConditional", diff --git a/devito/ir/support/basic.py b/devito/ir/support/basic.py index c55b772c4a..a304d50b01 100644 --- a/devito/ir/support/basic.py +++ b/devito/ir/support/basic.py @@ -1,23 +1,25 @@ -from collections.abc import Iterable -from itertools import chain, product +from collections.abc import Callable, Iterable from functools import cached_property -from collections.abc import Callable +from itertools import chain, product -from sympy import S, Expr import sympy +from sympy import Expr, S from devito.ir.support.space import Backward, null_ispace from devito.ir.support.utils import AccessMode, extrema from devito.ir.support.vector import LabeledVector, Vector -from devito.symbolics import (compare_ops, retrieve_indexed, retrieve_terminals, - q_constant, q_comp_acc, q_affine, q_routine, search, - uxreplace) -from devito.tools import (Tag, as_mapper, as_tuple, is_integer, filter_sorted, - flatten, memoized_meth, memoized_generator, smart_gt, - smart_lt, CacheInstances) -from devito.types import (ComponentAccess, Dimension, DimensionTuple, Fence, - CriticalRegion, Function, Symbol, Temp, TempArray, - TBArray) +from devito.symbolics import ( + compare_ops, q_affine, q_comp_acc, q_constant, q_routine, retrieve_indexed, + retrieve_terminals, search, uxreplace +) +from devito.tools import ( + CacheInstances, Tag, as_mapper, as_tuple, filter_sorted, flatten, is_integer, + memoized_generator, memoized_meth, smart_gt, smart_lt +) +from devito.types import ( + ComponentAccess, CriticalRegion, Dimension, DimensionTuple, Fence, Function, Symbol, + TBArray, Temp, TempArray +) __all__ = ['ExprGeometry', 'IterationInstance', 'Scope', 'TimedAccess'] diff --git a/devito/ir/support/guards.py b/devito/ir/support/guards.py index 4ccdfa89e9..574fe490ec 100644 --- a/devito/ir/support/guards.py +++ b/devito/ir/support/guards.py @@ -5,12 +5,12 @@ """ from collections import Counter, defaultdict +from functools import singledispatch from operator import ge, gt, le, lt -from functools import singledispatch +import numpy as np from sympy import And, Expr, Ge, Gt, Le, Lt, Mul, true from sympy.logic.boolalg import BooleanFunction -import numpy as np from devito.ir.support.space import Forward, IterationDirection from devito.symbolics import CondEq, CondNe, search diff --git a/devito/ir/support/space.py b/devito/ir/support/space.py index 2e532b7c1c..dda334d3d1 100644 --- a/devito/ir/support/space.py +++ b/devito/ir/support/space.py @@ -1,15 +1,16 @@ import abc from collections import OrderedDict -from functools import reduce, cached_property +from functools import cached_property, reduce from operator import mul from sympy import Expr -from devito.ir.support.utils import minimum, maximum -from devito.ir.support.vector import Vector, vmin, vmax -from devito.tools import (Ordering, Stamp, as_list, as_set, as_tuple, - filter_ordered, flatten, frozendict, is_integer, - toposort) +from devito.ir.support.utils import maximum, minimum +from devito.ir.support.vector import Vector, vmax, vmin +from devito.tools import ( + Ordering, Stamp, as_list, as_set, as_tuple, filter_ordered, flatten, frozendict, + is_integer, toposort +) from devito.types import Dimension, ModuloDimension __all__ = [ diff --git a/devito/ir/support/symregistry.py b/devito/ir/support/symregistry.py index 8149ab22d5..aca49757a6 100644 --- a/devito/ir/support/symregistry.py +++ b/devito/ir/support/symregistry.py @@ -1,6 +1,7 @@ from devito.tools import generator -from devito.types import (DeviceID, NThreads, NThreadsNested, NThreadsNonaffine, - NPThreads, ThreadID) +from devito.types import ( + DeviceID, NPThreads, NThreads, NThreadsNested, NThreadsNonaffine, ThreadID +) __init__ = ['SymbolRegistry'] diff --git a/devito/ir/support/syncs.py b/devito/ir/support/syncs.py index 44dc39cf67..753b8f28fb 100644 --- a/devito/ir/support/syncs.py +++ b/devito/ir/support/syncs.py @@ -7,6 +7,7 @@ from devito.data import FULL from devito.tools import Pickable, as_tuple, filter_ordered, frozendict + from .utils import IMask __all__ = [ diff --git a/devito/ir/support/utils.py b/devito/ir/support/utils.py index 32dd3a9b88..41805e0ba8 100644 --- a/devito/ir/support/utils.py +++ b/devito/ir/support/utils.py @@ -2,11 +2,11 @@ from itertools import product from devito.finite_differences import IndexDerivative -from devito.symbolics import (CallFromPointer, retrieve_indexed, retrieve_terminals, - search) -from devito.tools import DefaultOrderedDict, as_tuple, flatten, filter_sorted, split -from devito.types import (Dimension, DimensionTuple, Indirection, ModuloDimension, - StencilDimension) +from devito.symbolics import CallFromPointer, retrieve_indexed, retrieve_terminals, search +from devito.tools import DefaultOrderedDict, as_tuple, filter_sorted, flatten, split +from devito.types import ( + Dimension, DimensionTuple, Indirection, ModuloDimension, StencilDimension +) __all__ = [ 'AccessMode', diff --git a/devito/mpatches/as_independent.py b/devito/mpatches/as_independent.py index 975d51bcdb..91d5e329b6 100644 --- a/devito/mpatches/as_independent.py +++ b/devito/mpatches/as_independent.py @@ -1,13 +1,12 @@ """Monkeypatch for as_independent required for Devito Derivative. """ -from packaging.version import Version - import sympy +from packaging.version import Version from sympy.core.add import _unevaluated_Add from sympy.core.expr import Expr from sympy.core.mul import _unevaluated_Mul -from sympy.core.symbol import Symbol from sympy.core.singleton import S +from sympy.core.symbol import Symbol """ Copy of upstream sympy methods, without docstrings, comments or typehints diff --git a/devito/mpatches/rationaltools.py b/devito/mpatches/rationaltools.py index 4e4cea1539..93b0d14ed6 100644 --- a/devito/mpatches/rationaltools.py +++ b/devito/mpatches/rationaltools.py @@ -3,7 +3,7 @@ import importlib import sympy -from sympy.core import Basic, Add, sympify +from sympy.core import Add, Basic, sympify from sympy.core.exprtools import gcd_terms from sympy.utilities import public from sympy.utilities.iterables import iterable diff --git a/devito/mpi/distributed.py b/devito/mpi/distributed.py index 3c251d0a22..480609cd2f 100644 --- a/devito/mpi/distributed.py +++ b/devito/mpi/distributed.py @@ -1,24 +1,22 @@ +import atexit from abc import ABC, abstractmethod from ctypes import c_int, c_void_p, sizeof -from itertools import groupby, product from functools import cached_property - +from itertools import groupby, product from math import ceil, pow -from sympy import factorint, Interval - -import atexit import numpy as np from cgen import Struct, Value +from sympy import Interval, factorint -from devito.data import LEFT, CENTER, RIGHT, Decomposition +from devito.data import CENTER, LEFT, RIGHT, Decomposition from devito.parameters import configuration -from devito.tools import (EnrichedTuple, as_tuple, ctypes_to_cstr, filter_ordered, - frozendict) -from devito.types import CompositeObject, Object, Constant +from devito.tools import ( + EnrichedTuple, as_tuple, ctypes_to_cstr, filter_ordered, frozendict +) +from devito.types import CompositeObject, Constant, Object from devito.types.utils import DimensionTuple - # Do not prematurely initialize MPI # This allows launching a Devito program from within another Python program # that has *already* initialized MPI diff --git a/devito/mpi/halo_scheme.py b/devito/mpi/halo_scheme.py index 062b0a35b6..a3b803d4f5 100644 --- a/devito/mpi/halo_scheme.py +++ b/devito/mpi/halo_scheme.py @@ -1,17 +1,19 @@ -from collections import OrderedDict, namedtuple, defaultdict +from collections import OrderedDict, defaultdict, namedtuple +from functools import cached_property from itertools import product from operator import attrgetter -from functools import cached_property -from sympy import Max, Min import sympy +from sympy import Max, Min from devito import configuration -from devito.data import CORE, OWNED, LEFT, CENTER, RIGHT +from devito.data import CENTER, CORE, LEFT, OWNED, RIGHT from devito.ir.support import Forward, Scope from devito.symbolics.manipulation import _uxreplace_registry -from devito.tools import (Reconstructable, Tag, as_tuple, filter_ordered, flatten, - frozendict, is_integer, filter_sorted, EnrichedTuple) +from devito.tools import ( + EnrichedTuple, Reconstructable, Tag, as_tuple, filter_ordered, filter_sorted, flatten, + frozendict, is_integer +) __all__ = ['HaloScheme', 'HaloSchemeEntry', 'HaloSchemeException', 'HaloTouch'] diff --git a/devito/mpi/routines.py b/devito/mpi/routines.py index c646951a12..9fa639a7a1 100644 --- a/devito/mpi/routines.py +++ b/devito/mpi/routines.py @@ -1,25 +1,31 @@ import abc from collections import OrderedDict -from ctypes import POINTER, c_void_p, c_int, sizeof +from ctypes import POINTER, c_int, c_void_p, sizeof from functools import reduce from itertools import product from operator import mul from sympy import Integer -from devito.data import OWNED, HALO, NOPAD, LEFT, CENTER, RIGHT -from devito.ir.equations import DummyEq, OpInc, OpMin, OpMax -from devito.ir.iet import (Call, Callable, Conditional, ElementalFunction, - Expression, ExpressionBundle, AugmentedExpression, - Iteration, List, Prodder, Return, make_efunc, FindNodes, - Transformer, ElementalCall, CommCallable) +from devito.data import CENTER, HALO, LEFT, NOPAD, OWNED, RIGHT +from devito.ir.equations import DummyEq, OpInc, OpMax, OpMin +from devito.ir.iet import ( + AugmentedExpression, Call, Callable, CommCallable, Conditional, ElementalCall, + ElementalFunction, Expression, ExpressionBundle, FindNodes, Iteration, List, Prodder, + Return, Transformer, make_efunc +) from devito.mpi import MPI -from devito.symbolics import (Byref, CondNe, FieldFromPointer, FieldFromComposite, - IndexedPointer, Macro, cast, subs_op_args) -from devito.tools import (as_mapper, dtype_to_mpitype, dtype_len, infer_datasize, - flatten, generator, is_integer) -from devito.types import (Array, Bag, BundleView, Dimension, Eq, Symbol, - LocalObject, CompositeObject, CustomDimension) +from devito.symbolics import ( + Byref, CondNe, FieldFromComposite, FieldFromPointer, IndexedPointer, Macro, cast, + subs_op_args +) +from devito.tools import ( + as_mapper, dtype_len, dtype_to_mpitype, flatten, generator, infer_datasize, is_integer +) +from devito.types import ( + Array, Bag, BundleView, CompositeObject, CustomDimension, Dimension, Eq, LocalObject, + Symbol +) __all__ = ['HaloExchangeBuilder', 'ReductionBuilder', 'mpi_registry'] diff --git a/devito/operations/interpolators.py b/devito/operations/interpolators.py index 22ba35bf9c..9104fb426c 100644 --- a/devito/operations/interpolators.py +++ b/devito/operations/interpolators.py @@ -1,8 +1,8 @@ from abc import ABC, abstractmethod -from functools import wraps, cached_property +from functools import cached_property, wraps -import sympy import numpy as np +import sympy try: from scipy.special import i0 @@ -12,10 +12,11 @@ from devito.finite_differences.differentiable import Mul from devito.finite_differences.elementary import floor from devito.logger import warning -from devito.symbolics import retrieve_function_carriers, retrieve_functions, INT -from devito.tools import as_tuple, flatten, filter_ordered, Pickable, memoized_meth -from devito.types import (ConditionalDimension, Eq, Inc, Evaluable, Symbol, - CustomDimension, SubFunction) +from devito.symbolics import INT, retrieve_function_carriers, retrieve_functions +from devito.tools import Pickable, as_tuple, filter_ordered, flatten, memoized_meth +from devito.types import ( + ConditionalDimension, CustomDimension, Eq, Evaluable, Inc, SubFunction, Symbol +) from devito.types.utils import DimensionTuple __all__ = ['LinearInterpolator', 'PrecomputedInterpolator', 'SincInterpolator'] diff --git a/devito/operations/solve.py b/devito/operations/solve.py index a6d1a55910..6545fc4ead 100644 --- a/devito/operations/solve.py +++ b/devito/operations/solve.py @@ -2,9 +2,9 @@ import sympy -from devito.logger import warning -from devito.finite_differences.differentiable import Add, Mul, EvalDerivative from devito.finite_differences.derivative import Derivative +from devito.finite_differences.differentiable import Add, EvalDerivative, Mul +from devito.logger import warning from devito.tools import as_tuple __all__ = ['linsolve', 'solve'] diff --git a/devito/operator/operator.py b/devito/operator/operator.py index 451f54b313..a0f3d06410 100644 --- a/devito/operator/operator.py +++ b/devito/operator/operator.py @@ -1,47 +1,48 @@ -from collections import OrderedDict, namedtuple -from functools import cached_property import ctypes import shutil -from operator import attrgetter +from collections import OrderedDict, namedtuple +from functools import cached_property from math import ceil +from operator import attrgetter from tempfile import gettempdir -from sympy import sympify -import sympy import numpy as np +import sympy +from sympy import sympify -from devito.arch import (ANYCPU, Device, compiler_registry, platform_registry, - get_visible_devices) +from devito.arch import ( + ANYCPU, Device, compiler_registry, get_visible_devices, platform_registry +) from devito.data import default_allocator -from devito.exceptions import (CompilationError, ExecutionError, InvalidArgument, - InvalidOperator) -from devito.logger import (debug, info, perf, warning, is_log_enabled_for, - switch_log_level) -from devito.ir.equations import LoweredEq, lower_exprs, concretize_subdims +from devito.exceptions import ( + CompilationError, ExecutionError, InvalidArgument, InvalidOperator +) from devito.ir.clusters import ClusterGroup, clusterize -from devito.ir.iet import (Callable, CInterface, EntryFunction, DeviceFunction, - FindSymbols, MetaCall, derive_parameters, iet_build) -from devito.ir.support import AccessMode, SymbolRegistry +from devito.ir.equations import LoweredEq, concretize_subdims, lower_exprs +from devito.ir.iet import ( + Callable, CInterface, DeviceFunction, EntryFunction, FindSymbols, MetaCall, + derive_parameters, iet_build +) from devito.ir.stree import stree_build +from devito.ir.support import AccessMode, SymbolRegistry +from devito.logger import debug, info, is_log_enabled_for, perf, switch_log_level, warning +from devito.mpi import MPI from devito.operator.profiling import create_profile from devito.operator.registry import operator_selector -from devito.mpi import MPI from devito.parameters import configuration from devito.passes import ( - Graph, lower_index_derivatives, generate_implicit, generate_macros, - minimize_symbols, optimize_pows, unevaluate, error_mapper, is_on_device, - lower_dtypes + Graph, error_mapper, generate_implicit, generate_macros, is_on_device, lower_dtypes, + lower_index_derivatives, minimize_symbols, optimize_pows, unevaluate ) from devito.symbolics import estimate_cost, subs_op_args -from devito.tools import (DAG, OrderedSet, Signer, ReducerMap, as_mapper, as_tuple, - flatten, filter_sorted, frozendict, is_integer, - split, timed_pass, timed_region, contains_val, - CacheInstances, MemoryEstimate) -from devito.types import (Buffer, Evaluable, host_layer, device_layer, - disk_layer) +from devito.tools import ( + DAG, CacheInstances, MemoryEstimate, OrderedSet, ReducerMap, Signer, as_mapper, + as_tuple, contains_val, filter_sorted, flatten, frozendict, is_integer, split, + timed_pass, timed_region +) +from devito.types import Buffer, Evaluable, device_layer, disk_layer, host_layer from devito.types.dimension import Thickness - __all__ = ['Operator'] diff --git a/devito/operator/profiling.py b/devito/operator/profiling.py index f973cfacdd..9355b6efe6 100644 --- a/devito/operator/profiling.py +++ b/devito/operator/profiling.py @@ -9,8 +9,9 @@ from sympy import S from devito.arch import get_advisor_path -from devito.ir.iet import (ExpressionBundle, List, TimedList, Section, - Iteration, FindNodes, Transformer) +from devito.ir.iet import ( + ExpressionBundle, FindNodes, Iteration, List, Section, TimedList, Transformer +) from devito.ir.support import IntervalGroup from devito.logger import warning from devito.mpi import MPI diff --git a/devito/parameters.py b/devito/parameters.py index b793af51d6..300ff3c5f7 100644 --- a/devito/parameters.py +++ b/devito/parameters.py @@ -1,7 +1,7 @@ """The parameters dictionary contains global parameter settings.""" +import os from abc import ABC, abstractmethod from collections import OrderedDict -import os from functools import wraps from devito.logger import info, warning diff --git a/devito/passes/clusters/aliases.py b/devito/passes/clusters/aliases.py index 3a332ddfd8..f6ad4c9777 100644 --- a/devito/passes/clusters/aliases.py +++ b/devito/passes/clusters/aliases.py @@ -1,5 +1,5 @@ from collections import Counter, OrderedDict, defaultdict, namedtuple -from functools import singledispatch, cached_property +from functools import cached_property, singledispatch from itertools import groupby import numpy as np @@ -8,19 +8,23 @@ from devito.exceptions import CompilationError from devito.finite_differences import EvalDerivative, IndexDerivative, Weights from devito.ir import ( - SEQUENTIAL, PARALLEL_IF_PVT, SEPARABLE, Forward, IterationSpace, Interval, - Cluster, ClusterGroup, ExprGeometry, Queue, IntervalGroup, LabeledVector, - Vector, normalize_properties, relax_properties, unbounded, minimum, maximum, - extrema, vmax, vmin + PARALLEL_IF_PVT, SEPARABLE, SEQUENTIAL, Cluster, ClusterGroup, ExprGeometry, Forward, + Interval, IntervalGroup, IterationSpace, LabeledVector, Queue, Vector, extrema, + maximum, minimum, normalize_properties, relax_properties, unbounded, vmax, vmin ) from devito.passes.clusters.cse import _cse -from devito.symbolics import (Uxmapper, estimate_cost, search, reuse_if_untouched, - retrieve_functions, uxreplace, sympy_dtype) -from devito.tools import (Stamp, as_mapper, as_tuple, flatten, frozendict, - is_integer, generator, split, timed_pass) -from devito.types import (Eq, Symbol, Temp, TempArray, TempFunction, - ModuloDimension, CustomDimension, IncrDimension, - StencilDimension, Indexed, Hyperplane, Size) +from devito.symbolics import ( + Uxmapper, estimate_cost, retrieve_functions, reuse_if_untouched, search, sympy_dtype, + uxreplace +) +from devito.tools import ( + Stamp, as_mapper, as_tuple, flatten, frozendict, generator, is_integer, split, + timed_pass +) +from devito.types import ( + CustomDimension, Eq, Hyperplane, IncrDimension, Indexed, ModuloDimension, Size, + StencilDimension, Symbol, Temp, TempArray, TempFunction +) from devito.types.grid import MultiSubDimension __all__ = ['cire'] diff --git a/devito/passes/clusters/asynchrony.py b/devito/passes/clusters/asynchrony.py index 557ca7c5c2..8ee7792068 100644 --- a/devito/passes/clusters/asynchrony.py +++ b/devito/passes/clusters/asynchrony.py @@ -2,8 +2,10 @@ from sympy import true -from devito.ir import (Forward, Backward, GuardBoundNext, WaitLock, WithLock, SyncArray, - PrefetchUpdate, ReleaseLock, Queue, normalize_syncs) +from devito.ir import ( + Backward, Forward, GuardBoundNext, PrefetchUpdate, Queue, ReleaseLock, SyncArray, + WaitLock, WithLock, normalize_syncs +) from devito.passes.clusters.utils import in_critical_region, is_memcpy from devito.symbolics import IntDiv, uxreplace from devito.tools import OrderedSet, is_integer, timed_pass diff --git a/devito/passes/clusters/blocking.py b/devito/passes/clusters/blocking.py index 0289d5e23e..08ae0dc6fc 100644 --- a/devito/passes/clusters/blocking.py +++ b/devito/passes/clusters/blocking.py @@ -2,13 +2,16 @@ from devito.finite_differences.differentiable import IndexSum from devito.ir.clusters import Queue -from devito.ir.support import (AFFINE, PARALLEL, PARALLEL_IF_ATOMIC, - PARALLEL_IF_PVT, SKEWABLE, TILABLES, Interval, - IntervalGroup, IterationSpace, Scope) +from devito.ir.support import ( + AFFINE, PARALLEL, PARALLEL_IF_ATOMIC, PARALLEL_IF_PVT, SKEWABLE, TILABLES, Interval, + IntervalGroup, IterationSpace, Scope +) from devito.passes import is_on_device from devito.symbolics import search, uxreplace, xreplace_indices -from devito.tools import (UnboundedMultiTuple, UnboundTuple, as_mapper, as_tuple, - filter_ordered, flatten, is_integer) +from devito.tools import ( + UnboundedMultiTuple, UnboundTuple, as_mapper, as_tuple, filter_ordered, flatten, + is_integer +) from devito.types import BlockDimension __all__ = ['blocking'] diff --git a/devito/passes/clusters/buffering.py b/devito/passes/clusters/buffering.py index b967e9f249..6d96de77bc 100644 --- a/devito/passes/clusters/buffering.py +++ b/devito/passes/clusters/buffering.py @@ -2,18 +2,21 @@ from functools import cached_property from itertools import chain -from sympy import S import numpy as np +from sympy import S -from devito.ir import (Cluster, Backward, Forward, GuardBound, Interval, - IntervalGroup, IterationSpace, Properties, Queue, Vector, - InitArray, lower_exprs, vmax, vmin) from devito.exceptions import CompilationError +from devito.ir import ( + Backward, Cluster, Forward, GuardBound, InitArray, Interval, IntervalGroup, + IterationSpace, Properties, Queue, Vector, lower_exprs, vmax, vmin +) from devito.logger import warning from devito.passes.clusters.utils import is_memcpy from devito.symbolics import IntDiv, retrieve_functions, uxreplace -from devito.tools import (Stamp, as_mapper, as_tuple, filter_ordered, frozendict, - flatten, is_integer, timed_pass) +from devito.tools import ( + Stamp, as_mapper, as_tuple, filter_ordered, flatten, frozendict, is_integer, + timed_pass +) from devito.types import Array, CustomDimension, Eq, ModuloDimension __all__ = ['buffering'] diff --git a/devito/passes/clusters/cse.py b/devito/passes/clusters/cse.py index 509490a2e1..025acdfdee 100644 --- a/devito/passes/clusters/cse.py +++ b/devito/passes/clusters/cse.py @@ -1,9 +1,10 @@ -from collections import defaultdict, Counter +from collections import Counter, defaultdict from functools import cached_property, singledispatch import numpy as np import sympy from sympy import Add, Function, Indexed, Mul, Pow + try: from sympy.core.core import ordering_of_classes except ImportError: @@ -13,9 +14,9 @@ from devito.finite_differences.differentiable import IndexDerivative from devito.ir import Cluster, Scope, cluster_pass from devito.symbolics import estimate_cost, q_leaf, q_terminal -from devito.symbolics.search import search from devito.symbolics.manipulation import _uxreplace -from devito.tools import DAG, as_list, as_tuple, frozendict, extract_dtype +from devito.symbolics.search import search +from devito.tools import DAG, as_list, as_tuple, extract_dtype, frozendict from devito.types import Eq, Symbol, Temp __all__ = ['cse'] diff --git a/devito/passes/clusters/derivatives.py b/devito/passes/clusters/derivatives.py index 5af92a3208..cced692527 100644 --- a/devito/passes/clusters/derivatives.py +++ b/devito/passes/clusters/derivatives.py @@ -1,7 +1,7 @@ from functools import singledispatch -from sympy import S import numpy as np +from sympy import S from devito.finite_differences import IndexDerivative from devito.ir import Backward, Forward, Interval, IterationSpace, Queue diff --git a/devito/passes/clusters/factorization.py b/devito/passes/clusters/factorization.py index 45d140a253..812dc9c180 100644 --- a/devito/passes/clusters/factorization.py +++ b/devito/passes/clusters/factorization.py @@ -3,8 +3,9 @@ from sympy import Add, Mul, S, collect from devito.ir import cluster_pass -from devito.symbolics import (BasicWrapperMixin, estimate_cost, reuse_if_untouched, - retrieve_symbols, q_routine) +from devito.symbolics import ( + BasicWrapperMixin, estimate_cost, q_routine, retrieve_symbols, reuse_if_untouched +) from devito.tools import ReducerMap from devito.types.object import AbstractObject diff --git a/devito/passes/clusters/implicit.py b/devito/passes/clusters/implicit.py index bc1136f795..af19e1d3c5 100644 --- a/devito/passes/clusters/implicit.py +++ b/devito/passes/clusters/implicit.py @@ -5,7 +5,7 @@ from collections import defaultdict from functools import singledispatch -from devito.ir import SEQUENTIAL, Queue, Forward +from devito.ir import SEQUENTIAL, Forward, Queue from devito.symbolics import retrieve_dimensions from devito.tools import Bunch, frozendict, timed_pass from devito.types import Eq diff --git a/devito/passes/clusters/misc.py b/devito/passes/clusters/misc.py index 46bc8707da..b8ec71d3c2 100644 --- a/devito/passes/clusters/misc.py +++ b/devito/passes/clusters/misc.py @@ -3,8 +3,10 @@ from devito.finite_differences import IndexDerivative from devito.ir.clusters import Cluster, ClusterGroup, Queue, cluster_pass -from devito.ir.support import (SEQUENTIAL, SEPARABLE, Scope, ReleaseLock, WaitLock, - WithLock, InitArray, SyncArray, PrefetchUpdate) +from devito.ir.support import ( + SEPARABLE, SEQUENTIAL, InitArray, PrefetchUpdate, ReleaseLock, Scope, SyncArray, + WaitLock, WithLock +) from devito.passes.clusters.utils import in_critical_region from devito.symbolics import pow_to_mul, search from devito.tools import DAG, Stamp, as_tuple, flatten, frozendict, timed_pass diff --git a/devito/passes/iet/asynchrony.py b/devito/passes/iet/asynchrony.py index 144a140a6f..2ac8d8581d 100644 --- a/devito/passes/iet/asynchrony.py +++ b/devito/passes/iet/asynchrony.py @@ -1,21 +1,21 @@ from collections import namedtuple -from functools import singledispatch from ctypes import c_int +from functools import singledispatch import cgen as c -from devito.ir import (AsyncCall, AsyncCallable, BlankLine, Call, Callable, - Conditional, DummyEq, DummyExpr, While, Increment, Iteration, - List, PointerCast, Return, FindNodes, FindSymbols, - ThreadCallable, EntryFunction, Transformer, make_callable, - maybe_alias) +from devito.ir import ( + AsyncCall, AsyncCallable, BlankLine, Call, Callable, Conditional, DummyEq, DummyExpr, + EntryFunction, FindNodes, FindSymbols, Increment, Iteration, List, PointerCast, + Return, ThreadCallable, Transformer, While, make_callable, maybe_alias +) from devito.passes.iet.definitions import DataManager from devito.passes.iet.engine import iet_pass -from devito.symbolics import (CondEq, CondNe, FieldFromComposite, FieldFromPointer, - Null) +from devito.symbolics import CondEq, CondNe, FieldFromComposite, FieldFromPointer, Null from devito.tools import split -from devito.types import (Lock, Pointer, PThreadArray, QueueID, SharedData, Temp, - VolatileInt) +from devito.types import ( + Lock, Pointer, PThreadArray, QueueID, SharedData, Temp, VolatileInt +) __all__ = ['pthreadify'] diff --git a/devito/passes/iet/definitions.py b/devito/passes/iet/definitions.py index 978c093eed..0a5416d6a2 100644 --- a/devito/passes/iet/definitions.py +++ b/devito/passes/iet/definitions.py @@ -11,20 +11,20 @@ import numpy as np from devito.ir import ( - Block, Call, Definition, DummyExpr, Iteration, List, Return, EntryFunction, - FindNodes, FindSymbols, MapExprStmts, Transformer, make_callable + Block, Call, Definition, DummyExpr, EntryFunction, FindNodes, FindSymbols, Iteration, + List, MapExprStmts, Return, Transformer, make_callable ) from devito.passes import is_gpu_create from devito.passes.iet.engine import iet_pass from devito.passes.iet.langbase import LangBB from devito.symbolics import ( - Byref, DefFunction, FieldFromPointer, IndexedPointer, ListInitializer, - SizeOf, VOID, pow_to_mul, unevaluate, as_long + VOID, Byref, DefFunction, FieldFromPointer, IndexedPointer, ListInitializer, SizeOf, + as_long, pow_to_mul, unevaluate ) -from devito.tools import as_mapper, as_list, as_tuple, filter_sorted, flatten +from devito.tools import as_list, as_mapper, as_tuple, filter_sorted, flatten from devito.types import ( - Array, ComponentAccess, CustomDimension, Dimension, DeviceMap, DeviceRM, - Eq, Symbol, size_t + Array, ComponentAccess, CustomDimension, DeviceMap, DeviceRM, Dimension, Eq, Symbol, + size_t ) __all__ = ['DataManager', 'DeviceAwareDataManager', 'Storage'] diff --git a/devito/passes/iet/engine.py b/devito/passes/iet/engine.py index 724ccf5c84..3fa8f3249f 100644 --- a/devito/passes/iet/engine.py +++ b/devito/passes/iet/engine.py @@ -5,21 +5,20 @@ from sympy import Mul from devito.ir.iet import ( - Call, ExprStmt, Expression, Iteration, SyncSpot, AsyncCallable, FindNodes, - FindSymbols, MapNodes, MetaCall, Transformer, EntryFunction, ThreadCallable, - Uxreplace, derive_parameters + AsyncCallable, Call, EntryFunction, Expression, ExprStmt, FindNodes, FindSymbols, + Iteration, MapNodes, MetaCall, SyncSpot, ThreadCallable, Transformer, Uxreplace, + derive_parameters ) from devito.ir.support import SymbolRegistry from devito.mpi.distributed import MPINeighborhood -from devito.mpi.routines import Gather, Scatter, HaloUpdate, HaloWait, MPIMsg +from devito.mpi.routines import Gather, HaloUpdate, HaloWait, MPIMsg, Scatter from devito.passes import needs_transfer -from devito.symbolics import (FieldFromComposite, FieldFromPointer, IndexedPointer, - search) +from devito.symbolics import FieldFromComposite, FieldFromPointer, IndexedPointer, search from devito.tools import DAG, as_tuple, filter_ordered, sorted_priority, timed_pass from devito.types import ( - Array, Bundle, ComponentAccess, CompositeObject, Lock, IncrDimension, - ModuloDimension, Indirection, Pointer, SharedData, ThreadArray, Symbol, Temp, - NPThreads, NThreadsBase, Wildcard + Array, Bundle, ComponentAccess, CompositeObject, IncrDimension, Indirection, Lock, + ModuloDimension, NPThreads, NThreadsBase, Pointer, SharedData, Symbol, Temp, + ThreadArray, Wildcard ) from devito.types.args import ArgProvider from devito.types.dense import DiscreteFunction diff --git a/devito/passes/iet/errors.py b/devito/passes/iet/errors.py index 8082ae53cf..d4ac012d31 100644 --- a/devito/passes/iet/errors.py +++ b/devito/passes/iet/errors.py @@ -2,9 +2,10 @@ import numpy as np from sympy import Expr, Not, S -from devito.ir.iet import (Call, Conditional, DummyExpr, EntryFunction, Iteration, - List, Break, Return, FindNodes, FindSymbols, Transformer, - make_callable) +from devito.ir.iet import ( + Break, Call, Conditional, DummyExpr, EntryFunction, FindNodes, FindSymbols, Iteration, + List, Return, Transformer, make_callable +) from devito.passes.iet.engine import iet_pass from devito.symbolics import CondEq, MathFunction from devito.tools import dtype_to_ctype diff --git a/devito/passes/iet/instrument.py b/devito/passes/iet/instrument.py index 5ad934d13f..7e0e49d2cb 100644 --- a/devito/passes/iet/instrument.py +++ b/devito/passes/iet/instrument.py @@ -1,10 +1,12 @@ from itertools import groupby -from devito.ir.iet import (BusyWait, Iteration, Section, TimedList, - FindNodes, FindSymbols, MapNodes, Transformer) -from devito.mpi.routines import (HaloUpdateCall, HaloWaitCall, MPICall, MPIList, - HaloUpdateList, HaloWaitList, RemainderCall, - ComputeCall) +from devito.ir.iet import ( + BusyWait, FindNodes, FindSymbols, Iteration, MapNodes, Section, TimedList, Transformer +) +from devito.mpi.routines import ( + ComputeCall, HaloUpdateCall, HaloUpdateList, HaloWaitCall, HaloWaitList, MPICall, + MPIList, RemainderCall +) from devito.passes.iet.engine import iet_pass from devito.types import TempArray, TempFunction, Timer diff --git a/devito/passes/iet/langbase.py b/devito/passes/iet/langbase.py index a99fcdcb41..808cdba3f0 100644 --- a/devito/passes/iet/langbase.py +++ b/devito/passes/iet/langbase.py @@ -1,19 +1,21 @@ +from abc import ABC from functools import singledispatch from itertools import takewhile -from abc import ABC import cgen as c from devito.data import FULL -from devito.ir import (DummyExpr, Call, Conditional, Expression, List, Prodder, - ParallelIteration, ParallelBlock, PointerCast, EntryFunction, - AsyncCallable, FindNodes, FindSymbols, IsPerfectIteration) +from devito.ir import ( + AsyncCallable, Call, Conditional, DummyExpr, EntryFunction, Expression, FindNodes, + FindSymbols, IsPerfectIteration, List, ParallelBlock, ParallelIteration, PointerCast, + Prodder +) from devito.mpi.distributed import MPICommObject from devito.passes import is_on_device from devito.passes.iet.engine import iet_pass from devito.symbolics import Byref, CondNe, SizeOf from devito.tools import as_list, is_integer, prod -from devito.types import Symbol, QueueID, Wildcard +from devito.types import QueueID, Symbol, Wildcard __all__ = ['LangBB', 'LangTransformer'] diff --git a/devito/passes/iet/languages/C.py b/devito/passes/iet/languages/C.py index 93451c1861..0e04d0feeb 100644 --- a/devito/passes/iet/languages/C.py +++ b/devito/passes/iet/languages/C.py @@ -1,11 +1,11 @@ import numpy as np from sympy.printing.c import C99CodePrinter -from devito.ir import Call, BasePrinter +from devito.ir import BasePrinter, Call from devito.passes.iet.definitions import DataManager -from devito.passes.iet.orchestration import Orchestrator from devito.passes.iet.langbase import LangBB from devito.passes.iet.languages.utils import _atomic_add_split +from devito.passes.iet.orchestration import Orchestrator from devito.symbolics import c_complex, c_double_complex from devito.symbolics.extended_sympy import UnaryOp from devito.tools import dtype_to_cstr diff --git a/devito/passes/iet/languages/CXX.py b/devito/passes/iet/languages/CXX.py index 0157cbd30f..5453ea58d6 100644 --- a/devito/passes/iet/languages/CXX.py +++ b/devito/passes/iet/languages/CXX.py @@ -1,12 +1,12 @@ import numpy as np from sympy.printing.cxx import CXX11CodePrinter -from devito.ir import Call, UsingNamespace, BasePrinter +from devito.ir import BasePrinter, Call, UsingNamespace from devito.passes.iet.definitions import DataManager -from devito.passes.iet.orchestration import Orchestrator from devito.passes.iet.langbase import LangBB from devito.passes.iet.languages.utils import _atomic_add_split -from devito.symbolics import c_complex, c_double_complex, IndexedPointer, cast, Byref +from devito.passes.iet.orchestration import Orchestrator +from devito.symbolics import Byref, IndexedPointer, c_complex, c_double_complex, cast from devito.tools import dtype_to_cstr __all__ = ['CXXBB', 'CXXDataManager', 'CXXOrchestrator'] diff --git a/devito/passes/iet/languages/openacc.py b/devito/passes/iet/languages/openacc.py index 706b45bb17..c04a81fccd 100644 --- a/devito/passes/iet/languages/openacc.py +++ b/devito/passes/iet/languages/openacc.py @@ -1,18 +1,21 @@ import numpy as np from devito.arch import AMDGPUX, NVIDIAX -from devito.ir import (Call, DeviceCall, DummyExpr, EntryFunction, List, Block, - ParallelTree, Pragma, Return, FindSymbols, make_callable) -from devito.passes import needs_transfer, is_on_device +from devito.ir import ( + Block, Call, DeviceCall, DummyExpr, EntryFunction, FindSymbols, List, ParallelTree, + Pragma, Return, make_callable +) +from devito.passes import is_on_device, needs_transfer from devito.passes.iet.definitions import DeviceAwareDataManager from devito.passes.iet.engine import iet_pass -from devito.passes.iet.orchestration import Orchestrator -from devito.passes.iet.parpragma import (PragmaDeviceAwareTransformer, PragmaLangBB, - PragmaIteration, PragmaTransfer) from devito.passes.iet.languages.CXX import CXXBB, CXXPrinter -from devito.passes.iet.languages.openmp import OmpRegion, OmpIteration +from devito.passes.iet.languages.openmp import OmpIteration, OmpRegion +from devito.passes.iet.orchestration import Orchestrator +from devito.passes.iet.parpragma import ( + PragmaDeviceAwareTransformer, PragmaIteration, PragmaLangBB, PragmaTransfer +) from devito.symbolics import FieldFromPointer, Macro, cast -from devito.tools import filter_ordered, UnboundTuple +from devito.tools import UnboundTuple, filter_ordered from devito.types import Symbol __all__ = ['AccOrchestrator', 'DeviceAccDataManager', 'DeviceAccizer'] diff --git a/devito/passes/iet/languages/openmp.py b/devito/passes/iet/languages/openmp.py index c12de9a617..e7027ac272 100644 --- a/devito/passes/iet/languages/openmp.py +++ b/devito/passes/iet/languages/openmp.py @@ -1,22 +1,27 @@ from functools import cached_property -from packaging.version import Version import cgen as c +from packaging.version import Version from sympy import And, Ne, Not -from devito.arch import AMDGPUX, NVIDIAX, INTELGPUX, PVC -from devito.arch.compiler import GNUCompiler, NvidiaCompiler, CustomCompiler -from devito.ir import (Call, Conditional, DeviceCall, List, Pragma, Prodder, - ParallelBlock, PointerCast, While, FindSymbols) +from devito.arch import AMDGPUX, INTELGPUX, NVIDIAX, PVC +from devito.arch.compiler import CustomCompiler, GNUCompiler, NvidiaCompiler +from devito.ir import ( + Call, Conditional, DeviceCall, FindSymbols, List, ParallelBlock, PointerCast, Pragma, + Prodder, While +) from devito.passes.iet.definitions import DataManager, DeviceAwareDataManager from devito.passes.iet.langbase import LangBB -from devito.passes.iet.orchestration import Orchestrator -from devito.passes.iet.parpragma import (PragmaSimdTransformer, PragmaShmTransformer, - PragmaDeviceAwareTransformer, PragmaLangBB, - PragmaIteration, PragmaTransfer) +from devito.passes.iet.languages.C import CBB +from devito.passes.iet.languages.C import atomic_add as c_atomic_add +from devito.passes.iet.languages.CXX import CXXBB +from devito.passes.iet.languages.CXX import atomic_add as cxx_atomic_add from devito.passes.iet.languages.utils import joins -from devito.passes.iet.languages.C import CBB, atomic_add as c_atomic_add -from devito.passes.iet.languages.CXX import CXXBB, atomic_add as cxx_atomic_add +from devito.passes.iet.orchestration import Orchestrator +from devito.passes.iet.parpragma import ( + PragmaDeviceAwareTransformer, PragmaIteration, PragmaLangBB, PragmaShmTransformer, + PragmaSimdTransformer, PragmaTransfer +) from devito.symbolics import CondEq, DefFunction from devito.tools import filter_ordered diff --git a/devito/passes/iet/languages/targets.py b/devito/passes/iet/languages/targets.py index 2993a5b3e6..c998b9315a 100644 --- a/devito/passes/iet/languages/targets.py +++ b/devito/passes/iet/languages/targets.py @@ -1,13 +1,14 @@ +from devito.passes.iet.instrument import instrument from devito.passes.iet.languages.C import CDataManager, COrchestrator, CPrinter from devito.passes.iet.languages.CXX import CXXDataManager, CXXOrchestrator, CXXPrinter -from devito.passes.iet.languages.openmp import (SimdOmpizer, Ompizer, DeviceOmpizer, - OmpDataManager, DeviceOmpDataManager, - OmpOrchestrator, DeviceOmpOrchestrator, - CXXSimdOmpizer, CXXOmpizer, - CXXOmpDataManager, CXXOmpOrchestrator) -from devito.passes.iet.languages.openacc import (DeviceAccizer, DeviceAccDataManager, - AccOrchestrator, AccPrinter) -from devito.passes.iet.instrument import instrument +from devito.passes.iet.languages.openacc import ( + AccOrchestrator, AccPrinter, DeviceAccDataManager, DeviceAccizer +) +from devito.passes.iet.languages.openmp import ( + CXXOmpDataManager, CXXOmpizer, CXXOmpOrchestrator, CXXSimdOmpizer, + DeviceOmpDataManager, DeviceOmpizer, DeviceOmpOrchestrator, OmpDataManager, Ompizer, + OmpOrchestrator, SimdOmpizer +) __all__ = [ 'COmpTarget', diff --git a/devito/passes/iet/languages/utils.py b/devito/passes/iet/languages/utils.py index e22e345791..186017c4d6 100644 --- a/devito/passes/iet/languages/utils.py +++ b/devito/passes/iet/languages/utils.py @@ -1,6 +1,6 @@ import numpy as np -from devito import Real, Imag +from devito import Imag, Real from devito.exceptions import InvalidOperator from devito.ir import List diff --git a/devito/passes/iet/linearization.py b/devito/passes/iet/linearization.py index 844959b0b5..c75b2334ce 100644 --- a/devito/passes/iet/linearization.py +++ b/devito/passes/iet/linearization.py @@ -3,13 +3,14 @@ import numpy as np from devito.data import FULL -from devito.ir import (BlankLine, Call, DummyExpr, Dereference, List, PointerCast, - Transfer, FindNodes, FindSymbols, Transformer, Uxreplace, - IMask) +from devito.ir import ( + BlankLine, Call, Dereference, DummyExpr, FindNodes, FindSymbols, IMask, List, + PointerCast, Transfer, Transformer, Uxreplace +) from devito.passes.iet.engine import iet_pass from devito.passes.iet.parpragma import PragmaIteration from devito.tools import filter_ordered, flatten, prod -from devito.types import Array, Bundle, Symbol, FIndexed, Wildcard +from devito.types import Array, Bundle, FIndexed, Symbol, Wildcard from devito.types.dense import DiscreteFunction __all__ = ['linearize'] diff --git a/devito/passes/iet/misc.py b/devito/passes/iet/misc.py index dd1bf2814b..3b397f350e 100644 --- a/devito/passes/iet/misc.py +++ b/devito/passes/iet/misc.py @@ -6,15 +6,16 @@ from devito.finite_differences import Max, Min from devito.finite_differences.differentiable import SafeInv -from devito.ir import (Any, Forward, DummyExpr, Iteration, EmptyList, Prodder, - FindApplications, FindNodes, FindSymbols, Transformer, - Uxreplace, filter_iterations, retrieve_iteration_tree, - pull_dims) +from devito.ir import ( + Any, DummyExpr, EmptyList, FindApplications, FindNodes, FindSymbols, Forward, + Iteration, Prodder, Transformer, Uxreplace, filter_iterations, pull_dims, + retrieve_iteration_tree +) +from devito.ir.iet.efunc import DeviceFunction, EntryFunction from devito.passes.iet.engine import iet_pass from devito.passes.iet.languages.C import CPrinter -from devito.ir.iet.efunc import DeviceFunction, EntryFunction -from devito.symbolics import (ValueLimit, evalrel, has_integer_args, limits_mapper, Cast) -from devito.tools import Bunch, as_mapper, filter_ordered, split, as_tuple +from devito.symbolics import Cast, ValueLimit, evalrel, has_integer_args, limits_mapper +from devito.tools import Bunch, as_mapper, as_tuple, filter_ordered, split from devito.types import FIndexed __all__ = [ diff --git a/devito/passes/iet/mpi.py b/devito/passes/iet/mpi.py index 6fe6eaa2c1..6830723314 100644 --- a/devito/passes/iet/mpi.py +++ b/devito/passes/iet/mpi.py @@ -1,11 +1,12 @@ from collections import defaultdict +from itertools import combinations from sympy import S -from itertools import combinations -from devito.ir.iet import (Call, Expression, HaloSpot, Iteration, FindNodes, - FindWithin, MapNodes, MapHaloSpots, Transformer, - retrieve_iteration_tree) +from devito.ir.iet import ( + Call, Expression, FindNodes, FindWithin, HaloSpot, Iteration, MapHaloSpots, MapNodes, + Transformer, retrieve_iteration_tree +) from devito.ir.support import PARALLEL, Scope from devito.mpi.reduction_scheme import DistReduce from devito.mpi.routines import HaloExchangeBuilder, ReductionBuilder diff --git a/devito/passes/iet/orchestration.py b/devito/passes/iet/orchestration.py index cd3cbf17b3..b2bc5b0caf 100644 --- a/devito/passes/iet/orchestration.py +++ b/devito/passes/iet/orchestration.py @@ -4,11 +4,13 @@ from sympy import Or from devito.exceptions import CompilationError -from devito.ir.iet import (Call, Callable, List, SyncSpot, FindNodes, Transformer, - BlankLine, BusyWait, DummyExpr, AsyncCall, AsyncCallable, - make_callable, derive_parameters) -from devito.ir.support import (WaitLock, WithLock, ReleaseLock, InitArray, - SyncArray, PrefetchUpdate, SnapOut, SnapIn) +from devito.ir.iet import ( + AsyncCall, AsyncCallable, BlankLine, BusyWait, Call, Callable, DummyExpr, FindNodes, + List, SyncSpot, Transformer, derive_parameters, make_callable +) +from devito.ir.support import ( + InitArray, PrefetchUpdate, ReleaseLock, SnapIn, SnapOut, SyncArray, WaitLock, WithLock +) from devito.passes.iet.engine import iet_pass from devito.passes.iet.langbase import LangBB from devito.symbolics import CondEq, CondNe diff --git a/devito/passes/iet/parpragma.py b/devito/passes/iet/parpragma.py index 880d819e2e..670d85a9a4 100644 --- a/devito/passes/iet/parpragma.py +++ b/devito/passes/iet/parpragma.py @@ -1,19 +1,21 @@ from collections import defaultdict from functools import cached_property -import numpy as np import cgen as c +import numpy as np from sympy import And, Max, true from devito.data import FULL -from devito.ir import (Conditional, DummyEq, Dereference, Expression, - ExpressionBundle, FindSymbols, FindNodes, ParallelIteration, - ParallelTree, Pragma, Prodder, Transfer, List, Transformer, - IsPerfectIteration, OpInc, filter_iterations, ccode, - retrieve_iteration_tree, IMask, VECTORIZED) +from devito.ir import ( + VECTORIZED, Conditional, Dereference, DummyEq, Expression, ExpressionBundle, + FindNodes, FindSymbols, IMask, IsPerfectIteration, List, OpInc, ParallelIteration, + ParallelTree, Pragma, Prodder, Transfer, Transformer, ccode, filter_iterations, + retrieve_iteration_tree +) from devito.passes.iet.engine import iet_pass -from devito.passes.iet.langbase import (LangBB, LangTransformer, DeviceAwareMixin, - ShmTransformer, make_sections_from_imask) +from devito.passes.iet.langbase import ( + DeviceAwareMixin, LangBB, LangTransformer, ShmTransformer, make_sections_from_imask +) from devito.symbolics import INT from devito.tools import as_tuple, flatten, is_integer, prod from devito.types import Symbol diff --git a/devito/symbolics/extended_dtypes.py b/devito/symbolics/extended_dtypes.py index eda71a0b74..1bb5fbb91b 100644 --- a/devito/symbolics/extended_dtypes.py +++ b/devito/symbolics/extended_dtypes.py @@ -1,9 +1,12 @@ import ctypes + import numpy as np -from devito.symbolics.extended_sympy import ReservedWord, Cast, ValueLimit -from devito.tools import (Bunch, float2, float3, float4, double2, double3, double4, # noqa - int2, int3, int4, ctypes_vector_mapper) +from devito.symbolics.extended_sympy import Cast, ReservedWord, ValueLimit +from devito.tools import ( # noqa + Bunch, ctypes_vector_mapper, double2, double3, double4, float2, float3, float4, int2, + int3, int4 +) from devito.tools.dtypes_lowering import dtype_mapper __all__ = ['cast', 'CustomType', 'limits_mapper', 'INT', 'FLOAT', 'BaseCast', # noqa diff --git a/devito/symbolics/extended_sympy.py b/devito/symbolics/extended_sympy.py index 3a6e61742c..d47a063bac 100644 --- a/devito/symbolics/extended_sympy.py +++ b/devito/symbolics/extended_sympy.py @@ -9,11 +9,11 @@ from sympy.core.decorators import call_highest_priority from sympy.logic.boolalg import BooleanFunction -from devito.finite_differences.elementary import Min, Max -from devito.tools import (Pickable, Bunch, as_tuple, is_integer, float2, # noqa - float3, float4, double2, double3, double4, int2, int3, - int4, dtype_to_ctype, ctypes_to_cstr, ctypes_vector_mapper, - ctypes_to_cstr) +from devito.finite_differences.elementary import Max, Min +from devito.tools import ( # noqa + Bunch, Pickable, as_tuple, ctypes_to_cstr, ctypes_vector_mapper, double2, double3, + double4, dtype_to_ctype, float2, float3, float4, int2, int3, int4, is_integer +) from devito.types import Symbol from devito.types.basic import Basic diff --git a/devito/symbolics/inspection.py b/devito/symbolics/inspection.py index 85b7b8bfa9..1a4a8babca 100644 --- a/devito/symbolics/inspection.py +++ b/devito/symbolics/inspection.py @@ -1,19 +1,19 @@ from functools import singledispatch import numpy as np -from sympy import (Function, Indexed, Integer, Mul, Number, - Pow, S, Symbol, Tuple) -from sympy.core.numbers import ImaginaryUnit +from sympy import Function, Indexed, Integer, Mul, Number, Pow, S, Symbol, Tuple from sympy.core.function import Application +from sympy.core.numbers import ImaginaryUnit from devito.finite_differences import Derivative from devito.finite_differences.differentiable import IndexDerivative from devito.logger import warning from devito.symbolics.extended_dtypes import INT -from devito.symbolics.extended_sympy import (CallFromPointer, Cast, - DefFunction, ReservedWord) +from devito.symbolics.extended_sympy import ( + CallFromPointer, Cast, DefFunction, ReservedWord +) from devito.symbolics.queries import q_routine -from devito.tools import as_tuple, prod, is_integer +from devito.tools import as_tuple, is_integer, prod from devito.tools.dtypes_lowering import infer_dtype __all__ = ['compare_ops', 'estimate_cost', 'has_integer_args', 'sympy_dtype'] diff --git a/devito/symbolics/manipulation.py b/devito/symbolics/manipulation.py index 70a4f49cd0..23dbf2b764 100644 --- a/devito/symbolics/manipulation.py +++ b/devito/symbolics/manipulation.py @@ -3,27 +3,24 @@ from functools import singledispatch import numpy as np -from sympy import Pow, Add, Mul, Min, Max, S, SympifyError, Tuple, sympify +from sympy import Add, Max, Min, Mul, Pow, S, SympifyError, Tuple, sympify from sympy.core.add import _addsort from sympy.core.mul import _mulsort -from devito.finite_differences.differentiable import ( - EvalDerivative, IndexDerivative -) -from devito.symbolics.extended_sympy import DefFunction, rfunc +from devito.finite_differences.differentiable import EvalDerivative, IndexDerivative from devito.symbolics.extended_dtypes import LONG +from devito.symbolics.extended_sympy import DefFunction, rfunc from devito.symbolics.queries import q_leaf -from devito.symbolics.search import ( - retrieve_indexed, retrieve_functions, retrieve_symbols -) -from devito.symbolics.unevaluation import ( - Add as UnevalAdd, Mul as UnevalMul, Pow as UnevalPow, UnevaluableMixin -) +from devito.symbolics.search import retrieve_functions, retrieve_indexed, retrieve_symbols +from devito.symbolics.unevaluation import Add as UnevalAdd +from devito.symbolics.unevaluation import Mul as UnevalMul +from devito.symbolics.unevaluation import Pow as UnevalPow +from devito.symbolics.unevaluation import UnevaluableMixin from devito.tools import as_list, as_tuple, flatten, split, transitive_closure -from devito.types.basic import Basic, Indexed from devito.types.array import ComponentAccess +from devito.types.basic import Basic, Indexed from devito.types.equation import Eq -from devito.types.relational import Le, Lt, Gt, Ge +from devito.types.relational import Ge, Gt, Le, Lt __all__ = [ 'Uxmapper', diff --git a/devito/symbolics/queries.py b/devito/symbolics/queries.py index dec4728254..76cb737294 100644 --- a/devito/symbolics/queries.py +++ b/devito/symbolics/queries.py @@ -1,15 +1,15 @@ from sympy import Eq, IndexedBase, Mod, S, diff, nan -from devito.symbolics.extended_sympy import (FieldFromComposite, FieldFromPointer, - IndexedPointer, IntDiv) +from devito.symbolics.extended_sympy import ( + FieldFromComposite, FieldFromPointer, IndexedPointer, IntDiv +) from devito.tools import as_tuple, is_integer +from devito.types.array import ComponentAccess from devito.types.basic import AbstractFunction from devito.types.constant import Constant from devito.types.dimension import Dimension -from devito.types.array import ComponentAccess from devito.types.object import AbstractObject - __all__ = [ 'q_affine', 'q_comp_acc', diff --git a/devito/symbolics/search.py b/devito/symbolics/search.py index 94072520ef..500ffd25ed 100644 --- a/devito/symbolics/search.py +++ b/devito/symbolics/search.py @@ -5,8 +5,9 @@ import numpy as np import sympy -from devito.symbolics.queries import (q_indexed, q_function, q_terminal, q_leaf, - q_symbol, q_dimension, q_derivative) +from devito.symbolics.queries import ( + q_derivative, q_dimension, q_function, q_indexed, q_leaf, q_symbol, q_terminal +) from devito.tools import as_tuple __all__ = [ diff --git a/devito/tools/abc.py b/devito/tools/abc.py index 4fe295ee07..f325778239 100644 --- a/devito/tools/abc.py +++ b/devito/tools/abc.py @@ -1,7 +1,6 @@ import abc from hashlib import sha1 - __all__ = ['Pickable', 'Reconstructable', 'Signer', 'Singleton', 'Stamp', 'Tag'] diff --git a/devito/tools/data_structures.py b/devito/tools/data_structures.py index 1e7e46ad54..48a7a342a7 100644 --- a/devito/tools/data_structures.py +++ b/devito/tools/data_structures.py @@ -1,14 +1,14 @@ -from collections import OrderedDict, deque -from collections.abc import Callable, Iterable, MutableSet, Mapping, Set -from functools import reduce, cached_property import json +from collections import OrderedDict, deque +from collections.abc import Callable, Iterable, Mapping, MutableSet, Set +from functools import cached_property, reduce import numpy as np from multidict import MultiDict from devito.tools import Pickable -from devito.tools.utils import as_tuple, filter_ordered, humanbytes from devito.tools.algorithms import toposort +from devito.tools.utils import as_tuple, filter_ordered, humanbytes __all__ = [ 'DAG', diff --git a/devito/tools/utils.py b/devito/tools/utils.py index 51adefd158..8b8cc2a72e 100644 --- a/devito/tools/utils.py +++ b/devito/tools/utils.py @@ -1,9 +1,9 @@ +import types from collections import OrderedDict from collections.abc import Iterable from functools import reduce, wraps from itertools import chain, combinations, groupby, product, zip_longest from operator import attrgetter, mul -import types import numpy as np import sympy diff --git a/devito/types/array.py b/devito/types/array.py index 845eef1976..6f2914756b 100644 --- a/devito/types/array.py +++ b/devito/types/array.py @@ -1,11 +1,13 @@ -from ctypes import POINTER, Structure, c_void_p, c_int, c_uint64 +from ctypes import POINTER, Structure, c_int, c_uint64, c_void_p from functools import cached_property import numpy as np from sympy import Expr, cacheit -from devito.tools import (Pickable, as_tuple, c_restrict_void_p, - dtype_to_ctype, dtypes_vector_mapper, is_integer) +from devito.tools import ( + Pickable, as_tuple, c_restrict_void_p, dtype_to_ctype, dtypes_vector_mapper, + is_integer +) from devito.types.basic import AbstractFunction, LocalType from devito.types.utils import CtypesFactory, DimensionTuple diff --git a/devito/types/basic.py b/devito/types/basic.py index b49d030031..a80adcf20e 100644 --- a/devito/types/basic.py +++ b/devito/types/basic.py @@ -1,19 +1,20 @@ import abc import inspect -from ctypes import POINTER, _Pointer, c_char_p, c_char, Structure -from functools import reduce, cached_property +from ctypes import POINTER, Structure, _Pointer, c_char, c_char_p +from functools import cached_property, reduce from operator import mul import numpy as np import sympy - from sympy.core.assumptions import _assume_rules from sympy.core.decorators import call_highest_priority from devito.data import default_allocator from devito.parameters import configuration -from devito.tools import (Pickable, as_tuple, dtype_to_ctype, - frozendict, memoized_meth, sympy_mutex, CustomDtype) +from devito.tools import ( + CustomDtype, Pickable, as_tuple, dtype_to_ctype, frozendict, memoized_meth, + sympy_mutex +) from devito.types.args import ArgProvider from devito.types.caching import Cached, Uncached from devito.types.lazy import Evaluable diff --git a/devito/types/caching.py b/devito/types/caching.py index a1e359bd4d..3c7814021e 100644 --- a/devito/types/caching.py +++ b/devito/types/caching.py @@ -6,7 +6,6 @@ from devito.tools import safe_dict_copy - __all__ = ['CacheManager', 'Cached', 'Uncached', '_SymbolCache'] _SymbolCache = {} diff --git a/devito/types/dense.py b/devito/types/dense.py index eef4682c65..ffabf59d4f 100644 --- a/devito/types/dense.py +++ b/devito/types/dense.py @@ -1,33 +1,34 @@ from collections import namedtuple -from ctypes import POINTER, Structure, c_int, c_ulong, c_void_p, cast, byref -from functools import wraps, reduce +from ctypes import POINTER, Structure, byref, c_int, c_ulong, c_void_p, cast +from functools import cached_property, reduce, wraps from operator import mul import numpy as np import sympy -from functools import cached_property from devito.builtins import assign -from devito.data import (DOMAIN, OWNED, HALO, NOPAD, FULL, LEFT, CENTER, RIGHT, - Data, default_allocator) +from devito.data import ( + CENTER, DOMAIN, FULL, HALO, LEFT, NOPAD, OWNED, RIGHT, Data, default_allocator +) from devito.data.allocators import DataReference from devito.deprecations import deprecations from devito.exceptions import InvalidArgument +from devito.finite_differences import Differentiable, generate_fd_shortcuts +from devito.finite_differences.tools import fd_weights_registry from devito.logger import debug, warning from devito.mpi import MPI from devito.parameters import configuration -from devito.symbolics import FieldFromPointer, normalize_args, IndexedPointer -from devito.finite_differences import Differentiable, generate_fd_shortcuts -from devito.finite_differences.tools import fd_weights_registry -from devito.tools import (ReducerMap, as_tuple, c_restrict_void_p, flatten, - is_integer, memoized_meth, dtype_to_ctype, humanbytes, - mpi4py_mapper) -from devito.types.dimension import Dimension +from devito.symbolics import FieldFromPointer, IndexedPointer, normalize_args +from devito.tools import ( + ReducerMap, as_tuple, c_restrict_void_p, dtype_to_ctype, flatten, humanbytes, + is_integer, memoized_meth, mpi4py_mapper +) from devito.types.args import ArgProvider -from devito.types.caching import CacheManager from devito.types.basic import AbstractFunction +from devito.types.caching import CacheManager +from devito.types.dimension import Dimension from devito.types.utils import ( - Buffer, DimensionTuple, NODE, CELL, Size, Staggering, host_layer + CELL, NODE, Buffer, DimensionTuple, Size, Staggering, host_layer ) __all__ = ['Function', 'SubFunction', 'TempFunction', 'TimeFunction'] diff --git a/devito/types/dimension.py b/devito/types/dimension.py index d83efece3c..0261b33245 100644 --- a/devito/types/dimension.py +++ b/devito/types/dimension.py @@ -1,10 +1,10 @@ +import math from collections import namedtuple from functools import cached_property -import math +import numpy as np import sympy from sympy.core.decorators import call_highest_priority -import numpy as np from devito.data import LEFT, RIGHT from devito.deprecations import deprecations @@ -12,10 +12,9 @@ from devito.logger import debug from devito.tools import Pickable, is_integer, is_number, memoized_meth from devito.types.args import ArgProvider -from devito.types.basic import Symbol, DataSymbol, Scalar +from devito.types.basic import DataSymbol, Scalar, Symbol from devito.types.constant import Constant -from devito.types.relational import relational_min, relational_max - +from devito.types.relational import relational_max, relational_min __all__ = [ 'BlockDimension', diff --git a/devito/types/equation.py b/devito/types/equation.py index b3353e2cb4..b1c918978d 100644 --- a/devito/types/equation.py +++ b/devito/types/equation.py @@ -1,10 +1,10 @@ """User API to specify equations.""" -import sympy - from functools import cached_property +import sympy + from devito.deprecations import deprecations -from devito.tools import as_tuple, frozendict, Pickable +from devito.tools import Pickable, as_tuple, frozendict from devito.types.lazy import Evaluable __all__ = ['Eq', 'Inc', 'ReduceMax', 'ReduceMin'] diff --git a/devito/types/grid.py b/devito/types/grid.py index 005d92dded..f3e6c6b90b 100644 --- a/devito/types/grid.py +++ b/devito/types/grid.py @@ -7,18 +7,19 @@ from sympy import prod from devito import configuration -from devito.data import LEFT, RIGHT, CENTER +from devito.data import CENTER, LEFT, RIGHT +from devito.deprecations import deprecations from devito.logger import warning -from devito.mpi import Distributor, MPI, SubDistributor +from devito.mpi import MPI, Distributor, SubDistributor from devito.tools import ReducerMap, as_tuple, frozendict from devito.types.args import ArgProvider from devito.types.basic import Scalar from devito.types.dense import Function +from devito.types.dimension import ( + DefaultDimension, Dimension, MultiSubDimension, SpaceDimension, Spacing, + SteppingDimension, SubDimension, TimeDimension +) from devito.types.utils import DimensionTuple -from devito.types.dimension import (Dimension, SpaceDimension, TimeDimension, - Spacing, SteppingDimension, SubDimension, - MultiSubDimension, DefaultDimension) -from devito.deprecations import deprecations __all__ = ['Border', 'Grid', 'SubDomain', 'SubDomainSet'] diff --git a/devito/types/misc.py b/devito/types/misc.py index 599d606b60..286e6b4886 100644 --- a/devito/types/misc.py +++ b/devito/types/misc.py @@ -2,15 +2,16 @@ import numpy as np import sympy + try: from sympy.core.core import ordering_of_classes except ImportError: # Moved in 1.13 from sympy.core.basic import ordering_of_classes -from devito.types import Array, CompositeObject, Indexed, Symbol, LocalObject -from devito.types.basic import IndexedData from devito.tools import CustomDtype, Pickable, as_tuple, frozendict +from devito.types import Array, CompositeObject, Indexed, LocalObject, Symbol +from devito.types.basic import IndexedData __all__ = [ 'Auto', diff --git a/devito/types/object.py b/devito/types/object.py index 05fb6e1069..51790b35bc 100644 --- a/devito/types/object.py +++ b/devito/types/object.py @@ -4,8 +4,8 @@ from devito.tools import Pickable, as_tuple, sympy_mutex from devito.types.args import ArgProvider -from devito.types.caching import Uncached from devito.types.basic import Basic, LocalType +from devito.types.caching import Uncached from devito.types.utils import CtypesFactory __all__ = ['CompositeObject', 'LocalObject', 'Object'] diff --git a/devito/types/sparse.py b/devito/types/sparse.py index eaee37528a..c79ef05654 100644 --- a/devito/types/sparse.py +++ b/devito/types/sparse.py @@ -1,26 +1,28 @@ from collections import OrderedDict +from functools import cached_property from itertools import product -import sympy import numpy as np -from functools import cached_property +import sympy from devito.finite_differences import generate_fd_shortcuts from devito.mpi import MPI, SparseDistributor -from devito.operations import (LinearInterpolator, PrecomputedInterpolator, - SincInterpolator) +from devito.operations import ( + LinearInterpolator, PrecomputedInterpolator, SincInterpolator +) from devito.symbolics import indexify, retrieve_function_carriers -from devito.tools import (ReducerMap, as_tuple, flatten, prod, filter_ordered, - is_integer, dtype_to_mpidtype) +from devito.tools import ( + ReducerMap, as_tuple, dtype_to_mpidtype, filter_ordered, flatten, is_integer, prod +) +from devito.types.basic import Symbol from devito.types.dense import DiscreteFunction, SubFunction -from devito.types.dimension import (Dimension, ConditionalDimension, DefaultDimension, - DynamicDimension) +from devito.types.dimension import ( + ConditionalDimension, DefaultDimension, Dimension, DynamicDimension +) from devito.types.dimension import dimensions as mkdims -from devito.types.basic import Symbol from devito.types.equation import Eq, Inc from devito.types.utils import IgnoreDimSort - __all__ = [ 'MatrixSparseTimeFunction', 'PrecomputedSparseFunction', diff --git a/devito/types/tensor.py b/devito/types/tensor.py index 177f83e9f0..43bb1fe0e1 100644 --- a/devito/types/tensor.py +++ b/devito/types/tensor.py @@ -2,11 +2,13 @@ from functools import cached_property import numpy as np + try: from sympy.matrices.matrixbase import MatrixBase except ImportError: # Before 1.13 from sympy.matrices.matrices import MatrixBase + from sympy.core.sympify import converter as sympify_converter from devito.finite_differences import Differentiable diff --git a/devito/types/utils.py b/devito/types/utils.py index d8a7877cf1..25b697f2bd 100644 --- a/devito/types/utils.py +++ b/devito/types/utils.py @@ -3,6 +3,7 @@ from functools import cached_property from devito.tools import EnrichedTuple, Tag + # Additional Function-related APIs __all__ = [ diff --git a/examples/cfd/example_diffusion.py b/examples/cfd/example_diffusion.py index 4acdcdeeca..ccaf5f3faf 100644 --- a/examples/cfd/example_diffusion.py +++ b/examples/cfd/example_diffusion.py @@ -18,7 +18,7 @@ import numpy as np import sympy -from devito import Grid, Eq, Operator, TimeFunction, solve +from devito import Eq, Grid, Operator, TimeFunction, solve from devito.logger import log diff --git a/examples/cfd/tools.py b/examples/cfd/tools.py index 44766a049a..ee23177cac 100644 --- a/examples/cfd/tools.py +++ b/examples/cfd/tools.py @@ -1,7 +1,7 @@ +import numpy as np +from matplotlib import cm, pyplot from mpl_toolkits.mplot3d import Axes3D # noqa -import numpy as np -from matplotlib import pyplot, cm from devito.logger import warning diff --git a/examples/misc/linalg.py b/examples/misc/linalg.py index 45aadfb41e..948d4d8c47 100644 --- a/examples/misc/linalg.py +++ b/examples/misc/linalg.py @@ -1,6 +1,6 @@ import click -from devito import Inc, Operator, Function, dimensions, info +from devito import Function, Inc, Operator, dimensions, info from devito.tools import as_tuple __all__ = [ diff --git a/examples/seismic/acoustic/acoustic_example.py b/examples/seismic/acoustic/acoustic_example.py index d45d935b8b..9a994340e9 100644 --- a/examples/seismic/acoustic/acoustic_example.py +++ b/examples/seismic/acoustic/acoustic_example.py @@ -1,13 +1,14 @@ import numpy as np + try: import pytest except ImportError: pass +from devito import Constant, Function, norm, smooth from devito.logger import info -from devito import Constant, Function, smooth, norm +from examples.seismic import demo_model, seismic_args, setup_geometry from examples.seismic.acoustic import AcousticWaveSolver -from examples.seismic import demo_model, setup_geometry, seismic_args def acoustic_setup(shape=(50, 50, 50), spacing=(15.0, 15.0, 15.0), diff --git a/examples/seismic/acoustic/operators.py b/examples/seismic/acoustic/operators.py index c8a2fdec5c..6854d22d29 100644 --- a/examples/seismic/acoustic/operators.py +++ b/examples/seismic/acoustic/operators.py @@ -1,5 +1,5 @@ -from devito import Eq, Operator, Function, TimeFunction, Inc, solve, sign -from devito.symbolics import retrieve_functions, INT, retrieve_derivatives +from devito import Eq, Function, Inc, Operator, TimeFunction, sign, solve +from devito.symbolics import INT, retrieve_derivatives, retrieve_functions def freesurface(model, eq): diff --git a/examples/seismic/acoustic/wavesolver.py b/examples/seismic/acoustic/wavesolver.py index e191b34972..bc12c7b041 100644 --- a/examples/seismic/acoustic/wavesolver.py +++ b/examples/seismic/acoustic/wavesolver.py @@ -1,7 +1,7 @@ -from devito import Function, TimeFunction, DevitoCheckpoint, CheckpointOperator, Revolver +from devito import CheckpointOperator, DevitoCheckpoint, Function, Revolver, TimeFunction from devito.tools import memoized_meth from examples.seismic.acoustic.operators import ( - ForwardOperator, AdjointOperator, GradientOperator, BornOperator + AdjointOperator, BornOperator, ForwardOperator, GradientOperator ) diff --git a/examples/seismic/elastic/elastic_example.py b/examples/seismic/elastic/elastic_example.py index f5f046eb50..5ce82a696b 100644 --- a/examples/seismic/elastic/elastic_example.py +++ b/examples/seismic/elastic/elastic_example.py @@ -1,12 +1,13 @@ import numpy as np + try: import pytest except ImportError: pass from devito import norm from devito.logger import info +from examples.seismic import demo_model, seismic_args, setup_geometry from examples.seismic.elastic import ElasticWaveSolver -from examples.seismic import demo_model, setup_geometry, seismic_args def elastic_setup(shape=(50, 50), spacing=(15.0, 15.0), tn=500., space_order=4, diff --git a/examples/seismic/elastic/operators.py b/examples/seismic/elastic/operators.py index 1576ed133a..0153870275 100644 --- a/examples/seismic/elastic/operators.py +++ b/examples/seismic/elastic/operators.py @@ -1,5 +1,6 @@ -from devito import Eq, Operator, VectorTimeFunction, TensorTimeFunction -from devito import div, grad, diag, solve +from devito import ( + Eq, Operator, TensorTimeFunction, VectorTimeFunction, diag, div, grad, solve +) def src_rec(v, tau, model, geometry): diff --git a/examples/seismic/elastic/wavesolver.py b/examples/seismic/elastic/wavesolver.py index 09a43ca62a..ba112dcdaa 100644 --- a/examples/seismic/elastic/wavesolver.py +++ b/examples/seismic/elastic/wavesolver.py @@ -1,6 +1,5 @@ +from devito import TensorTimeFunction, VectorTimeFunction from devito.tools import memoized_meth -from devito import VectorTimeFunction, TensorTimeFunction - from examples.seismic.elastic.operators import ForwardOperator diff --git a/examples/seismic/inversion/fwi.py b/examples/seismic/inversion/fwi.py index 831b981763..b1445e6466 100644 --- a/examples/seismic/inversion/fwi.py +++ b/examples/seismic/inversion/fwi.py @@ -1,12 +1,10 @@ import numpy as np +from inversion_utils import compute_residual, update_with_box -from devito import configuration, Function, norm, mmax, mmin - -from examples.seismic import demo_model, AcquisitionGeometry +from devito import Function, configuration, mmax, mmin, norm +from examples.seismic import AcquisitionGeometry, demo_model from examples.seismic.acoustic import AcousticWaveSolver -from inversion_utils import compute_residual, update_with_box - # Turn off logging configuration['log-level'] = "ERROR" # Setup diff --git a/examples/seismic/inversion/inversion_utils.py b/examples/seismic/inversion/inversion_utils.py index 2d51275f92..789d31c02f 100644 --- a/examples/seismic/inversion/inversion_utils.py +++ b/examples/seismic/inversion/inversion_utils.py @@ -1,6 +1,6 @@ import numpy as np -from devito import Operator, Eq, Min, Max +from devito import Eq, Max, Min, Operator def compute_residual(res, dobs, dsyn): diff --git a/examples/seismic/model.py b/examples/seismic/model.py index 16d8f7a3a6..579d7a3827 100644 --- a/examples/seismic/model.py +++ b/examples/seismic/model.py @@ -1,13 +1,16 @@ import numpy as np from sympy import finite_diff_weights as fd_w + try: import pytest except: pass -from devito import (Grid, SubDomain, Function, Constant, warning, - SubDimension, Eq, Inc, Operator, div, sin, Abs) -from devito.builtins import initialize_function, gaussian_smooth, mmax, mmin +from devito import ( + Abs, Constant, Eq, Function, Grid, Inc, Operator, SubDimension, SubDomain, div, sin, + warning +) +from devito.builtins import gaussian_smooth, initialize_function, mmax, mmin from devito.tools import as_tuple __all__ = [ diff --git a/examples/seismic/plotting.py b/examples/seismic/plotting.py index 953290b8de..a5974d212b 100644 --- a/examples/seismic/plotting.py +++ b/examples/seismic/plotting.py @@ -1,4 +1,5 @@ import numpy as np + try: import matplotlib as mpl import matplotlib.pyplot as plt diff --git a/examples/seismic/self_adjoint/example_iso.py b/examples/seismic/self_adjoint/example_iso.py index 7899e43355..961415b13f 100644 --- a/examples/seismic/self_adjoint/example_iso.py +++ b/examples/seismic/self_adjoint/example_iso.py @@ -1,11 +1,9 @@ import numpy as np +from devito import Function, smooth from devito.logger import info -from devito import smooth, Function - -from examples.seismic import setup_geometry, Model, seismic_args -from examples.seismic.self_adjoint import (setup_w_over_q, - SaIsoAcousticWaveSolver) +from examples.seismic import Model, seismic_args, setup_geometry +from examples.seismic.self_adjoint import SaIsoAcousticWaveSolver, setup_w_over_q def acoustic_sa_setup(shape=(50, 50, 50), spacing=(10.0, 10.0, 10.0), diff --git a/examples/seismic/self_adjoint/operators.py b/examples/seismic/self_adjoint/operators.py index f4abb81de2..cdb0858e73 100644 --- a/examples/seismic/self_adjoint/operators.py +++ b/examples/seismic/self_adjoint/operators.py @@ -1,4 +1,4 @@ -from devito import Eq, Operator, Function, TimeFunction +from devito import Eq, Function, Operator, TimeFunction def iso_stencil(field, model, **kwargs): diff --git a/examples/seismic/self_adjoint/test_utils.py b/examples/seismic/self_adjoint/test_utils.py index c957b6e3f1..02527c85b5 100644 --- a/examples/seismic/self_adjoint/test_utils.py +++ b/examples/seismic/self_adjoint/test_utils.py @@ -1,9 +1,10 @@ import numpy as np + try: import pytest except: pass -from devito import Grid, Function +from devito import Function, Grid from examples.seismic.self_adjoint import setup_w_over_q diff --git a/examples/seismic/self_adjoint/test_wavesolver_iso.py b/examples/seismic/self_adjoint/test_wavesolver_iso.py index 2e4b9671b2..368a9f4b8d 100644 --- a/examples/seismic/self_adjoint/test_wavesolver_iso.py +++ b/examples/seismic/self_adjoint/test_wavesolver_iso.py @@ -1,13 +1,15 @@ -from scipy.special import hankel2 import numpy as np +from scipy.special import hankel2 + try: import pytest except: pass -from devito import Grid, Function, Eq, Operator, info -from examples.seismic import RickerSource, TimeAxis, Model, AcquisitionGeometry -from examples.seismic.self_adjoint import (acoustic_sa_setup, setup_w_over_q, - SaIsoAcousticWaveSolver) +from devito import Eq, Function, Grid, Operator, info +from examples.seismic import AcquisitionGeometry, Model, RickerSource, TimeAxis +from examples.seismic.self_adjoint import ( + SaIsoAcousticWaveSolver, acoustic_sa_setup, setup_w_over_q +) # Defaults in global scope shapes = [(71, 61), (71, 61, 51)] diff --git a/examples/seismic/self_adjoint/utils.py b/examples/seismic/self_adjoint/utils.py index 13c14ee2ac..6cdcf06c9d 100644 --- a/examples/seismic/self_adjoint/utils.py +++ b/examples/seismic/self_adjoint/utils.py @@ -1,5 +1,6 @@ import numpy as np -from devito import Eq, Operator, SubDimension, exp, Min, Abs + +from devito import Abs, Eq, Min, Operator, SubDimension, exp __all__ = ['setup_w_over_q'] diff --git a/examples/seismic/self_adjoint/wavesolver.py b/examples/seismic/self_adjoint/wavesolver.py index 219d37633e..fcb292f207 100644 --- a/examples/seismic/self_adjoint/wavesolver.py +++ b/examples/seismic/self_adjoint/wavesolver.py @@ -1,7 +1,8 @@ from devito import Function, TimeFunction from devito.tools import memoized_meth -from examples.seismic.self_adjoint.operators import IsoFwdOperator, IsoAdjOperator, \ - IsoJacobianFwdOperator, IsoJacobianAdjOperator +from examples.seismic.self_adjoint.operators import ( + IsoAdjOperator, IsoFwdOperator, IsoJacobianAdjOperator, IsoJacobianFwdOperator +) class SaIsoAcousticWaveSolver: diff --git a/examples/seismic/source.py b/examples/seismic/source.py index d0a44d612d..12e420565d 100644 --- a/examples/seismic/source.py +++ b/examples/seismic/source.py @@ -1,6 +1,8 @@ from functools import cached_property -from scipy import interpolate + import numpy as np +from scipy import interpolate + try: import matplotlib.pyplot as plt except: diff --git a/examples/seismic/test_seismic_utils.py b/examples/seismic/test_seismic_utils.py index efe12e2a49..76f5ff4560 100644 --- a/examples/seismic/test_seismic_utils.py +++ b/examples/seismic/test_seismic_utils.py @@ -5,7 +5,7 @@ import numpy as np from devito import norm -from examples.seismic import Model, setup_geometry, AcquisitionGeometry +from examples.seismic import AcquisitionGeometry, Model, setup_geometry def not_bcs(bc): diff --git a/examples/seismic/tti/operators.py b/examples/seismic/tti/operators.py index 6f7637c4a6..3e79d974bd 100644 --- a/examples/seismic/tti/operators.py +++ b/examples/seismic/tti/operators.py @@ -1,5 +1,4 @@ -from devito import (Eq, Operator, Function, TimeFunction, NODE, Inc, solve, - cos, sin, sqrt) +from devito import NODE, Eq, Function, Inc, Operator, TimeFunction, cos, sin, solve, sqrt from examples.seismic.acoustic.operators import freesurface diff --git a/examples/seismic/tti/tti_example.py b/examples/seismic/tti/tti_example.py index d65a8ce88b..aebbac62c7 100644 --- a/examples/seismic/tti/tti_example.py +++ b/examples/seismic/tti/tti_example.py @@ -1,12 +1,12 @@ import numpy as np + try: import pytest except ImportError: pass -from devito import Function, smooth, norm, info, Constant - -from examples.seismic import demo_model, setup_geometry, seismic_args +from devito import Constant, Function, info, norm, smooth +from examples.seismic import demo_model, seismic_args, setup_geometry from examples.seismic.tti import AnisotropicWaveSolver diff --git a/examples/seismic/tti/wavesolver.py b/examples/seismic/tti/wavesolver.py index 2534bef750..3ca1c740d4 100644 --- a/examples/seismic/tti/wavesolver.py +++ b/examples/seismic/tti/wavesolver.py @@ -1,9 +1,11 @@ -from devito import (Function, TimeFunction, warning, NODE, - DevitoCheckpoint, CheckpointOperator, Revolver) +from devito import ( + NODE, CheckpointOperator, DevitoCheckpoint, Function, Revolver, TimeFunction, warning +) from devito.tools import memoized_meth -from examples.seismic.tti.operators import ForwardOperator, AdjointOperator -from examples.seismic.tti.operators import JacobianOperator, JacobianAdjOperator -from examples.seismic.tti.operators import particle_velocity_fields +from examples.seismic.tti.operators import ( + AdjointOperator, ForwardOperator, JacobianAdjOperator, JacobianOperator, + particle_velocity_fields +) class AnisotropicWaveSolver: diff --git a/examples/seismic/utils.py b/examples/seismic/utils.py index d691c101c8..cacce8a3ee 100644 --- a/examples/seismic/utils.py +++ b/examples/seismic/utils.py @@ -1,7 +1,8 @@ -import numpy as np from argparse import Action, ArgumentError, ArgumentParser -from devito import error, configuration, warning +import numpy as np + +from devito import configuration, error, warning from devito.tools import Pickable from devito.types.sparse import _default_radius diff --git a/examples/seismic/viscoacoustic/operators.py b/examples/seismic/viscoacoustic/operators.py index d237d43ea6..de84aad76f 100755 --- a/examples/seismic/viscoacoustic/operators.py +++ b/examples/seismic/viscoacoustic/operators.py @@ -1,8 +1,9 @@ -import sympy as sp import numpy as np +import sympy as sp -from devito import (Eq, Operator, VectorTimeFunction, TimeFunction, Function, NODE, - div, grad, solve) +from devito import ( + NODE, Eq, Function, Operator, TimeFunction, VectorTimeFunction, div, grad, solve +) def src_rec(p, model, geometry, **kwargs): diff --git a/examples/seismic/viscoacoustic/viscoacoustic_example.py b/examples/seismic/viscoacoustic/viscoacoustic_example.py index 3b065d50f9..fdf6992f89 100755 --- a/examples/seismic/viscoacoustic/viscoacoustic_example.py +++ b/examples/seismic/viscoacoustic/viscoacoustic_example.py @@ -1,13 +1,14 @@ import numpy as np + try: import pytest except ImportError: pass -from devito.logger import info from devito import norm +from devito.logger import info +from examples.seismic import demo_model, seismic_args, setup_geometry from examples.seismic.viscoacoustic import ViscoacousticWaveSolver -from examples.seismic import demo_model, setup_geometry, seismic_args def viscoacoustic_setup(shape=(50, 50), spacing=(15.0, 15.0), tn=500., space_order=4, diff --git a/examples/seismic/viscoacoustic/wavesolver.py b/examples/seismic/viscoacoustic/wavesolver.py index 61f03b7c8c..9b7a6c5b8a 100755 --- a/examples/seismic/viscoacoustic/wavesolver.py +++ b/examples/seismic/viscoacoustic/wavesolver.py @@ -1,8 +1,10 @@ -from devito import (VectorTimeFunction, TimeFunction, Function, NODE, - DevitoCheckpoint, CheckpointOperator, Revolver) +from devito import ( + NODE, CheckpointOperator, DevitoCheckpoint, Function, Revolver, TimeFunction, + VectorTimeFunction +) from devito.tools import memoized_meth from examples.seismic.viscoacoustic.operators import ( - ForwardOperator, AdjointOperator, GradientOperator, BornOperator + AdjointOperator, BornOperator, ForwardOperator, GradientOperator ) diff --git a/examples/seismic/viscoelastic/operators.py b/examples/seismic/viscoelastic/operators.py index 9e0269665a..199f7a926e 100644 --- a/examples/seismic/viscoelastic/operators.py +++ b/examples/seismic/viscoelastic/operators.py @@ -1,7 +1,8 @@ import sympy as sp -from devito import (Eq, Operator, VectorTimeFunction, TensorTimeFunction, - div, grad, diag, solve) +from devito import ( + Eq, Operator, TensorTimeFunction, VectorTimeFunction, diag, div, grad, solve +) from examples.seismic.elastic import src_rec diff --git a/examples/seismic/viscoelastic/viscoelastic_example.py b/examples/seismic/viscoelastic/viscoelastic_example.py index 381c542414..4813131325 100644 --- a/examples/seismic/viscoelastic/viscoelastic_example.py +++ b/examples/seismic/viscoelastic/viscoelastic_example.py @@ -1,4 +1,5 @@ import numpy as np + try: import pytest except ImportError: @@ -6,8 +7,8 @@ from devito import norm from devito.logger import info +from examples.seismic import demo_model, seismic_args, setup_geometry from examples.seismic.viscoelastic import ViscoelasticWaveSolver -from examples.seismic import demo_model, setup_geometry, seismic_args def viscoelastic_setup(shape=(50, 50), spacing=(15.0, 15.0), tn=500., space_order=4, diff --git a/examples/seismic/viscoelastic/wavesolver.py b/examples/seismic/viscoelastic/wavesolver.py index 6f3945661c..edbed1222a 100644 --- a/examples/seismic/viscoelastic/wavesolver.py +++ b/examples/seismic/viscoelastic/wavesolver.py @@ -1,4 +1,4 @@ -from devito import VectorTimeFunction, TensorTimeFunction +from devito import TensorTimeFunction, VectorTimeFunction from devito.tools import memoized_meth from examples.seismic.viscoelastic.operators import ForwardOperator diff --git a/examples/timestepping/acoustic_superstep.py b/examples/timestepping/acoustic_superstep.py index 4779adfb0d..c482de3563 100644 --- a/examples/timestepping/acoustic_superstep.py +++ b/examples/timestepping/acoustic_superstep.py @@ -8,15 +8,10 @@ import numpy as np from devito import ( - ConditionalDimension, - Eq, - Operator, - SparseTimeFunction, - TimeFunction, - solve, + ConditionalDimension, Eq, Operator, SparseTimeFunction, TimeFunction, solve ) from devito.timestepping.superstep import superstep_generator -from examples.seismic import demo_model, SeismicModel +from examples.seismic import SeismicModel, demo_model def ricker(t, f=10, A=1): diff --git a/tests/test_adjoint.py b/tests/test_adjoint.py index f5f89de22e..2a70be5d87 100644 --- a/tests/test_adjoint.py +++ b/tests/test_adjoint.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from devito import Operator, norm, Function, Grid, SparseFunction, inner +from devito import Function, Grid, Operator, SparseFunction, inner, norm from devito.logger import info from examples.seismic import demo_model from examples.seismic.acoustic import acoustic_setup diff --git a/tests/test_arch.py b/tests/test_arch.py index e9af3fa9e5..9565c6f08d 100644 --- a/tests/test_arch.py +++ b/tests/test_arch.py @@ -1,7 +1,7 @@ import pytest -from devito import switchconfig, configuration -from devito.arch.compiler import sniff_compiler_version, compiler_registry, GNUCompiler +from devito import configuration, switchconfig +from devito.arch.compiler import GNUCompiler, compiler_registry, sniff_compiler_version @pytest.mark.parametrize("cc", [ diff --git a/tests/test_autotuner.py b/tests/test_autotuner.py index ca1644316c..86a215e41f 100644 --- a/tests/test_autotuner.py +++ b/tests/test_autotuner.py @@ -1,10 +1,10 @@ -import pytest import numpy as np +import pytest from conftest import assert_blocking, skipif -from devito import Grid, Function, TimeFunction, Eq, Operator, configuration, switchconfig -from devito.data import LEFT +from devito import Eq, Function, Grid, Operator, TimeFunction, configuration, switchconfig from devito.core.autotuning import options # noqa +from devito.data import LEFT @switchconfig(log_level='DEBUG', develop_mode=True) diff --git a/tests/test_benchmark.py b/tests/test_benchmark.py index 513776489c..0de45e4799 100644 --- a/tests/test_benchmark.py +++ b/tests/test_benchmark.py @@ -1,11 +1,12 @@ -import pytest import os import sys +from subprocess import check_call + +import pytest from benchmarks.user.benchmark import run -from devito import configuration, switchconfig, Grid, TimeFunction, Eq, Operator from conftest import skipif -from subprocess import check_call +from devito import Eq, Grid, Operator, TimeFunction, configuration, switchconfig @skipif('cpu64-icx') diff --git a/tests/test_buffering.py b/tests/test_buffering.py index cc0972f4bf..2959796851 100644 --- a/tests/test_buffering.py +++ b/tests/test_buffering.py @@ -1,12 +1,14 @@ -import pytest import numpy as np +import pytest from conftest import skipif -from devito import (Constant, Grid, TimeFunction, Operator, Eq, SubDimension, - SubDomain, ConditionalDimension, configuration, switchconfig) +from devito import ( + ConditionalDimension, Constant, Eq, Grid, Operator, SubDimension, SubDomain, + TimeFunction, configuration, switchconfig +) from devito.arch.archinfo import AppleArm -from devito.ir import FindSymbols, retrieve_iteration_tree from devito.exceptions import CompilationError +from devito.ir import FindSymbols, retrieve_iteration_tree def test_read_write(): diff --git a/tests/test_builtins.py b/tests/test_builtins.py index 980b6e6512..1a5c98dcb0 100644 --- a/tests/test_builtins.py +++ b/tests/test_builtins.py @@ -1,17 +1,19 @@ -import pytest import numpy as np +import pytest from scipy.ndimage import gaussian_filter + try: from scipy.datasets import ascent except ImportError: from scipy.misc import ascent -from devito import ConditionalDimension, Grid, Function, TimeFunction, switchconfig -from devito.builtins import (assign, norm, gaussian_smooth, initialize_function, - inner, mmin, mmax, sum, sumall) +from devito import ConditionalDimension, Function, Grid, TimeFunction, switchconfig +from devito.builtins import ( + assign, gaussian_smooth, initialize_function, inner, mmax, mmin, norm, sum, sumall +) from devito.data import LEFT, RIGHT from devito.tools import as_tuple -from devito.types import SubDomain, SparseTimeFunction +from devito.types import SparseTimeFunction, SubDomain class TestAssign: diff --git a/tests/test_caching.py b/tests/test_caching.py index 26ce3b6721..86f0d45097 100644 --- a/tests/test_caching.py +++ b/tests/test_caching.py @@ -1,16 +1,19 @@ -from ctypes import byref, c_void_p import weakref +from ctypes import byref, c_void_p import numpy as np -from sympy import Expr import pytest +from sympy import Expr -from devito import (Grid, Function, TimeFunction, SparseFunction, SparseTimeFunction, - ConditionalDimension, SubDimension, Constant, Operator, Eq, Dimension, - DefaultDimension, _SymbolCache, clear_cache, solve, VectorFunction, - TensorFunction, TensorTimeFunction, VectorTimeFunction) -from devito.types import (DeviceID, NThreadsBase, NPThreads, Object, LocalObject, - Scalar, Symbol, ThreadID) +from devito import ( + ConditionalDimension, Constant, DefaultDimension, Dimension, Eq, Function, Grid, + Operator, SparseFunction, SparseTimeFunction, SubDimension, TensorFunction, + TensorTimeFunction, TimeFunction, VectorFunction, VectorTimeFunction, _SymbolCache, + clear_cache, solve +) +from devito.types import ( + DeviceID, LocalObject, NPThreads, NThreadsBase, Object, Scalar, Symbol, ThreadID +) from devito.types.basic import AbstractSymbol diff --git a/tests/test_checkpointing.py b/tests/test_checkpointing.py index 75cca861cc..98f6f1603c 100644 --- a/tests/test_checkpointing.py +++ b/tests/test_checkpointing.py @@ -1,11 +1,13 @@ from functools import reduce -import pytest import numpy as np +import pytest from conftest import skipif -from devito import (Grid, TimeFunction, Operator, Function, Eq, switchconfig, Constant, - Revolver, CheckpointOperator, DevitoCheckpoint) +from devito import ( + CheckpointOperator, Constant, DevitoCheckpoint, Eq, Function, Grid, Operator, + Revolver, TimeFunction, switchconfig +) from examples.seismic.acoustic.acoustic_example import acoustic_setup diff --git a/tests/test_constant.py b/tests/test_constant.py index e39cf81502..5437c2478e 100644 --- a/tests/test_constant.py +++ b/tests/test_constant.py @@ -1,6 +1,6 @@ import numpy as np -from devito import Grid, Constant, Function, TimeFunction, Eq, solve, Operator +from devito import Constant, Eq, Function, Grid, Operator, TimeFunction, solve class TestConst: diff --git a/tests/test_cse.py b/tests/test_cse.py index 4359470c92..fe41ca0564 100644 --- a/tests/test_cse.py +++ b/tests/test_cse.py @@ -1,14 +1,14 @@ -import pytest - import numpy as np +import pytest from sympy import Ge, Lt from sympy.core.mul import _mulsort from conftest import assert_structure -from devito import (Grid, Function, TimeFunction, ConditionalDimension, Eq, # noqa - Operator, cos, sin) +from devito import ( # noqa + ConditionalDimension, Eq, Function, Grid, Operator, TimeFunction, cos, sin +) from devito.finite_differences.differentiable import diffify -from devito.ir import DummyEq, FindNodes, FindSymbols, Conditional +from devito.ir import Conditional, DummyEq, FindNodes, FindSymbols from devito.ir.support import generator from devito.passes.clusters.cse import CTemp, _cse from devito.symbolics import indexify diff --git a/tests/test_data.py b/tests/test_data.py index eac3aa1c43..f7a30b2bd9 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -1,11 +1,12 @@ -import pytest import numpy as np +import pytest -from devito import (Grid, Function, TimeFunction, SparseTimeFunction, Dimension, # noqa - Eq, Operator, ALLOC_GUARD, ALLOC_ALIGNED, configuration, - switchconfig, SparseFunction, PrecomputedSparseFunction, - PrecomputedSparseTimeFunction) -from devito.data import LEFT, RIGHT, Decomposition, loc_data_idx, convert_index +from devito import ( # noqa + ALLOC_ALIGNED, ALLOC_GUARD, Dimension, Eq, Function, Grid, Operator, + PrecomputedSparseFunction, PrecomputedSparseTimeFunction, SparseFunction, + SparseTimeFunction, TimeFunction, configuration, switchconfig +) +from devito.data import LEFT, RIGHT, Decomposition, convert_index, loc_data_idx from devito.data.allocators import DataReference from devito.tools import as_tuple from devito.types import Scalar diff --git a/tests/test_derivatives.py b/tests/test_derivatives.py index 312572173a..e0e343cfe7 100644 --- a/tests/test_derivatives.py +++ b/tests/test_derivatives.py @@ -1,13 +1,15 @@ import numpy as np import pytest -from sympy import sympify, simplify, diff, Float, Symbol +from sympy import Float, Symbol, diff, simplify, sympify -from devito import (Grid, Function, TimeFunction, Eq, Operator, NODE, cos, sin, - ConditionalDimension, left, right, centered, div, grad) +from devito import ( + NODE, ConditionalDimension, Eq, Function, Grid, Operator, TimeFunction, centered, cos, + div, grad, left, right, sin +) from devito.finite_differences import Derivative, Differentiable, diffify -from devito.finite_differences.differentiable import (Add, EvalDerivative, IndexSum, - IndexDerivative, Weights, - DiffDerivative) +from devito.finite_differences.differentiable import ( + Add, DiffDerivative, EvalDerivative, IndexDerivative, IndexSum, Weights +) from devito.symbolics import indexify, retrieve_indexed from devito.types.dimension import StencilDimension from devito.warnings import DevitoWarning diff --git a/tests/test_differentiable.py b/tests/test_differentiable.py index c8f256aa2b..0f97a2ab2a 100644 --- a/tests/test_differentiable.py +++ b/tests/test_differentiable.py @@ -1,12 +1,13 @@ from itertools import product -import sympy -import pytest import numpy as np +import pytest +import sympy -from devito import Function, Grid, Differentiable, NODE -from devito.finite_differences.differentiable import (Add, Mul, Pow, diffify, - interp_for_fd, SafeInv) +from devito import NODE, Differentiable, Function, Grid +from devito.finite_differences.differentiable import ( + Add, Mul, Pow, SafeInv, diffify, interp_for_fd +) def test_differentiable(): diff --git a/tests/test_dimension.py b/tests/test_dimension.py index f43ae795eb..f803185db1 100644 --- a/tests/test_dimension.py +++ b/tests/test_dimension.py @@ -1,21 +1,23 @@ -from itertools import product from copy import deepcopy +from itertools import product import numpy as np -from sympy import And, Or import pytest +from sympy import And, Or -from conftest import assert_blocking, assert_structure, skipif, opts_tiling -from devito import (ConditionalDimension, Grid, Function, TimeFunction, floor, # noqa - SparseFunction, SparseTimeFunction, Eq, Operator, Constant, - Dimension, DefaultDimension, SubDimension, switchconfig, - SubDomain, Lt, Le, Gt, Ge, Ne, Buffer, sin, SpaceDimension, - CustomDimension, dimensions, configuration, norm, Inc, sum) -from devito.ir.iet import (Conditional, Expression, Iteration, FindNodes, - FindSymbols, retrieve_iteration_tree) -from devito.ir.equations.algorithms import concretize_subdims +from conftest import assert_blocking, assert_structure, opts_tiling, skipif +from devito import ( # noqa + Buffer, ConditionalDimension, Constant, CustomDimension, DefaultDimension, Dimension, + Eq, Function, Ge, Grid, Gt, Inc, Le, Lt, Ne, Operator, SpaceDimension, SparseFunction, + SparseTimeFunction, SubDimension, SubDomain, TimeFunction, configuration, dimensions, + floor, norm, sin, sum, switchconfig +) from devito.ir import SymbolRegistry -from devito.symbolics import indexify, retrieve_functions, IntDiv, INT +from devito.ir.equations.algorithms import concretize_subdims +from devito.ir.iet import ( + Conditional, Expression, FindNodes, FindSymbols, Iteration, retrieve_iteration_tree +) +from devito.symbolics import INT, IntDiv, indexify, retrieve_functions from devito.types import Array, StencilDimension, Symbol from devito.types.basic import Scalar from devito.types.dimension import AffineIndexAccessFunction, Thickness diff --git a/tests/test_dle.py b/tests/test_dle.py index c49f3fa67b..3be184e46b 100644 --- a/tests/test_dle.py +++ b/tests/test_dle.py @@ -1,18 +1,20 @@ from functools import reduce from operator import mul -import sympy import numpy as np import pytest +import sympy -from conftest import assert_structure, assert_blocking, _R, skipif -from devito import (Grid, Function, TimeFunction, SparseTimeFunction, SpaceDimension, - CustomDimension, Dimension, DefaultDimension, SubDimension, - PrecomputedSparseTimeFunction, Eq, Inc, ReduceMin, ReduceMax, - Operator, configuration, dimensions, info, cos) +from conftest import _R, assert_blocking, assert_structure, skipif +from devito import ( + CustomDimension, DefaultDimension, Dimension, Eq, Function, Grid, Inc, Operator, + PrecomputedSparseTimeFunction, ReduceMax, ReduceMin, SpaceDimension, + SparseTimeFunction, SubDimension, TimeFunction, configuration, cos, dimensions, info +) from devito.exceptions import InvalidArgument -from devito.ir.iet import (Iteration, FindNodes, IsPerfectIteration, - retrieve_iteration_tree, Expression) +from devito.ir.iet import ( + Expression, FindNodes, IsPerfectIteration, Iteration, retrieve_iteration_tree +) from devito.passes.iet.languages.openmp import Ompizer, OmpRegion from devito.tools import as_tuple from devito.types import Barrier, Scalar, Symbol diff --git a/tests/test_docstrings.py b/tests/test_docstrings.py index e95e786ace..dae7abb149 100644 --- a/tests/test_docstrings.py +++ b/tests/test_docstrings.py @@ -10,10 +10,10 @@ # * skipping tests when using a devito backend (where they would fail, for # the most disparate reasons) +import doctest from importlib import import_module import pytest -import doctest @pytest.mark.parametrize('modname', [ diff --git a/tests/test_dse.py b/tests/test_dse.py index b968964f5e..e93f4215d2 100644 --- a/tests/test_dse.py +++ b/tests/test_dse.py @@ -2,31 +2,34 @@ import numpy as np import pytest - from sympy import Mul # noqa -from conftest import (skipif, EVAL, _R, assert_structure, assert_blocking, # noqa - get_params, get_arrays, check_array) -from devito import (NODE, Eq, Inc, Constant, Function, TimeFunction, # noqa - SparseTimeFunction, Dimension, SubDimension, - ConditionalDimension, DefaultDimension, Grid, Operator, - norm, grad, div, dimensions, switchconfig, configuration, - first_derivative, solve, transpose, Abs, cos, exp, - sin, sqrt, floor, Ge, Lt, Derivative) +from conftest import ( # noqa + _R, EVAL, assert_blocking, assert_structure, check_array, get_arrays, get_params, + skipif +) +from devito import ( # noqa + NODE, Abs, ConditionalDimension, Constant, DefaultDimension, Derivative, Dimension, + Eq, Function, Ge, Grid, Inc, Lt, Operator, SparseTimeFunction, SubDimension, + TimeFunction, configuration, cos, dimensions, div, exp, first_derivative, floor, grad, + norm, sin, solve, sqrt, switchconfig, transpose +) from devito.exceptions import InvalidArgument, InvalidOperator -from devito.ir import (Conditional, DummyEq, Expression, Iteration, FindNodes, - FindSymbols, ParallelIteration, retrieve_iteration_tree) +from devito.ir import ( + Conditional, DummyEq, Expression, FindNodes, FindSymbols, Iteration, + ParallelIteration, retrieve_iteration_tree +) from devito.passes.clusters.aliases import collect from devito.passes.clusters.factorization import collect_nested from devito.passes.iet.parpragma import VExpanded -from devito.symbolics import (INT, FLOAT, DefFunction, FieldFromPointer, # noqa - IndexedPointer, Keyword, SizeOf, estimate_cost, - pow_to_mul, indexify) +from devito.symbolics import ( # noqa + FLOAT, INT, DefFunction, FieldFromPointer, IndexedPointer, Keyword, SizeOf, + estimate_cost, indexify, pow_to_mul +) from devito.tools import as_tuple -from devito.types import Scalar, Symbol, PrecomputedSparseTimeFunction - +from devito.types import PrecomputedSparseTimeFunction, Scalar, Symbol +from examples.seismic import AcquisitionGeometry, demo_model from examples.seismic.acoustic import AcousticWaveSolver -from examples.seismic import demo_model, AcquisitionGeometry from examples.seismic.tti import AnisotropicWaveSolver diff --git a/tests/test_dtypes.py b/tests/test_dtypes.py index 370c169b07..a2a04e858f 100644 --- a/tests/test_dtypes.py +++ b/tests/test_dtypes.py @@ -7,10 +7,8 @@ except ImportError: from conftest import skipif -from devito import ( - Constant, Eq, Function, Grid, Operator, exp, log, sin, configuration -) -from devito.arch.compiler import GNUCompiler, CustomCompiler +from devito import Constant, Eq, Function, Grid, Operator, configuration, exp, log, sin +from devito.arch.compiler import CustomCompiler, GNUCompiler from devito.exceptions import InvalidOperator from devito.ir.cgen.printer import BasePrinter from devito.passes.iet.langbase import LangBB diff --git a/tests/test_error_checking.py b/tests/test_error_checking.py index f03cf708e4..5de3105fe4 100644 --- a/tests/test_error_checking.py +++ b/tests/test_error_checking.py @@ -1,6 +1,6 @@ import pytest -from devito import Grid, Function, TimeFunction, Eq, Operator, switchconfig +from devito import Eq, Function, Grid, Operator, TimeFunction, switchconfig from devito.exceptions import ExecutionError diff --git a/tests/test_fission.py b/tests/test_fission.py index 9f7c74b6a6..f62ac63bab 100644 --- a/tests/test_fission.py +++ b/tests/test_fission.py @@ -1,8 +1,9 @@ import numpy as np from conftest import assert_structure -from devito import (Eq, Inc, Grid, Function, TimeFunction, SubDimension, SubDomain, - Operator, solve) +from devito import ( + Eq, Function, Grid, Inc, Operator, SubDimension, SubDomain, TimeFunction, solve +) def test_issue_1725(): diff --git a/tests/test_gpu_common.py b/tests/test_gpu_common.py index 1359025a3a..a31560f988 100644 --- a/tests/test_gpu_common.py +++ b/tests/test_gpu_common.py @@ -1,25 +1,24 @@ import cloudpickle as pickle - -import pytest import numpy as np -import sympy +import pytest import scipy.sparse +import sympy -from conftest import assert_structure -from devito import (Constant, Eq, Inc, Grid, Function, ConditionalDimension, - Dimension, MatrixSparseTimeFunction, SparseTimeFunction, - SubDimension, SubDomain, SubDomainSet, TimeFunction, exp, - Operator, configuration, switchconfig, TensorTimeFunction, - Buffer, assign, switchenv) -from devito.arch import get_gpu_info, get_cpu_info, Device, Cpu64 +from conftest import assert_structure, skipif +from devito import ( + Buffer, ConditionalDimension, Constant, Dimension, Eq, Function, Grid, Inc, + MatrixSparseTimeFunction, Operator, SparseTimeFunction, SubDimension, SubDomain, + SubDomainSet, TensorTimeFunction, TimeFunction, assign, configuration, exp, + switchconfig, switchenv +) +from devito.arch import Cpu64, Device, get_cpu_info, get_gpu_info from devito.exceptions import InvalidArgument -from devito.ir import (Conditional, Expression, Section, FindNodes, FindSymbols, - retrieve_iteration_tree) +from devito.ir import ( + Conditional, Expression, FindNodes, FindSymbols, Section, retrieve_iteration_tree +) from devito.passes.iet.languages.openmp import OmpIteration from devito.types import DeviceID, DeviceRM, Lock, NPThreads, PThreadArray, Symbol -from conftest import skipif - pytestmark = skipif(['nodevice'], whole_module=True) diff --git a/tests/test_gpu_openacc.py b/tests/test_gpu_openacc.py index 8c4813db0b..ccaaa0bd6a 100644 --- a/tests/test_gpu_openacc.py +++ b/tests/test_gpu_openacc.py @@ -1,13 +1,14 @@ -import pytest import numpy as np +import pytest -from devito import (Grid, Function, TimeFunction, SparseTimeFunction, Eq, Operator, - norm, solve, Max) -from conftest import skipif, assert_blocking, opts_device_tiling +from conftest import assert_blocking, opts_device_tiling, skipif +from devito import ( + Eq, Function, Grid, Max, Operator, SparseTimeFunction, TimeFunction, norm, solve +) from devito.data import LEFT from devito.exceptions import InvalidOperator -from devito.ir.iet import retrieve_iteration_tree, FindNodes, Iteration -from examples.seismic import TimeAxis, RickerSource, Receiver +from devito.ir.iet import FindNodes, Iteration, retrieve_iteration_tree +from examples.seismic import Receiver, RickerSource, TimeAxis pytestmark = skipif(['nodevice'], whole_module=True) diff --git a/tests/test_gpu_openmp.py b/tests/test_gpu_openmp.py index 7150d66eb2..3d3b0d4b09 100644 --- a/tests/test_gpu_openmp.py +++ b/tests/test_gpu_openmp.py @@ -1,12 +1,13 @@ import numpy as np import pytest -from conftest import skipif, opts_device_tiling -from devito import (Grid, Dimension, Function, TimeFunction, Eq, Inc, solve, - Operator, norm, cos) +from conftest import opts_device_tiling, skipif +from devito import ( + Dimension, Eq, Function, Grid, Inc, Operator, TimeFunction, cos, norm, solve +) from devito.exceptions import InvalidOperator from devito.ir.iet import retrieve_iteration_tree -from examples.seismic import TimeAxis, RickerSource, Receiver +from examples.seismic import Receiver, RickerSource, TimeAxis pytestmark = skipif(['nodevice'], whole_module=True) diff --git a/tests/test_gradient.py b/tests/test_gradient.py index 67a691ab1d..fd070a91f5 100644 --- a/tests/test_gradient.py +++ b/tests/test_gradient.py @@ -3,11 +3,11 @@ from numpy import linalg from conftest import skipif -from devito import Function, info, TimeFunction, Operator, Eq, smooth +from devito import Eq, Function, Operator, TimeFunction, info, smooth from devito.parameters import switchconfig +from examples.seismic import Receiver, demo_model, setup_geometry from examples.seismic.acoustic import acoustic_setup as iso_setup from examples.seismic.acoustic.operators import iso_stencil -from examples.seismic import Receiver, demo_model, setup_geometry from examples.seismic.tti import tti_setup from examples.seismic.viscoacoustic import viscoacoustic_setup as vsc_setup diff --git a/tests/test_iet.py b/tests/test_iet.py index b843d12f9f..7f0675eaf0 100644 --- a/tests/test_iet.py +++ b/tests/test_iet.py @@ -1,25 +1,26 @@ -import pytest - from ctypes import c_void_p + import cgen import numpy as np +import pytest import sympy -from devito import (Eq, Grid, Function, TimeFunction, Operator, Dimension, # noqa - switchconfig) -from devito.ir.iet import ( - Call, Callable, Conditional, Definition, DeviceCall, DummyExpr, Iteration, - List, KernelLaunch, Dereference, Lambda, Switch, ElementalFunction, CGen, - FindSymbols, filter_iterations, make_efunc, retrieve_iteration_tree, - Transformer +from devito import ( # noqa + Dimension, Eq, Function, Grid, Operator, TimeFunction, switchconfig ) from devito.ir import SymbolRegistry +from devito.ir.iet import ( + Call, Callable, CGen, Conditional, Definition, Dereference, DeviceCall, DummyExpr, + ElementalFunction, FindSymbols, Iteration, KernelLaunch, Lambda, List, Switch, + Transformer, filter_iterations, make_efunc, retrieve_iteration_tree +) from devito.passes.iet.engine import Graph from devito.passes.iet.languages.C import CDataManager -from devito.symbolics import (Byref, FieldFromComposite, InlineIf, Macro, Class, - String, FLOAT) +from devito.symbolics import ( + FLOAT, Byref, Class, FieldFromComposite, InlineIf, Macro, String +) from devito.tools import CustomDtype, as_tuple, dtype_to_ctype -from devito.types import CustomDimension, Array, LocalObject, Symbol, Pointer +from devito.types import Array, CustomDimension, LocalObject, Pointer, Symbol @pytest.fixture diff --git a/tests/test_interpolation.py b/tests/test_interpolation.py index eae0ddb60e..0012c4ed40 100644 --- a/tests/test_interpolation.py +++ b/tests/test_interpolation.py @@ -1,18 +1,20 @@ import numpy as np -from numpy import sin, floor import pytest +import scipy.sparse +from numpy import floor, sin from sympy import Float from conftest import assert_structure -from devito import (Grid, Operator, Dimension, SparseFunction, SparseTimeFunction, - Function, TimeFunction, DefaultDimension, Eq, switchconfig, - PrecomputedSparseFunction, PrecomputedSparseTimeFunction, - MatrixSparseTimeFunction, SubDomain) +from devito import ( + DefaultDimension, Dimension, Eq, Function, Grid, MatrixSparseTimeFunction, Operator, + PrecomputedSparseFunction, PrecomputedSparseTimeFunction, SparseFunction, + SparseTimeFunction, SubDomain, TimeFunction, switchconfig +) from devito.operations.interpolators import LinearInterpolator, SincInterpolator -from examples.seismic import (demo_model, TimeAxis, RickerSource, Receiver, - AcquisitionGeometry) +from examples.seismic import ( + AcquisitionGeometry, Receiver, RickerSource, TimeAxis, demo_model +) from examples.seismic.acoustic import AcousticWaveSolver, acoustic_setup -import scipy.sparse def unit_box(name='a', shape=(11, 11), grid=None, space_order=1): diff --git a/tests/test_ir.py b/tests/test_ir.py index c9f9440297..be2bcedffc 100644 --- a/tests/test_ir.py +++ b/tests/test_ir.py @@ -1,20 +1,24 @@ -import pytest import numpy as np +import pytest from sympy import S from conftest import EVAL, skipif # noqa -from devito import (Eq, Inc, Grid, Constant, Function, TimeFunction, # noqa - Operator, Dimension, SubDimension, switchconfig) +from devito import ( # noqa + Constant, Dimension, Eq, Function, Grid, Inc, Operator, SubDimension, TimeFunction, + switchconfig +) from devito.ir.cgen import ccode from devito.ir.equations import LoweredEq from devito.ir.equations.algorithms import dimension_sort -from devito.ir.iet import Iteration, FindNodes -from devito.ir.support.basic import (IterationInstance, TimedAccess, Scope, - Vector, AFFINE, REGULAR, IRREGULAR, mocksym0, - mocksym1) -from devito.ir.support.space import (NullInterval, Interval, Forward, Backward, - IntervalGroup, IterationSpace) +from devito.ir.iet import FindNodes, Iteration +from devito.ir.support.basic import ( + AFFINE, IRREGULAR, REGULAR, IterationInstance, Scope, TimedAccess, Vector, mocksym0, + mocksym1 +) from devito.ir.support.guards import GuardOverflow +from devito.ir.support.space import ( + Backward, Forward, Interval, IntervalGroup, IterationSpace, NullInterval +) from devito.symbolics import DefFunction, FieldFromPointer from devito.tools import prod from devito.tools.data_structures import frozendict diff --git a/tests/test_linearize.py b/tests/test_linearize.py index 4201d84ff8..52cc220070 100644 --- a/tests/test_linearize.py +++ b/tests/test_linearize.py @@ -1,11 +1,13 @@ -import pytest import numpy as np +import pytest import scipy.sparse -from devito import (Grid, Function, TimeFunction, SparseTimeFunction, Operator, Eq, - Inc, MatrixSparseTimeFunction, sin, switchconfig, configuration) +from devito import ( + Eq, Function, Grid, Inc, MatrixSparseTimeFunction, Operator, SparseTimeFunction, + TimeFunction, configuration, sin, switchconfig +) from devito.ir import Call, Callable, DummyExpr, Expression, FindNodes, SymbolRegistry -from devito.passes import Graph, linearize, generate_macros +from devito.passes import Graph, generate_macros, linearize from devito.types import Array, Bundle, DefaultDimension diff --git a/tests/test_lower_clusters.py b/tests/test_lower_clusters.py index 4791571cd4..466466a734 100644 --- a/tests/test_lower_clusters.py +++ b/tests/test_lower_clusters.py @@ -1,4 +1,4 @@ -from devito import Grid, SparseTimeFunction, TimeFunction, Operator +from devito import Grid, Operator, SparseTimeFunction, TimeFunction from devito.ir.iet import FindSymbols diff --git a/tests/test_lower_exprs.py b/tests/test_lower_exprs.py index 5bafb89954..5a37237c6b 100644 --- a/tests/test_lower_exprs.py +++ b/tests/test_lower_exprs.py @@ -1,14 +1,11 @@ import numpy as np import pytest -from devito import (Grid, TimeFunction, Function, Operator, Eq, solve, - DefaultDimension) +from devito import DefaultDimension, Eq, Function, Grid, Operator, TimeFunction, solve from devito.finite_differences import Derivative from devito.finite_differences.differentiable import diff2sympy from devito.ir.equations import LoweredEq -from devito.passes.equations.linearity import ( - _collect_derivatives as collect_derivatives -) +from devito.passes.equations.linearity import _collect_derivatives as collect_derivatives from devito.tools import timed_region diff --git a/tests/test_mpi.py b/tests/test_mpi.py index c13e465a99..c0d0b4a564 100644 --- a/tests/test_mpi.py +++ b/tests/test_mpi.py @@ -1,27 +1,27 @@ +from functools import cached_property + import numpy as np import pytest -from functools import cached_property +from test_dse import TestTTI from conftest import _R, assert_blocking, assert_structure -from devito import (Grid, Constant, Function, TimeFunction, SparseFunction, - SparseTimeFunction, VectorTimeFunction, TensorTimeFunction, - Dimension, ConditionalDimension, div, solve, diag, grad, - SubDimension, SubDomain, Eq, Ne, Inc, NODE, Operator, norm, - inner, configuration, switchconfig, generic_derivative, - PrecomputedSparseFunction, DefaultDimension, Buffer, - CustomDimension) +from devito import ( + NODE, Buffer, ConditionalDimension, Constant, CustomDimension, DefaultDimension, + Dimension, Eq, Function, Grid, Inc, Ne, Operator, PrecomputedSparseFunction, + SparseFunction, SparseTimeFunction, SubDimension, SubDomain, TensorTimeFunction, + TimeFunction, VectorTimeFunction, configuration, diag, div, generic_derivative, grad, + inner, norm, solve, switchconfig +) from devito.arch.compiler import OneapiCompiler from devito.data import LEFT, RIGHT -from devito.ir.iet import (Call, Conditional, Iteration, FindNodes, FindSymbols, - retrieve_iteration_tree) +from devito.ir.iet import ( + Call, Conditional, FindNodes, FindSymbols, Iteration, retrieve_iteration_tree +) from devito.mpi import MPI -from devito.mpi.routines import (HaloUpdateCall, HaloUpdateList, MPICall, - ComputeCall) from devito.mpi.distributed import CustomTopology +from devito.mpi.routines import ComputeCall, HaloUpdateCall, HaloUpdateList, MPICall from devito.tools import Bunch - from examples.seismic.acoustic import acoustic_setup -from test_dse import TestTTI # Main body in Operator IET, depending on ISA diff --git a/tests/test_operator.py b/tests/test_operator.py index c73a25664a..1a9b82942a 100644 --- a/tests/test_operator.py +++ b/tests/test_operator.py @@ -1,14 +1,13 @@ +import json +import logging import os -from itertools import permutations from functools import reduce +from itertools import permutations from operator import mul -import logging -import json import numpy as np -import sympy - import pytest +import sympy # Try-except required to allow for import of classes from this file # for testing in PRO @@ -17,26 +16,27 @@ except ImportError: from conftest import assert_structure, skipif -from devito import (Grid, Eq, Operator, Constant, Function, TimeFunction, - SparseFunction, SparseTimeFunction, Dimension, error, SpaceDimension, - NODE, CELL, dimensions, configuration, TensorFunction, - TensorTimeFunction, VectorFunction, VectorTimeFunction, - div, grad, switchconfig, exp, Buffer) -from devito import Inc, Le, Lt, Ge, Gt, sin # noqa +from devito import ( # noqa + CELL, NODE, Buffer, Constant, Dimension, Eq, Function, Ge, Grid, Gt, Inc, Le, Lt, + Operator, SpaceDimension, SparseFunction, SparseTimeFunction, TensorFunction, + TensorTimeFunction, TimeFunction, VectorFunction, VectorTimeFunction, configuration, + dimensions, div, error, exp, grad, sin, switchconfig +) from devito.arch.archinfo import Device from devito.exceptions import InvalidOperator from devito.finite_differences.differentiable import diff2sympy from devito.ir.equations import ClusterizedEq from devito.ir.equations.algorithms import lower_exprs -from devito.ir.iet import (Callable, Conditional, Expression, Iteration, TimedList, - FindNodes, IsPerfectIteration, retrieve_iteration_tree, - FindSymbols) +from devito.ir.iet import ( + Callable, Conditional, Expression, FindNodes, FindSymbols, IsPerfectIteration, + Iteration, TimedList, retrieve_iteration_tree +) from devito.ir.support import Any, Backward, Forward from devito.passes.iet.languages.C import CDataManager from devito.symbolics import ListInitializer, indexify, retrieve_indexed from devito.tools import flatten, powerset, timed_region from devito.types import ( - Array, Barrier, CustomDimension, Indirection, Scalar, Symbol, ConditionalDimension + Array, Barrier, ConditionalDimension, CustomDimension, Indirection, Scalar, Symbol ) diff --git a/tests/test_pickle.py b/tests/test_pickle.py index 40e4c14ffe..0a4b848e55 100644 --- a/tests/test_pickle.py +++ b/tests/test_pickle.py @@ -2,31 +2,37 @@ import pickle as pickle0 import cloudpickle as pickle1 -import pytest import numpy as np +import pytest from sympy import Symbol -from devito import (Constant, Eq, Function, TimeFunction, SparseFunction, Grid, - Dimension, SubDimension, ConditionalDimension, IncrDimension, - TimeDimension, SteppingDimension, Operator, MPI, Min, solve, - PrecomputedSparseTimeFunction, SubDomain) -from devito.ir import Backward, Forward, GuardFactor, GuardBound, GuardBoundNext +from devito import ( + MPI, ConditionalDimension, Constant, Dimension, Eq, Function, Grid, IncrDimension, + Min, Operator, PrecomputedSparseTimeFunction, SparseFunction, SteppingDimension, + SubDimension, SubDomain, TimeDimension, TimeFunction, solve +) from devito.data import LEFT, OWNED -from devito.finite_differences.tools import direct, transpose, left, right, centered +from devito.finite_differences.tools import centered, direct, left, right, transpose +from devito.ir import Backward, Forward, GuardBound, GuardBoundNext, GuardFactor from devito.mpi.halo_scheme import Halo -from devito.mpi.routines import (MPIStatusObject, MPIMsgEnriched, MPIRequestObject, - MPIRegion) -from devito.types import (Array, CustomDimension, Symbol as dSymbol, Scalar, - PointerArray, Lock, PThreadArray, SharedData, Timer, - DeviceID, NPThreads, ThreadID, TempFunction, Indirection, - FIndexed, ComponentAccess, DefaultDimension) -from devito.types.basic import BoundSymbol, AbstractSymbol +from devito.mpi.routines import ( + MPIMsgEnriched, MPIRegion, MPIRequestObject, MPIStatusObject +) +from devito.symbolics import ( + CallFromPointer, Cast, DefFunction, FieldFromPointer, IntDiv, ListInitializer, SizeOf, + pow_to_mul +) from devito.tools import EnrichedTuple -from devito.symbolics import (IntDiv, ListInitializer, FieldFromPointer, - CallFromPointer, DefFunction, Cast, SizeOf, - pow_to_mul) -from examples.seismic import (demo_model, AcquisitionGeometry, - TimeAxis, RickerSource, Receiver) +from devito.types import ( + Array, ComponentAccess, CustomDimension, DefaultDimension, DeviceID, FIndexed, + Indirection, Lock, NPThreads, PointerArray, PThreadArray, Scalar, SharedData +) +from devito.types import Symbol as dSymbol +from devito.types import TempFunction, ThreadID, Timer +from devito.types.basic import AbstractSymbol, BoundSymbol +from examples.seismic import ( + AcquisitionGeometry, Receiver, RickerSource, TimeAxis, demo_model +) class SparseFirst(SparseFunction): diff --git a/tests/test_rebuild.py b/tests/test_rebuild.py index b910e609bd..56f21d271f 100644 --- a/tests/test_rebuild.py +++ b/tests/test_rebuild.py @@ -2,8 +2,8 @@ import pytest from devito import Dimension, Function, Grid -from devito.types import StencilDimension, SparseFunction, PrecomputedSparseFunction from devito.data.allocators import DataReference +from devito.types import PrecomputedSparseFunction, SparseFunction, StencilDimension class TestFunction: diff --git a/tests/test_resample.py b/tests/test_resample.py index 56771c4dcf..c01bf5ecf3 100644 --- a/tests/test_resample.py +++ b/tests/test_resample.py @@ -1,6 +1,6 @@ import numpy as np -from examples.seismic import TimeAxis, RickerSource, demo_model +from examples.seismic import RickerSource, TimeAxis, demo_model def test_resample(): diff --git a/tests/test_roundoff.py b/tests/test_roundoff.py index 5b3901f791..578a453e56 100644 --- a/tests/test_roundoff.py +++ b/tests/test_roundoff.py @@ -1,8 +1,8 @@ -import pytest import numpy as np +import pytest from conftest import skipif -from devito import Grid, Constant, TimeFunction, Eq, Operator, switchconfig +from devito import Constant, Eq, Grid, Operator, TimeFunction, switchconfig class TestRoundoff: diff --git a/tests/test_save.py b/tests/test_save.py index b3c8fd487b..1a29ecf09b 100644 --- a/tests/test_save.py +++ b/tests/test_save.py @@ -1,6 +1,6 @@ import numpy as np -from devito import Buffer, Grid, Eq, Operator, TimeFunction, solve +from devito import Buffer, Eq, Grid, Operator, TimeFunction, solve def initial(nt, nx, ny): diff --git a/tests/test_skewing.py b/tests/test_skewing.py index 0706377dee..458185c06a 100644 --- a/tests/test_skewing.py +++ b/tests/test_skewing.py @@ -1,9 +1,11 @@ -import pytest import numpy as np +import pytest from conftest import assert_blocking -from devito import Grid, Dimension, Eq, Function, TimeFunction, Operator, norm, Min # noqa -from devito.ir import Expression, Iteration, FindNodes +from devito import ( # noqa + Dimension, Eq, Function, Grid, Min, Operator, TimeFunction, norm +) +from devito.ir import Expression, FindNodes, Iteration class TestCodeGenSkewing: diff --git a/tests/test_sparse.py b/tests/test_sparse.py index 14906d3c74..b8fab00c2d 100644 --- a/tests/test_sparse.py +++ b/tests/test_sparse.py @@ -1,14 +1,14 @@ from math import floor -import pytest import numpy as np +import pytest import scipy.sparse -from devito import (Grid, TimeFunction, Eq, Operator, Dimension, Function, - SparseFunction, SparseTimeFunction, PrecomputedSparseFunction, - PrecomputedSparseTimeFunction, MatrixSparseTimeFunction, - switchconfig) - +from devito import ( + Dimension, Eq, Function, Grid, MatrixSparseTimeFunction, Operator, + PrecomputedSparseFunction, PrecomputedSparseTimeFunction, SparseFunction, + SparseTimeFunction, TimeFunction, switchconfig +) _sptypes = [SparseFunction, SparseTimeFunction, PrecomputedSparseFunction, PrecomputedSparseTimeFunction] diff --git a/tests/test_staggered_utils.py b/tests/test_staggered_utils.py index 4bf7d1e80a..86c6e99fa7 100644 --- a/tests/test_staggered_utils.py +++ b/tests/test_staggered_utils.py @@ -1,10 +1,12 @@ -import pytest import numpy as np +import pytest from sympy import simplify -from devito import (Function, Grid, NODE, CELL, VectorTimeFunction, - TimeFunction, Eq, Operator, div, Dimension) -from devito.tools import powerset, as_tuple +from devito import ( + CELL, NODE, Dimension, Eq, Function, Grid, Operator, TimeFunction, VectorTimeFunction, + div +) +from devito.tools import as_tuple, powerset @pytest.mark.parametrize('ndim', [1, 2, 3]) diff --git a/tests/test_subdomains.py b/tests/test_subdomains.py index 03d6d9ef9e..a053f4a296 100644 --- a/tests/test_subdomains.py +++ b/tests/test_subdomains.py @@ -1,14 +1,16 @@ -import pytest -import numpy as np from math import floor +import numpy as np +import pytest from sympy import sin, tan -from conftest import opts_tiling, assert_structure -from devito import (ConditionalDimension, Constant, Grid, Function, TimeFunction, - Eq, solve, Operator, SubDomain, SubDomainSet, Lt, SparseFunction, - SparseTimeFunction, VectorFunction, TensorFunction, Border) -from devito.ir import FindNodes, FindSymbols, Expression, Iteration, SymbolRegistry +from conftest import assert_structure, opts_tiling +from devito import ( + Border, ConditionalDimension, Constant, Eq, Function, Grid, Lt, Operator, + SparseFunction, SparseTimeFunction, SubDomain, SubDomainSet, TensorFunction, + TimeFunction, VectorFunction, solve +) +from devito.ir import Expression, FindNodes, FindSymbols, Iteration, SymbolRegistry from devito.tools import timed_region diff --git a/tests/test_symbolic_coefficients.py b/tests/test_symbolic_coefficients.py index 621a23ca88..cc540691a8 100644 --- a/tests/test_symbolic_coefficients.py +++ b/tests/test_symbolic_coefficients.py @@ -1,9 +1,10 @@ import numpy as np -import sympy as sp import pytest +import sympy as sp -from devito import (Grid, Function, TimeFunction, Eq, - Dimension, solve, Operator, div, grad, laplace) +from devito import ( + Dimension, Eq, Function, Grid, Operator, TimeFunction, div, grad, laplace, solve +) from devito.finite_differences import Differentiable from devito.finite_differences.coefficients import Coefficient, Substitutions from devito.finite_differences.finite_difference import _PRECISION diff --git a/tests/test_symbolics.py b/tests/test_symbolics.py index e77adb0c26..548ce3fc3c 100644 --- a/tests/test_symbolics.py +++ b/tests/test_symbolics.py @@ -1,26 +1,30 @@ from ctypes import c_void_p -import sympy -import pytest import numpy as np - +import pytest +import sympy from sympy import And, Expr, Number, Symbol, true -from devito import (Constant, Dimension, Grid, Function, solve, TimeFunction, Eq, # noqa - Operator, SubDimension, norm, Le, Ge, Gt, Lt, Abs, sin, cos, - Min, Max, Real, Imag, Conj, SubDomain, configuration) -from devito.finite_differences.differentiable import SafeInv, Weights, Mul + +from devito import ( # noqa + Abs, Conj, Constant, Dimension, Eq, Function, Ge, Grid, Gt, Imag, Le, Lt, Max, Min, + Operator, Real, SubDimension, SubDomain, TimeFunction, configuration, cos, norm, sin, + solve +) +from devito.finite_differences.differentiable import Mul, SafeInv, Weights from devito.ir import Expression, FindNodes, ccode -from devito.ir.support.guards import GuardExpr, simplify_and, pairwise_or +from devito.ir.support.guards import GuardExpr, pairwise_or, simplify_and from devito.mpi.halo_scheme import HaloTouch -from devito.symbolics import ( - retrieve_functions, retrieve_indexed, evalrel, CallFromPointer, Cast, # noqa - DefFunction, FieldFromPointer, INT, FieldFromComposite, IntDiv, Namespace, - Rvalue, ReservedWord, ListInitializer, uxreplace, pow_to_mul, - retrieve_derivatives, BaseCast, SizeOf, VectorAccess +from devito.symbolics import ( # noqa + INT, BaseCast, CallFromPointer, Cast, DefFunction, FieldFromComposite, + FieldFromPointer, IntDiv, ListInitializer, Namespace, ReservedWord, Rvalue, SizeOf, + VectorAccess, evalrel, pow_to_mul, retrieve_derivatives, retrieve_functions, + retrieve_indexed, uxreplace +) +from devito.tools import CustomDtype, as_tuple +from devito.types import ( + Array, Bundle, ComponentAccess, FIndexed, LocalObject, Object, StencilDimension ) -from devito.tools import as_tuple, CustomDtype -from devito.types import (Array, Bundle, FIndexed, LocalObject, Object, - ComponentAccess, StencilDimension, Symbol as dSymbol) +from devito.types import Symbol as dSymbol from devito.types.basic import AbstractSymbol diff --git a/tests/test_tensors.py b/tests/test_tensors.py index 2f3090fee4..790cab9020 100644 --- a/tests/test_tensors.py +++ b/tests/test_tensors.py @@ -1,12 +1,11 @@ import numpy as np -import sympy -from sympy import Rational, Matrix - import pytest +import sympy +from sympy import Matrix, Rational -from devito import VectorFunction, TensorFunction, VectorTimeFunction, TensorTimeFunction from devito import ( - Grid, Function, TimeFunction, Dimension, Eq, div, grad, curl, laplace, diag + Dimension, Eq, Function, Grid, TensorFunction, TensorTimeFunction, TimeFunction, + VectorFunction, VectorTimeFunction, curl, diag, div, grad, laplace ) from devito.symbolics import retrieve_derivatives from devito.types import NODE diff --git a/tests/test_threading.py b/tests/test_threading.py index 9183f15f58..1c753a16a9 100644 --- a/tests/test_threading.py +++ b/tests/test_threading.py @@ -1,9 +1,11 @@ from concurrent.futures import ThreadPoolExecutor -from devito import Operator, TimeFunction, Grid, Eq -from devito.logger import info -import numpy as np from threading import current_thread +import numpy as np + +from devito import Eq, Grid, Operator, TimeFunction +from devito.logger import info + def test_concurrent_executing_operators(): rng = np.random.default_rng() diff --git a/tests/test_timestepping.py b/tests/test_timestepping.py index 9a84594728..b29400043f 100644 --- a/tests/test_timestepping.py +++ b/tests/test_timestepping.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from devito import Grid, Eq, Operator, TimeFunction +from devito import Eq, Grid, Operator, TimeFunction @pytest.fixture diff --git a/tests/test_tools.py b/tests/test_tools.py index d8b17e40fa..0b06883e78 100644 --- a/tests/test_tools.py +++ b/tests/test_tools.py @@ -1,14 +1,15 @@ import os +import time + import numpy as np import pytest from sympy.abc import a, b, c, d, e -import time - -from devito import Operator, Eq, switchenv -from devito.tools import (UnboundedMultiTuple, ctypes_to_cstr, toposort, - filter_ordered, transitive_closure, UnboundTuple, - CacheInstances) +from devito import Eq, Operator, switchenv +from devito.tools import ( + CacheInstances, UnboundedMultiTuple, UnboundTuple, ctypes_to_cstr, filter_ordered, + toposort, transitive_closure +) from devito.types.basic import Symbol diff --git a/tests/test_tti.py b/tests/test_tti.py index 6f34f531b0..698df07f79 100644 --- a/tests/test_tti.py +++ b/tests/test_tti.py @@ -4,8 +4,8 @@ from devito import TimeFunction from devito.logger import log -from examples.seismic.model import SeismicModel from examples.seismic.acoustic import acoustic_setup +from examples.seismic.model import SeismicModel from examples.seismic.tti import tti_setup diff --git a/tests/test_unexpansion.py b/tests/test_unexpansion.py index 94278f3499..d5ef86c7c4 100644 --- a/tests/test_unexpansion.py +++ b/tests/test_unexpansion.py @@ -1,14 +1,16 @@ import numpy as np import pytest -from conftest import assert_structure, get_params, get_arrays, check_array -from devito import (Buffer, Eq, Function, TimeFunction, Grid, Operator, - Coefficient, Substitutions, cos, sin) -from devito.finite_differences import Weights +from conftest import assert_structure, check_array, get_arrays, get_params +from devito import ( + Buffer, Coefficient, Eq, Function, Grid, Operator, Substitutions, TimeFunction, cos, + sin +) from devito.arch.compiler import OneapiCompiler +from devito.finite_differences import Weights from devito.ir import Expression, FindNodes, FindSymbols -from devito.parameters import switchconfig, configuration -from devito.types import Symbol, Dimension +from devito.parameters import configuration, switchconfig +from devito.types import Dimension, Symbol class TestLoopScheduling: diff --git a/tests/test_visitors.py b/tests/test_visitors.py index 0291d75cf2..a7db2c3f13 100644 --- a/tests/test_visitors.py +++ b/tests/test_visitors.py @@ -1,14 +1,15 @@ import cgen as c -from sympy import Mod import pytest +from sympy import Mod -from devito import Grid, Eq, Function, TimeFunction, Operator, Min, sin +from devito import Eq, Function, Grid, Min, Operator, TimeFunction, sin from devito.ir.equations import DummyEq -from devito.ir.iet import (Block, Expression, Callable, FindNodes, FindSections, - FindSymbols, IsPerfectIteration, Transformer, - Conditional, printAST, Iteration, MapNodes, Call, - FindApplications) -from devito.types import SpaceDimension, Array, Symbol +from devito.ir.iet import ( + Block, Call, Callable, Conditional, Expression, FindApplications, FindNodes, + FindSections, FindSymbols, IsPerfectIteration, Iteration, MapNodes, Transformer, + printAST +) +from devito.types import Array, SpaceDimension, Symbol @pytest.fixture(scope="module") diff --git a/tests/test_warnings.py b/tests/test_warnings.py index 579420d449..b3f9e22741 100644 --- a/tests/test_warnings.py +++ b/tests/test_warnings.py @@ -1,7 +1,8 @@ -import pytest import warnings -from devito.warnings import warn, DevitoWarning +import pytest + +from devito.warnings import DevitoWarning, warn class NewWarning(UserWarning):