diff --git a/.gitattributes b/.gitattributes index 3e89a880..950b37b1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,86 @@ +# Cross-platform line-ending policy (Linux / macOS / Windows). +# +# Everything text is stored as LF in the repository and checked out as LF on +# every OS, so a file has identical bytes on Linux, macOS, and Windows. Git for +# Windows handles LF transparently and modern editors (VS Code, PyCharm, etc.) +# respect it, so there is no need for per-developer core.autocrlf settings. +# The only exceptions are Windows-native shell scripts, which require CRLF. +# +# After changing this file, run `git add --renormalize .` once to rewrite any +# files that were previously committed with mixed/CRLF endings. + +# Auto-detect text files and normalize them to LF in the repo and working tree. * text=auto eol=lf -*.bat text eol=crlf -*.cmd text eol=crlf \ No newline at end of file + +# --------------------------------------------------------------------------- +# Source & text — force LF, enable language-aware diffs where useful +# --------------------------------------------------------------------------- +*.py text diff=python +*.pyi text diff=python +*.pyx text diff=python +*.pxd text diff=python +*.rst text +*.md text diff=markdown +*.txt text +*.cfg text +*.ini text +*.toml text +*.yml text +*.yaml text +*.json text +*.ipynb text +*.sh text eol=lf +Makefile text eol=lf + +# --------------------------------------------------------------------------- +# Windows-only scripts — must be CRLF to run on Windows +# --------------------------------------------------------------------------- +*.bat text eol=crlf +*.cmd text eol=crlf +*.ps1 text eol=crlf + +# --------------------------------------------------------------------------- +# Binary — never normalize, never diff as text +# --------------------------------------------------------------------------- +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.svg binary +*.pdf binary +*.mat binary +*.npy binary +*.npz binary +*.h5 binary +*.hdf5 binary +*.pkl binary +*.pickle binary +*.so binary +*.pyd binary +*.dylib binary +*.dll binary +*.gz binary +*.bz2 binary +*.xz binary +*.zip binary + +# --------------------------------------------------------------------------- +# GitHub Linguist — keep language stats focused on the library source +# --------------------------------------------------------------------------- +docs/** linguist-documentation +examples/** linguist-documentation +*.ipynb linguist-documentation +changelog.md linguist-documentation + +# --------------------------------------------------------------------------- +# git archive / source exports — drop dev-only paths +# --------------------------------------------------------------------------- +.github/ export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.claudeignore export-ignore +.claude/ export-ignore +.idea/ export-ignore +dev/ export-ignore +develop/ export-ignore diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e0be9ef9..592e7ddd 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,70 +1,70 @@ ---- -name: Bug Report -about: Report a bug or unexpected behavior to help us improve brainpy.state -title: '[BUG] ' -labels: bug -assignees: '' ---- - -## Bug Description - -**Describe the bug** -A clear and concise description of what the bug is. - -## To Reproduce - -**Minimal code example to reproduce the issue:** - -```python -import brainpy - -# Your code here that demonstrates the bug -``` - -**Steps to reproduce:** -1. -2. -3. - -## Expected Behavior - -What you expected to happen. - -## Actual Behavior - -What actually happened. Include the full error message and traceback if applicable. - -``` -Paste error message/traceback here -``` - -## Environment - -Please provide the following information: - -- **brainpy.state Version:** [e.g., 0.0.1] -- **Python Version:** [e.g., 3.10.5] -- **JAX Version:** [e.g., 0.4.30] -- **Operating System:** [e.g., Ubuntu 22.04, macOS 13.0, Windows 11] -- **Hardware:** [e.g., CPU only, CUDA GPU, TPU] -- **Installation method:** [e.g., pip, conda, from source] - -**Additional context:** - -```python -import brainpy - -print(brainpy_state.__version__) -# Add any other relevant version info -``` - -## Additional Context - -Add any other context about the problem here (e.g., related issues, potential causes, attempted solutions). - -## Checklist - -- [ ] I have checked for duplicate issues -- [ ] I have provided a minimal code example to reproduce the bug -- [ ] I have included the full error message/traceback +--- +name: Bug Report +about: Report a bug or unexpected behavior to help us improve brainpy.state +title: '[BUG] ' +labels: bug +assignees: '' +--- + +## Bug Description + +**Describe the bug** +A clear and concise description of what the bug is. + +## To Reproduce + +**Minimal code example to reproduce the issue:** + +```python +import brainpy + +# Your code here that demonstrates the bug +``` + +**Steps to reproduce:** +1. +2. +3. + +## Expected Behavior + +What you expected to happen. + +## Actual Behavior + +What actually happened. Include the full error message and traceback if applicable. + +``` +Paste error message/traceback here +``` + +## Environment + +Please provide the following information: + +- **brainpy.state Version:** [e.g., 0.0.1] +- **Python Version:** [e.g., 3.10.5] +- **JAX Version:** [e.g., 0.4.30] +- **Operating System:** [e.g., Ubuntu 22.04, macOS 13.0, Windows 11] +- **Hardware:** [e.g., CPU only, CUDA GPU, TPU] +- **Installation method:** [e.g., pip, conda, from source] + +**Additional context:** + +```python +import brainpy + +print(brainpy_state.__version__) +# Add any other relevant version info +``` + +## Additional Context + +Add any other context about the problem here (e.g., related issues, potential causes, attempted solutions). + +## Checklist + +- [ ] I have checked for duplicate issues +- [ ] I have provided a minimal code example to reproduce the bug +- [ ] I have included the full error message/traceback - [ ] I have provided environment information \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 5c3bde8a..ce73a820 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,11 +1,11 @@ -blank_issues_enabled: true -contact_links: - - name: 📚 Documentation - url: https://brainx.chaobrain.com/brainpy-state/ - about: Check the documentation for guides, tutorials, and API reference - - name: 💬 GitHub Discussions - url: https://github.com/chaobrain/brainpy.state/discussions - about: Ask questions and discuss ideas with the community - - name: 🔒 Security Vulnerability - url: https://github.com/chaobrain/brainpy.state/security/advisories/new - about: Report security vulnerabilities privately (do not create public issues) +blank_issues_enabled: true +contact_links: + - name: 📚 Documentation + url: https://brainx.chaobrain.com/brainpy-state/ + about: Check the documentation for guides, tutorials, and API reference + - name: 💬 GitHub Discussions + url: https://github.com/chaobrain/brainpy.state/discussions + about: Ask questions and discuss ideas with the community + - name: 🔒 Security Vulnerability + url: https://github.com/chaobrain/brainpy.state/security/advisories/new + about: Report security vulnerabilities privately (do not create public issues) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 9d4cca4c..9b435838 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,58 +1,58 @@ ---- -name: Feature Request -about: Suggest a new idea or improvement for brainpy.state -title: '[FEATURE] ' -labels: enhancement -assignees: '' ---- - -## Feature Description - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -## Motivation and Use Case - -**Why is this feature important?** -Explain the motivation for this feature and who would benefit from it. - -**Example use case:** - -```python -import brainpy - -# Example code showing how you would like to use this feature -# This helps us understand your vision -``` - -## Proposed Implementation (Optional) - -**How do you envision this working?** -If you have ideas about how this could be implemented, share them here. - -**API design (if applicable):** -```python -# Proposed API or interface -``` - -## Alternatives Considered - -**What alternatives have you considered?** -Describe alternative solutions or features you've considered and why they don't fully address your needs. - -## Additional Context - -Add any other context, screenshots, references to related work, or examples from other libraries. - -**Related issues/PRs:** -- #issue_number - -## Checklist - -- [ ] I have checked for duplicate feature requests -- [ ] I have provided a clear use case and motivation -- [ ] I have described the desired behavior -- [ ] I have considered and described alternatives +--- +name: Feature Request +about: Suggest a new idea or improvement for brainpy.state +title: '[FEATURE] ' +labels: enhancement +assignees: '' +--- + +## Feature Description + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +## Motivation and Use Case + +**Why is this feature important?** +Explain the motivation for this feature and who would benefit from it. + +**Example use case:** + +```python +import brainpy + +# Example code showing how you would like to use this feature +# This helps us understand your vision +``` + +## Proposed Implementation (Optional) + +**How do you envision this working?** +If you have ideas about how this could be implemented, share them here. + +**API design (if applicable):** +```python +# Proposed API or interface +``` + +## Alternatives Considered + +**What alternatives have you considered?** +Describe alternative solutions or features you've considered and why they don't fully address your needs. + +## Additional Context + +Add any other context, screenshots, references to related work, or examples from other libraries. + +**Related issues/PRs:** +- #issue_number + +## Checklist + +- [ ] I have checked for duplicate feature requests +- [ ] I have provided a clear use case and motivation +- [ ] I have described the desired behavior +- [ ] I have considered and described alternatives diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index ac71e5f6..48c24396 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,123 +1,123 @@ - - -## Summary - - - -**Fixes #(issue number)** - -## Type of Change - - - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) -- [ ] Breaking change (fix or feature that would cause existing functionality to change) -- [ ] Documentation update -- [ ] Code refactoring (no functional changes) -- [ ] Performance improvement -- [ ] Test coverage improvement -- [ ] Other (please describe): - -## Description - -**What does this PR do?** - - -**Why is this change needed?** - - -**How does it work?** - - -## Changes Made - - - -- -- -- - -## Testing - -**How has this been tested?** - - -```python -# Example test code or commands used -``` - -**Test environment:** -- Python version: -- brainpy.state version: -- JAX version: -- OS: - -**Test coverage:** -- [ ] Added new tests for this change -- [ ] All existing tests pass -- [ ] Manual testing performed - -## Performance Impact - - - -- [ ] No performance impact -- [ ] Performance improved (provide benchmarks) -- [ ] Performance may be affected (explain why and how much) - -## Documentation - -- [ ] Docstrings added/updated -- [ ] Documentation updated (if needed) -- [ ] Examples added/updated (if applicable) -- [ ] CHANGELOG entry added (for notable changes) - -## Screenshots (if applicable) - - - -## Breaking Changes - - - -**Breaking change details:** - - -**Migration guide:** -```python -# Before (old way) - -# After (new way) -``` - -## Checklist - - - -- [ ] My code follows the project's style guidelines -- [ ] I have performed a self-review of my code -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have made corresponding changes to the documentation -- [ ] My changes generate no new warnings -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] New and existing unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published -- [ ] I have checked for duplicate PRs/issues -- [ ] I have read and followed the [CONTRIBUTING](../CONTRIBUTING.md) guidelines - -## Additional Notes - - - -## Related Issues/PRs - - - -- Related to # -- Depends on # + + +## Summary + + + +**Fixes #(issue number)** + +## Type of Change + + + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) +- [ ] Documentation update +- [ ] Code refactoring (no functional changes) +- [ ] Performance improvement +- [ ] Test coverage improvement +- [ ] Other (please describe): + +## Description + +**What does this PR do?** + + +**Why is this change needed?** + + +**How does it work?** + + +## Changes Made + + + +- +- +- + +## Testing + +**How has this been tested?** + + +```python +# Example test code or commands used +``` + +**Test environment:** +- Python version: +- brainpy.state version: +- JAX version: +- OS: + +**Test coverage:** +- [ ] Added new tests for this change +- [ ] All existing tests pass +- [ ] Manual testing performed + +## Performance Impact + + + +- [ ] No performance impact +- [ ] Performance improved (provide benchmarks) +- [ ] Performance may be affected (explain why and how much) + +## Documentation + +- [ ] Docstrings added/updated +- [ ] Documentation updated (if needed) +- [ ] Examples added/updated (if applicable) +- [ ] CHANGELOG entry added (for notable changes) + +## Screenshots (if applicable) + + + +## Breaking Changes + + + +**Breaking change details:** + + +**Migration guide:** +```python +# Before (old way) + +# After (new way) +``` + +## Checklist + + + +- [ ] My code follows the project's style guidelines +- [ ] I have performed a self-review of my code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] I have made corresponding changes to the documentation +- [ ] My changes generate no new warnings +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] New and existing unit tests pass locally with my changes +- [ ] Any dependent changes have been merged and published +- [ ] I have checked for duplicate PRs/issues +- [ ] I have read and followed the [CONTRIBUTING](../CONTRIBUTING.md) guidelines + +## Additional Notes + + + +## Related Issues/PRs + + + +- Related to # +- Depends on # - Blocks # \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index abfa89b4..e1d84d9d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,62 +1,62 @@ -# Dependabot configuration for automated dependency updates -# Documentation: https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 - -updates: - # Python dependencies - - package-ecosystem: "pip" - directory: "/" - schedule: - interval: "weekly" - day: "monday" - time: "09:00" - timezone: "UTC" - allow: - - dependency-type: "all" - commit-message: - prefix: "chore(deps)" - prefix-development: "chore(deps-dev)" - include: "scope" - open-pull-requests-limit: 10 - reviewers: - - "brainpy_state/maintainers" - labels: - - "dependencies" - - "python" - # Group minor and patch updates together - groups: - development-dependencies: - dependency-type: "development" - update-types: - - "minor" - - "patch" - production-dependencies: - dependency-type: "production" - update-types: - - "patch" - - # GitHub Actions - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - day: "monday" - time: "09:00" - timezone: "UTC" - commit-message: - prefix: "chore(ci)" - include: "scope" - open-pull-requests-limit: 5 - reviewers: - - "brainpy_state/maintainers" - labels: - - "dependencies" - - "github-actions" - groups: - github-actions: - patterns: - - "*" - update-types: - - "minor" - - "patch" +# Dependabot configuration for automated dependency updates +# Documentation: https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 + +updates: + # Python dependencies + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + time: "09:00" + timezone: "UTC" + allow: + - dependency-type: "all" + commit-message: + prefix: "chore(deps)" + prefix-development: "chore(deps-dev)" + include: "scope" + open-pull-requests-limit: 10 + reviewers: + - "brainpy_state/maintainers" + labels: + - "dependencies" + - "python" + # Group minor and patch updates together + groups: + development-dependencies: + dependency-type: "development" + update-types: + - "minor" + - "patch" + production-dependencies: + dependency-type: "production" + update-types: + - "patch" + + # GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + time: "09:00" + timezone: "UTC" + commit-message: + prefix: "chore(ci)" + include: "scope" + open-pull-requests-limit: 5 + reviewers: + - "brainpy_state/maintainers" + labels: + - "dependencies" + - "github-actions" + groups: + github-actions: + patterns: + - "*" + update-types: + - "minor" + - "patch" diff --git a/.github/labeler.yml b/.github/labeler.yml index 5b4134c5..f0044deb 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,37 +1,37 @@ -# Automatically label pull requests based on file paths -# Learn more: https://github.com/actions/labeler - -# Documentation -documentation: - - changed-files: - - any-glob-to-any-file: ['docs_version2_version2/**/*', 'docs_classic/**/*', '**/*.md', '**/*.rst'] - -# CI/CD -ci-cd: - - changed-files: - - any-glob-to-any-file: ['.github/**/*'] - -# Dependencies -dependencies: - - changed-files: - - any-glob-to-any-file: ['pyproject.toml', 'requirements*.txt'] - -# Tests -tests: - - changed-files: - - any-glob-to-any-file: ['tests/**/*', '**/*test*.py'] - -# Examples -examples: - - changed-files: - - any-glob-to-any-file: ['examples/**/*'] - -# Core library -core: - - changed-files: - - any-glob-to-any-file: ['brainpy_state/_src/**/*'] - -# Build/Package -build: - - changed-files: - - any-glob-to-any-file: ['pyproject.toml', 'setup.py', 'MANIFEST.in'] +# Automatically label pull requests based on file paths +# Learn more: https://github.com/actions/labeler + +# Documentation +documentation: + - changed-files: + - any-glob-to-any-file: ['docs_version2_version2/**/*', 'docs_classic/**/*', '**/*.md', '**/*.rst'] + +# CI/CD +ci-cd: + - changed-files: + - any-glob-to-any-file: ['.github/**/*'] + +# Dependencies +dependencies: + - changed-files: + - any-glob-to-any-file: ['pyproject.toml', 'requirements*.txt'] + +# Tests +tests: + - changed-files: + - any-glob-to-any-file: ['tests/**/*', '**/*test*.py'] + +# Examples +examples: + - changed-files: + - any-glob-to-any-file: ['examples/**/*'] + +# Core library +core: + - changed-files: + - any-glob-to-any-file: ['brainpy_state/_src/**/*'] + +# Build/Package +build: + - changed-files: + - any-glob-to-any-file: ['pyproject.toml', 'setup.py', 'MANIFEST.in'] diff --git a/.github/workflows/Publish.yml b/.github/workflows/Publish.yml index d3c36b87..fb7b422d 100644 --- a/.github/workflows/Publish.yml +++ b/.github/workflows/Publish.yml @@ -1,59 +1,59 @@ -name: Publish to PyPI - -on: - release: - types: [published] - workflow_dispatch: # Allow manual triggers - -permissions: - contents: read - id-token: write # Required for trusted publishing - -jobs: - build: - name: Build distribution - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v5 - with: - fetch-depth: 0 - - - name: Set up Python - uses: actions/setup-python@v6 - with: - python-version: "3.12" - - - name: Install build - run: | - python -m pip install --upgrade pip - python -m pip install build - - - name: Build package - run: python -m build - - - name: Store distribution packages - uses: actions/upload-artifact@v7 - with: - name: python-package-distributions - path: dist/ - - publish-to-pypi: - name: Publish to PyPI - needs: [build] - runs-on: ubuntu-latest - environment: - name: pypi - url: https://pypi.org/p/brainpy-state - - steps: - - name: Download distribution packages - uses: actions/download-artifact@v8 - with: - name: python-package-distributions - path: dist/ - - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 - with: +name: Publish to PyPI + +on: + release: + types: [published] + workflow_dispatch: # Allow manual triggers + +permissions: + contents: read + id-token: write # Required for trusted publishing + +jobs: + build: + name: Build distribution + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Install build + run: | + python -m pip install --upgrade pip + python -m pip install build + + - name: Build package + run: python -m build + + - name: Store distribution packages + uses: actions/upload-artifact@v7 + with: + name: python-package-distributions + path: dist/ + + publish-to-pypi: + name: Publish to PyPI + needs: [build] + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/brainpy-state + + steps: + - name: Download distribution packages + uses: actions/download-artifact@v8 + with: + name: python-package-distributions + path: dist/ + + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index 350a9c1b..964e4bf0 100644 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -1,59 +1,59 @@ -name: Greetings - -on: - issues: - types: [opened] - pull_request_target: - types: [opened] - -permissions: - issues: write - pull-requests: write - -jobs: - greeting: - runs-on: ubuntu-latest - steps: - - name: Greet First Time Contributors - uses: actions/first-interaction@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - issue_message: > - 👋 Welcome to brainpy.state! Thank you for opening your first issue. - - - We appreciate you taking the time to contribute to the project. A maintainer - will review your issue and respond as soon as possible. - - - In the meantime, please make sure you've provided all the necessary information - to help us understand and address your issue effectively. - - - If you're interested in contributing code, check out our - [Contributing Guide](https://github.com/chaobrain/brainpy.state/blob/main/CONTRIBUTING.md) - for more information on how to get started. - - - Happy coding! 🧠✨ - pr_message: > - 🎉 Congratulations on opening your first pull request in brainpy.state! Thank you for - your contribution! - - - A maintainer will review your changes soon. Please make sure: - - - ✅ Your code follows our style guidelines - - - ✅ All tests pass - - - ✅ Documentation is updated (if applicable) - - - ✅ You've filled out the PR template completely - - - We appreciate your effort in making brainpy.state better. If you have any questions, - feel free to ask in the comments. - - - Welcome to the brainpy.state community! 🌟 +name: Greetings + +on: + issues: + types: [opened] + pull_request_target: + types: [opened] + +permissions: + issues: write + pull-requests: write + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - name: Greet First Time Contributors + uses: actions/first-interaction@v3 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue_message: > + 👋 Welcome to brainpy.state! Thank you for opening your first issue. + + + We appreciate you taking the time to contribute to the project. A maintainer + will review your issue and respond as soon as possible. + + + In the meantime, please make sure you've provided all the necessary information + to help us understand and address your issue effectively. + + + If you're interested in contributing code, check out our + [Contributing Guide](https://github.com/chaobrain/brainpy.state/blob/main/CONTRIBUTING.md) + for more information on how to get started. + + + Happy coding! 🧠✨ + pr_message: > + 🎉 Congratulations on opening your first pull request in brainpy.state! Thank you for + your contribution! + + + A maintainer will review your changes soon. Please make sure: + + - ✅ Your code follows our style guidelines + + - ✅ All tests pass + + - ✅ Documentation is updated (if applicable) + + - ✅ You've filled out the PR template completely + + + We appreciate your effort in making brainpy.state better. If you have any questions, + feel free to ask in the comments. + + + Welcome to the brainpy.state community! 🌟 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index ea02ac7d..57bb4c4a 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -1,20 +1,20 @@ -name: Auto Label PRs - -on: - pull_request: - types: [opened, synchronize, reopened] - -permissions: - contents: read - pull-requests: write - -jobs: - label: - runs-on: ubuntu-latest - steps: - - name: Apply labels - uses: actions/labeler@v6 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - configuration-path: .github/labeler.yml - sync-labels: true +name: Auto Label PRs + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + +jobs: + label: + runs-on: ubuntu-latest + steps: + - name: Apply labels + uses: actions/labeler@v6 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + configuration-path: .github/labeler.yml + sync-labels: true diff --git a/.gitignore b/.gitignore index 5e4c936a..eac82266 100644 --- a/.gitignore +++ b/.gitignore @@ -1,240 +1,240 @@ -publishment.md -#experimental/ -.vscode -io_test_tmp* - -brainpy_state/math/brainpy_object/tests/io_test_tmp* - -lib/ - -development - -brainpy_state/dyn/tests/data -examples/dynamics_simulation/data -examples/dynamics_simulation/results -examples/training_ann_models/data -examples/dynamics_analysis/data -examples/nest/*.png -extensions/.idea -extensions/wheelhouse -extensions/dist -extensions/win_dll -extensions/fixed_wheels -extensions/build -extensions/cmake-build-debug -BrainPyExamples/ -BrainModels/ -book/ -examples/recurrent_neural_network/neurogym -develop/iconip_paper -develop/benchmark/COBA/results -develop/test -develop/outputdir - -*/_autosummary -*/generated - - -develop/benchmark/COBA/brian2* -develop/benchmark/COBA/annarchy* -develop/benchmark/COBAHH/brian2* -develop/benchmark/COBAHH/annarchy* -develop/benchmark/CUBA/annarchy* -develop/benchmark/CUBA/brian2* - - -*~ -\#*\# -*.pyc -.DS_Store -dist/ -build/ -*.egg-info -.idea - -*/__pycache__ - - -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -develop-eggs/ -downloads/ -eggs/ -.eggs/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -!/brainpy_state/dyn/tests/data/ -/examples/dynamics_simulation/data/ -/examples/training_snn_models/logs/T100_b64_lr0.001/ -/examples/training_snn_models/logs/ -/examples/training_snn_models/data/ -/my_tests/ -/examples/dynamics_simulation/Joglekar_2018_data/ -/bugs/ -/dev/ -/.claude/ -/docs/_static/logos/ -/docs/_build/ -/docs/changelog.md -/docs_state/_build/ -/docs_state/_static/logos/ -/docs_state/changelog.md -/examples_classic/dynamics_training/data/ -/docs/api/generated/ -/claude_implement_nest_models.sh -/claude_logs/ -/codex_logs/ -/codex-synapse-model.sh -/codex-bash.sh -/codex_logs/ -/ai-coding/claude_implement_neuron_models.sh -/claude_logs/ -/ai-coding/codex-bash.sh -/ai-coding/codex-bash.ps1 -/codex_logs/ -/ai-coding/claude_implement_neuron_models.sh -/ai-coding/ -/scripts/ -/codex_logs_numpy_doc/ -/claude_logs_numpy_doc/ -/docs/jupyter_execute/ - -# brainx-sphinx-header build artifacts -docs/_brand/ -docs/_static/css/brainx-header.css -docs/_static/js/brainx-header.js -/docs/_static/css/brainx-footer.css -/docs/_static/js/brainx-footer.js -/docs/_static/css/ -/docs/_static/js/ -/.specify/ -/CLAUDE.md -/.claudeignore -/docs/superpowers/ - -# NEST demo plots are reproducible artifacts (regenerated by running the example) -examples/nest/*.png +publishment.md +#experimental/ +.vscode +io_test_tmp* + +brainpy_state/math/brainpy_object/tests/io_test_tmp* + +lib/ + +development + +brainpy_state/dyn/tests/data +examples/dynamics_simulation/data +examples/dynamics_simulation/results +examples/training_ann_models/data +examples/dynamics_analysis/data +examples/nest/*.png +extensions/.idea +extensions/wheelhouse +extensions/dist +extensions/win_dll +extensions/fixed_wheels +extensions/build +extensions/cmake-build-debug +BrainPyExamples/ +BrainModels/ +book/ +examples/recurrent_neural_network/neurogym +develop/iconip_paper +develop/benchmark/COBA/results +develop/test +develop/outputdir + +*/_autosummary +*/generated + + +develop/benchmark/COBA/brian2* +develop/benchmark/COBA/annarchy* +develop/benchmark/COBAHH/brian2* +develop/benchmark/COBAHH/annarchy* +develop/benchmark/CUBA/annarchy* +develop/benchmark/CUBA/brian2* + + +*~ +\#*\# +*.pyc +.DS_Store +dist/ +build/ +*.egg-info +.idea + +*/__pycache__ + + +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +develop-eggs/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +!/brainpy_state/dyn/tests/data/ +/examples/dynamics_simulation/data/ +/examples/training_snn_models/logs/T100_b64_lr0.001/ +/examples/training_snn_models/logs/ +/examples/training_snn_models/data/ +/my_tests/ +/examples/dynamics_simulation/Joglekar_2018_data/ +/bugs/ +/dev/ +/.claude/ +/docs/_static/logos/ +/docs/_build/ +/docs/changelog.md +/docs_state/_build/ +/docs_state/_static/logos/ +/docs_state/changelog.md +/examples_classic/dynamics_training/data/ +/docs/api/generated/ +/claude_implement_nest_models.sh +/claude_logs/ +/codex_logs/ +/codex-synapse-model.sh +/codex-bash.sh +/codex_logs/ +/ai-coding/claude_implement_neuron_models.sh +/claude_logs/ +/ai-coding/codex-bash.sh +/ai-coding/codex-bash.ps1 +/codex_logs/ +/ai-coding/claude_implement_neuron_models.sh +/ai-coding/ +/scripts/ +/codex_logs_numpy_doc/ +/claude_logs_numpy_doc/ +/docs/jupyter_execute/ + +# brainx-sphinx-header build artifacts +docs/_brand/ +docs/_static/css/brainx-header.css +docs/_static/js/brainx-header.js +/docs/_static/css/brainx-footer.css +/docs/_static/js/brainx-footer.js +/docs/_static/css/ +/docs/_static/js/ +/.specify/ +/CLAUDE.md +/.claudeignore +/docs/superpowers/ + +# NEST demo plots are reproducible artifacts (regenerated by running the example) +examples/nest/*.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 30934c76..fd5afcec 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,27 +1,27 @@ -# Install the pre-commit hooks below with -# 'pre-commit install' - -# Auto-update the version of the hooks with -# 'pre-commit autoupdate' - -# Run the hooks on all files with -# 'pre-commit run --all' - -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 - hooks: - - id: end-of-file-fixer - # only include python files - files: \.py$ - - id: debug-statements - # only include python files - files: \.py$ - - id: trailing-whitespace - # only include python files - files: \.py$ - - - repo: https://github.com/pycqa/flake8 - rev: '6.1.0' - hooks: - - id: flake8 +# Install the pre-commit hooks below with +# 'pre-commit install' + +# Auto-update the version of the hooks with +# 'pre-commit autoupdate' + +# Run the hooks on all files with +# 'pre-commit run --all' + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: end-of-file-fixer + # only include python files + files: \.py$ + - id: debug-statements + # only include python files + files: \.py$ + - id: trailing-whitespace + # only include python files + files: \.py$ + + - repo: https://github.com/pycqa/flake8 + rev: '6.1.0' + hooks: + - id: flake8 diff --git a/.readthedocs.yml b/.readthedocs.yml index fe88325a..90f394df 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,21 +1,21 @@ -# .readthedocs.yml -# Read the Docs configuration file -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -# Required -version: 2 - -build: - os: "ubuntu-24.04" - tools: - python: "3.13" - -# Build documentation using the copied conf.py -sphinx: - configuration: docs/conf.py - -# Optionally set the version of Python and requirements required to build your docs -python: - install: - - requirements: requirements-doc.txt - +# .readthedocs.yml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +build: + os: "ubuntu-24.04" + tools: + python: "3.13" + +# Build documentation using the copied conf.py +sphinx: + configuration: docs/conf.py + +# Optionally set the version of Python and requirements required to build your docs +python: + install: + - requirements: requirements-doc.txt + diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 1976677d..0890db83 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,132 +1,132 @@ - -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, caste, color, religion, or sexual -identity and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the overall - community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or advances of - any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email address, - without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at brainpy@foxmail.com. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series of -actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or permanent -ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within the -community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.1, available at -[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. - -Community Impact Guidelines were inspired by -[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. - -For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at -[https://www.contributor-covenant.org/translations][translations]. - -[homepage]: https://www.contributor-covenant.org -[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html -[Mozilla CoC]: https://github.com/mozilla/diversity -[FAQ]: https://www.contributor-covenant.org/faq -[translations]: https://www.contributor-covenant.org/translations + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at brainpy@foxmail.com. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 377397a4..d89cf1a9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,290 +1,290 @@ -# Contributing to brainpy.state - -Thank you for your interest in contributing to brainpy.state! We welcome contributions from the community and are grateful for your support in making brainpy.state better. - -## Table of Contents - -- [Code of Conduct](#code-of-conduct) -- [How Can I Contribute?](#how-can-i-contribute) -- [Development Setup](#development-setup) -- [Contribution Workflow](#contribution-workflow) -- [Coding Guidelines](#coding-guidelines) -- [Testing](#testing) -- [Documentation](#documentation) -- [Community](#community) - -## Code of Conduct - -This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to chao.brain@qq.com. - -## How Can I Contribute? - -### Reporting Bugs - -Before creating bug reports, please check existing issues to avoid duplicates. When creating a bug report, include: - -- **Clear title and description** -- **Steps to reproduce** the problem -- **Expected vs actual behavior** -- **brainpy.state version** and environment details (Python version, OS, JAX version) -- **Code samples** or test cases that demonstrate the issue -- **Error messages** and stack traces - -Submit bug reports via [GitHub Issues](https://github.com/chaobrain/brainpy.state/issues/new). - -### Suggesting Enhancements - -Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include: - -- **Clear use case** - explain the problem you're trying to solve -- **Proposed solution** - describe how you envision the feature working -- **Alternative approaches** you've considered -- **Impact** - who would benefit and how - -### Contributing Code - -We welcome code contributions! This includes: - -- Bug fixes -- New features -- Performance improvements -- Documentation improvements -- Test coverage improvements - -## Development Setup - -### Prerequisites - -- Python 3.10 or higher -- Git -- pip or conda - -### Setting Up Your Environment - -1. **Fork the repository** on GitHub -2. **Clone your fork** locally: - ```bash - git clone https://github.com/YOUR_USERNAME/brainpy.state.git - cd brainpy.state - ``` - -3. **Create a virtual environment**: - ```bash - python -m venv venv - source venv/bin/activate # On Windows: venv\Scripts\activate - ``` - -4. **Install development dependencies**: - ```bash - pip install -e ".[dev,cpu]" # Use [dev,cuda12] for CUDA support - ``` - -5. **Set up pre-commit hooks** (if available): - ```bash - pre-commit install - ``` - -## Contribution Workflow - -### 1. Create a Branch - -Create a new branch for your work: -```bash -git checkout -b feature/your-feature-name -# or -git checkout -b fix/issue-number-description -``` - -Branch naming conventions: -- `feature/` - new features -- `fix/` - bug fixes -- `docs/` - documentation changes -- `refactor/` - code refactoring -- `test/` - test improvements - -### 2. Make Your Changes - -- Write clean, readable code -- Follow the coding guidelines below -- Add tests for new functionality -- Update documentation as needed -- Keep commits focused and atomic - -### 3. Test Your Changes - -Run the test suite: -```bash -pytest tests/ -``` - -Run specific tests: -```bash -pytest tests/test_specific.py -v -``` - -### 4. Commit Your Changes - -Write clear, descriptive commit messages: -```bash -git commit -m "Fix issue with delayed connection handling (#123) - -- Add validation for delay parameters -- Update tests to cover edge cases -- Fix documentation example -" -``` - -### 5. Push and Create a Pull Request - -```bash -git push origin feature/your-feature-name -``` - -Then create a pull request on GitHub with: -- **Clear title** describing the change -- **Description** explaining what and why -- **Reference to related issues** (e.g., "Fixes #123") -- **Test results** or screenshots if applicable - -## Coding Guidelines - -### Python Style - -- Follow [PEP 8](https://pep8.org/) style guide -- Use 2 or 4 spaces for indentation (be consistent with surrounding code) -- Maximum line length: 100-120 characters -- Use descriptive variable and function names - -### Code Structure - -- Keep functions focused and single-purpose -- Use type hints where appropriate -- Add docstrings for public APIs (follow NumPy docstring format) -- Avoid unnecessary complexity - -### Example Docstring - -```python -def simulate_network(network, duration, dt=0.1): - """Simulate a neural network for a specified duration. - - Parameters - ---------- - network : Network - The neural network to simulate - duration : float - Total simulation time in milliseconds - dt : float, optional - Time step in milliseconds (default: 0.1) - - Returns - ------- - results : dict - Simulation results containing spike times and state variables - - Examples - -------- - >>> net = Network() - >>> results = simulate_network(net, duration=1000.0) - """ - pass -``` - -## Testing - -### Writing Tests - -- Place tests in the `tests/` directory -- Use descriptive test function names: `test_feature_does_what_expected` -- Test edge cases and error conditions -- Use fixtures for common setups - -### Test Coverage - -Aim for high test coverage on new code: -```bash -pytest --cov=brainpy_state brainpy_state/ -``` - -## Documentation - -### Updating Documentation - -- Update relevant documentation when changing features -- Add examples for new functionality -- Keep the API reference up to date -- Fix typos and improve clarity - -### Documenting new APIs - -Every new public class or function must ship with documentation: - -- Use **NumPy-style docstrings** with `Parameters`, `Returns` (or `Yields`), - and at least one `Examples` block. The project's Sphinx config sets - `napoleon_numpy_docstring = True` and registers many custom sections - (e.g. `State Variables`, `Mathematical Model`, `Parameter Mapping`, - `Implementation Notes`) — use them where they help readers. -- **BrainPy-style models** — add an `autosummary` entry to the appropriate - page under `docs/api/brainpy-*.rst`. -- **NEST-compatible models** — add an `autosummary` entry to the appropriate - page under `docs/api/nest-*.rst`. Parameter names should match the upstream - NEST documentation. Document any deliberate deviation in the docstring - under a `Parameter Mapping` or `Implementation Notes` section. -- For any new model file, also add a colocated `*_test.py` that exercises - default parameters and at least one parameter sweep. -- Export the new symbol in `brainpy_state/__init__.py` (`__all__` plus the - import) so it appears in the public API surface. - -### Marking experimental features - -`brainpy.state` ships two model families with different maturity levels — see -the README's "API status and maturity" section. - -- **NEST-compatible models** (anything under `brainpy_state/_nest/`) are - collectively considered **Experimental — In Development**. Individual - models do not need their own banner; the family-level banner on - `docs/api/nest-*.rst` and the [NEST status page](docs/nest-status/index.rst) - cover the whole set. -- **BrainPy-style features** that are not yet stable must include a Sphinx - `.. warning::` admonition at the top of the docstring labelled - **Experimental — In Development**, and must be omitted from the README - maturity table until promoted to Stable. -- **Promoting a feature from Experimental to Stable** requires: - 1. Full test coverage including parameter validation. - 2. Removal of the warning admonition from the docstring. - 3. Addition to the README maturity table. - 4. A CHANGELOG entry under "API stability". -- When in doubt, ship as Experimental. Promotion is cheap; demoting silently - breaks users. - -### Documentation review checklist for PRs - -Before requesting review, confirm: - -- [ ] Docstrings present on all new public APIs (NumPy style). -- [ ] New module exported via `__all__` in `brainpy_state/__init__.py`. -- [ ] Added to the corresponding `docs/api/*.rst` page. -- [ ] If NEST-compatible: parameter names match the upstream NEST documentation. -- [ ] If experimental: no claims of stability in docstrings or README. -- [ ] `pytest brainpy_state/` passes locally. -- [ ] Any executable code block in updated docs or notebooks runs - end-to-end without errors. - -For the full rendered documentation, see . - -## Community - -### Getting Help - -- **Documentation**: https://brainx.chaobrain.com/brainpy-state/ -- **GitHub Discussions**: https://github.com/chaobrain/brainpy.state/discussions -- **Issues**: https://github.com/chaobrain/brainpy.state/issues - -### Recognition - -Contributors are recognized in: -- Release notes -- Contributors file -- Project documentation - -Thank you for contributing to brainpy.state! Your efforts help make computational neuroscience more accessible and powerful for everyone. +# Contributing to brainpy.state + +Thank you for your interest in contributing to brainpy.state! We welcome contributions from the community and are grateful for your support in making brainpy.state better. + +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [How Can I Contribute?](#how-can-i-contribute) +- [Development Setup](#development-setup) +- [Contribution Workflow](#contribution-workflow) +- [Coding Guidelines](#coding-guidelines) +- [Testing](#testing) +- [Documentation](#documentation) +- [Community](#community) + +## Code of Conduct + +This project and everyone participating in it is governed by our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to chao.brain@qq.com. + +## How Can I Contribute? + +### Reporting Bugs + +Before creating bug reports, please check existing issues to avoid duplicates. When creating a bug report, include: + +- **Clear title and description** +- **Steps to reproduce** the problem +- **Expected vs actual behavior** +- **brainpy.state version** and environment details (Python version, OS, JAX version) +- **Code samples** or test cases that demonstrate the issue +- **Error messages** and stack traces + +Submit bug reports via [GitHub Issues](https://github.com/chaobrain/brainpy.state/issues/new). + +### Suggesting Enhancements + +Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include: + +- **Clear use case** - explain the problem you're trying to solve +- **Proposed solution** - describe how you envision the feature working +- **Alternative approaches** you've considered +- **Impact** - who would benefit and how + +### Contributing Code + +We welcome code contributions! This includes: + +- Bug fixes +- New features +- Performance improvements +- Documentation improvements +- Test coverage improvements + +## Development Setup + +### Prerequisites + +- Python 3.10 or higher +- Git +- pip or conda + +### Setting Up Your Environment + +1. **Fork the repository** on GitHub +2. **Clone your fork** locally: + ```bash + git clone https://github.com/YOUR_USERNAME/brainpy.state.git + cd brainpy.state + ``` + +3. **Create a virtual environment**: + ```bash + python -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + ``` + +4. **Install development dependencies**: + ```bash + pip install -e ".[dev,cpu]" # Use [dev,cuda12] for CUDA support + ``` + +5. **Set up pre-commit hooks** (if available): + ```bash + pre-commit install + ``` + +## Contribution Workflow + +### 1. Create a Branch + +Create a new branch for your work: +```bash +git checkout -b feature/your-feature-name +# or +git checkout -b fix/issue-number-description +``` + +Branch naming conventions: +- `feature/` - new features +- `fix/` - bug fixes +- `docs/` - documentation changes +- `refactor/` - code refactoring +- `test/` - test improvements + +### 2. Make Your Changes + +- Write clean, readable code +- Follow the coding guidelines below +- Add tests for new functionality +- Update documentation as needed +- Keep commits focused and atomic + +### 3. Test Your Changes + +Run the test suite: +```bash +pytest tests/ +``` + +Run specific tests: +```bash +pytest tests/test_specific.py -v +``` + +### 4. Commit Your Changes + +Write clear, descriptive commit messages: +```bash +git commit -m "Fix issue with delayed connection handling (#123) + +- Add validation for delay parameters +- Update tests to cover edge cases +- Fix documentation example +" +``` + +### 5. Push and Create a Pull Request + +```bash +git push origin feature/your-feature-name +``` + +Then create a pull request on GitHub with: +- **Clear title** describing the change +- **Description** explaining what and why +- **Reference to related issues** (e.g., "Fixes #123") +- **Test results** or screenshots if applicable + +## Coding Guidelines + +### Python Style + +- Follow [PEP 8](https://pep8.org/) style guide +- Use 2 or 4 spaces for indentation (be consistent with surrounding code) +- Maximum line length: 100-120 characters +- Use descriptive variable and function names + +### Code Structure + +- Keep functions focused and single-purpose +- Use type hints where appropriate +- Add docstrings for public APIs (follow NumPy docstring format) +- Avoid unnecessary complexity + +### Example Docstring + +```python +def simulate_network(network, duration, dt=0.1): + """Simulate a neural network for a specified duration. + + Parameters + ---------- + network : Network + The neural network to simulate + duration : float + Total simulation time in milliseconds + dt : float, optional + Time step in milliseconds (default: 0.1) + + Returns + ------- + results : dict + Simulation results containing spike times and state variables + + Examples + -------- + >>> net = Network() + >>> results = simulate_network(net, duration=1000.0) + """ + pass +``` + +## Testing + +### Writing Tests + +- Place tests in the `tests/` directory +- Use descriptive test function names: `test_feature_does_what_expected` +- Test edge cases and error conditions +- Use fixtures for common setups + +### Test Coverage + +Aim for high test coverage on new code: +```bash +pytest --cov=brainpy_state brainpy_state/ +``` + +## Documentation + +### Updating Documentation + +- Update relevant documentation when changing features +- Add examples for new functionality +- Keep the API reference up to date +- Fix typos and improve clarity + +### Documenting new APIs + +Every new public class or function must ship with documentation: + +- Use **NumPy-style docstrings** with `Parameters`, `Returns` (or `Yields`), + and at least one `Examples` block. The project's Sphinx config sets + `napoleon_numpy_docstring = True` and registers many custom sections + (e.g. `State Variables`, `Mathematical Model`, `Parameter Mapping`, + `Implementation Notes`) — use them where they help readers. +- **BrainPy-style models** — add an `autosummary` entry to the appropriate + page under `docs/api/brainpy-*.rst`. +- **NEST-compatible models** — add an `autosummary` entry to the appropriate + page under `docs/api/nest-*.rst`. Parameter names should match the upstream + NEST documentation. Document any deliberate deviation in the docstring + under a `Parameter Mapping` or `Implementation Notes` section. +- For any new model file, also add a colocated `*_test.py` that exercises + default parameters and at least one parameter sweep. +- Export the new symbol in `brainpy_state/__init__.py` (`__all__` plus the + import) so it appears in the public API surface. + +### Marking experimental features + +`brainpy.state` ships two model families with different maturity levels — see +the README's "API status and maturity" section. + +- **NEST-compatible models** (anything under `brainpy_state/_nest/`) are + collectively considered **Experimental — In Development**. Individual + models do not need their own banner; the family-level banner on + `docs/api/nest-*.rst` and the [NEST status page](docs/nest-status/index.rst) + cover the whole set. +- **BrainPy-style features** that are not yet stable must include a Sphinx + `.. warning::` admonition at the top of the docstring labelled + **Experimental — In Development**, and must be omitted from the README + maturity table until promoted to Stable. +- **Promoting a feature from Experimental to Stable** requires: + 1. Full test coverage including parameter validation. + 2. Removal of the warning admonition from the docstring. + 3. Addition to the README maturity table. + 4. A CHANGELOG entry under "API stability". +- When in doubt, ship as Experimental. Promotion is cheap; demoting silently + breaks users. + +### Documentation review checklist for PRs + +Before requesting review, confirm: + +- [ ] Docstrings present on all new public APIs (NumPy style). +- [ ] New module exported via `__all__` in `brainpy_state/__init__.py`. +- [ ] Added to the corresponding `docs/api/*.rst` page. +- [ ] If NEST-compatible: parameter names match the upstream NEST documentation. +- [ ] If experimental: no claims of stability in docstrings or README. +- [ ] `pytest brainpy_state/` passes locally. +- [ ] Any executable code block in updated docs or notebooks runs + end-to-end without errors. + +For the full rendered documentation, see . + +## Community + +### Getting Help + +- **Documentation**: https://brainx.chaobrain.com/brainpy-state/ +- **GitHub Discussions**: https://github.com/chaobrain/brainpy.state/discussions +- **Issues**: https://github.com/chaobrain/brainpy.state/issues + +### Recognition + +Contributors are recognized in: +- Release notes +- Contributors file +- Project documentation + +Thank you for contributing to brainpy.state! Your efforts help make computational neuroscience more accessible and powerful for everyone. diff --git a/LICENSE b/LICENSE index 653e2ff0..8a52a04a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,191 +1,191 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship made available under - the License, as indicated by a copyright notice that is included in - or attached to the work (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean, as submitted to the Licensor for inclusion - in the Work by the copyright owner or by an individual or Legal Entity - authorized to submit on behalf of the copyright owner. For the purposes - of this definition, "submitted" means any form of electronic, verbal, - or written communication sent to the Licensor or its representatives, - including but not limited to communication on electronic mailing lists, - source code control systems, and issue tracking systems that are managed - by, or on behalf of, the Licensor for the purpose of discussing and - improving the Work, but excluding communication that is conspicuously - marked or otherwise designated in writing by the copyright owner as - "Not a Contribution." - - "Contributor" shall mean Licensor and any Legal Entity on behalf of - whom a Contribution has been received by the Licensor and subsequently - incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contributions(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a cross-claim - or counterclaim in a lawsuit) alleging that the Work or a Contribution - incorporated within the Work constitutes direct or contributory patent - infringement, then any patent licenses granted to You under this License - for that Work shall terminate as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works - a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that - You distribute, all copyright, patent, trademark, and attribution - notices from the Source form of the Work, excluding those notices - that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, You must include a readable copy of the attribution - notices contained within such NOTICE file, in at least one of the - following places: within a NOTICE text file distributed as part of - the Derivative Works; within the Source form or documentation, if - provided along with the Derivative Works; or, within a display - generated by the Derivative Works, if and wherever such third-party - notices normally appear. The contents of the NOTICE file are for - informational purposes only and do not modify the License. You may - add Your own attribution notices within Derivative Works that You - distribute, alongside or as an addendum to the NOTICE text from the - Work, provided that such additional attribution notices cannot be - construed as modifying the License. - - You may add Your own license statement for Your modifications and - may provide additional grant of rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Work, and - to permit persons to whom the Work is furnished to do so. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or exemplary damages of any character arising as a result - of this License or out of the use or inability to use the Work - (including but not limited to damages for loss of goodwill, work - stoppage, computer failure or malfunction, or all other commercial - damages or losses), even if such Contributor has been advised of the - possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, and - charge a fee for, acceptance of support, warranty, indemnity, or - other liability obligations and/or rights consistent with this License. - However, in accepting such obligations, You may act only on Your own - behalf and on Your sole responsibility, not on behalf of any other - Contributor, and only if You agree to indemnify, defend, and hold each - Contributor harmless for any liability incurred by, or claims asserted - against, such Contributor by reason of your accepting any such warranty - or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format in use. We also recommend that - a file and/or class name and description be included on the same - "printed page" as the copyright notice for easier identification within - third-party archives. - - Copyright 2026 BrainX Ecosystem Limited - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship made available under + the License, as indicated by a copyright notice that is included in + or attached to the work (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean, as submitted to the Licensor for inclusion + in the Work by the copyright owner or by an individual or Legal Entity + authorized to submit on behalf of the copyright owner. For the purposes + of this definition, "submitted" means any form of electronic, verbal, + or written communication sent to the Licensor or its representatives, + including but not limited to communication on electronic mailing lists, + source code control systems, and issue tracking systems that are managed + by, or on behalf of, the Licensor for the purpose of discussing and + improving the Work, but excluding communication that is conspicuously + marked or otherwise designated in writing by the copyright owner as + "Not a Contribution." + + "Contributor" shall mean Licensor and any Legal Entity on behalf of + whom a Contribution has been received by the Licensor and subsequently + incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contributions(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a cross-claim + or counterclaim in a lawsuit) alleging that the Work or a Contribution + incorporated within the Work constitutes direct or contributory patent + infringement, then any patent licenses granted to You under this License + for that Work shall terminate as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works + a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, You must include a readable copy of the attribution + notices contained within such NOTICE file, in at least one of the + following places: within a NOTICE text file distributed as part of + the Derivative Works; within the Source form or documentation, if + provided along with the Derivative Works; or, within a display + generated by the Derivative Works, if and wherever such third-party + notices normally appear. The contents of the NOTICE file are for + informational purposes only and do not modify the License. You may + add Your own attribution notices within Derivative Works that You + distribute, alongside or as an addendum to the NOTICE text from the + Work, provided that such additional attribution notices cannot be + construed as modifying the License. + + You may add Your own license statement for Your modifications and + may provide additional grant of rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the Work, and + to permit persons to whom the Work is furnished to do so. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or exemplary damages of any character arising as a result + of this License or out of the use or inability to use the Work + (including but not limited to damages for loss of goodwill, work + stoppage, computer failure or malfunction, or all other commercial + damages or losses), even if such Contributor has been advised of the + possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, and + charge a fee for, acceptance of support, warranty, indemnity, or + other liability obligations and/or rights consistent with this License. + However, in accepting such obligations, You may act only on Your own + behalf and on Your sole responsibility, not on behalf of any other + Contributor, and only if You agree to indemnify, defend, and hold each + Contributor harmless for any liability incurred by, or claims asserted + against, such Contributor by reason of your accepting any such warranty + or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format in use. We also recommend that + a file and/or class name and description be included on the same + "printed page" as the copyright notice for easier identification within + third-party archives. + + Copyright 2026 BrainX Ecosystem Limited + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/SECURITY.md b/SECURITY.md index 3edf1e03..2206b4fc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,80 +1,80 @@ -# Security Policy - -## Supported Versions - -We release patches for security vulnerabilities for the following versions: - -| Version | Supported | -| ------- | ------------------ | -| 0.x.x | :white_check_mark: | - -## Reporting a Vulnerability - -**Please do not report security vulnerabilities through public GitHub issues.** - -If you discover a security vulnerability in brainpy.state, please report it to us responsibly: - -### Preferred Method: Security Advisories - -Use GitHub's Security Advisory feature: -1. Navigate to the [Security tab](https://github.com/chaobrain/brainpy.state/security/advisories) -2. Click "Report a vulnerability" -3. Fill out the form with details about the vulnerability - -### Alternative Method: Email - -Send an email to: **chao.brain@qq.com** - -Please include the following information: -- Type of vulnerability -- Full paths of source file(s) related to the vulnerability -- Location of the affected source code (tag/branch/commit or direct URL) -- Any special configuration required to reproduce the issue -- Step-by-step instructions to reproduce the issue -- Proof-of-concept or exploit code (if possible) -- Impact of the issue, including how an attacker might exploit it - -### Response Timeline - -- **Acknowledgment**: We will acknowledge your report within **3 business days** -- **Initial Response**: You'll receive a detailed response within **7 days** indicating the next steps -- **Updates**: We will keep you informed of our progress throughout the resolution process -- **Disclosure**: We aim to address critical vulnerabilities within **30 days** - -These timelines may extend during holiday periods or when triage volunteers are unavailable. - -### What to Expect - -After you submit a report: -1. We will confirm the vulnerability and determine its impact -2. We will develop and test a fix -3. We will release a security advisory and patched versions -4. We will publicly acknowledge your responsible disclosure (unless you prefer to remain anonymous) - -## Security Update Policy - -- Security updates will be released as patch versions (e.g., 2.4.1) -- Critical vulnerabilities may warrant immediate releases -- All security updates will be announced via: - - GitHub Security Advisories - - Release notes - - Project documentation - -## Reporting Bugs in Third-Party Dependencies - -Security bugs in third-party modules (jax, numpy, etc.) should be reported directly to their respective maintainers. We will update dependencies promptly when security patches become available. - -## Bug Bounty Program - -We currently do not offer a paid bug bounty program, but we deeply appreciate and acknowledge all security researchers who help keep brainpy.state secure. - -## Security Best Practices for Users - -When using brainpy.state: -- Always use the latest stable version -- Keep dependencies updated -- Review and understand code before executing untrusted models -- Be cautious when loading pre-trained models from untrusted sources -- Follow security best practices when deploying brainpy.state in production environments - -Thank you for helping keep brainpy.state and its users safe! +# Security Policy + +## Supported Versions + +We release patches for security vulnerabilities for the following versions: + +| Version | Supported | +| ------- | ------------------ | +| 0.x.x | :white_check_mark: | + +## Reporting a Vulnerability + +**Please do not report security vulnerabilities through public GitHub issues.** + +If you discover a security vulnerability in brainpy.state, please report it to us responsibly: + +### Preferred Method: Security Advisories + +Use GitHub's Security Advisory feature: +1. Navigate to the [Security tab](https://github.com/chaobrain/brainpy.state/security/advisories) +2. Click "Report a vulnerability" +3. Fill out the form with details about the vulnerability + +### Alternative Method: Email + +Send an email to: **chao.brain@qq.com** + +Please include the following information: +- Type of vulnerability +- Full paths of source file(s) related to the vulnerability +- Location of the affected source code (tag/branch/commit or direct URL) +- Any special configuration required to reproduce the issue +- Step-by-step instructions to reproduce the issue +- Proof-of-concept or exploit code (if possible) +- Impact of the issue, including how an attacker might exploit it + +### Response Timeline + +- **Acknowledgment**: We will acknowledge your report within **3 business days** +- **Initial Response**: You'll receive a detailed response within **7 days** indicating the next steps +- **Updates**: We will keep you informed of our progress throughout the resolution process +- **Disclosure**: We aim to address critical vulnerabilities within **30 days** + +These timelines may extend during holiday periods or when triage volunteers are unavailable. + +### What to Expect + +After you submit a report: +1. We will confirm the vulnerability and determine its impact +2. We will develop and test a fix +3. We will release a security advisory and patched versions +4. We will publicly acknowledge your responsible disclosure (unless you prefer to remain anonymous) + +## Security Update Policy + +- Security updates will be released as patch versions (e.g., 2.4.1) +- Critical vulnerabilities may warrant immediate releases +- All security updates will be announced via: + - GitHub Security Advisories + - Release notes + - Project documentation + +## Reporting Bugs in Third-Party Dependencies + +Security bugs in third-party modules (jax, numpy, etc.) should be reported directly to their respective maintainers. We will update dependencies promptly when security patches become available. + +## Bug Bounty Program + +We currently do not offer a paid bug bounty program, but we deeply appreciate and acknowledge all security researchers who help keep brainpy.state secure. + +## Security Best Practices for Users + +When using brainpy.state: +- Always use the latest stable version +- Keep dependencies updated +- Review and understand code before executing untrusted models +- Be cautious when loading pre-trained models from untrusted sources +- Follow security best practices when deploying brainpy.state in production environments + +Thank you for helping keep brainpy.state and its users safe! diff --git a/brainpy_state/_nest_base/__init__.py b/brainpy_state/_nest_base/__init__.py index bfaf9450..0ef31f3b 100644 --- a/brainpy_state/_nest_base/__init__.py +++ b/brainpy_state/_nest_base/__init__.py @@ -1,7 +1,7 @@ # Copyright 2026 BrainX Ecosystem Limited. Apache 2.0. -from ._base import NESTDevice, NESTNeuron, NESTSynapse, NESTPlasticity +from .base import NESTDevice, NESTNeuron, NESTSynapse, NESTPlasticity __all__ = [ 'NESTDevice', diff --git a/brainpy_state/_nest_base/_base.py b/brainpy_state/_nest_base/base.py similarity index 100% rename from brainpy_state/_nest_base/_base.py rename to brainpy_state/_nest_base/base.py diff --git a/brainpy_state/_nest_base/jit_compat_test.py b/brainpy_state/_nest_base/jit_compat_test.py index 9f96993d..fec2fd8c 100644 --- a/brainpy_state/_nest_base/jit_compat_test.py +++ b/brainpy_state/_nest_base/jit_compat_test.py @@ -22,7 +22,7 @@ the same machinery as ``jax.jit`` / ``brainstate.transform.for_loop`` (scan), so a model that traces cleanly here is safe to embed in a jitted simulation. -Parameter-validation guards are routed through :func:`brainpy_state._nest_base._utils.cond_any`, +Parameter-validation guards are routed through :func:`brainpy_state._nest_base.utils.cond_any`, which returns ``False`` for JAX tracers so that ``if`` checks are skipped during tracing instead of raising ``TracerBoolConversionError``. @@ -41,10 +41,10 @@ import brainunit as u import brainpy_state as B -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) # Models whose ``update`` cannot currently be JIT-compiled, with the reason. diff --git a/brainpy_state/_nest_base/_plastic_base.py b/brainpy_state/_nest_base/plastic_base.py similarity index 97% rename from brainpy_state/_nest_base/_plastic_base.py rename to brainpy_state/_nest_base/plastic_base.py index 96e5f469..3cd4458e 100644 --- a/brainpy_state/_nest_base/_plastic_base.py +++ b/brainpy_state/_nest_base/plastic_base.py @@ -3,7 +3,7 @@ The rebuilt ``_nest/_synapse.py`` models are NEST-faithful parameter specs plus a pure ``update(state, ctx)`` rule kernel that runs on the -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj` substrate. +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj` substrate. This module factors out the construction-time scalar coercion / validation (NEST error strings preserved) and the per-edge freeze used by every kernel, so each model file stays focused on its parameters and equations. diff --git a/brainpy_state/_nest_base/_utils.py b/brainpy_state/_nest_base/utils.py similarity index 100% rename from brainpy_state/_nest_base/_utils.py rename to brainpy_state/_nest_base/utils.py diff --git a/brainpy_state/_nest_base/_utils_test.py b/brainpy_state/_nest_base/utils_test.py similarity index 98% rename from brainpy_state/_nest_base/_utils_test.py rename to brainpy_state/_nest_base/utils_test.py index f2e72757..1f00104c 100644 --- a/brainpy_state/_nest_base/_utils_test.py +++ b/brainpy_state/_nest_base/utils_test.py @@ -21,7 +21,7 @@ import numpy as np import numpy.testing as npt -from brainpy_state._nest_base._utils import ( +from brainpy_state._nest_base.utils import ( propagator_exp, alpha_propagator_p31_p32, ) diff --git a/brainpy_state/_nest_device/ac_generator.py b/brainpy_state/_nest_device/ac_generator.py index da4cbc8f..3b5b416a 100644 --- a/brainpy_state/_nest_device/ac_generator.py +++ b/brainpy_state/_nest_device/ac_generator.py @@ -21,7 +21,7 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'ac_generator', diff --git a/brainpy_state/_nest_device/correlation_detector.py b/brainpy_state/_nest_device/correlation_detector.py index a4e22f3e..377ddec0 100644 --- a/brainpy_state/_nest_device/correlation_detector.py +++ b/brainpy_state/_nest_device/correlation_detector.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'correlation_detector', diff --git a/brainpy_state/_nest_device/correlation_detector_test.py b/brainpy_state/_nest_device/correlation_detector_test.py index ecb063ff..6a7c9084 100644 --- a/brainpy_state/_nest_device/correlation_detector_test.py +++ b/brainpy_state/_nest_device/correlation_detector_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import correlation_detector diff --git a/brainpy_state/_nest_device/correlomatrix_detector.py b/brainpy_state/_nest_device/correlomatrix_detector.py index fce1d5b5..fc39672a 100644 --- a/brainpy_state/_nest_device/correlomatrix_detector.py +++ b/brainpy_state/_nest_device/correlomatrix_detector.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'correlomatrix_detector', diff --git a/brainpy_state/_nest_device/correlomatrix_detector_test.py b/brainpy_state/_nest_device/correlomatrix_detector_test.py index 2061ce28..bdfe9c5b 100644 --- a/brainpy_state/_nest_device/correlomatrix_detector_test.py +++ b/brainpy_state/_nest_device/correlomatrix_detector_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import correlomatrix_detector diff --git a/brainpy_state/_nest_device/correlospinmatrix_detector.py b/brainpy_state/_nest_device/correlospinmatrix_detector.py index d56be68a..5ce76254 100644 --- a/brainpy_state/_nest_device/correlospinmatrix_detector.py +++ b/brainpy_state/_nest_device/correlospinmatrix_detector.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'correlospinmatrix_detector', diff --git a/brainpy_state/_nest_device/correlospinmatrix_detector_test.py b/brainpy_state/_nest_device/correlospinmatrix_detector_test.py index dd05ebae..7e5b2d37 100644 --- a/brainpy_state/_nest_device/correlospinmatrix_detector_test.py +++ b/brainpy_state/_nest_device/correlospinmatrix_detector_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import correlospinmatrix_detector diff --git a/brainpy_state/_nest_device/dc_generator.py b/brainpy_state/_nest_device/dc_generator.py index f02a866e..e5444d59 100644 --- a/brainpy_state/_nest_device/dc_generator.py +++ b/brainpy_state/_nest_device/dc_generator.py @@ -21,7 +21,7 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'dc_generator', diff --git a/brainpy_state/_nest_device/dc_generator_test.py b/brainpy_state/_nest_device/dc_generator_test.py index c3d584af..91e922bd 100644 --- a/brainpy_state/_nest_device/dc_generator_test.py +++ b/brainpy_state/_nest_device/dc_generator_test.py @@ -35,7 +35,7 @@ import numpy as np import numpy.testing as npt -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import dc_generator, iaf_psc_delta diff --git a/brainpy_state/_nest_device/gamma_sup_generator.py b/brainpy_state/_nest_device/gamma_sup_generator.py index 470cb0e5..6c93085d 100644 --- a/brainpy_state/_nest_device/gamma_sup_generator.py +++ b/brainpy_state/_nest_device/gamma_sup_generator.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'gamma_sup_generator', diff --git a/brainpy_state/_nest_device/gamma_sup_generator_test.py b/brainpy_state/_nest_device/gamma_sup_generator_test.py index 30fe5f52..ccada93e 100644 --- a/brainpy_state/_nest_device/gamma_sup_generator_test.py +++ b/brainpy_state/_nest_device/gamma_sup_generator_test.py @@ -31,7 +31,7 @@ from brainpy_state._nest_device.gamma_sup_generator import gamma_sup_generator -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts_and_spikes( diff --git a/brainpy_state/_nest_device/host_drive.py b/brainpy_state/_nest_device/host_drive.py index 6530bb6c..c54efd96 100644 --- a/brainpy_state/_nest_device/host_drive.py +++ b/brainpy_state/_nest_device/host_drive.py @@ -31,7 +31,7 @@ import jax.numpy as jnp from brainstate.typing import Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'host_spike_drive', diff --git a/brainpy_state/_nest_device/host_drive_test.py b/brainpy_state/_nest_device/host_drive_test.py index ccd16ca1..a7624c05 100644 --- a/brainpy_state/_nest_device/host_drive_test.py +++ b/brainpy_state/_nest_device/host_drive_test.py @@ -24,7 +24,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (host_spike_drive, host_current_drive, spike_generator, dc_generator, parrot_neuron, iaf_psc_exp, diff --git a/brainpy_state/_nest_device/inhomogeneous_poisson_generator.py b/brainpy_state/_nest_device/inhomogeneous_poisson_generator.py index 06b4990a..ec1ae699 100644 --- a/brainpy_state/_nest_device/inhomogeneous_poisson_generator.py +++ b/brainpy_state/_nest_device/inhomogeneous_poisson_generator.py @@ -26,7 +26,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'inhomogeneous_poisson_generator', diff --git a/brainpy_state/_nest_device/inhomogeneous_poisson_generator_test.py b/brainpy_state/_nest_device/inhomogeneous_poisson_generator_test.py index 0278b97c..9e5acaa5 100644 --- a/brainpy_state/_nest_device/inhomogeneous_poisson_generator_test.py +++ b/brainpy_state/_nest_device/inhomogeneous_poisson_generator_test.py @@ -36,7 +36,7 @@ inhomogeneous_poisson_generator, ) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts( diff --git a/brainpy_state/_nest_device/mip_generator.py b/brainpy_state/_nest_device/mip_generator.py index a6b88cd6..b0e065a5 100644 --- a/brainpy_state/_nest_device/mip_generator.py +++ b/brainpy_state/_nest_device/mip_generator.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'mip_generator', diff --git a/brainpy_state/_nest_device/mip_generator_test.py b/brainpy_state/_nest_device/mip_generator_test.py index 3286b3e6..4db6b191 100644 --- a/brainpy_state/_nest_device/mip_generator_test.py +++ b/brainpy_state/_nest_device/mip_generator_test.py @@ -31,7 +31,7 @@ from brainpy_state._nest_device.mip_generator import mip_generator -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_matrix( diff --git a/brainpy_state/_nest_device/multimeter.py b/brainpy_state/_nest_device/multimeter.py index 3203b047..1ac4c2d5 100644 --- a/brainpy_state/_nest_device/multimeter.py +++ b/brainpy_state/_nest_device/multimeter.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'multimeter', diff --git a/brainpy_state/_nest_device/multimeter_test.py b/brainpy_state/_nest_device/multimeter_test.py index e1021e35..4677c3d1 100644 --- a/brainpy_state/_nest_device/multimeter_test.py +++ b/brainpy_state/_nest_device/multimeter_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_psc_delta, multimeter diff --git a/brainpy_state/_nest_device/noise_generator.py b/brainpy_state/_nest_device/noise_generator.py index a3a8a5ea..22b3a231 100644 --- a/brainpy_state/_nest_device/noise_generator.py +++ b/brainpy_state/_nest_device/noise_generator.py @@ -25,7 +25,7 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'noise_generator', diff --git a/brainpy_state/_nest_device/noise_generator_test.py b/brainpy_state/_nest_device/noise_generator_test.py index 93b7a540..be3a44ea 100644 --- a/brainpy_state/_nest_device/noise_generator_test.py +++ b/brainpy_state/_nest_device/noise_generator_test.py @@ -35,7 +35,7 @@ import numpy as np import numpy.testing as npt -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import noise_generator diff --git a/brainpy_state/_nest_device/poisson_generator.py b/brainpy_state/_nest_device/poisson_generator.py index 1bae3a48..71932090 100644 --- a/brainpy_state/_nest_device/poisson_generator.py +++ b/brainpy_state/_nest_device/poisson_generator.py @@ -24,7 +24,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'poisson_generator', diff --git a/brainpy_state/_nest_device/poisson_generator_ps.py b/brainpy_state/_nest_device/poisson_generator_ps.py index 496e7b91..410a656c 100644 --- a/brainpy_state/_nest_device/poisson_generator_ps.py +++ b/brainpy_state/_nest_device/poisson_generator_ps.py @@ -21,7 +21,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'poisson_generator_ps', diff --git a/brainpy_state/_nest_device/poisson_generator_ps_test.py b/brainpy_state/_nest_device/poisson_generator_ps_test.py index e67ba9f6..994ee6e1 100644 --- a/brainpy_state/_nest_device/poisson_generator_ps_test.py +++ b/brainpy_state/_nest_device/poisson_generator_ps_test.py @@ -31,7 +31,7 @@ from brainpy_state._nest_device.poisson_generator_ps import poisson_generator_ps -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts_and_times( diff --git a/brainpy_state/_nest_device/poisson_generator_test.py b/brainpy_state/_nest_device/poisson_generator_test.py index 1886c936..290ba5da 100644 --- a/brainpy_state/_nest_device/poisson_generator_test.py +++ b/brainpy_state/_nest_device/poisson_generator_test.py @@ -32,7 +32,7 @@ from brainpy_state._nest_device.poisson_generator import poisson_generator -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts( diff --git a/brainpy_state/_nest_device/ppd_sup_generator.py b/brainpy_state/_nest_device/ppd_sup_generator.py index dba50b40..ff3fd306 100644 --- a/brainpy_state/_nest_device/ppd_sup_generator.py +++ b/brainpy_state/_nest_device/ppd_sup_generator.py @@ -23,7 +23,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'ppd_sup_generator', diff --git a/brainpy_state/_nest_device/ppd_sup_generator_test.py b/brainpy_state/_nest_device/ppd_sup_generator_test.py index ef367784..2b3f4934 100644 --- a/brainpy_state/_nest_device/ppd_sup_generator_test.py +++ b/brainpy_state/_nest_device/ppd_sup_generator_test.py @@ -31,7 +31,7 @@ from brainpy_state._nest_device.ppd_sup_generator import ppd_sup_generator -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts_and_spikes( diff --git a/brainpy_state/_nest_device/pulsepacket_generator.py b/brainpy_state/_nest_device/pulsepacket_generator.py index eed51ad1..78e53389 100644 --- a/brainpy_state/_nest_device/pulsepacket_generator.py +++ b/brainpy_state/_nest_device/pulsepacket_generator.py @@ -26,7 +26,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'pulsepacket_generator', diff --git a/brainpy_state/_nest_device/pulsepacket_generator_test.py b/brainpy_state/_nest_device/pulsepacket_generator_test.py index fa89cbc4..be0339d8 100644 --- a/brainpy_state/_nest_device/pulsepacket_generator_test.py +++ b/brainpy_state/_nest_device/pulsepacket_generator_test.py @@ -31,7 +31,7 @@ from brainpy_state._nest_device.pulsepacket_generator import pulsepacket_generator -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts( diff --git a/brainpy_state/_nest_device/sinusoidal_gamma_generator.py b/brainpy_state/_nest_device/sinusoidal_gamma_generator.py index de8d2773..60447f30 100644 --- a/brainpy_state/_nest_device/sinusoidal_gamma_generator.py +++ b/brainpy_state/_nest_device/sinusoidal_gamma_generator.py @@ -25,7 +25,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'sinusoidal_gamma_generator', diff --git a/brainpy_state/_nest_device/sinusoidal_gamma_generator_test.py b/brainpy_state/_nest_device/sinusoidal_gamma_generator_test.py index 4263b2c6..612f5d26 100644 --- a/brainpy_state/_nest_device/sinusoidal_gamma_generator_test.py +++ b/brainpy_state/_nest_device/sinusoidal_gamma_generator_test.py @@ -35,7 +35,7 @@ sinusoidal_gamma_generator, ) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts( diff --git a/brainpy_state/_nest_device/sinusoidal_poisson_generator.py b/brainpy_state/_nest_device/sinusoidal_poisson_generator.py index 9567229b..2b7571e9 100644 --- a/brainpy_state/_nest_device/sinusoidal_poisson_generator.py +++ b/brainpy_state/_nest_device/sinusoidal_poisson_generator.py @@ -25,7 +25,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'sinusoidal_poisson_generator', diff --git a/brainpy_state/_nest_device/sinusoidal_poisson_generator_test.py b/brainpy_state/_nest_device/sinusoidal_poisson_generator_test.py index 49695b45..b263bbb6 100644 --- a/brainpy_state/_nest_device/sinusoidal_poisson_generator_test.py +++ b/brainpy_state/_nest_device/sinusoidal_poisson_generator_test.py @@ -35,7 +35,7 @@ sinusoidal_poisson_generator, ) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _run_bp_counts( diff --git a/brainpy_state/_nest_device/spike_dilutor.py b/brainpy_state/_nest_device/spike_dilutor.py index 9765d09e..2eecfeb4 100644 --- a/brainpy_state/_nest_device/spike_dilutor.py +++ b/brainpy_state/_nest_device/spike_dilutor.py @@ -25,7 +25,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'spike_dilutor', diff --git a/brainpy_state/_nest_device/spike_dilutor_test.py b/brainpy_state/_nest_device/spike_dilutor_test.py index 1b58f705..1aebfcb7 100644 --- a/brainpy_state/_nest_device/spike_dilutor_test.py +++ b/brainpy_state/_nest_device/spike_dilutor_test.py @@ -32,7 +32,7 @@ from brainpy_state._nest_device.spike_dilutor import spike_dilutor -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestSpikeDilutorParameters(unittest.TestCase): diff --git a/brainpy_state/_nest_device/spike_generator.py b/brainpy_state/_nest_device/spike_generator.py index 3f4d9d6c..33250b19 100644 --- a/brainpy_state/_nest_device/spike_generator.py +++ b/brainpy_state/_nest_device/spike_generator.py @@ -23,7 +23,7 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'spike_generator', diff --git a/brainpy_state/_nest_device/spike_generator_test.py b/brainpy_state/_nest_device/spike_generator_test.py index ca292fb6..6b9945b5 100644 --- a/brainpy_state/_nest_device/spike_generator_test.py +++ b/brainpy_state/_nest_device/spike_generator_test.py @@ -35,7 +35,7 @@ import numpy.testing as npt import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import spike_generator diff --git a/brainpy_state/_nest_device/spike_recorder.py b/brainpy_state/_nest_device/spike_recorder.py index 2ae32d25..6f56c384 100644 --- a/brainpy_state/_nest_device/spike_recorder.py +++ b/brainpy_state/_nest_device/spike_recorder.py @@ -23,7 +23,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'spike_recorder', diff --git a/brainpy_state/_nest_device/spike_recorder_test.py b/brainpy_state/_nest_device/spike_recorder_test.py index ca7a2a85..733bf25f 100644 --- a/brainpy_state/_nest_device/spike_recorder_test.py +++ b/brainpy_state/_nest_device/spike_recorder_test.py @@ -26,7 +26,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_psc_delta, spike_recorder diff --git a/brainpy_state/_nest_device/spike_train_injector.py b/brainpy_state/_nest_device/spike_train_injector.py index b118636a..623717d0 100644 --- a/brainpy_state/_nest_device/spike_train_injector.py +++ b/brainpy_state/_nest_device/spike_train_injector.py @@ -22,7 +22,7 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'spike_train_injector', diff --git a/brainpy_state/_nest_device/spike_train_injector_test.py b/brainpy_state/_nest_device/spike_train_injector_test.py index 7ccb2139..8d20a49f 100644 --- a/brainpy_state/_nest_device/spike_train_injector_test.py +++ b/brainpy_state/_nest_device/spike_train_injector_test.py @@ -36,7 +36,7 @@ import brainunit as u import numpy.testing as npt -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import spike_train_injector diff --git a/brainpy_state/_nest_device/spin_detector.py b/brainpy_state/_nest_device/spin_detector.py index a2406730..2858174c 100644 --- a/brainpy_state/_nest_device/spin_detector.py +++ b/brainpy_state/_nest_device/spin_detector.py @@ -23,7 +23,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'spin_detector', diff --git a/brainpy_state/_nest_device/spin_detector_test.py b/brainpy_state/_nest_device/spin_detector_test.py index f493145b..2dbad694 100644 --- a/brainpy_state/_nest_device/spin_detector_test.py +++ b/brainpy_state/_nest_device/spin_detector_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import spin_detector diff --git a/brainpy_state/_nest_device/step_current_generator.py b/brainpy_state/_nest_device/step_current_generator.py index 5742d194..a5caa626 100644 --- a/brainpy_state/_nest_device/step_current_generator.py +++ b/brainpy_state/_nest_device/step_current_generator.py @@ -22,8 +22,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice -from brainpy_state._nest_base._utils import stack_schedule_values +from brainpy_state._nest_base.base import NESTDevice +from brainpy_state._nest_base.utils import stack_schedule_values __all__ = [ 'step_current_generator', diff --git a/brainpy_state/_nest_device/step_current_generator_test.py b/brainpy_state/_nest_device/step_current_generator_test.py index eb4f0185..2d0ab359 100644 --- a/brainpy_state/_nest_device/step_current_generator_test.py +++ b/brainpy_state/_nest_device/step_current_generator_test.py @@ -35,7 +35,7 @@ import numpy as np import numpy.testing as npt -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import step_current_generator, iaf_psc_delta diff --git a/brainpy_state/_nest_device/step_rate_generator.py b/brainpy_state/_nest_device/step_rate_generator.py index 03c15d47..d0e0ee48 100644 --- a/brainpy_state/_nest_device/step_rate_generator.py +++ b/brainpy_state/_nest_device/step_rate_generator.py @@ -22,8 +22,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice -from brainpy_state._nest_base._utils import stack_schedule_values +from brainpy_state._nest_base.base import NESTDevice +from brainpy_state._nest_base.utils import stack_schedule_values __all__ = [ 'step_rate_generator', diff --git a/brainpy_state/_nest_device/step_rate_generator_test.py b/brainpy_state/_nest_device/step_rate_generator_test.py index b641a38d..d205424b 100644 --- a/brainpy_state/_nest_device/step_rate_generator_test.py +++ b/brainpy_state/_nest_device/step_rate_generator_test.py @@ -33,7 +33,7 @@ import numpy.testing as npt import pytest -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import step_rate_generator diff --git a/brainpy_state/_nest_device/voltmeter_test.py b/brainpy_state/_nest_device/voltmeter_test.py index 0a1c709f..85edcd43 100644 --- a/brainpy_state/_nest_device/voltmeter_test.py +++ b/brainpy_state/_nest_device/voltmeter_test.py @@ -5,7 +5,7 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestVoltmeter(unittest.TestCase): @@ -21,7 +21,7 @@ def test_records_only_v_m_by_default(self): def test_is_a_multimeter(self): from brainpy_state import voltmeter, multimeter - from brainpy_state._nest_base._base import NESTDevice + from brainpy_state._nest_base.base import NESTDevice vm = voltmeter() self.assertIsInstance(vm, multimeter) self.assertIsInstance(vm, NESTDevice) diff --git a/brainpy_state/_nest_device/volume_transmitter.py b/brainpy_state/_nest_device/volume_transmitter.py index 6b7c15ce..6740d53b 100644 --- a/brainpy_state/_nest_device/volume_transmitter.py +++ b/brainpy_state/_nest_device/volume_transmitter.py @@ -5,7 +5,7 @@ concentration ``n(t)`` as a broadcast :class:`brainstate.HiddenState`, computed once per step and read identically by every edge of a dopamine-modulated projection (the cluster-08 ``signal_reads`` seam of -:class:`~brainpy_state._nest_network._event_plastic.VoltageCoupledPlasticProj`). +:class:`~brainpy_state._nest_network.event_plastic.VoltageCoupledPlasticProj`). The previous imperative ring-buffer port (NEST delivery stamps, spike-history lists, host scalars) is retired: with the online per-step weight integral, the @@ -28,8 +28,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice -from brainpy_state._nest_base._plastic_base import to_ms, to_scalar_int +from brainpy_state._nest_base.base import NESTDevice +from brainpy_state._nest_base.plastic_base import to_ms, to_scalar_int __all__ = [ 'volume_transmitter', diff --git a/brainpy_state/_nest_device/volume_transmitter_rule_test.py b/brainpy_state/_nest_device/volume_transmitter_rule_test.py index 91868ab3..018b28e6 100644 --- a/brainpy_state/_nest_device/volume_transmitter_rule_test.py +++ b/brainpy_state/_nest_device/volume_transmitter_rule_test.py @@ -21,7 +21,7 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_device.volume_transmitter import volume_transmitter # noqa: E402 diff --git a/brainpy_state/_nest_device/weight_recorder.py b/brainpy_state/_nest_device/weight_recorder.py index 2381286e..c4761e6a 100644 --- a/brainpy_state/_nest_device/weight_recorder.py +++ b/brainpy_state/_nest_device/weight_recorder.py @@ -23,7 +23,7 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = [ 'weight_recorder', diff --git a/brainpy_state/_nest_device/weight_recorder_test.py b/brainpy_state/_nest_device/weight_recorder_test.py index caf6965c..8503115b 100644 --- a/brainpy_state/_nest_device/weight_recorder_test.py +++ b/brainpy_state/_nest_device/weight_recorder_test.py @@ -25,7 +25,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import weight_recorder diff --git a/brainpy_state/_nest_network/__init__.py b/brainpy_state/_nest_network/__init__.py index fbff491d..913c756a 100644 --- a/brainpy_state/_nest_network/__init__.py +++ b/brainpy_state/_nest_network/__init__.py @@ -1,8 +1,8 @@ # Copyright 2026 BrainX Ecosystem Limited. Apache 2.0. -from ._base import Network -from ._builder import Builder -from ._recorders import Recorder -from ._projections import ( +from .base import Network +from .builder import Builder +from .recorders import Recorder +from .projections import ( OneToOneProj, AllToAllProj, PairwiseBernoulliProj, @@ -14,16 +14,16 @@ ) # NEST-flavored explicit Simulator API. -from ._nodeview import NodeView -from ._rules import ( +from .nodeview import NodeView +from .rules import ( ConnRule, all_to_all, one_to_one, fixed_indegree, pairwise_bernoulli, fixed_total_number, third_factor_bernoulli_with_pool, explicit_edges, ) -from ._event_proj import EventProjection -from ._event_plastic import EventPlasticProj, VoltageCoupledPlasticProj -from ._connection_introspection import SynapseCollection -from ._simulator import Simulator, SimulationResult -from ._weight_recorder_view import send_steps_from_pre, weight_recorder_events +from .event_proj import EventProjection +from .event_plastic import EventPlasticProj, VoltageCoupledPlasticProj +from .connection_introspection import SynapseCollection +from .simulator import Simulator, SimulationResult +from .weight_recorder_view import send_steps_from_pre, weight_recorder_events __all__ = [ 'Network', diff --git a/brainpy_state/_nest_network/_base.py b/brainpy_state/_nest_network/base.py similarity index 98% rename from brainpy_state/_nest_network/_base.py rename to brainpy_state/_nest_network/base.py index b8c86e08..ee46aeb9 100644 --- a/brainpy_state/_nest_network/_base.py +++ b/brainpy_state/_nest_network/base.py @@ -6,7 +6,7 @@ from brainpy_state._base import Neuron from brainpy_state._brainpy.projection import Projection -from brainpy_state._nest_base._base import NESTDevice +from brainpy_state._nest_base.base import NESTDevice __all__ = ['Network'] diff --git a/brainpy_state/_nest_network/_base_test.py b/brainpy_state/_nest_network/base_test.py similarity index 98% rename from brainpy_state/_nest_network/_base_test.py rename to brainpy_state/_nest_network/base_test.py index 5d953d62..f0a5e936 100644 --- a/brainpy_state/_nest_network/_base_test.py +++ b/brainpy_state/_nest_network/base_test.py @@ -3,7 +3,7 @@ import brainstate import brainunit as u -from brainpy_state._nest_network._base import Network +from brainpy_state._nest_network.base import Network from brainpy_state import LIF diff --git a/brainpy_state/_nest_network/_brunel_test.py b/brainpy_state/_nest_network/brunel_test.py similarity index 100% rename from brainpy_state/_nest_network/_brunel_test.py rename to brainpy_state/_nest_network/brunel_test.py diff --git a/brainpy_state/_nest_network/_builder.py b/brainpy_state/_nest_network/builder.py similarity index 96% rename from brainpy_state/_nest_network/_builder.py rename to brainpy_state/_nest_network/builder.py index 520c051a..448bc0d2 100644 --- a/brainpy_state/_nest_network/_builder.py +++ b/brainpy_state/_nest_network/builder.py @@ -9,7 +9,7 @@ from brainpy_state._base import Dynamics from brainpy_state._brainpy.projection import Projection -from brainpy_state._nest_network._base import Network +from brainpy_state._nest_network.base import Network __all__ = ['Builder'] diff --git a/brainpy_state/_nest_network/_builder_test.py b/brainpy_state/_nest_network/builder_test.py similarity index 90% rename from brainpy_state/_nest_network/_builder_test.py rename to brainpy_state/_nest_network/builder_test.py index 7dec4973..e3009230 100644 --- a/brainpy_state/_nest_network/_builder_test.py +++ b/brainpy_state/_nest_network/builder_test.py @@ -5,9 +5,9 @@ import brainunit as u from brainpy_state import LIF, Expon, COBA -from brainpy_state._nest_network._builder import Builder -from brainpy_state._nest_network._base import Network -from brainpy_state._nest_network._projections import OneToOneProj +from brainpy_state._nest_network.builder import Builder +from brainpy_state._nest_network.base import Network +from brainpy_state._nest_network.projections import OneToOneProj class TestBuilder(unittest.TestCase): diff --git a/brainpy_state/_nest_network/_connection_introspection.py b/brainpy_state/_nest_network/connection_introspection.py similarity index 98% rename from brainpy_state/_nest_network/_connection_introspection.py rename to brainpy_state/_nest_network/connection_introspection.py index e0dd626e..5ed5234e 100644 --- a/brainpy_state/_nest_network/_connection_introspection.py +++ b/brainpy_state/_nest_network/connection_introspection.py @@ -2,7 +2,7 @@ """Connection enumeration + introspection (NEST ``GetConnections`` analogue). This module is a thin, **additive** convenience layer over the projections the -:class:`~brainpy_state._nest_network._simulator.Simulator` already builds — it does not +:class:`~brainpy_state._nest_network.simulator.Simulator` already builds — it does not change how any projection stores its edges. Each projection family exposes a ``realized_edges()`` accessor (in ``_event_proj.py`` / ``_event_plastic.py``) returning a :class:`ProjEdges` view of its realized synapses; this module wraps a @@ -230,7 +230,7 @@ def event_proj_edges(proj) -> 'ProjEdges': element-wise ``one_to_one``); maps segment-local storage indices to population-local ``source`` / ``target`` and sorts to the canonical edge order. """ - from brainpy_state._nest_network._projections import _DenseMatMul + from brainpy_state._nest_network.projections import _DenseMatMul pre_map = np.asarray(proj.pre_local_idx) post_map = np.asarray(proj.post_local_idx) @@ -352,7 +352,7 @@ def _membership(view): if hasattr(view, 'segments'): segments = view.segments else: # a bare population module - from brainpy_state._nest_network._nodeview import NodeView + from brainpy_state._nest_network.nodeview import NodeView segments = NodeView.of(view).segments members = {} for seg in segments: @@ -415,11 +415,11 @@ def _to_unit_mantissa(value, unit): class SynapseCollection: """A filtered, lazy view over realized synapses (NEST ``SynapseCollection``). - Returned by :meth:`~brainpy_state._nest_network._simulator.Simulator.get_connections`. + Returned by :meth:`~brainpy_state._nest_network.simulator.Simulator.get_connections`. It stores, per spanned projection, only the kept edge indices and their population-local ``source`` / ``target`` — **no copy** of weight or delay. Each :meth:`get` re-reads weight / delay from the live projection, so a query made - before :meth:`~brainpy_state._nest_network._simulator.Simulator.simulate` still + before :meth:`~brainpy_state._nest_network.simulator.Simulator.simulate` still reflects post-simulation evolved plastic weights. Methods mirror the NEST object: :meth:`get` (one key -> array, a list of keys diff --git a/brainpy_state/_nest_network/_connection_introspection_test.py b/brainpy_state/_nest_network/connection_introspection_test.py similarity index 99% rename from brainpy_state/_nest_network/_connection_introspection_test.py rename to brainpy_state/_nest_network/connection_introspection_test.py index 430b9436..b1c533f6 100644 --- a/brainpy_state/_nest_network/_connection_introspection_test.py +++ b/brainpy_state/_nest_network/connection_introspection_test.py @@ -15,13 +15,13 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import ( Simulator, iaf_psc_exp, iaf_cond_exp, all_to_all, one_to_one, fixed_indegree, static_synapse, static_synapse_hom_w, ) -from brainpy_state._nest_network._event_plastic import _StaticTestRule +from brainpy_state._nest_network.event_plastic import _StaticTestRule def _no_autapse_pairs(n): diff --git a/brainpy_state/_nest_network/_connectivity.py b/brainpy_state/_nest_network/connectivity.py similarity index 100% rename from brainpy_state/_nest_network/_connectivity.py rename to brainpy_state/_nest_network/connectivity.py diff --git a/brainpy_state/_nest_network/_connectivity_test.py b/brainpy_state/_nest_network/connectivity_test.py similarity index 99% rename from brainpy_state/_nest_network/_connectivity_test.py rename to brainpy_state/_nest_network/connectivity_test.py index ee3c9659..70ff214a 100644 --- a/brainpy_state/_nest_network/_connectivity_test.py +++ b/brainpy_state/_nest_network/connectivity_test.py @@ -7,7 +7,7 @@ import brainunit as u from brainpy_state._dist import Normal -from brainpy_state._nest_network._connectivity import ( +from brainpy_state._nest_network.connectivity import ( ConnSpec, sample_one_to_one, sample_all_to_all, diff --git a/brainpy_state/_nest_network/_event_plastic.py b/brainpy_state/_nest_network/event_plastic.py similarity index 98% rename from brainpy_state/_nest_network/_event_plastic.py rename to brainpy_state/_nest_network/event_plastic.py index 2f39f546..66c5ce08 100644 --- a/brainpy_state/_nest_network/_event_plastic.py +++ b/brainpy_state/_nest_network/event_plastic.py @@ -3,7 +3,7 @@ This is the first of the three typed plasticity primitives described in ``develop/NEST_PARITY_LEDGER.md`` Part 2.5. It owns the *compute*: a CSR edge layout (reusing the -:class:`~brainpy_state._nest_network._projections._SparseEventMatMul` convention), +:class:`~brainpy_state._nest_network.projections._SparseEventMatMul` convention), an :class:`~brainpy_state._brainpy._delay.InputDelay` axonal delay seam, rule-declared per-edge / per-neuron :class:`brainstate.State` allocation, and the ``brainevent.CSR`` event matmul that delivers weighted spikes into @@ -31,7 +31,7 @@ import brainunit as u from brainpy_state._brainpy._delay import InputDelay -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection __all__ = ['EventPlasticProj', 'VoltageCoupledPlasticProj', 'KernelContext', 'PlasticSynapse'] @@ -220,7 +220,7 @@ class EventPlasticProj(brainstate.nn.Module): .. code-block:: python >>> import jax.numpy as jnp, brainstate, brainunit as u - >>> from brainpy_state._nest_network._event_plastic import EventPlasticProj, _StaticTestRule + >>> from brainpy_state._nest_network.event_plastic import EventPlasticProj, _StaticTestRule >>> class _Sink: ... def add_delta_input(self, key, val): self.last = val >>> sink = _Sink() @@ -525,7 +525,7 @@ def realized_edges(self): Reads the live (post-simulation evolved) ``weight`` State when allocated, else the pre-simulation init. A weight-evolving rule exposes no weight write-back. See - :func:`~brainpy_state._nest_network._connection_introspection.plastic_proj_edges`. + :func:`~brainpy_state._nest_network.connection_introspection.plastic_proj_edges`. Returns ------- @@ -533,7 +533,7 @@ def realized_edges(self): Population-local ``source`` / ``target`` plus live ``weight`` / ``delay`` in the canonical edge order. """ - from brainpy_state._nest_network._connection_introspection import plastic_proj_edges + from brainpy_state._nest_network.connection_introspection import plastic_proj_edges return plastic_proj_edges(self) @@ -562,7 +562,7 @@ class VoltageCoupledPlasticProj(EventPlasticProj): .. code-block:: python >>> import jax.numpy as jnp, brainstate, brainunit as u - >>> from brainpy_state._nest_network._event_plastic import ( + >>> from brainpy_state._nest_network.event_plastic import ( ... VoltageCoupledPlasticProj, _StaticTestRule) >>> class _Post: ... def __init__(self): self.V = type('S', (), {'value': jnp.array([3.]) * u.mV})() diff --git a/brainpy_state/_nest_network/_event_plastic_mc_channel_test.py b/brainpy_state/_nest_network/event_plastic_mc_channel_test.py similarity index 98% rename from brainpy_state/_nest_network/_event_plastic_mc_channel_test.py rename to brainpy_state/_nest_network/event_plastic_mc_channel_test.py index fd652b16..c448783c 100644 --- a/brainpy_state/_nest_network/_event_plastic_mc_channel_test.py +++ b/brainpy_state/_nest_network/event_plastic_mc_channel_test.py @@ -23,9 +23,9 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) -from brainpy_state._nest_network._event_plastic import ( +from brainpy_state._nest_network.event_plastic import ( EventPlasticProj, VoltageCoupledPlasticProj, _StaticTestRule) diff --git a/brainpy_state/_nest_network/_event_plastic_test.py b/brainpy_state/_nest_network/event_plastic_test.py similarity index 99% rename from brainpy_state/_nest_network/_event_plastic_test.py rename to brainpy_state/_nest_network/event_plastic_test.py index b643f63a..490a6d1c 100644 --- a/brainpy_state/_nest_network/_event_plastic_test.py +++ b/brainpy_state/_nest_network/event_plastic_test.py @@ -16,17 +16,17 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainstate import transform # noqa: E402 -from brainpy_state._nest_network._event_plastic import ( # noqa: E402 +from brainpy_state._nest_network.event_plastic import ( # noqa: E402 EventPlasticProj, VoltageCoupledPlasticProj, KernelContext, _StaticTestRule, ) -from brainpy_state._nest_network._rules import all_to_all # noqa: E402 +from brainpy_state._nest_network.rules import all_to_all # noqa: E402 def _ctx(E, t=1.0, dt=0.1): diff --git a/brainpy_state/_nest_network/_event_proj.py b/brainpy_state/_nest_network/event_proj.py similarity index 97% rename from brainpy_state/_nest_network/_event_proj.py rename to brainpy_state/_nest_network/event_proj.py index ab79d621..6e7d77b3 100644 --- a/brainpy_state/_nest_network/_event_proj.py +++ b/brainpy_state/_nest_network/event_proj.py @@ -18,10 +18,10 @@ import brainunit as u from brainpy_state._brainpy._delay import InputDelay -from brainpy_state._nest_network._connectivity import resolve_param -from brainpy_state._nest_network._nodeview import _flat_size -from brainpy_state._nest_network._projections import _DenseMatMul, _ReceptorScatter, _SparseEventMatMul -from brainpy_state._nest_network._rules import ConnRule, _OneToOne +from brainpy_state._nest_network.connectivity import resolve_param +from brainpy_state._nest_network.nodeview import _flat_size +from brainpy_state._nest_network.projections import _DenseMatMul, _ReceptorScatter, _SparseEventMatMul +from brainpy_state._nest_network.rules import ConnRule, _OneToOne __all__ = ['EventProjection'] @@ -345,7 +345,7 @@ def realized_edges(self): ProjEdges Population-local ``source`` / ``target`` plus live ``weight`` / ``delay`` in the canonical edge order, with guarded write-back hooks. See - :func:`~brainpy_state._nest_network._connection_introspection.event_proj_edges`. + :func:`~brainpy_state._nest_network.connection_introspection.event_proj_edges`. """ - from brainpy_state._nest_network._connection_introspection import event_proj_edges + from brainpy_state._nest_network.connection_introspection import event_proj_edges return event_proj_edges(self) diff --git a/brainpy_state/_nest_network/_event_proj_current_test.py b/brainpy_state/_nest_network/event_proj_current_test.py similarity index 98% rename from brainpy_state/_nest_network/_event_proj_current_test.py rename to brainpy_state/_nest_network/event_proj_current_test.py index eaa45d27..f2edcbbf 100644 --- a/brainpy_state/_nest_network/_event_proj_current_test.py +++ b/brainpy_state/_nest_network/event_proj_current_test.py @@ -30,11 +30,11 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._base import Dynamics from brainpy_state._nest_network import all_to_all, one_to_one -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection class _Box: diff --git a/brainpy_state/_nest_network/_event_proj_mc_channel_test.py b/brainpy_state/_nest_network/event_proj_mc_channel_test.py similarity index 98% rename from brainpy_state/_nest_network/_event_proj_mc_channel_test.py rename to brainpy_state/_nest_network/event_proj_mc_channel_test.py index bea4cc90..a93ae96e 100644 --- a/brainpy_state/_nest_network/_event_proj_mc_channel_test.py +++ b/brainpy_state/_nest_network/event_proj_mc_channel_test.py @@ -21,10 +21,10 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_network import all_to_all, one_to_one -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection class _Box: diff --git a/brainpy_state/_nest_network/_event_proj_receptor_test.py b/brainpy_state/_nest_network/event_proj_receptor_test.py similarity index 99% rename from brainpy_state/_nest_network/_event_proj_receptor_test.py rename to brainpy_state/_nest_network/event_proj_receptor_test.py index 07d61c00..240c17a2 100644 --- a/brainpy_state/_nest_network/_event_proj_receptor_test.py +++ b/brainpy_state/_nest_network/event_proj_receptor_test.py @@ -24,10 +24,10 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_network import all_to_all, one_to_one -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection class _Box: diff --git a/brainpy_state/_nest_network/_event_proj_test.py b/brainpy_state/_nest_network/event_proj_test.py similarity index 96% rename from brainpy_state/_nest_network/_event_proj_test.py rename to brainpy_state/_nest_network/event_proj_test.py index 892b150c..41908f66 100644 --- a/brainpy_state/_nest_network/_event_proj_test.py +++ b/brainpy_state/_nest_network/event_proj_test.py @@ -8,11 +8,11 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import iaf_psc_alpha from brainpy_state._nest_network import one_to_one, fixed_indegree -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection class _Box: diff --git a/brainpy_state/_nest_network/_nodeview.py b/brainpy_state/_nest_network/nodeview.py similarity index 96% rename from brainpy_state/_nest_network/_nodeview.py rename to brainpy_state/_nest_network/nodeview.py index 7ddc4e22..7d206c8f 100644 --- a/brainpy_state/_nest_network/_nodeview.py +++ b/brainpy_state/_nest_network/nodeview.py @@ -13,7 +13,7 @@ def _flat_size(module) -> int: """Total number of elements along a population/device neuron dimension. - Mirrors ``brainpy_state._nest_network._projections._size`` (``in_size`` first, + Mirrors ``brainpy_state._nest_network.projections._size`` (``in_size`` first, falling back to ``varshape``) so the network layer agrees on one notion of population size. """ diff --git a/brainpy_state/_nest_network/_nodeview_test.py b/brainpy_state/_nest_network/nodeview_test.py similarity index 100% rename from brainpy_state/_nest_network/_nodeview_test.py rename to brainpy_state/_nest_network/nodeview_test.py diff --git a/brainpy_state/_nest_network/_projections.py b/brainpy_state/_nest_network/projections.py similarity index 99% rename from brainpy_state/_nest_network/_projections.py rename to brainpy_state/_nest_network/projections.py index 9b390bdb..acb48491 100644 --- a/brainpy_state/_nest_network/_projections.py +++ b/brainpy_state/_nest_network/projections.py @@ -13,7 +13,7 @@ from brainpy_state._base import Dynamics from brainpy_state._brainpy.projection import AlignPostProj -from brainpy_state._nest_network._connectivity import ( +from brainpy_state._nest_network.connectivity import ( ConnSpec, sample_one_to_one, sample_all_to_all, diff --git a/brainpy_state/_nest_network/_projections_test.py b/brainpy_state/_nest_network/projections_test.py similarity index 98% rename from brainpy_state/_nest_network/_projections_test.py rename to brainpy_state/_nest_network/projections_test.py index 46037022..dac5e5db 100644 --- a/brainpy_state/_nest_network/_projections_test.py +++ b/brainpy_state/_nest_network/projections_test.py @@ -6,7 +6,7 @@ import brainunit as u from brainpy_state import LIF, Expon, COBA -from brainpy_state._nest_network._projections import _RuleProj, OneToOneProj +from brainpy_state._nest_network.projections import _RuleProj, OneToOneProj class TestRuleProjBase(unittest.TestCase): @@ -69,7 +69,7 @@ def test_delay_raises_until_implemented(self): ) -from brainpy_state._nest_network._projections import ( +from brainpy_state._nest_network.projections import ( AllToAllProj, PairwiseBernoulliProj, SymmetricPairwiseBernoulliProj, FixedIndegreeProj, FixedOutdegreeProj, diff --git a/brainpy_state/_nest_network/_recordable_alias_test.py b/brainpy_state/_nest_network/recordable_alias_test.py similarity index 99% rename from brainpy_state/_nest_network/_recordable_alias_test.py rename to brainpy_state/_nest_network/recordable_alias_test.py index 043f1f8d..2716c4a5 100644 --- a/brainpy_state/_nest_network/_recordable_alias_test.py +++ b/brainpy_state/_nest_network/recordable_alias_test.py @@ -17,7 +17,7 @@ import numpy as np import numpy.testing as npt -from brainpy_state._nest_network._simulator import _read_recordable +from brainpy_state._nest_network.simulator import _read_recordable class _FakeState: diff --git a/brainpy_state/_nest_network/_recorders.py b/brainpy_state/_nest_network/recorders.py similarity index 100% rename from brainpy_state/_nest_network/_recorders.py rename to brainpy_state/_nest_network/recorders.py diff --git a/brainpy_state/_nest_network/_recorders_test.py b/brainpy_state/_nest_network/recorders_test.py similarity index 94% rename from brainpy_state/_nest_network/_recorders_test.py rename to brainpy_state/_nest_network/recorders_test.py index ed30e7a7..06f7b3f3 100644 --- a/brainpy_state/_nest_network/_recorders_test.py +++ b/brainpy_state/_nest_network/recorders_test.py @@ -6,8 +6,8 @@ import brainunit as u from brainpy_state import LIF -from brainpy_state._nest_network._base import Network -from brainpy_state._nest_network._recorders import Recorder +from brainpy_state._nest_network.base import Network +from brainpy_state._nest_network.recorders import Recorder class TestRecorder(unittest.TestCase): diff --git a/brainpy_state/_nest_network/_rules.py b/brainpy_state/_nest_network/rules.py similarity index 96% rename from brainpy_state/_nest_network/_rules.py rename to brainpy_state/_nest_network/rules.py index f753c6e5..083062b1 100644 --- a/brainpy_state/_nest_network/_rules.py +++ b/brainpy_state/_nest_network/rules.py @@ -5,7 +5,7 @@ import jax import jax.numpy as jnp -from brainpy_state._nest_network._connectivity import ( +from brainpy_state._nest_network.connectivity import ( ConnSpec, sample_all_to_all, sample_one_to_one, @@ -25,7 +25,7 @@ class ConnRule: """Base class for connection rules. A rule maps ``(n_pre, n_post)`` plus sampling flags to a - :class:`~brainpy_state._nest_network._connectivity.ConnSpec` of edge indices. + :class:`~brainpy_state._nest_network.connectivity.ConnSpec` of edge indices. """ __module__ = 'brainpy.state' @@ -119,9 +119,9 @@ def fixed_total_number(N: int) -> _FixedTotalNumber: class _ExplicitEdges(ConnRule): """A rule that returns a *precomputed* :class:`ConnSpec`, ignoring sampling args. - Lets :meth:`~brainpy_state._nest_network._simulator.Simulator.tripartite_connect` + Lets :meth:`~brainpy_state._nest_network.simulator.Simulator.tripartite_connect` feed a single shared edge sample into the existing - :class:`~brainpy_state._nest_network._event_proj.EventProjection` / + :class:`~brainpy_state._nest_network.event_proj.EventProjection` / ``_connect_pair`` / ``_connect_sic`` paths -- which would otherwise re-sample their own connectivity from ``(rule, seed)``. ``sample`` returns the wrapped spec verbatim, so the key / autapse / multapse flags (already applied when the @@ -212,7 +212,7 @@ class _ThirdFactorBernoulliWithPool: (astro->post) edge sets via :func:`build_pool_map` + :func:`sample_third_factor_pairing`. Built by :func:`third_factor_bernoulli_with_pool` and consumed by - :meth:`~brainpy_state._nest_network._simulator.Simulator.tripartite_connect`. + :meth:`~brainpy_state._nest_network.simulator.Simulator.tripartite_connect`. """ __module__ = 'brainpy.state' @@ -255,7 +255,7 @@ def third_factor_bernoulli_with_pool(*, p: float, pool_size: int, pool_type: str """Return a ``third_factor_bernoulli_with_pool`` spec (NEST tripartite astro-pool rule). Used as the ``third_factor_conn_spec`` of - :meth:`~brainpy_state._nest_network._simulator.Simulator.tripartite_connect`: for + :meth:`~brainpy_state._nest_network.simulator.Simulator.tripartite_connect`: for each realized primary ``pre->post`` edge, an independent Bernoulli(``p``) trial decides whether it is paired with one astrocyte drawn from the target neuron's pool of ``pool_size`` astrocytes. diff --git a/brainpy_state/_nest_network/_rules_test.py b/brainpy_state/_nest_network/rules_test.py similarity index 98% rename from brainpy_state/_nest_network/_rules_test.py rename to brainpy_state/_nest_network/rules_test.py index 77d1d9f9..235de357 100644 --- a/brainpy_state/_nest_network/_rules_test.py +++ b/brainpy_state/_nest_network/rules_test.py @@ -8,15 +8,15 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import Simulator, iaf_psc_exp from brainpy_state._nest_network import ( all_to_all, one_to_one, fixed_indegree, pairwise_bernoulli, fixed_total_number, third_factor_bernoulli_with_pool, explicit_edges, ) -from brainpy_state._nest_network._connectivity import ConnSpec -from brainpy_state._nest_network._rules import _ExplicitEdges +from brainpy_state._nest_network.connectivity import ConnSpec +from brainpy_state._nest_network.rules import _ExplicitEdges class TestRules(unittest.TestCase): diff --git a/brainpy_state/_nest_network/_simulator.py b/brainpy_state/_nest_network/simulator.py similarity index 99% rename from brainpy_state/_nest_network/_simulator.py rename to brainpy_state/_nest_network/simulator.py index ab86f065..c06d1a92 100644 --- a/brainpy_state/_nest_network/_simulator.py +++ b/brainpy_state/_nest_network/simulator.py @@ -31,10 +31,10 @@ from brainpy_state._nest_device.spike_recorder import spike_recorder as _spike_recorder from brainpy_state._nest_device.step_current_generator import step_current_generator as _step_current_generator from brainpy_state._nest_device.volume_transmitter import volume_transmitter as _volume_transmitter -from brainpy_state._nest_network._event_plastic import EventPlasticProj, VoltageCoupledPlasticProj -from brainpy_state._nest_network._event_proj import EventProjection -from brainpy_state._nest_network._nodeview import NodeView, _Segment, _flat_size -from brainpy_state._nest_network._rules import all_to_all, one_to_one, _ExplicitEdges +from brainpy_state._nest_network.event_plastic import EventPlasticProj, VoltageCoupledPlasticProj +from brainpy_state._nest_network.event_proj import EventProjection +from brainpy_state._nest_network.nodeview import NodeView, _Segment, _flat_size +from brainpy_state._nest_network.rules import all_to_all, one_to_one, _ExplicitEdges __all__ = ['Simulator', 'SimulationResult'] @@ -710,14 +710,14 @@ def tripartite_connect(self, pre: NodeView, post: NodeView, third: NodeView, *, 1. **primary** ``pre -> post`` (the direct synapse, ``syn_specs['primary']``). 2. For each realized primary edge ``(pre_i -> post_j)``, the - ``third_factor_conn_spec`` (:func:`~brainpy_state._nest_network._rules.third_factor_bernoulli_with_pool`) + ``third_factor_conn_spec`` (:func:`~brainpy_state._nest_network.rules.third_factor_bernoulli_with_pool`) runs a Bernoulli(``p``) trial; if it succeeds the edge is paired with one astrocyte drawn from ``post_j``'s pool, creating **third_in** ``pre_i -> astro`` (``syn_specs['third_in']``, delta IP3) and **third_out** ``astro -> post_j`` (``syn_specs['third_out']``, a :class:`~brainpy_state.sic_connection`). - Reuses the existing static :class:`~brainpy_state._nest_network._event_proj.EventProjection` + Reuses the existing static :class:`~brainpy_state._nest_network.event_proj.EventProjection` path for primary + third_in and the merged ``sic_connection`` (``as_current``) path for third_out; no new deposit primitive. Each arm is registered for :meth:`get_connections`. @@ -815,7 +815,7 @@ def _connect_tripartite_arm(self, pre_seg, post_seg, spec, syn_spec, seed, comm) """Wire one tripartite arm from an explicit (shared) edge ``spec``. Delegates to :meth:`_connect_pair` with an - :class:`~brainpy_state._nest_network._rules._ExplicitEdges` rule so the projection + :class:`~brainpy_state._nest_network.rules._ExplicitEdges` rule so the projection uses the *precomputed* edges instead of re-sampling, threading the arm's ``syn_spec`` (``weight`` / ``delay`` / ``receptor_type`` / ``synapse``). """ @@ -828,11 +828,11 @@ def _connect_tripartite_arm(self, pre_seg, post_seg, spec, syn_spec, seed, comm) def get_connections(self, source=None, target=None, synapse=None): """Enumerate realized synapses across projections (NEST ``GetConnections``). - Returns a :class:`~brainpy_state._nest_network._connection_introspection.SynapseCollection` + Returns a :class:`~brainpy_state._nest_network.connection_introspection.SynapseCollection` over the edges matching the filters, letting you read and write weights / delays **without holding each projection handle**. The collection is a lazy view: weights and delays are re-read from the live projections on each - :meth:`~brainpy_state._nest_network._connection_introspection.SynapseCollection.get`, + :meth:`~brainpy_state._nest_network.connection_introspection.SynapseCollection.get`, so a query made before :meth:`simulate` still reflects post-simulation evolved plastic weights. @@ -874,7 +874,7 @@ def get_connections(self, source=None, target=None, synapse=None): >>> bool(u.math.allclose(conns.get('weight'), 20. * u.pA)) True """ - from brainpy_state._nest_network._connection_introspection import collect_connections + from brainpy_state._nest_network.connection_introspection import collect_connections return collect_connections(self._connections, source, target, synapse) def record_weight(self, proj): diff --git a/brainpy_state/_nest_network/_simulator_analog_test.py b/brainpy_state/_nest_network/simulator_analog_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_analog_test.py rename to brainpy_state/_nest_network/simulator_analog_test.py index d88d1bd9..fbe79480 100644 --- a/brainpy_state/_nest_network/_simulator_analog_test.py +++ b/brainpy_state/_nest_network/simulator_analog_test.py @@ -10,7 +10,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import iaf_psc_alpha, voltmeter, multimeter from brainpy_state._nest_network import Simulator diff --git a/brainpy_state/_nest_network/_simulator_bw_receptor_test.py b/brainpy_state/_nest_network/simulator_bw_receptor_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_bw_receptor_test.py rename to brainpy_state/_nest_network/simulator_bw_receptor_test.py index 67a2df41..d5785a57 100644 --- a/brainpy_state/_nest_network/_simulator_bw_receptor_test.py +++ b/brainpy_state/_nest_network/simulator_bw_receptor_test.py @@ -16,7 +16,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_network/_simulator_cont_test.py b/brainpy_state/_nest_network/simulator_cont_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_cont_test.py rename to brainpy_state/_nest_network/simulator_cont_test.py index 0e4891a6..32fad73d 100644 --- a/brainpy_state/_nest_network/_simulator_cont_test.py +++ b/brainpy_state/_nest_network/simulator_cont_test.py @@ -25,7 +25,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import iaf_psc_alpha, voltmeter, spike_recorder from brainpy_state._nest_network import Simulator diff --git a/brainpy_state/_nest_network/_simulator_current_test.py b/brainpy_state/_nest_network/simulator_current_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_current_test.py rename to brainpy_state/_nest_network/simulator_current_test.py index 94c18f52..88cf2536 100644 --- a/brainpy_state/_nest_network/_simulator_current_test.py +++ b/brainpy_state/_nest_network/simulator_current_test.py @@ -9,7 +9,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (iaf_psc_alpha, voltmeter, dc_generator, step_current_generator, noise_generator) diff --git a/brainpy_state/_nest_network/_simulator_dopamine_test.py b/brainpy_state/_nest_network/simulator_dopamine_test.py similarity index 97% rename from brainpy_state/_nest_network/_simulator_dopamine_test.py rename to brainpy_state/_nest_network/simulator_dopamine_test.py index da3ce6a9..226cfd84 100644 --- a/brainpy_state/_nest_network/_simulator_dopamine_test.py +++ b/brainpy_state/_nest_network/simulator_dopamine_test.py @@ -17,7 +17,7 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import pytest @@ -26,7 +26,7 @@ stdp_dopamine_synapse, tsodyks2_synapse, volume_transmitter, ) from brainpy_state._nest_device.volume_transmitter import volume_transmitter as _vt_cls -from brainpy_state._nest_network._event_plastic import EventPlasticProj, VoltageCoupledPlasticProj +from brainpy_state._nest_network.event_plastic import EventPlasticProj, VoltageCoupledPlasticProj def _children(sim): diff --git a/brainpy_state/_nest_network/_simulator_gap_test.py b/brainpy_state/_nest_network/simulator_gap_test.py similarity index 98% rename from brainpy_state/_nest_network/_simulator_gap_test.py rename to brainpy_state/_nest_network/simulator_gap_test.py index 0746b13f..5627a002 100644 --- a/brainpy_state/_nest_network/_simulator_gap_test.py +++ b/brainpy_state/_nest_network/simulator_gap_test.py @@ -26,13 +26,13 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (hh_psc_alpha_gap, hh_cond_beta_gap_traub, iaf_psc_alpha, voltmeter, Simulator, all_to_all, one_to_one) from brainpy_state._nest_synapse.gap_junction import gap_junction from brainpy_state._nest_neuron.hh_psc_alpha_gap import _hh_psc_alpha_gap_equilibrium -from brainpy_state._nest_network._simulator import Simulator as _Sim +from brainpy_state._nest_network.simulator import Simulator as _Sim def _resting_gating(): @@ -255,7 +255,7 @@ class TestGapBehavior(unittest.TestCase): def setUp(self): import jax as _jax _jax.clear_caches() - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def _two_neuron_sim(self, v0=-10.0, v1=None, g=0.5, t=150.0, resting_gating=False): v1 = hh_psc_alpha_gap._NEST_V_INIT if v1 is None else v1 diff --git a/brainpy_state/_nest_network/_simulator_mc_routing_test.py b/brainpy_state/_nest_network/simulator_mc_routing_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_mc_routing_test.py rename to brainpy_state/_nest_network/simulator_mc_routing_test.py index b6070cb6..a7e0594b 100644 --- a/brainpy_state/_nest_network/_simulator_mc_routing_test.py +++ b/brainpy_state/_nest_network/simulator_mc_routing_test.py @@ -20,7 +20,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (Simulator, iaf_cond_alpha_mc, spike_generator, dc_generator, multimeter) diff --git a/brainpy_state/_nest_network/_simulator_plastic_test.py b/brainpy_state/_nest_network/simulator_plastic_test.py similarity index 98% rename from brainpy_state/_nest_network/_simulator_plastic_test.py rename to brainpy_state/_nest_network/simulator_plastic_test.py index 787abbcd..ad32ee70 100644 --- a/brainpy_state/_nest_network/_simulator_plastic_test.py +++ b/brainpy_state/_nest_network/simulator_plastic_test.py @@ -8,7 +8,7 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import pytest @@ -17,8 +17,8 @@ iaf_psc_exp, multimeter, quantal_stp_synapse, spike_generator, spike_recorder, static_synapse, tsodyks2_synapse, vogels_sprekeler_synapse, ) -from brainpy_state._nest_network._event_plastic import EventPlasticProj, VoltageCoupledPlasticProj -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_plastic import EventPlasticProj, VoltageCoupledPlasticProj +from brainpy_state._nest_network.event_proj import EventProjection def _children(sim): diff --git a/brainpy_state/_nest_network/_simulator_sic_test.py b/brainpy_state/_nest_network/simulator_sic_test.py similarity index 97% rename from brainpy_state/_nest_network/_simulator_sic_test.py rename to brainpy_state/_nest_network/simulator_sic_test.py index e521d672..600533d4 100644 --- a/brainpy_state/_nest_network/_simulator_sic_test.py +++ b/brainpy_state/_nest_network/simulator_sic_test.py @@ -20,12 +20,12 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (aeif_cond_alpha_astro, astrocyte_lr_1994, sic_connection, multimeter, iaf_psc_alpha) from brainpy_state._nest_network import Simulator -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection def _trace(res, rec, name): diff --git a/brainpy_state/_nest_network/_simulator_spatial_test.py b/brainpy_state/_nest_network/simulator_spatial_test.py similarity index 100% rename from brainpy_state/_nest_network/_simulator_spatial_test.py rename to brainpy_state/_nest_network/simulator_spatial_test.py diff --git a/brainpy_state/_nest_network/_simulator_stp_emission_test.py b/brainpy_state/_nest_network/simulator_stp_emission_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_stp_emission_test.py rename to brainpy_state/_nest_network/simulator_stp_emission_test.py index aacf6be7..bc590347 100644 --- a/brainpy_state/_nest_network/_simulator_stp_emission_test.py +++ b/brainpy_state/_nest_network/simulator_stp_emission_test.py @@ -126,7 +126,7 @@ def _best_aligned_residual(ref, cand, max_shift=2): class TestStpEmissionSeam(unittest.TestCase): def setUp(self): jax.config.update('jax_enable_x64', True) - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_stp_emission_matches_three_phase_reference(self): # The Simulator's receptor_type=1 delivery reproduces the validated manual diff --git a/brainpy_state/_nest_network/_simulator_sweep_test.py b/brainpy_state/_nest_network/simulator_sweep_test.py similarity index 98% rename from brainpy_state/_nest_network/_simulator_sweep_test.py rename to brainpy_state/_nest_network/simulator_sweep_test.py index 307f39ab..83fee888 100644 --- a/brainpy_state/_nest_network/_simulator_sweep_test.py +++ b/brainpy_state/_nest_network/simulator_sweep_test.py @@ -20,7 +20,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (iaf_psc_alpha, voltmeter, spike_recorder, dc_generator) from brainpy_state._nest_network import Simulator diff --git a/brainpy_state/_nest_network/_simulator_test.py b/brainpy_state/_nest_network/simulator_test.py similarity index 99% rename from brainpy_state/_nest_network/_simulator_test.py rename to brainpy_state/_nest_network/simulator_test.py index f6e7dc1f..2584429b 100644 --- a/brainpy_state/_nest_network/_simulator_test.py +++ b/brainpy_state/_nest_network/simulator_test.py @@ -8,7 +8,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import iaf_psc_alpha, poisson_generator, spike_recorder from brainpy_state._nest_network import Simulator, fixed_indegree, all_to_all diff --git a/brainpy_state/_nest_network/_simulator_tripartite_test.py b/brainpy_state/_nest_network/simulator_tripartite_test.py similarity index 98% rename from brainpy_state/_nest_network/_simulator_tripartite_test.py rename to brainpy_state/_nest_network/simulator_tripartite_test.py index 4b6c4892..31bbc4e0 100644 --- a/brainpy_state/_nest_network/_simulator_tripartite_test.py +++ b/brainpy_state/_nest_network/simulator_tripartite_test.py @@ -18,14 +18,14 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (aeif_cond_alpha_astro, astrocyte_lr_1994, sic_connection, multimeter, pairwise_bernoulli, all_to_all, third_factor_bernoulli_with_pool, poisson_generator) from brainpy_state._nest_network import Simulator -from brainpy_state._nest_network._event_proj import EventProjection +from brainpy_state._nest_network.event_proj import EventProjection def _syn_specs(w_primary=1.0, w_third_in=1.0, w_a2n=1.0, delay=0.1, sic_delay_steps=10): diff --git a/brainpy_state/_nest_network/_simulator_urbanczik_routing_test.py b/brainpy_state/_nest_network/simulator_urbanczik_routing_test.py similarity index 97% rename from brainpy_state/_nest_network/_simulator_urbanczik_routing_test.py rename to brainpy_state/_nest_network/simulator_urbanczik_routing_test.py index ceb1eeae..9acf1573 100644 --- a/brainpy_state/_nest_network/_simulator_urbanczik_routing_test.py +++ b/brainpy_state/_nest_network/simulator_urbanczik_routing_test.py @@ -21,12 +21,12 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (Simulator, pp_cond_exp_mc_urbanczik, spike_generator, parrot_neuron, static_synapse) from brainpy_state._nest_neuron.pp_cond_exp_mc_urbanczik import SOMA_EXC, DEND_EXC -from brainpy_state._nest_network._event_plastic import ( +from brainpy_state._nest_network.event_plastic import ( EventPlasticProj, VoltageCoupledPlasticProj) DT = 0.1 diff --git a/brainpy_state/_nest_network/_simulator_weightvec_test.py b/brainpy_state/_nest_network/simulator_weightvec_test.py similarity index 97% rename from brainpy_state/_nest_network/_simulator_weightvec_test.py rename to brainpy_state/_nest_network/simulator_weightvec_test.py index 35944340..02b80ccc 100644 --- a/brainpy_state/_nest_network/_simulator_weightvec_test.py +++ b/brainpy_state/_nest_network/simulator_weightvec_test.py @@ -15,11 +15,11 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import iaf_psc_alpha, poisson_generator, voltmeter from brainpy_state._nest_network import Simulator -from brainpy_state._nest_network._simulator import ( +from brainpy_state._nest_network.simulator import ( _n_channels, _is_len_vector, _index_channel) # A neuron that never spikes (V_th unreachable): pure subthreshold integration so diff --git a/brainpy_state/_nest_network/_voltage_coupled_plastic_test.py b/brainpy_state/_nest_network/voltage_coupled_plastic_test.py similarity index 98% rename from brainpy_state/_nest_network/_voltage_coupled_plastic_test.py rename to brainpy_state/_nest_network/voltage_coupled_plastic_test.py index 10017743..c664bd79 100644 --- a/brainpy_state/_nest_network/_voltage_coupled_plastic_test.py +++ b/brainpy_state/_nest_network/voltage_coupled_plastic_test.py @@ -20,9 +20,9 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) -from brainpy_state._nest_network._event_plastic import ( # noqa: E402 +from brainpy_state._nest_network.event_plastic import ( # noqa: E402 EventPlasticProj, VoltageCoupledPlasticProj, _StaticTestRule, @@ -236,7 +236,7 @@ def test_grad_flows_through_post_state_reads(): def loss(vscale): # probe gradient of the read path w.r.t. a scaling of the post voltage read - from brainpy_state._nest_network._event_plastic import KernelContext + from brainpy_state._nest_network.event_plastic import KernelContext ctx = KernelContext( pre_spike=jnp.ones(1), post_spike=jnp.zeros(1), pre_trace=jnp.zeros(1), post_trace=jnp.zeros(1), t_now=jnp.asarray(0.0), dt=jnp.asarray(0.1), diff --git a/brainpy_state/_nest_network/_weight_recorder_view.py b/brainpy_state/_nest_network/weight_recorder_view.py similarity index 100% rename from brainpy_state/_nest_network/_weight_recorder_view.py rename to brainpy_state/_nest_network/weight_recorder_view.py diff --git a/brainpy_state/_nest_network/_weight_recorder_view_test.py b/brainpy_state/_nest_network/weight_recorder_view_test.py similarity index 98% rename from brainpy_state/_nest_network/_weight_recorder_view_test.py rename to brainpy_state/_nest_network/weight_recorder_view_test.py index ff840424..527361da 100644 --- a/brainpy_state/_nest_network/_weight_recorder_view_test.py +++ b/brainpy_state/_nest_network/weight_recorder_view_test.py @@ -3,7 +3,7 @@ import numpy as np import pytest -from brainpy_state._nest_network._weight_recorder_view import ( +from brainpy_state._nest_network.weight_recorder_view import ( send_steps_from_pre, weight_recorder_events, ) diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha.py b/brainpy_state/_nest_neuron/aeif_cond_alpha.py index d9c0e26b..35dc648a 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_cond_alpha', diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha_astro.py b/brainpy_state/_nest_neuron/aeif_cond_alpha_astro.py index 1ef0d2df..64e1aa52 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha_astro.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha_astro.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_cond_alpha_astro', @@ -122,7 +122,7 @@ class aeif_cond_alpha_astro(NESTNeuron): **4. SIC delivery semantics** The astrocyte slow-inward current (SIC) is delivered on the JAX substrate by - a :class:`~brainpy_state._nest_network._event_proj.EventProjection` — the + a :class:`~brainpy_state._nest_network.event_proj.EventProjection` — the ``sic_connection`` — that deposits ``weight·SIC`` into this neuron's labelled ``'I_SIC'`` *current* channel each step (``add_current_input``). Each :meth:`update` reads (and pops) that channel **before** the unlabelled @@ -672,7 +672,7 @@ def update(self, x=0.0 * u.pA, w_by_rec=None): r"""Advance the neuron by one simulation step. The astrocyte slow-inward current (SIC) is delivered by a - :class:`~brainpy_state._nest_network._event_proj.EventProjection` (the + :class:`~brainpy_state._nest_network.event_proj.EventProjection` (the ``sic_connection``) that deposits ``weight·SIC`` into this neuron's labelled ``'I_SIC'`` *current* channel each step. ``update`` reads (and pops) that channel, stores it into ``I_sic`` (pA) for the next step — a one-step delay, diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha_astro_test.py b/brainpy_state/_nest_neuron/aeif_cond_alpha_astro_test.py index d6591d13..efc384ca 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha_astro_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha_astro_test.py @@ -31,7 +31,7 @@ from brainpy_state import aeif_cond_alpha_astro jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _rhs(y, is_refractory, i_stim, i_sic, p): diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse.py b/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse.py index 11e289be..c081f05c 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_cond_alpha_multisynapse', diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse_test.py b/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse_test.py index f5addfd9..6eb8a7dd 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha_multisynapse_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_cond_alpha_multisynapse diff --git a/brainpy_state/_nest_neuron/aeif_cond_alpha_test.py b/brainpy_state/_nest_neuron/aeif_cond_alpha_test.py index d3875f88..3d67c1a0 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_alpha_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_alpha_test.py @@ -28,7 +28,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_cond_alpha diff --git a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse.py b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse.py index 6ccb0ba4..f3150644 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse.py +++ b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_cond_beta_multisynapse', diff --git a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_test.py b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_test.py index f4e3a448..dce9510d 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_cond_beta_multisynapse diff --git a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_wbyrec_test.py b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_wbyrec_test.py index 43593a9e..8215d720 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_wbyrec_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_beta_multisynapse_wbyrec_test.py @@ -22,7 +22,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import aeif_cond_beta_multisynapse, iaf_psc_exp_multisynapse diff --git a/brainpy_state/_nest_neuron/aeif_cond_exp.py b/brainpy_state/_nest_neuron/aeif_cond_exp.py index 84bd1d82..833a3b55 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_exp.py +++ b/brainpy_state/_nest_neuron/aeif_cond_exp.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'aeif_cond_exp', diff --git a/brainpy_state/_nest_neuron/aeif_cond_exp_test.py b/brainpy_state/_nest_neuron/aeif_cond_exp_test.py index bddc971f..7d5a0faf 100644 --- a/brainpy_state/_nest_neuron/aeif_cond_exp_test.py +++ b/brainpy_state/_nest_neuron/aeif_cond_exp_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_cond_exp diff --git a/brainpy_state/_nest_neuron/aeif_psc_alpha.py b/brainpy_state/_nest_neuron/aeif_psc_alpha.py index 6dc298b7..1b7aebe7 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_alpha.py +++ b/brainpy_state/_nest_neuron/aeif_psc_alpha.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_psc_alpha', diff --git a/brainpy_state/_nest_neuron/aeif_psc_alpha_test.py b/brainpy_state/_nest_neuron/aeif_psc_alpha_test.py index e95b8755..715990f8 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_alpha_test.py +++ b/brainpy_state/_nest_neuron/aeif_psc_alpha_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_psc_alpha diff --git a/brainpy_state/_nest_neuron/aeif_psc_delta.py b/brainpy_state/_nest_neuron/aeif_psc_delta.py index e9e4ee46..bbe33b6a 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_delta.py +++ b/brainpy_state/_nest_neuron/aeif_psc_delta.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_psc_delta', diff --git a/brainpy_state/_nest_neuron/aeif_psc_delta_clopath.py b/brainpy_state/_nest_neuron/aeif_psc_delta_clopath.py index a40a8b0f..c97ceaae 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_delta_clopath.py +++ b/brainpy_state/_nest_neuron/aeif_psc_delta_clopath.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_psc_delta_clopath', diff --git a/brainpy_state/_nest_neuron/aeif_psc_delta_clopath_test.py b/brainpy_state/_nest_neuron/aeif_psc_delta_clopath_test.py index 32c3e370..e4b817c4 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_delta_clopath_test.py +++ b/brainpy_state/_nest_neuron/aeif_psc_delta_clopath_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_psc_delta_clopath diff --git a/brainpy_state/_nest_neuron/aeif_psc_delta_test.py b/brainpy_state/_nest_neuron/aeif_psc_delta_test.py index 34d07650..c11f77c9 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_delta_test.py +++ b/brainpy_state/_nest_neuron/aeif_psc_delta_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_psc_delta diff --git a/brainpy_state/_nest_neuron/aeif_psc_exp.py b/brainpy_state/_nest_neuron/aeif_psc_exp.py index dabaf76b..2ae4f065 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_exp.py +++ b/brainpy_state/_nest_neuron/aeif_psc_exp.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, validate_aeif_overflow, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'aeif_psc_exp', diff --git a/brainpy_state/_nest_neuron/aeif_psc_exp_test.py b/brainpy_state/_nest_neuron/aeif_psc_exp_test.py index adb3c299..f19f54a1 100644 --- a/brainpy_state/_nest_neuron/aeif_psc_exp_test.py +++ b/brainpy_state/_nest_neuron/aeif_psc_exp_test.py @@ -28,7 +28,7 @@ import numpy.testing as npt jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import aeif_psc_exp diff --git a/brainpy_state/_nest_neuron/amat2_psc_exp.py b/brainpy_state/_nest_neuron/amat2_psc_exp.py index aaf9ee28..0baa5f75 100644 --- a/brainpy_state/_nest_neuron/amat2_psc_exp.py +++ b/brainpy_state/_nest_neuron/amat2_psc_exp.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'amat2_psc_exp', diff --git a/brainpy_state/_nest_neuron/amat2_psc_exp_test.py b/brainpy_state/_nest_neuron/amat2_psc_exp_test.py index cedb2cf5..96001d04 100644 --- a/brainpy_state/_nest_neuron/amat2_psc_exp_test.py +++ b/brainpy_state/_nest_neuron/amat2_psc_exp_test.py @@ -44,7 +44,7 @@ from brainpy_state._nest_neuron.amat2_psc_exp import amat2_psc_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _compute_propagators(h, taum, tauE, tauI, tauV, c, beta, tau_1, tau_2): diff --git a/brainpy_state/_nest_neuron/astrocyte_lr_1994.py b/brainpy_state/_nest_neuron/astrocyte_lr_1994.py index dd25876a..d489ed5e 100644 --- a/brainpy_state/_nest_neuron/astrocyte_lr_1994.py +++ b/brainpy_state/_nest_neuron/astrocyte_lr_1994.py @@ -22,8 +22,8 @@ from brainstate.typing import Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep __all__ = [ 'astrocyte_lr_1994', diff --git a/brainpy_state/_nest_neuron/astrocyte_lr_1994_test.py b/brainpy_state/_nest_neuron/astrocyte_lr_1994_test.py index a87cb840..12c1b4cb 100644 --- a/brainpy_state/_nest_neuron/astrocyte_lr_1994_test.py +++ b/brainpy_state/_nest_neuron/astrocyte_lr_1994_test.py @@ -35,7 +35,7 @@ import numpy as np from scipy.integrate import odeint -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_neuron.astrocyte_lr_1994 import astrocyte_lr_1994 diff --git a/brainpy_state/_nest_neuron/cm_default.py b/brainpy_state/_nest_neuron/cm_default.py index e0c0f965..83eb6215 100644 --- a/brainpy_state/_nest_neuron/cm_default.py +++ b/brainpy_state/_nest_neuron/cm_default.py @@ -1,4 +1,4 @@ -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # diff --git a/brainpy_state/_nest_neuron/cm_default_state_test.py b/brainpy_state/_nest_neuron/cm_default_state_test.py index ce6f5195..225526e6 100644 --- a/brainpy_state/_nest_neuron/cm_default_state_test.py +++ b/brainpy_state/_nest_neuron/cm_default_state_test.py @@ -15,7 +15,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import unittest diff --git a/brainpy_state/_nest_neuron/erfc_neuron.py b/brainpy_state/_nest_neuron/erfc_neuron.py index 9abdfc05..9d9b9993 100644 --- a/brainpy_state/_nest_neuron/erfc_neuron.py +++ b/brainpy_state/_nest_neuron/erfc_neuron.py @@ -25,8 +25,8 @@ import jax.scipy.special as jspecial from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import cond_any __all__ = [ 'erfc_neuron', diff --git a/brainpy_state/_nest_neuron/gauss_rate.py b/brainpy_state/_nest_neuron/gauss_rate.py index ce491e5b..9aca11e2 100644 --- a/brainpy_state/_nest_neuron/gauss_rate.py +++ b/brainpy_state/_nest_neuron/gauss_rate.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'gauss_rate_ipn', diff --git a/brainpy_state/_nest_neuron/gauss_rate_test.py b/brainpy_state/_nest_neuron/gauss_rate_test.py index c3dd8d93..12123cfa 100644 --- a/brainpy_state/_nest_neuron/gauss_rate_test.py +++ b/brainpy_state/_nest_neuron/gauss_rate_test.py @@ -29,7 +29,7 @@ from brainpy.state import gauss_rate_ipn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/gif_cond_exp.py b/brainpy_state/_nest_neuron/gif_cond_exp.py index eaaff130..a46871a8 100644 --- a/brainpy_state/_nest_neuron/gif_cond_exp.py +++ b/brainpy_state/_nest_neuron/gif_cond_exp.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'gif_cond_exp', diff --git a/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse.py b/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse.py index 959dc5c1..c14238a6 100644 --- a/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse.py +++ b/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'gif_cond_exp_multisynapse', diff --git a/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse_wbyrec_test.py b/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse_wbyrec_test.py index 0c2efd85..e03db0ef 100644 --- a/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse_wbyrec_test.py +++ b/brainpy_state/_nest_neuron/gif_cond_exp_multisynapse_wbyrec_test.py @@ -32,7 +32,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import gif_cond_exp_multisynapse diff --git a/brainpy_state/_nest_neuron/gif_pop_psc_exp.py b/brainpy_state/_nest_neuron/gif_pop_psc_exp.py index 10b0ce3b..754e9a64 100644 --- a/brainpy_state/_nest_neuron/gif_pop_psc_exp.py +++ b/brainpy_state/_nest_neuron/gif_pop_psc_exp.py @@ -22,8 +22,8 @@ import numpy as np from brainstate.typing import Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'gif_pop_psc_exp', diff --git a/brainpy_state/_nest_neuron/gif_psc_exp.py b/brainpy_state/_nest_neuron/gif_psc_exp.py index 7636fd09..f8e803ce 100644 --- a/brainpy_state/_nest_neuron/gif_psc_exp.py +++ b/brainpy_state/_nest_neuron/gif_psc_exp.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'gif_psc_exp', diff --git a/brainpy_state/_nest_neuron/gif_psc_exp_multisynapse.py b/brainpy_state/_nest_neuron/gif_psc_exp_multisynapse.py index db535b9e..03069015 100644 --- a/brainpy_state/_nest_neuron/gif_psc_exp_multisynapse.py +++ b/brainpy_state/_nest_neuron/gif_psc_exp_multisynapse.py @@ -94,8 +94,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'gif_psc_exp_multisynapse', diff --git a/brainpy_state/_nest_neuron/ginzburg_neuron.py b/brainpy_state/_nest_neuron/ginzburg_neuron.py index e35c8530..1e10da99 100644 --- a/brainpy_state/_nest_neuron/ginzburg_neuron.py +++ b/brainpy_state/_nest_neuron/ginzburg_neuron.py @@ -24,8 +24,8 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import cond_any __all__ = [ 'ginzburg_neuron', diff --git a/brainpy_state/_nest_neuron/glif_cond.py b/brainpy_state/_nest_neuron/glif_cond.py index 36cb666d..a808c972 100644 --- a/brainpy_state/_nest_neuron/glif_cond.py +++ b/brainpy_state/_nest_neuron/glif_cond.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'glif_cond', diff --git a/brainpy_state/_nest_neuron/glif_cond_test.py b/brainpy_state/_nest_neuron/glif_cond_test.py index 44a95496..b28683fe 100644 --- a/brainpy_state/_nest_neuron/glif_cond_test.py +++ b/brainpy_state/_nest_neuron/glif_cond_test.py @@ -45,7 +45,7 @@ import brainunit as u import jax.numpy as jnp -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_neuron.glif_cond import glif_cond diff --git a/brainpy_state/_nest_neuron/glif_psc.py b/brainpy_state/_nest_neuron/glif_psc.py index 6a8cbfa1..be41d85d 100644 --- a/brainpy_state/_nest_neuron/glif_psc.py +++ b/brainpy_state/_nest_neuron/glif_psc.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, alpha_propagator_p31_p32, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, alpha_propagator_p31_p32, cond_any __all__ = [ 'glif_psc', diff --git a/brainpy_state/_nest_neuron/glif_psc_double_alpha.py b/brainpy_state/_nest_neuron/glif_psc_double_alpha.py index 8f0798d7..cb8b0c39 100644 --- a/brainpy_state/_nest_neuron/glif_psc_double_alpha.py +++ b/brainpy_state/_nest_neuron/glif_psc_double_alpha.py @@ -50,8 +50,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, alpha_propagator_p31_p32, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, alpha_propagator_p31_p32, cond_any __all__ = [ 'glif_psc_double_alpha', diff --git a/brainpy_state/_nest_neuron/glif_psc_double_alpha_test.py b/brainpy_state/_nest_neuron/glif_psc_double_alpha_test.py index 519e6a69..24b351da 100644 --- a/brainpy_state/_nest_neuron/glif_psc_double_alpha_test.py +++ b/brainpy_state/_nest_neuron/glif_psc_double_alpha_test.py @@ -52,10 +52,10 @@ import braintools import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_neuron.glif_psc_double_alpha import glif_psc_double_alpha -from brainpy_state._nest_base._utils import alpha_propagator_p31_p32 +from brainpy_state._nest_base.utils import alpha_propagator_p31_p32 # --------------------------------------------------------------------------- diff --git a/brainpy_state/_nest_neuron/glif_psc_test.py b/brainpy_state/_nest_neuron/glif_psc_test.py index a23806a9..ff5f2008 100644 --- a/brainpy_state/_nest_neuron/glif_psc_test.py +++ b/brainpy_state/_nest_neuron/glif_psc_test.py @@ -48,10 +48,10 @@ import braintools import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_neuron.glif_psc import glif_psc -from brainpy_state._nest_base._utils import alpha_propagator_p31_p32 +from brainpy_state._nest_base.utils import alpha_propagator_p31_p32 # --------------------------------------------------------------------------- diff --git a/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub.py b/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub.py index 1d51891a..ceac23dd 100644 --- a/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub.py +++ b/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'hh_cond_beta_gap_traub', diff --git a/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub_test.py b/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub_test.py index 87a3d66a..c39f3b16 100644 --- a/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub_test.py +++ b/brainpy_state/_nest_neuron/hh_cond_beta_gap_traub_test.py @@ -45,7 +45,7 @@ from brainpy_state import hh_cond_beta_gap_traub jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _nest_hh_cond_beta_gap_traub_dynamics(t, y, g_Na, g_K, g_L, E_Na, E_K, E_L, diff --git a/brainpy_state/_nest_neuron/hh_cond_exp_traub.py b/brainpy_state/_nest_neuron/hh_cond_exp_traub.py index f52da006..373a7b96 100644 --- a/brainpy_state/_nest_neuron/hh_cond_exp_traub.py +++ b/brainpy_state/_nest_neuron/hh_cond_exp_traub.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'hh_cond_exp_traub', diff --git a/brainpy_state/_nest_neuron/hh_cond_exp_traub_test.py b/brainpy_state/_nest_neuron/hh_cond_exp_traub_test.py index 6df030d4..3bef8ccd 100644 --- a/brainpy_state/_nest_neuron/hh_cond_exp_traub_test.py +++ b/brainpy_state/_nest_neuron/hh_cond_exp_traub_test.py @@ -44,7 +44,7 @@ from brainpy_state import hh_cond_exp_traub jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _nest_hh_cond_exp_traub_dynamics(t, y, g_Na, g_K, g_L, E_Na, E_K, E_L, diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha.py b/brainpy_state/_nest_neuron/hh_psc_alpha.py index 517dd080..510917d3 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'hh_psc_alpha', diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha_clopath.py b/brainpy_state/_nest_neuron/hh_psc_alpha_clopath.py index e701ca37..d3ef895b 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha_clopath.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha_clopath.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'hh_psc_alpha_clopath', @@ -207,7 +207,7 @@ class hh_psc_alpha_clopath(NESTNeuron): **4. Numerical Integration** Uses a JAX-based adaptive RKF45 integrator via - :class:`~brainpy_state._nest_base._utils.AdaptiveRungeKuttaStep` to match + :class:`~brainpy_state._nest_base.utils.AdaptiveRungeKuttaStep` to match NEST's GSL RKF45 adaptive integrator. Default tolerance is ``gsl_error_tol=1e-6``. All neurons are integrated simultaneously in a vectorized fashion. @@ -977,7 +977,7 @@ def update(self, x=0. * u.pA, w_by_rec=None): **Integration details:** - - Uses :class:`~brainpy_state._nest_base._utils.AdaptiveRungeKuttaStep` with + - Uses :class:`~brainpy_state._nest_base.utils.AdaptiveRungeKuttaStep` with method ``'RKF45'`` for vectorized integration of all neurons simultaneously. - The ODE right-hand side includes all 11 state equations with full coupling. - Alpha-kernel normalization ensures a weight of 1 pA produces a peak PSC of 1 pA. diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha_clopath_test.py b/brainpy_state/_nest_neuron/hh_psc_alpha_clopath_test.py index e2de8607..7a9098e6 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha_clopath_test.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha_clopath_test.py @@ -42,7 +42,7 @@ from scipy.integrate import solve_ivp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _nest_hh_clopath_dynamics(t, y, g_Na, g_K, g_L, E_Na, E_K, E_L, C_m, I_e, I_stim, diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha_gap.py b/brainpy_state/_nest_neuron/hh_psc_alpha_gap.py index 94579397..a3f53162 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha_gap.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha_gap.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'hh_psc_alpha_gap', diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha_gap_test.py b/brainpy_state/_nest_neuron/hh_psc_alpha_gap_test.py index 6f7d083a..e0f967d4 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha_gap_test.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha_gap_test.py @@ -43,7 +43,7 @@ from scipy.integrate import solve_ivp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _nest_hh_gap_dynamics(t, y, g_Na, g_Kv1, g_Kv3, g_L, E_Na, E_K, E_L, diff --git a/brainpy_state/_nest_neuron/hh_psc_alpha_test.py b/brainpy_state/_nest_neuron/hh_psc_alpha_test.py index 01310722..cd47b266 100644 --- a/brainpy_state/_nest_neuron/hh_psc_alpha_test.py +++ b/brainpy_state/_nest_neuron/hh_psc_alpha_test.py @@ -41,7 +41,7 @@ from scipy.integrate import solve_ivp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _nest_hh_dynamics(t, y, g_Na, g_K, g_L, E_Na, E_K, E_L, C_m, I_e, I_stim, tau_ex, tau_in): diff --git a/brainpy_state/_nest_neuron/ht_neuron.py b/brainpy_state/_nest_neuron/ht_neuron.py index 25e09d3e..096263bc 100644 --- a/brainpy_state/_nest_neuron/ht_neuron.py +++ b/brainpy_state/_nest_neuron/ht_neuron.py @@ -46,8 +46,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep __all__ = [ 'ht_neuron', diff --git a/brainpy_state/_nest_neuron/ht_neuron_test.py b/brainpy_state/_nest_neuron/ht_neuron_test.py index bb78f2c7..4a5a8fe6 100644 --- a/brainpy_state/_nest_neuron/ht_neuron_test.py +++ b/brainpy_state/_nest_neuron/ht_neuron_test.py @@ -111,7 +111,7 @@ def _m_NMDA(V, m_eq, m_fast, m_slow, instant_unblock_NMDA=False): return A1 * m_fast + A2 * m_slow jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) # --------------------------------------------------------------------------- diff --git a/brainpy_state/_nest_neuron/iaf_bw_2001.py b/brainpy_state/_nest_neuron/iaf_bw_2001.py index cf476a89..7701cd84 100644 --- a/brainpy_state/_nest_neuron/iaf_bw_2001.py +++ b/brainpy_state/_nest_neuron/iaf_bw_2001.py @@ -27,8 +27,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_bw_2001', @@ -535,7 +535,7 @@ def delta_label_for_receptor(self, receptor_type): r"""Map a NEST receptor type to this model's delta-input channel label. Routes ``Simulator.connect(..., receptor_type=k)`` through the named-channel - deposit path: :class:`~brainpy_state._nest_network._event_proj.EventProjection` tags + deposit path: :class:`~brainpy_state._nest_network.event_proj.EventProjection` tags the deposit with the returned label, which the model reads back via ``sum_delta_inputs(label=...)``. Exposing this resolver (instead of a stacked ``n_receptors`` port) is what lets a Simulator connection reach the AMPA, GABA diff --git a/brainpy_state/_nest_neuron/iaf_bw_2001_exact.py b/brainpy_state/_nest_neuron/iaf_bw_2001_exact.py index 885a9066..15b01d32 100644 --- a/brainpy_state/_nest_neuron/iaf_bw_2001_exact.py +++ b/brainpy_state/_nest_neuron/iaf_bw_2001_exact.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_bw_2001_exact', diff --git a/brainpy_state/_nest_neuron/iaf_bw_2001_exact_test.py b/brainpy_state/_nest_neuron/iaf_bw_2001_exact_test.py index 3d897bf0..2978a7ed 100644 --- a/brainpy_state/_nest_neuron/iaf_bw_2001_exact_test.py +++ b/brainpy_state/_nest_neuron/iaf_bw_2001_exact_test.py @@ -26,7 +26,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_bw_2001_exact, iaf_cond_exp diff --git a/brainpy_state/_nest_neuron/iaf_bw_2001_test.py b/brainpy_state/_nest_neuron/iaf_bw_2001_test.py index db21d35f..5a1d8496 100644 --- a/brainpy_state/_nest_neuron/iaf_bw_2001_test.py +++ b/brainpy_state/_nest_neuron/iaf_bw_2001_test.py @@ -27,7 +27,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_bw_2001, iaf_cond_exp diff --git a/brainpy_state/_nest_neuron/iaf_chs_2007.py b/brainpy_state/_nest_neuron/iaf_chs_2007.py index 956b0aff..82be251c 100644 --- a/brainpy_state/_nest_neuron/iaf_chs_2007.py +++ b/brainpy_state/_nest_neuron/iaf_chs_2007.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'iaf_chs_2007', diff --git a/brainpy_state/_nest_neuron/iaf_chs_2007_test.py b/brainpy_state/_nest_neuron/iaf_chs_2007_test.py index 509367c4..ac4e5ae0 100644 --- a/brainpy_state/_nest_neuron/iaf_chs_2007_test.py +++ b/brainpy_state/_nest_neuron/iaf_chs_2007_test.py @@ -26,7 +26,7 @@ from brainpy.state import iaf_chs_2007 jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _reference_step(state, params, w_step): diff --git a/brainpy_state/_nest_neuron/iaf_chxk_2008.py b/brainpy_state/_nest_neuron/iaf_chxk_2008.py index 61e3e22e..53149263 100644 --- a/brainpy_state/_nest_neuron/iaf_chxk_2008.py +++ b/brainpy_state/_nest_neuron/iaf_chxk_2008.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_chxk_2008', diff --git a/brainpy_state/_nest_neuron/iaf_chxk_2008_test.py b/brainpy_state/_nest_neuron/iaf_chxk_2008_test.py index 44bdccef..cee4fedf 100644 --- a/brainpy_state/_nest_neuron/iaf_chxk_2008_test.py +++ b/brainpy_state/_nest_neuron/iaf_chxk_2008_test.py @@ -25,7 +25,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_chxk_2008 diff --git a/brainpy_state/_nest_neuron/iaf_cond_alpha.py b/brainpy_state/_nest_neuron/iaf_cond_alpha.py index 09ec5e57..abe864b0 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_alpha.py +++ b/brainpy_state/_nest_neuron/iaf_cond_alpha.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_cond_alpha', diff --git a/brainpy_state/_nest_neuron/iaf_cond_alpha_mc.py b/brainpy_state/_nest_neuron/iaf_cond_alpha_mc.py index 7171e9c5..c6f06f32 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_alpha_mc.py +++ b/brainpy_state/_nest_neuron/iaf_cond_alpha_mc.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_cond_alpha_mc', diff --git a/brainpy_state/_nest_neuron/iaf_cond_alpha_mc_test.py b/brainpy_state/_nest_neuron/iaf_cond_alpha_mc_test.py index 8026ad73..2da6a5e5 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_alpha_mc_test.py +++ b/brainpy_state/_nest_neuron/iaf_cond_alpha_mc_test.py @@ -24,7 +24,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_cond_alpha_mc diff --git a/brainpy_state/_nest_neuron/iaf_cond_alpha_test.py b/brainpy_state/_nest_neuron/iaf_cond_alpha_test.py index 039ee802..1973b839 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_alpha_test.py +++ b/brainpy_state/_nest_neuron/iaf_cond_alpha_test.py @@ -26,7 +26,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_cond_alpha diff --git a/brainpy_state/_nest_neuron/iaf_cond_beta.py b/brainpy_state/_nest_neuron/iaf_cond_beta.py index 8d69c2f6..0df71ee7 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_beta.py +++ b/brainpy_state/_nest_neuron/iaf_cond_beta.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_cond_beta', diff --git a/brainpy_state/_nest_neuron/iaf_cond_beta_test.py b/brainpy_state/_nest_neuron/iaf_cond_beta_test.py index a1b79481..a4a5e9b1 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_beta_test.py +++ b/brainpy_state/_nest_neuron/iaf_cond_beta_test.py @@ -26,7 +26,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy.state import iaf_cond_beta diff --git a/brainpy_state/_nest_neuron/iaf_cond_exp.py b/brainpy_state/_nest_neuron/iaf_cond_exp.py index b5b45f1f..79f298c3 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_exp.py +++ b/brainpy_state/_nest_neuron/iaf_cond_exp.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_cond_exp', diff --git a/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr.py b/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr.py index f4a70c5b..fa287a00 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr.py +++ b/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'iaf_cond_exp_sfa_rr', diff --git a/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr_test.py b/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr_test.py index 2d4a7821..a3d491e4 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr_test.py +++ b/brainpy_state/_nest_neuron/iaf_cond_exp_sfa_rr_test.py @@ -27,7 +27,7 @@ from brainpy.state import iaf_cond_exp, iaf_cond_exp_sfa_rr jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _rkf45_ref_step(v, g_ex, g_in, g_sfa, g_rr, is_refractory, i_stim, dt, h0, p, atol=1e-3): diff --git a/brainpy_state/_nest_neuron/iaf_cond_exp_test.py b/brainpy_state/_nest_neuron/iaf_cond_exp_test.py index 8a1c0b7c..154a4914 100644 --- a/brainpy_state/_nest_neuron/iaf_cond_exp_test.py +++ b/brainpy_state/_nest_neuron/iaf_cond_exp_test.py @@ -27,7 +27,7 @@ from brainpy.state import iaf_cond_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _rkf45_ref_step(v, g_ex, g_in, is_refractory, i_stim, dt, h0, p, atol=1e-3): diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha.py b/brainpy_state/_nest_neuron/iaf_psc_alpha.py index b74ea775..9c33419a 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha.py @@ -25,8 +25,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'iaf_psc_alpha', diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse.py b/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse.py index 26e7170e..1a720430 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any from .iaf_psc_alpha import iaf_psc_alpha __all__ = [ diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse_test.py b/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse_test.py index 1ac794d4..7cb65cf7 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha_multisynapse_test.py @@ -27,7 +27,7 @@ from brainpy.state import iaf_psc_alpha_multisynapse jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def alpha_fn(t, tau_syn): diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha_ps.py b/brainpy_state/_nest_neuron/iaf_psc_alpha_ps.py index 314d3290..17f2152b 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha_ps.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha_ps.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any from .iaf_psc_alpha import iaf_psc_alpha __all__ = [ diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha_ps_test.py b/brainpy_state/_nest_neuron/iaf_psc_alpha_ps_test.py index f90a62c7..130de397 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha_ps_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha_ps_test.py @@ -25,7 +25,7 @@ from brainpy.state import iaf_psc_alpha_ps jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestIAFPscAlphaPS(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/iaf_psc_alpha_test.py b/brainpy_state/_nest_neuron/iaf_psc_alpha_test.py index 364524ab..db6891ad 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_alpha_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_alpha_test.py @@ -132,7 +132,7 @@ class TestIAFPscAlpha(unittest.TestCase): def setUpClass(cls): # Match NEST's double-precision CPU behavior as closely as possible. jax.config.update('jax_enable_x64', True) - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) diff --git a/brainpy_state/_nest_neuron/iaf_psc_delta.py b/brainpy_state/_nest_neuron/iaf_psc_delta.py index 60386720..0bf72121 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_delta.py +++ b/brainpy_state/_nest_neuron/iaf_psc_delta.py @@ -25,7 +25,7 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'iaf_psc_delta', diff --git a/brainpy_state/_nest_neuron/iaf_psc_delta_ps.py b/brainpy_state/_nest_neuron/iaf_psc_delta_ps.py index f8ca08ab..5d42ac00 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_delta_ps.py +++ b/brainpy_state/_nest_neuron/iaf_psc_delta_ps.py @@ -26,8 +26,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'iaf_psc_delta_ps', diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp.py b/brainpy_state/_nest_neuron/iaf_psc_exp.py index 0737687f..b6e79113 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp.py @@ -25,8 +25,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'iaf_psc_exp', @@ -91,7 +91,7 @@ class iaf_psc_exp(NESTNeuron): \left(e^{-h/\tau_m} - e^{-h/\tau_{\mathrm{syn}}}\right), where :math:`P_{21}` is evaluated numerically stably by - :func:`~brainpy_state._nest_base._utils.propagator_exp`. Let :math:`V_\mathrm{rel} = V_m - E_L`. + :func:`~brainpy_state._nest_base.utils.propagator_exp`. Let :math:`V_\mathrm{rel} = V_m - E_L`. The candidate membrane update is .. math:: @@ -134,7 +134,7 @@ class iaf_psc_exp(NESTNeuron): - Construction enforces ``V_reset < V_th``, ``C_m > 0``, ``tau_m > 0``, ``tau_syn_ex > 0``, ``tau_syn_in > 0``, ``t_ref >= 0``, ``rho >= 0``, and ``delta >= 0``. - - :func:`~brainpy_state._nest_base._utils.propagator_exp` uses a singular fallback + - :func:`~brainpy_state._nest_base.utils.propagator_exp` uses a singular fallback :math:`(h/C_m)\exp(-h/\tau_m)` when ``tau_syn`` is numerically close to ``tau_m``, avoiding cancellation in :math:`(e^{-h/\tau_m} - e^{-h/\tau_{\mathrm{syn}}})/(\tau_m - \tau_{\mathrm{syn}})`. diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_htum.py b/brainpy_state/_nest_neuron/iaf_psc_exp_htum.py index 69de7d4c..429842cd 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_htum.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_htum.py @@ -25,8 +25,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'iaf_psc_exp_htum', diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_htum_test.py b/brainpy_state/_nest_neuron/iaf_psc_exp_htum_test.py index c12f2936..54e1dbae 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_htum_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_htum_test.py @@ -26,10 +26,10 @@ import numpy as np from brainpy.state import iaf_psc_exp_htum -from brainpy_state._nest_base._utils import propagator_exp as _propagator_exp +from brainpy_state._nest_base.utils import propagator_exp as _propagator_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestIAFPscExpHtum(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse.py b/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse.py index 75d6d90a..dbad6bfa 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse.py @@ -25,8 +25,8 @@ import brainunit as u from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'iaf_psc_exp_multisynapse', diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse_test.py b/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse_test.py index 4b382877..8ca14309 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_multisynapse_test.py @@ -26,7 +26,7 @@ from brainpy.state import iaf_psc_exp_multisynapse jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def exp_psc_fn(t, tau_syn): diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_ps.py b/brainpy_state/_nest_neuron/iaf_psc_exp_ps.py index 901046b7..5b84a888 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_ps.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_ps.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'iaf_psc_exp_ps', diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless.py b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless.py index b544ce1a..bd172cbd 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'iaf_psc_exp_ps_lossless', diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless_test.py b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless_test.py index 255bab0f..25df0640 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_lossless_test.py @@ -25,7 +25,7 @@ from brainpy.state import iaf_psc_exp_ps, iaf_psc_exp_ps_lossless jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestIAFPscExpPSLossless(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_test.py b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_test.py index 57ae13a6..6c5b4180 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_ps_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_ps_test.py @@ -25,7 +25,7 @@ from brainpy.state import iaf_psc_exp_ps jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestIAFPscExpPS(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/iaf_psc_exp_test.py b/brainpy_state/_nest_neuron/iaf_psc_exp_test.py index 9415e5cd..1d65bb56 100644 --- a/brainpy_state/_nest_neuron/iaf_psc_exp_test.py +++ b/brainpy_state/_nest_neuron/iaf_psc_exp_test.py @@ -27,7 +27,7 @@ from brainpy.state import iaf_psc_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _propagator_exp(tau_syn, tau_m, c_m, h): diff --git a/brainpy_state/_nest_neuron/iaf_tum_2000.py b/brainpy_state/_nest_neuron/iaf_tum_2000.py index a294dd66..99f81862 100644 --- a/brainpy_state/_nest_neuron/iaf_tum_2000.py +++ b/brainpy_state/_nest_neuron/iaf_tum_2000.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, propagator_exp, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, propagator_exp, cond_any __all__ = [ 'iaf_tum_2000', diff --git a/brainpy_state/_nest_neuron/iaf_tum_2000_test.py b/brainpy_state/_nest_neuron/iaf_tum_2000_test.py index a7b19c31..9b7afbaf 100644 --- a/brainpy_state/_nest_neuron/iaf_tum_2000_test.py +++ b/brainpy_state/_nest_neuron/iaf_tum_2000_test.py @@ -24,10 +24,10 @@ import jax import numpy as np from brainpy.state import iaf_psc_exp, iaf_tum_2000 -from brainpy_state._nest_base._utils import propagator_exp +from brainpy_state._nest_base.utils import propagator_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_spike(spk): diff --git a/brainpy_state/_nest_neuron/ignore_and_fire.py b/brainpy_state/_nest_neuron/ignore_and_fire.py index 8d2d6043..398f6c97 100644 --- a/brainpy_state/_nest_neuron/ignore_and_fire.py +++ b/brainpy_state/_nest_neuron/ignore_and_fire.py @@ -22,8 +22,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'ignore_and_fire', diff --git a/brainpy_state/_nest_neuron/izhikevich.py b/brainpy_state/_nest_neuron/izhikevich.py index 2085a5d1..9ce6f815 100644 --- a/brainpy_state/_nest_neuron/izhikevich.py +++ b/brainpy_state/_nest_neuron/izhikevich.py @@ -24,7 +24,7 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'izhikevich', diff --git a/brainpy_state/_nest_neuron/izhikevich_test.py b/brainpy_state/_nest_neuron/izhikevich_test.py index 5958738b..d537c947 100644 --- a/brainpy_state/_nest_neuron/izhikevich_test.py +++ b/brainpy_state/_nest_neuron/izhikevich_test.py @@ -96,7 +96,7 @@ class TestIzhikevich(unittest.TestCase): @classmethod def setUpClass(cls): jax.config.update('jax_enable_x64', True) - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) diff --git a/brainpy_state/_nest_neuron/lin_rate.py b/brainpy_state/_nest_neuron/lin_rate.py index 6444e9e4..0e672212 100644 --- a/brainpy_state/_nest_neuron/lin_rate.py +++ b/brainpy_state/_nest_neuron/lin_rate.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'lin_rate_ipn', diff --git a/brainpy_state/_nest_neuron/lin_rate_test.py b/brainpy_state/_nest_neuron/lin_rate_test.py index 6ede433d..ef7309a5 100644 --- a/brainpy_state/_nest_neuron/lin_rate_test.py +++ b/brainpy_state/_nest_neuron/lin_rate_test.py @@ -29,7 +29,7 @@ from brainpy.state import lin_rate_ipn, lin_rate_opn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/mat2_psc_exp.py b/brainpy_state/_nest_neuron/mat2_psc_exp.py index c1db9b3b..7463c146 100644 --- a/brainpy_state/_nest_neuron/mat2_psc_exp.py +++ b/brainpy_state/_nest_neuron/mat2_psc_exp.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'mat2_psc_exp', diff --git a/brainpy_state/_nest_neuron/mat2_psc_exp_test.py b/brainpy_state/_nest_neuron/mat2_psc_exp_test.py index 1fd5011d..eaab1796 100644 --- a/brainpy_state/_nest_neuron/mat2_psc_exp_test.py +++ b/brainpy_state/_nest_neuron/mat2_psc_exp_test.py @@ -42,7 +42,7 @@ from brainpy_state._nest_neuron.mat2_psc_exp import mat2_psc_exp jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestMat2PscExp(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/mcculloch_pitts_neuron.py b/brainpy_state/_nest_neuron/mcculloch_pitts_neuron.py index e5c11e1a..2d4b5db6 100644 --- a/brainpy_state/_nest_neuron/mcculloch_pitts_neuron.py +++ b/brainpy_state/_nest_neuron/mcculloch_pitts_neuron.py @@ -24,7 +24,7 @@ import jax.numpy as jnp from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'mcculloch_pitts_neuron', diff --git a/brainpy_state/_nest_neuron/parrot_neuron.py b/brainpy_state/_nest_neuron/parrot_neuron.py index bec850f4..f9e85401 100644 --- a/brainpy_state/_nest_neuron/parrot_neuron.py +++ b/brainpy_state/_nest_neuron/parrot_neuron.py @@ -22,7 +22,7 @@ import brainunit as u from brainstate.typing import Size -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'parrot_neuron', @@ -80,7 +80,7 @@ class parrot_neuron(NESTNeuron): no-ops. - Incoming events are read through the standard delta-input seam (:meth:`~brainpy_state._base.Dynamics.sum_delta_inputs`), the same channel - an :class:`~brainpy_state._nest_network._event_proj.EventProjection` deposits + an :class:`~brainpy_state._nest_network.event_proj.EventProjection` deposits into. The summed arriving input (with the canonical unit gate weight) is the spike count for the step and is relayed as the output multiplicity. The :class:`~brainpy_state.network.Simulator` captures this model's output diff --git a/brainpy_state/_nest_neuron/parrot_neuron_test.py b/brainpy_state/_nest_neuron/parrot_neuron_test.py index 934089e2..d989d1e2 100644 --- a/brainpy_state/_nest_neuron/parrot_neuron_test.py +++ b/brainpy_state/_nest_neuron/parrot_neuron_test.py @@ -19,7 +19,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik.py b/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik.py index 4bc95f85..77e41309 100644 --- a/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik.py +++ b/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik.py @@ -26,8 +26,8 @@ from brainstate.typing import ArrayLike, Size from brainstate.util import DotDict -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, AdaptiveRungeKuttaStep, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, AdaptiveRungeKuttaStep, cond_any __all__ = [ 'pp_cond_exp_mc_urbanczik', diff --git a/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik_test.py b/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik_test.py index 031cda1c..e0fea194 100644 --- a/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik_test.py +++ b/brainpy_state/_nest_neuron/pp_cond_exp_mc_urbanczik_test.py @@ -194,7 +194,7 @@ class TestDefaultParameters(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) with brainstate.environ.context(dt=self.dt, t=0.0 * u.ms): self.neuron = pp_cond_exp_mc_urbanczik(1) self.neuron.init_state() @@ -335,7 +335,7 @@ class TestStateInitialization(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_default_init(self): with brainstate.environ.context(dt=self.dt, t=0.0 * u.ms): @@ -406,7 +406,7 @@ class TestSubthresholdDynamics(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def _step(self, neuron, step_idx, x=0.0 * u.pA, soma_exc=None, soma_inh=None, dend_exc=None, dend_inh=None): @@ -652,7 +652,7 @@ class TestSpikeGeneration(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_low_rate_at_rest(self): r"""At rest (V_m = E_L = -70 mV), rate should be low but nonzero.""" @@ -701,7 +701,7 @@ class TestRefractoryPeriod(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_refractory_counter_decrement(self): r"""Refractory counter should decrement each step.""" @@ -752,7 +752,7 @@ class TestUrbanczikHistory(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_history_populated(self): r"""History should be populated after each step.""" @@ -818,7 +818,7 @@ class TestCurrentInput(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_soma_current_input_delayed(self): r"""External current should be delayed by one step (NEST ring buffer).""" @@ -850,7 +850,7 @@ class TestPopulation(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_identical_neurons_match(self): r"""Two identical neurons with same RNG should produce same output.""" @@ -897,7 +897,7 @@ class TestFullReferenceTrace(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_subthreshold_with_somatic_excitation(self): r"""Compare trace with somatic excitatory conductance input.""" @@ -1032,7 +1032,7 @@ class TestUrbanczikLearningSignal(unittest.TestCase): def setUp(self): brainstate.environ.set(dt=0.1 * u.ms) self.dt = 0.1 * u.ms - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) def test_V_W_star_computation(self): r"""Verify V_W_star dendritic prediction formula.""" diff --git a/brainpy_state/_nest_neuron/pp_psc_delta.py b/brainpy_state/_nest_neuron/pp_psc_delta.py index ffef1905..9c8d8d57 100644 --- a/brainpy_state/_nest_neuron/pp_psc_delta.py +++ b/brainpy_state/_nest_neuron/pp_psc_delta.py @@ -25,8 +25,8 @@ import numpy as np from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'pp_psc_delta', diff --git a/brainpy_state/_nest_neuron/rate_neuron_ipn.py b/brainpy_state/_nest_neuron/rate_neuron_ipn.py index f6f0f8d0..79e06a2f 100644 --- a/brainpy_state/_nest_neuron/rate_neuron_ipn.py +++ b/brainpy_state/_nest_neuron/rate_neuron_ipn.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'rate_neuron_ipn', diff --git a/brainpy_state/_nest_neuron/rate_neuron_ipn_test.py b/brainpy_state/_nest_neuron/rate_neuron_ipn_test.py index 41f4e2fe..6fd72f29 100644 --- a/brainpy_state/_nest_neuron/rate_neuron_ipn_test.py +++ b/brainpy_state/_nest_neuron/rate_neuron_ipn_test.py @@ -28,7 +28,7 @@ from brainpy.state import rate_neuron_ipn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/rate_neuron_opn.py b/brainpy_state/_nest_neuron/rate_neuron_opn.py index 5184fa98..14ed136a 100644 --- a/brainpy_state/_nest_neuron/rate_neuron_opn.py +++ b/brainpy_state/_nest_neuron/rate_neuron_opn.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'rate_neuron_opn', diff --git a/brainpy_state/_nest_neuron/rate_neuron_opn_test.py b/brainpy_state/_nest_neuron/rate_neuron_opn_test.py index 4ee28ca0..a8a951a9 100644 --- a/brainpy_state/_nest_neuron/rate_neuron_opn_test.py +++ b/brainpy_state/_nest_neuron/rate_neuron_opn_test.py @@ -29,7 +29,7 @@ from brainpy.state import lin_rate_opn, rate_neuron_opn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestRateNeuronOPN(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/rate_transformer_node.py b/brainpy_state/_nest_neuron/rate_transformer_node.py index 5aee0f6d..d1c53b8e 100644 --- a/brainpy_state/_nest_neuron/rate_transformer_node.py +++ b/brainpy_state/_nest_neuron/rate_transformer_node.py @@ -25,7 +25,7 @@ import numpy as np from brainstate.typing import Size -from brainpy_state._nest_base._base import NESTNeuron +from brainpy_state._nest_base.base import NESTNeuron __all__ = [ 'rate_transformer_node', diff --git a/brainpy_state/_nest_neuron/rate_transformer_node_test.py b/brainpy_state/_nest_neuron/rate_transformer_node_test.py index f6c97561..746750b3 100644 --- a/brainpy_state/_nest_neuron/rate_transformer_node_test.py +++ b/brainpy_state/_nest_neuron/rate_transformer_node_test.py @@ -28,7 +28,7 @@ from brainpy.state import rate_transformer_node jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestRateTransformerNode(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/siegert_neuron.py b/brainpy_state/_nest_neuron/siegert_neuron.py index 09dc7e17..a736d4ad 100644 --- a/brainpy_state/_nest_neuron/siegert_neuron.py +++ b/brainpy_state/_nest_neuron/siegert_neuron.py @@ -27,8 +27,8 @@ import jax.scipy.special as jax_special from brainstate.typing import ArrayLike, Size -from brainpy_state._nest_base._base import NESTNeuron -from brainpy_state._nest_base._utils import is_tracer, cond_any +from brainpy_state._nest_base.base import NESTNeuron +from brainpy_state._nest_base.utils import is_tracer, cond_any __all__ = [ 'siegert_neuron', diff --git a/brainpy_state/_nest_neuron/siegert_neuron_test.py b/brainpy_state/_nest_neuron/siegert_neuron_test.py index e573eee4..42b62eb3 100644 --- a/brainpy_state/_nest_neuron/siegert_neuron_test.py +++ b/brainpy_state/_nest_neuron/siegert_neuron_test.py @@ -29,7 +29,7 @@ from brainpy.state import siegert_neuron jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) class TestSiegertNeuron(unittest.TestCase): diff --git a/brainpy_state/_nest_neuron/sigmoid_rate.py b/brainpy_state/_nest_neuron/sigmoid_rate.py index 29b4c4a6..40f25eef 100644 --- a/brainpy_state/_nest_neuron/sigmoid_rate.py +++ b/brainpy_state/_nest_neuron/sigmoid_rate.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'sigmoid_rate_ipn', diff --git a/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998.py b/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998.py index 852efebd..c9aa39b6 100644 --- a/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998.py +++ b/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'sigmoid_rate_gg_1998_ipn', diff --git a/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998_test.py b/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998_test.py index 5ecca7aa..0c44a91b 100644 --- a/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998_test.py +++ b/brainpy_state/_nest_neuron/sigmoid_rate_gg_1998_test.py @@ -29,7 +29,7 @@ from brainpy.state import sigmoid_rate_gg_1998_ipn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/sigmoid_rate_test.py b/brainpy_state/_nest_neuron/sigmoid_rate_test.py index 21d84fb5..00b4bfa8 100644 --- a/brainpy_state/_nest_neuron/sigmoid_rate_test.py +++ b/brainpy_state/_nest_neuron/sigmoid_rate_test.py @@ -28,7 +28,7 @@ from brainpy.state import sigmoid_rate_ipn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/tanh_rate.py b/brainpy_state/_nest_neuron/tanh_rate.py index 67594f1a..28d20bf4 100644 --- a/brainpy_state/_nest_neuron/tanh_rate.py +++ b/brainpy_state/_nest_neuron/tanh_rate.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'tanh_rate_ipn', diff --git a/brainpy_state/_nest_neuron/tanh_rate_test.py b/brainpy_state/_nest_neuron/tanh_rate_test.py index a25fd1f3..98ab43b4 100644 --- a/brainpy_state/_nest_neuron/tanh_rate_test.py +++ b/brainpy_state/_nest_neuron/tanh_rate_test.py @@ -29,7 +29,7 @@ from brainpy.state import tanh_rate_ipn, tanh_rate_opn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_neuron/threshold_lin_rate.py b/brainpy_state/_nest_neuron/threshold_lin_rate.py index 2ff294e0..e99a9a7d 100644 --- a/brainpy_state/_nest_neuron/threshold_lin_rate.py +++ b/brainpy_state/_nest_neuron/threshold_lin_rate.py @@ -26,7 +26,7 @@ from brainstate.typing import ArrayLike, Size from brainpy_state._nest_neuron.lin_rate import _lin_rate_base -from brainpy_state._nest_base._utils import is_tracer +from brainpy_state._nest_base.utils import is_tracer __all__ = [ 'threshold_lin_rate_ipn', diff --git a/brainpy_state/_nest_neuron/threshold_lin_rate_test.py b/brainpy_state/_nest_neuron/threshold_lin_rate_test.py index a0ff90b2..5e5488ca 100644 --- a/brainpy_state/_nest_neuron/threshold_lin_rate_test.py +++ b/brainpy_state/_nest_neuron/threshold_lin_rate_test.py @@ -28,7 +28,7 @@ from brainpy.state import threshold_lin_rate_ipn, threshold_lin_rate_opn jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_plasticity/clopath_synapse.py b/brainpy_state/_nest_plasticity/clopath_synapse.py index b61e72e1..c64212bb 100644 --- a/brainpy_state/_nest_plasticity/clopath_synapse.py +++ b/brainpy_state/_nest_plasticity/clopath_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on the -:class:`~brainpy_state._nest_network._event_plastic.VoltageCoupledPlasticProj` +:class:`~brainpy_state._nest_network.event_plastic.VoltageCoupledPlasticProj` substrate (primitive #2). The substrate maintains the per-pre-neuron presynaptic trace ``x_bar`` (``pre_trace_tau=tau_x``) and, via the **post-state reader**, samples the post neuron's membrane and low-pass filtered voltages per edge each @@ -13,14 +13,14 @@ the voltage-based rule of Clopath et al. (2010). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import numpy as np import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, ) diff --git a/brainpy_state/_nest_plasticity/clopath_synapse_rule_test.py b/brainpy_state/_nest_plasticity/clopath_synapse_rule_test.py index 0cf11fb3..2fe3690e 100644 --- a/brainpy_state/_nest_plasticity/clopath_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/clopath_synapse_rule_test.py @@ -15,9 +15,9 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) -from brainpy_state._nest_network._event_plastic import KernelContext # noqa: E402 +from brainpy_state._nest_network.event_plastic import KernelContext # noqa: E402 from brainpy_state._nest_plasticity.clopath_synapse import clopath_synapse # noqa: E402 # NEST defaults diff --git a/brainpy_state/_nest_plasticity/ht_synapse.py b/brainpy_state/_nest_plasticity/ht_synapse.py index 4749cd3a..75dccec8 100644 --- a/brainpy_state/_nest_plasticity/ht_synapse.py +++ b/brainpy_state/_nest_plasticity/ht_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The Hill-Tononi +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The Hill-Tononi (2005) model is **depression-only and presynaptic**: a normalized vesicle pool :math:`P \in [0, 1]` recovers exponentially toward ``1`` between spikes and depletes multiplicatively on each presynaptic spike; the delivered amplitude is @@ -13,13 +13,13 @@ imperative implementation lived in this same module (legacy ``NESTSynapse`` base). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, to_unit_interval, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/ht_synapse_rule_test.py b/brainpy_state/_nest_plasticity/ht_synapse_rule_test.py index e007daa1..2293b436 100644 --- a/brainpy_state/_nest_plasticity/ht_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/ht_synapse_rule_test.py @@ -20,10 +20,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import ht_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, t, E=1, dt=0.1): diff --git a/brainpy_state/_nest_plasticity/jonke_synapse.py b/brainpy_state/_nest_plasticity/jonke_synapse.py index 36c09635..7fbb80a8 100644 --- a/brainpy_state/_nest_plasticity/jonke_synapse.py +++ b/brainpy_state/_nest_plasticity/jonke_synapse.py @@ -3,19 +3,19 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The Jonke et al. +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The Jonke et al. (2015) rule generalises pair STDP with an **exponential weight factor** :math:`\Phi_\pm(w) = \exp(\mu_\pm w)` on each side plus a constant **offset** :math:`\beta` (a heterosynaptic / activity-independent bias). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/jonke_synapse_rule_test.py b/brainpy_state/_nest_plasticity/jonke_synapse_rule_test.py index b785a66a..4b7ca853 100644 --- a/brainpy_state/_nest_plasticity/jonke_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/jonke_synapse_rule_test.py @@ -21,10 +21,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import jonke_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_dopamine_synapse.py b/brainpy_state/_nest_plasticity/stdp_dopamine_synapse.py index 9645d244..30f715b4 100644 --- a/brainpy_state/_nest_plasticity/stdp_dopamine_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_dopamine_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on the -:class:`~brainpy_state._nest_network._event_plastic.VoltageCoupledPlasticProj` +:class:`~brainpy_state._nest_network.event_plastic.VoltageCoupledPlasticProj` substrate (primitive #2). Two ingredients drive the weight: * a **per-edge eligibility trace** ``c`` (cluster-05 ``edge_state_init`` machinery) @@ -22,14 +22,14 @@ send/trigger sampling times (the cluster-04 "online <-> deferred equality"). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import numpy as np import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_dopamine_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_dopamine_synapse_rule_test.py index 51fecba8..5d16d3ad 100644 --- a/brainpy_state/_nest_plasticity/stdp_dopamine_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_dopamine_synapse_rule_test.py @@ -19,9 +19,9 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) -from brainpy_state._nest_network._event_plastic import KernelContext # noqa: E402 +from brainpy_state._nest_network.event_plastic import KernelContext # noqa: E402 from brainpy_state._nest_plasticity.stdp_dopamine_synapse import stdp_dopamine_synapse # noqa: E402 # NEST defaults (stdp_dopamine_synapse.cpp:45-56) diff --git a/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom.py b/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom.py index 28210455..ff3b2799 100644 --- a/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom.py +++ b/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. Unlike the pair-based +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Unlike the pair-based ``stdp_*`` models this is a *hardware* model (Schemmel et al. 2006; Pfeil et al. 2012): the synapse holds a 4-bit discrete weight and two analogue charges, and a periodic controller (the "readout cycle") quantises the weight, compares the charges to @@ -23,14 +23,14 @@ readout. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import numpy as np import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( to_ms, to_scalar_float, to_scalar_int, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom_rule_test.py b/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom_rule_test.py index bce61ffd..d4271f7b 100644 --- a/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_facetshw_synapse_hom_rule_test.py @@ -22,10 +22,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_facetshw_synapse_hom -from brainpy_state._nest_network._event_plastic import EventPlasticProj, KernelContext +from brainpy_state._nest_network.event_plastic import EventPlasticProj, KernelContext WPLE = 100.0 / 15.0 # weight_per_lut_entry for default Wmax=100, 16-entry LUT LUT0 = [2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15] diff --git a/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse.py b/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse.py index 8416f3d5..6088d1dc 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. In the +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. In the presynaptic-centered scheme (Morrison, Diesmann & Gerstner 2008, fig. 7B) the presynaptic trace ``Kplus`` **accumulates** (``+1`` per pre, decays at ``tau_plus``) but is **reset to 0 on every post spike** (``stdp_nn_pre_centered_synapse.h:69-74``): @@ -16,13 +16,13 @@ (``post_trace_mode = 'nearest'``). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse_rule_test.py index 50461deb..b5104c68 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_pre_centered_synapse_rule_test.py @@ -23,11 +23,11 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (stdp_nn_pre_centered_synapse, stdp_nn_symm_synapse, stdp_synapse) -from brainpy_state._nest_network._event_plastic import EventPlasticProj, KernelContext +from brainpy_state._nest_network.event_plastic import EventPlasticProj, KernelContext TAU = 20.0 diff --git a/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse.py b/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse.py index 619a09eb..e6de499f 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The *restricted* +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The *restricted* symmetric nearest-neighbour scheme (Morrison, Diesmann & Gerstner 2008, fig. 7C) is the symmetric scheme plus a one-pairing-per-spike restriction: a post spike facilitates with the nearest preceding pre **only if a pre has occurred since the @@ -17,13 +17,13 @@ pairs at most once. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse_rule_test.py index af10059d..1a32a921 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_restr_synapse_rule_test.py @@ -24,10 +24,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_nn_restr_synapse, stdp_nn_symm_synapse -from brainpy_state._nest_network._event_plastic import EventPlasticProj, KernelContext +from brainpy_state._nest_network.event_plastic import EventPlasticProj, KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse.py b/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse.py index 84072b6b..06ded7da 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The *symmetric* +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The *symmetric* nearest-neighbour pairing scheme (Morrison, Diesmann & Gerstner 2008, fig. 7A) pairs each spike only with its nearest partner on the other side: a post spike facilitates with the nearest preceding pre spike, a pre spike depresses with the nearest preceding @@ -14,13 +14,13 @@ lives entirely in what the substrate *stores*. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse_rule_test.py index af73bfa3..6d0d2dc0 100644 --- a/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_nn_symm_synapse_rule_test.py @@ -19,10 +19,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_nn_symm_synapse, stdp_synapse -from brainpy_state._nest_network._event_plastic import EventPlasticProj, KernelContext +from brainpy_state._nest_network.event_plastic import EventPlasticProj, KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom.py b/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom.py index 322b5c3e..cae5ef1c 100644 --- a/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom.py +++ b/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. Power-law STDP +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Power-law STDP (Morrison et al. 2007): potentiation is **multiplicative and sub-linear** in the weight (:math:`w^\mu`, :math:`\mu < 1`), depression is **linear** in the weight, and there is **no upper bound** ``Wmax`` — the sub-linear potentiation provides @@ -12,13 +12,13 @@ rule-level. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom_rule_test.py b/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom_rule_test.py index 4cf4c838..d62e6c17 100644 --- a/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_pl_synapse_hom_rule_test.py @@ -17,10 +17,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_pl_synapse_hom -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_synapse.py b/brainpy_state/_nest_plasticity/stdp_synapse.py index 54bf594c..f65d8d12 100644 --- a/brainpy_state/_nest_plasticity/stdp_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The substrate +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The substrate maintains the per-pre-neuron ``K+`` trace (``pre_trace_tau=tau_plus``) and the per-post-neuron ``K-`` trace (``post_trace_tau=tau_minus``); the kernel applies **potentiation on the post spike** (using ``K+``) and **depression on the pre @@ -12,13 +12,13 @@ time — where NEST's ``weight_recorder`` samples. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_synapse_hom.py b/brainpy_state/_nest_plasticity/stdp_synapse_hom.py index fe9f16f7..7e6dfba8 100644 --- a/brainpy_state/_nest_plasticity/stdp_synapse_hom.py +++ b/brainpy_state/_nest_plasticity/stdp_synapse_hom.py @@ -2,7 +2,7 @@ """NEST-faithful ``stdp_synapse_hom`` — homogeneous-parameter pair STDP spec. Rebuilt as a thin reuse of :class:`~brainpy_state._nest_plasticity.stdp_synapse.stdp_synapse` -on the frozen :class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj` +on the frozen :class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj` substrate. In NEST ``stdp_synapse_hom`` stores the plasticity parameters (``lambda``, ``alpha``, ``mu_plus``, ``mu_minus``, ``tau_plus``, ``Wmax``) as *common* properties shared by every synapse of the model (a memory optimisation, diff --git a/brainpy_state/_nest_plasticity/stdp_synapse_hom_rule_test.py b/brainpy_state/_nest_plasticity/stdp_synapse_hom_rule_test.py index 8c8922b7..46e93c0d 100644 --- a/brainpy_state/_nest_plasticity/stdp_synapse_hom_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_synapse_hom_rule_test.py @@ -18,10 +18,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_synapse, stdp_synapse_hom -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_synapse_rule_test.py index 1ad57d55..a07f628e 100644 --- a/brainpy_state/_nest_plasticity/stdp_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_synapse_rule_test.py @@ -18,10 +18,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_plasticity/stdp_triplet_synapse.py b/brainpy_state/_nest_plasticity/stdp_triplet_synapse.py index 3a74ca8b..f3a6a7f5 100644 --- a/brainpy_state/_nest_plasticity/stdp_triplet_synapse.py +++ b/brainpy_state/_nest_plasticity/stdp_triplet_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The triplet rule +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The triplet rule (Pfister & Gerstner, 2006) augments pair STDP with a **second, slower trace on each side**: potentiation at a post spike is scaled by the slow *post* trace and depression at a pre spike by the slow *pre* trace, capturing frequency-dependent @@ -12,13 +12,13 @@ ``(fast, slow)`` so the substrate allocates two per-neuron trace columns per side. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/stdp_triplet_synapse_rule_test.py b/brainpy_state/_nest_plasticity/stdp_triplet_synapse_rule_test.py index f361b304..69421f2b 100644 --- a/brainpy_state/_nest_plasticity/stdp_triplet_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/stdp_triplet_synapse_rule_test.py @@ -23,10 +23,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_triplet_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, r, o, E=1, t=10.0, dt=0.1): diff --git a/brainpy_state/_nest_plasticity/urbanczik_synapse.py b/brainpy_state/_nest_plasticity/urbanczik_synapse.py index d86c30c4..150d4aa3 100644 --- a/brainpy_state/_nest_plasticity/urbanczik_synapse.py +++ b/brainpy_state/_nest_plasticity/urbanczik_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on the -:class:`~brainpy_state._nest_network._event_plastic.VoltageCoupledPlasticProj` +:class:`~brainpy_state._nest_network.event_plastic.VoltageCoupledPlasticProj` substrate (primitive #2). The Urbanczik-Senn rule (Urbanczik & Senn, 2014) makes dendritic synapses learn so the dendritic potential predicts the somatically imposed firing rate: each synapse integrates the product of its presynaptic trace @@ -53,14 +53,14 @@ ``nestkernel/urbanczik_archiving_node_impl.h``. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import numpy as np import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/urbanczik_synapse_test.py b/brainpy_state/_nest_plasticity/urbanczik_synapse_test.py index 33f04ae9..2547e41d 100644 --- a/brainpy_state/_nest_plasticity/urbanczik_synapse_test.py +++ b/brainpy_state/_nest_plasticity/urbanczik_synapse_test.py @@ -3,7 +3,7 @@ The rebuild is a frozen parameter spec plus a pure ``update(state, ctx) -> (new_state, w_eff)`` kernel on the -:class:`~brainpy_state._nest_network._event_plastic.VoltageCoupledPlasticProj` +:class:`~brainpy_state._nest_network.event_plastic.VoltageCoupledPlasticProj` substrate. These NEST-free tests pin: * the spec declarations the substrate dispatches on (two pre-traces ``(tau_L, @@ -27,10 +27,10 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_plasticity.urbanczik_synapse import urbanczik_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext # -------------------------------------------------------------------------- diff --git a/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse.py b/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse.py index c2f3a4fc..1b7c9ae5 100644 --- a/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse.py +++ b/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus a pure, vectorized ``update(state, ctx) -> (new_state, w_eff)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The Vogels-Sprekeler (2011) rule is a **symmetric** STDP with a **constant** presynaptic depression, designed to homeostatically balance excitation and inhibition: every pre↔post pairing potentiates by :math:`\eta K`, and every pre @@ -11,13 +11,13 @@ postsynaptic firing rate toward a target set by :math:`\alpha`. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTPlasticity +from brainpy_state._nest_base.base import NESTPlasticity import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse_rule_test.py b/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse_rule_test.py index 982cb31d..2220f3db 100644 --- a/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse_rule_test.py +++ b/brainpy_state/_nest_plasticity/vogels_sprekeler_synapse_rule_test.py @@ -20,10 +20,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import vogels_sprekeler_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(pre_spike, post_spike, pre_trace, post_trace, E=1, t=10.0, dt=1.0): diff --git a/brainpy_state/_nest_spatial/__init__.py b/brainpy_state/_nest_spatial/__init__.py index d28a224e..4219e527 100644 --- a/brainpy_state/_nest_spatial/__init__.py +++ b/brainpy_state/_nest_spatial/__init__.py @@ -22,34 +22,34 @@ # --------------------------------------------------------------------------- # Position layers # --------------------------------------------------------------------------- -from ._layers import Layer, grid, free +from .layers import Layer, grid, free # --------------------------------------------------------------------------- # Distance / displacement # --------------------------------------------------------------------------- -from ._distance import displacement, pairwise_distance +from .distance import displacement, pairwise_distance # --------------------------------------------------------------------------- # Distance kernels + the distance sentinel / position expressions # --------------------------------------------------------------------------- -from ._kernels import (distance, pos, source_pos, target_pos, +from .kernels import (distance, pos, source_pos, target_pos, gaussian, exponential, gamma, gabor, gaussian2D) # --------------------------------------------------------------------------- # Spatial masks # --------------------------------------------------------------------------- -from ._masks import (circular, spherical, box, +from .masks import (circular, spherical, box, rectangular, doughnut, elliptical, ellipsoidal) # --------------------------------------------------------------------------- # Connection rule # --------------------------------------------------------------------------- -from ._rule import SpatialConnRule, spatial_pairwise_bernoulli +from .rule import SpatialConnRule, spatial_pairwise_bernoulli # --------------------------------------------------------------------------- # Query / dump helpers # --------------------------------------------------------------------------- -from ._helpers import (center_element, Distance, nearest_element, select_nodes_by_mask, +from .helpers import (center_element, Distance, nearest_element, select_nodes_by_mask, dump_layer_nodes, dump_layer_connections, target_nodes, target_positions) # --------------------------------------------------------------------------- # Plot helpers (matplotlib lazily imported inside each function) # --------------------------------------------------------------------------- -from ._plot import plot_layer, plot_targets, plot_sources, plot_probability_parameter +from .plot import plot_layer, plot_targets, plot_sources, plot_probability_parameter __all__ = [ 'Layer', diff --git a/brainpy_state/_nest_spatial/_distance.py b/brainpy_state/_nest_spatial/distance.py similarity index 100% rename from brainpy_state/_nest_spatial/_distance.py rename to brainpy_state/_nest_spatial/distance.py diff --git a/brainpy_state/_nest_spatial/_distance_test.py b/brainpy_state/_nest_spatial/distance_test.py similarity index 94% rename from brainpy_state/_nest_spatial/_distance_test.py rename to brainpy_state/_nest_spatial/distance_test.py index fa91ef00..3cd89622 100644 --- a/brainpy_state/_nest_spatial/_distance_test.py +++ b/brainpy_state/_nest_spatial/distance_test.py @@ -6,7 +6,7 @@ import numpy as np import brainunit as u -from brainpy_state._nest_spatial._distance import displacement, pairwise_distance +from brainpy_state._nest_spatial.distance import displacement, pairwise_distance class TestDistance(unittest.TestCase): diff --git a/brainpy_state/_nest_spatial/_helpers.py b/brainpy_state/_nest_spatial/helpers.py similarity index 97% rename from brainpy_state/_nest_spatial/_helpers.py rename to brainpy_state/_nest_spatial/helpers.py index 380c29fc..4acb021a 100644 --- a/brainpy_state/_nest_spatial/_helpers.py +++ b/brainpy_state/_nest_spatial/helpers.py @@ -3,7 +3,7 @@ :func:`center_element` and :func:`Distance` are pure layer-level queries. :func:`target_nodes` and :func:`target_positions` read the *realized* adjacency back out of a built network -(via :meth:`brainpy_state._nest_network._simulator.Simulator.get_connections`), mirroring NEST's +(via :meth:`brainpy_state._nest_network.simulator.Simulator.get_connections`), mirroring NEST's ``GetTargetNodes`` / ``GetTargetPositions``. """ from __future__ import annotations @@ -12,8 +12,8 @@ import numpy as np import brainunit as u -from brainpy_state._nest_spatial._distance import pairwise_distance -from brainpy_state._nest_spatial._layers import _LEN, _as_len +from brainpy_state._nest_spatial.distance import pairwise_distance +from brainpy_state._nest_spatial.layers import _LEN, _as_len __all__ = ['center_element', 'Distance', 'nearest_element', 'select_nodes_by_mask', 'dump_layer_nodes', 'dump_layer_connections', 'target_nodes', 'target_positions'] @@ -218,7 +218,7 @@ def target_nodes(sim, source, target): r"""Realized target indices of each source node (NEST ``GetTargetNodes``). Reads the built network's adjacency back out (via - :meth:`~brainpy_state._nest_network._simulator.Simulator.get_connections`) and groups + :meth:`~brainpy_state._nest_network.simulator.Simulator.get_connections`) and groups the realized target indices by source node. Parameters diff --git a/brainpy_state/_nest_spatial/_helpers_test.py b/brainpy_state/_nest_spatial/helpers_test.py similarity index 85% rename from brainpy_state/_nest_spatial/_helpers_test.py rename to brainpy_state/_nest_spatial/helpers_test.py index a5e619d2..433f1cd0 100644 --- a/brainpy_state/_nest_spatial/_helpers_test.py +++ b/brainpy_state/_nest_spatial/helpers_test.py @@ -7,12 +7,12 @@ import brainstate from brainpy_state import Simulator, iaf_psc_alpha -from brainpy_state._nest_spatial._layers import grid -from brainpy_state._nest_spatial._distance import pairwise_distance -from brainpy_state._nest_spatial._masks import circular -from brainpy_state._nest_spatial._rule import spatial_pairwise_bernoulli -from brainpy_state._nest_spatial._masks import box -from brainpy_state._nest_spatial._helpers import ( +from brainpy_state._nest_spatial.layers import grid +from brainpy_state._nest_spatial.distance import pairwise_distance +from brainpy_state._nest_spatial.masks import circular +from brainpy_state._nest_spatial.rule import spatial_pairwise_bernoulli +from brainpy_state._nest_spatial.masks import box +from brainpy_state._nest_spatial.helpers import ( center_element, Distance, target_nodes, target_positions, ) @@ -92,7 +92,7 @@ def _sim(self): def test_dump_layer_nodes_index_and_coords(self): import os, tempfile - from brainpy_state._nest_spatial._helpers import dump_layer_nodes + from brainpy_state._nest_spatial.helpers import dump_layer_nodes sim, pop = self._sim() path = tempfile.mktemp(suffix='.txt') text = dump_layer_nodes(sim, pop, path) @@ -107,7 +107,7 @@ def test_dump_layer_nodes_index_and_coords(self): def test_dump_layer_connections_displacement_weight_delay(self): import os, tempfile - from brainpy_state._nest_spatial._helpers import dump_layer_connections + from brainpy_state._nest_spatial.helpers import dump_layer_connections sim, pop = self._sim() path = tempfile.mktemp(suffix='.txt') text = dump_layer_connections(sim, pop, pop, path) @@ -130,27 +130,27 @@ def setUp(self): self.layer = grid([3, 1], extent=[3.0, 1.0]) def test_single_location_returns_int(self): - from brainpy_state._nest_spatial._helpers import nearest_element + from brainpy_state._nest_spatial.helpers import nearest_element out = nearest_element(self.layer, [0.9, 0.0]) self.assertIsInstance(out, int) self.assertEqual(out, 2) def test_list_of_locations_returns_list(self): - from brainpy_state._nest_spatial._helpers import nearest_element + from brainpy_state._nest_spatial.helpers import nearest_element out = nearest_element(self.layer, [[0.9, 0.0], [-0.9, 0.0]]) self.assertEqual(out, [2, 0]) def test_quantity_location(self): - from brainpy_state._nest_spatial._helpers import nearest_element + from brainpy_state._nest_spatial.helpers import nearest_element self.assertEqual(nearest_element(self.layer, [0.9, 0.0] * u.um), 2) def test_tie_returns_lowest_index(self): - from brainpy_state._nest_spatial._helpers import nearest_element + from brainpy_state._nest_spatial.helpers import nearest_element # x = -0.5 is equidistant to node 0 (-1) and node 1 (0); lowest wins. self.assertEqual(nearest_element(self.layer, [-0.5, 0.0]), 0) def test_find_all_returns_every_tie(self): - from brainpy_state._nest_spatial._helpers import nearest_element + from brainpy_state._nest_spatial.helpers import nearest_element out = nearest_element(self.layer, [-0.5, 0.0], find_all=True) self.assertEqual(out, [0, 1]) @@ -161,20 +161,20 @@ def setUp(self): self.layer = grid([3, 3], extent=[2.0, 2.0]) def test_circular_at_origin_selects_plus_shape(self): - from brainpy_state._nest_spatial._helpers import select_nodes_by_mask - from brainpy_state._nest_spatial._masks import circular + from brainpy_state._nest_spatial.helpers import select_nodes_by_mask + from brainpy_state._nest_spatial.masks import circular out = select_nodes_by_mask(self.layer, [0.0, 0.0], circular(0.7)) self.assertEqual(sorted(out), [1, 3, 4, 5, 7]) def test_box_is_directional(self): - from brainpy_state._nest_spatial._helpers import select_nodes_by_mask + from brainpy_state._nest_spatial.helpers import select_nodes_by_mask # displacement x in [0, 10]: only nodes with x >= 0 (columns 1 and 2). out = select_nodes_by_mask(self.layer, [0.0, 0.0], box([0.0, -10.0], [10.0, 10.0])) self.assertEqual(sorted(out), [3, 4, 5, 6, 7, 8]) def test_anchor_offset(self): - from brainpy_state._nest_spatial._helpers import select_nodes_by_mask - from brainpy_state._nest_spatial._masks import circular + from brainpy_state._nest_spatial.helpers import select_nodes_by_mask + from brainpy_state._nest_spatial.masks import circular # anchored on node 7's coord (0.667, 0); radius 0.3 isolates node 7 alone. out = select_nodes_by_mask(self.layer, [2.0 / 3.0, 0.0], circular(0.3)) self.assertEqual(sorted(out), [7]) diff --git a/brainpy_state/_nest_spatial/_kernels.py b/brainpy_state/_nest_spatial/kernels.py similarity index 98% rename from brainpy_state/_nest_spatial/_kernels.py rename to brainpy_state/_nest_spatial/kernels.py index 3607b009..6fe9a1f6 100644 --- a/brainpy_state/_nest_spatial/_kernels.py +++ b/brainpy_state/_nest_spatial/kernels.py @@ -10,7 +10,7 @@ expression evaluates, given the rule's bound sliced positions ``pre_pos (n_pre, d)`` / ``post_pos (n_post, d)``, to an ``(n_pre, n_post)`` grid; every kernel exposes ``_eval_pair(pre_pos, post_pos)`` returning the probability grid, which -:class:`~brainpy_state._nest_spatial._rule.SpatialConnRule` samples (zero seam change). +:class:`~brainpy_state._nest_spatial.rule.SpatialConnRule` samples (zero seam change). """ from __future__ import annotations @@ -20,8 +20,8 @@ from jax.scipy.special import gammaln import brainunit as u -from brainpy_state._nest_spatial._distance import displacement, pairwise_distance -from brainpy_state._nest_spatial._layers import _LEN, _as_len +from brainpy_state._nest_spatial.distance import displacement, pairwise_distance +from brainpy_state._nest_spatial.layers import _LEN, _as_len __all__ = ['distance', 'pos', 'source_pos', 'target_pos', 'gaussian', 'exponential', 'gamma', 'gabor', 'gaussian2D'] diff --git a/brainpy_state/_nest_spatial/_kernels_test.py b/brainpy_state/_nest_spatial/kernels_test.py similarity index 88% rename from brainpy_state/_nest_spatial/_kernels_test.py rename to brainpy_state/_nest_spatial/kernels_test.py index 5c6ca6f8..1e31bc90 100644 --- a/brainpy_state/_nest_spatial/_kernels_test.py +++ b/brainpy_state/_nest_spatial/kernels_test.py @@ -7,7 +7,7 @@ import numpy as np import brainunit as u -from brainpy_state._nest_spatial._kernels import distance, gaussian +from brainpy_state._nest_spatial.kernels import distance, gaussian class TestGaussianKernel(unittest.TestCase): @@ -79,22 +79,22 @@ def test_gaussian_consumes_axis_distance(self): np.testing.assert_allclose(g, np.exp(-(dx ** 2) / 2.0), atol=1e-6) def test_source_pos_broadcasts_source_coord(self): - from brainpy_state._nest_spatial._kernels import source_pos + from brainpy_state._nest_spatial.kernels import source_pos g = np.asarray(u.get_magnitude(source_pos.x._eval_pair(self.pre, self.post).to(u.um))) np.testing.assert_allclose(g, [[0.0, 0.0], [1.0, 1.0]], atol=1e-6) # rows = pre_x def test_target_pos_broadcasts_target_coord(self): - from brainpy_state._nest_spatial._kernels import target_pos + from brainpy_state._nest_spatial.kernels import target_pos g = np.asarray(u.get_magnitude(target_pos.y._eval_pair(self.pre, self.post).to(u.um))) np.testing.assert_allclose(g, [[0.0, 5.0], [0.0, 5.0]], atol=1e-6) # cols = post_y def test_pos_in_connect_path_raises(self): - from brainpy_state._nest_spatial._kernels import pos + from brainpy_state._nest_spatial.kernels import pos with self.assertRaises(ValueError): pos.x._eval_pair(self.pre, self.post) def test_pos_eval_nodes_returns_axis_column(self): - from brainpy_state._nest_spatial._kernels import pos + from brainpy_state._nest_spatial.kernels import pos coords = jnp.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) * u.um gx = np.asarray(u.get_magnitude(pos.x._eval_nodes(coords).to(u.um))) gy = np.asarray(u.get_magnitude(pos.y._eval_nodes(coords).to(u.um))) @@ -111,22 +111,22 @@ def setUp(self): self.coords2d = jnp.array([[1.0, 2.0], [3.0, 4.0]]) * u.um def test_source_pos_z_on_2d_raises(self): - from brainpy_state._nest_spatial._kernels import source_pos + from brainpy_state._nest_spatial.kernels import source_pos with self.assertRaises(ValueError): source_pos.z._eval_pair(self.pre, self.post) def test_target_pos_z_on_2d_raises(self): - from brainpy_state._nest_spatial._kernels import target_pos + from brainpy_state._nest_spatial.kernels import target_pos with self.assertRaises(ValueError): target_pos.z._eval_pair(self.pre, self.post) def test_pos_z_eval_nodes_on_2d_raises(self): - from brainpy_state._nest_spatial._kernels import pos + from brainpy_state._nest_spatial.kernels import pos with self.assertRaises(ValueError): pos.z._eval_nodes(self.coords2d) def test_reprs_name_the_axis(self): - from brainpy_state._nest_spatial._kernels import pos, source_pos, target_pos + from brainpy_state._nest_spatial.kernels import pos, source_pos, target_pos self.assertEqual(repr(distance.x), 'spatial.distance.x') self.assertEqual(repr(source_pos.y), 'spatial.source_pos.y') self.assertEqual(repr(target_pos.z), 'spatial.target_pos.z') @@ -134,7 +134,7 @@ def test_reprs_name_the_axis(self): self.assertEqual(repr(pos), 'spatial.pos') def test_gamma_eval_pair_consumes_axis_expression(self): - from brainpy_state._nest_spatial._kernels import gamma + from brainpy_state._nest_spatial.kernels import gamma pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[3.0, 4.0]]) * u.um # gamma(distance.x, kappa=1, theta=2) on |dx|=3 == e^{-3/2}/2 @@ -146,19 +146,19 @@ class TestDistributions(unittest.TestCase): """exponential / gamma scalar-distance kernels vs the exact NEST formulas.""" def test_exponential_value(self): - from brainpy_state._nest_spatial._kernels import exponential + from brainpy_state._nest_spatial.kernels import exponential k = exponential(distance, beta=2.0) d = jnp.array([0.0, 2.0, 4.0]) * u.um got = np.asarray(u.get_magnitude(k(d))) np.testing.assert_allclose(got, np.exp(-np.array([0.0, 1.0, 2.0])), atol=1e-6) def test_exponential_peak_one_at_zero(self): - from brainpy_state._nest_spatial._kernels import exponential + from brainpy_state._nest_spatial.kernels import exponential self.assertAlmostEqual(float(u.get_magnitude(exponential(distance, beta=0.7)(0.0 * u.um))), 1.0, places=10) def test_gamma_matches_pdf(self): - from brainpy_state._nest_spatial._kernels import gamma + from brainpy_state._nest_spatial.kernels import gamma kappa, theta = 2.0, 1.5 k = gamma(distance, kappa=kappa, theta=theta) d = jnp.array([0.5, 1.0, 3.0]) * u.um @@ -169,14 +169,14 @@ def test_gamma_matches_pdf(self): def test_gamma_shape1_is_exponential(self): # kappa=1 -> gamma reduces to exponential/theta: x^0 e^{-x/θ}/(θ Γ(1)) = e^{-x/θ}/θ - from brainpy_state._nest_spatial._kernels import gamma + from brainpy_state._nest_spatial.kernels import gamma k = gamma(distance, kappa=1.0, theta=2.0) got = float(u.get_magnitude(k(2.0 * u.um))) self.assertAlmostEqual(got, math.exp(-1.0) / 2.0, places=6) def test_kernels_take_per_axis_input(self): # the distributions accept a per-axis expression, not just scalar distance - from brainpy_state._nest_spatial._kernels import exponential + from brainpy_state._nest_spatial.kernels import exponential pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[3.0, 4.0]]) * u.um # exponential(distance.x, beta=1) -> exp(-|dx|) = exp(-3) @@ -188,7 +188,7 @@ class TestAnisotropicKernels(unittest.TestCase): """gabor / gaussian2D two-axis kernels vs the exact NEST formulas (X=|dx|, Y=|dy|).""" def test_gabor_matches_formula(self): - from brainpy_state._nest_spatial._kernels import gabor + from brainpy_state._nest_spatial.kernels import gabor pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[3.0, 0.0]]) * u.um k = gabor(distance.x, distance.y, theta=0.0, gamma=1.0, std=1.0, lam=2.0, psi=0.0) @@ -198,14 +198,14 @@ def test_gabor_matches_formula(self): self.assertAlmostEqual(got, ref, places=6) def test_gabor_rectifies_to_zero(self): - from brainpy_state._nest_spatial._kernels import gabor + from brainpy_state._nest_spatial.kernels import gabor pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.0, 1.0]]) * u.um # Y=1 -> cos(pi) = -1 -> rectified to 0 k = gabor(distance.x, distance.y, lam=2.0) self.assertAlmostEqual(float(u.get_magnitude(k._eval_pair(pre, post)[0, 0])), 0.0, places=7) def test_gabor_rotated_and_phased(self): - from brainpy_state._nest_spatial._kernels import gabor + from brainpy_state._nest_spatial.kernels import gabor pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[1.0, 2.0]]) * u.um k = gabor(distance.x, distance.y, theta=90.0, gamma=2.0, std=1.5, lam=3.0, psi=30.0) @@ -218,7 +218,7 @@ def test_gabor_rotated_and_phased(self): self.assertAlmostEqual(got, ref, places=6) def test_gaussian2D_reduces_to_product_when_rho0(self): - from brainpy_state._nest_spatial._kernels import gaussian2D + from brainpy_state._nest_spatial.kernels import gaussian2D pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[2.0, 4.0]]) * u.um k = gaussian2D(distance.x, distance.y, std_x=1.0, std_y=2.0, rho=0.0) @@ -227,7 +227,7 @@ def test_gaussian2D_reduces_to_product_when_rho0(self): self.assertAlmostEqual(got, ref, places=6) def test_gaussian2D_with_correlation(self): - from brainpy_state._nest_spatial._kernels import gaussian2D + from brainpy_state._nest_spatial.kernels import gaussian2D pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[1.0, 1.0]]) * u.um k = gaussian2D(distance.x, distance.y, std_x=1.0, std_y=1.0, rho=0.5) diff --git a/brainpy_state/_nest_spatial/_layers.py b/brainpy_state/_nest_spatial/layers.py similarity index 100% rename from brainpy_state/_nest_spatial/_layers.py rename to brainpy_state/_nest_spatial/layers.py diff --git a/brainpy_state/_nest_spatial/_layers_test.py b/brainpy_state/_nest_spatial/layers_test.py similarity index 98% rename from brainpy_state/_nest_spatial/_layers_test.py rename to brainpy_state/_nest_spatial/layers_test.py index 1dcfdd30..da91d820 100644 --- a/brainpy_state/_nest_spatial/_layers_test.py +++ b/brainpy_state/_nest_spatial/layers_test.py @@ -8,7 +8,7 @@ import brainunit as u from brainpy_state._dist import Uniform -from brainpy_state._nest_spatial._layers import Layer, grid, free +from brainpy_state._nest_spatial.layers import Layer, grid, free class TestGrid(unittest.TestCase): diff --git a/brainpy_state/_nest_spatial/_masks.py b/brainpy_state/_nest_spatial/masks.py similarity index 98% rename from brainpy_state/_nest_spatial/_masks.py rename to brainpy_state/_nest_spatial/masks.py index 42f24759..18bcb6d2 100644 --- a/brainpy_state/_nest_spatial/_masks.py +++ b/brainpy_state/_nest_spatial/masks.py @@ -13,8 +13,8 @@ import brainunit as u -from brainpy_state._nest_spatial._distance import displacement, pairwise_distance -from brainpy_state._nest_spatial._layers import _LEN, _as_len +from brainpy_state._nest_spatial.distance import displacement, pairwise_distance +from brainpy_state._nest_spatial.layers import _LEN, _as_len __all__ = ['circular', 'spherical', 'box', 'rectangular', 'doughnut', 'elliptical', 'ellipsoidal'] diff --git a/brainpy_state/_nest_spatial/_masks_test.py b/brainpy_state/_nest_spatial/masks_test.py similarity index 88% rename from brainpy_state/_nest_spatial/_masks_test.py rename to brainpy_state/_nest_spatial/masks_test.py index aacac163..4e9444f5 100644 --- a/brainpy_state/_nest_spatial/_masks_test.py +++ b/brainpy_state/_nest_spatial/masks_test.py @@ -6,7 +6,7 @@ import numpy as np import brainunit as u -from brainpy_state._nest_spatial._masks import circular, spherical, box +from brainpy_state._nest_spatial.masks import circular, spherical, box class TestMasks(unittest.TestCase): @@ -44,7 +44,7 @@ def test_spherical_is_distance_cutoff_3d(self): class TestDoughnut(unittest.TestCase): def test_annulus_boundary_inner_exclusive_outer_inclusive(self): - from brainpy_state._nest_spatial._masks import doughnut + from brainpy_state._nest_spatial.masks import doughnut pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.2, 0.0], [0.3, 0.0], [0.5, 0.0], [0.7, 0.0], [0.8, 0.0]]) * u.um m = np.asarray(doughnut(0.3, 0.7).contains(pre, post)) @@ -52,7 +52,7 @@ def test_annulus_boundary_inner_exclusive_outer_inclusive(self): np.testing.assert_array_equal(m[0], [False, False, True, True, False]) def test_inner_zero_excludes_only_center(self): - from brainpy_state._nest_spatial._masks import doughnut, circular + from brainpy_state._nest_spatial.masks import doughnut, circular pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.0, 0.0], [0.5, 0.0]]) * u.um d = np.asarray(doughnut(0.0, 1.0).contains(pre, post)) @@ -61,7 +61,7 @@ def test_inner_zero_excludes_only_center(self): np.testing.assert_array_equal(c[0], [True, True]) # circular includes center def test_inner_equals_outer_is_empty(self): - from brainpy_state._nest_spatial._masks import doughnut + from brainpy_state._nest_spatial.masks import doughnut pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.0, 0.0], [0.5, 0.0], [0.5, 0.0]]) * u.um m = np.asarray(doughnut(0.5, 0.5).contains(pre, post)) @@ -70,14 +70,14 @@ def test_inner_equals_outer_is_empty(self): class TestRectangular(unittest.TestCase): def test_unrotated_box_on_displacement(self): - from brainpy_state._nest_spatial._masks import rectangular + from brainpy_state._nest_spatial.masks import rectangular pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.2, 0.2], [0.6, 0.0]]) * u.um m = np.asarray(rectangular([-0.5, -0.5], [0.5, 0.5]).contains(pre, post)) np.testing.assert_array_equal(m[0], [True, False]) def test_azimuth_90_rotates_acceptance(self): - from brainpy_state._nest_spatial._masks import rectangular + from brainpy_state._nest_spatial.masks import rectangular pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.8, 0.0]]) * u.um # disp (0.8, 0) tall = rectangular([-0.2, -1.0], [0.2, 1.0]) # x:+-0.2 -> excludes (0.8,0) @@ -88,7 +88,7 @@ def test_azimuth_90_rotates_acceptance(self): class TestElliptical(unittest.TestCase): def test_axis_aligned(self): - from brainpy_state._nest_spatial._masks import elliptical + from brainpy_state._nest_spatial.masks import elliptical pre = jnp.array([[0.0, 0.0]]) * u.um # semi-major 1 (x), semi-minor 0.5 (y): in iff dx^2 + 4 dy^2 <= 1 post = jnp.array([[0.9, 0.0], [1.1, 0.0], [0.0, 0.4], [0.0, 0.6]]) * u.um @@ -96,7 +96,7 @@ def test_axis_aligned(self): np.testing.assert_array_equal(m[0], [True, False, True, False]) def test_major_equals_minor_is_circular(self): - from brainpy_state._nest_spatial._masks import elliptical, circular + from brainpy_state._nest_spatial.masks import elliptical, circular pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.9, 0.0], [0.0, 0.9], [0.8, 0.8]]) * u.um e = np.asarray(elliptical(2.0, 2.0).contains(pre, post)) # semi 1 == circular(1) @@ -104,7 +104,7 @@ def test_major_equals_minor_is_circular(self): np.testing.assert_array_equal(e[0], c[0]) def test_rotated_90_swaps_axes(self): - from brainpy_state._nest_spatial._masks import elliptical + from brainpy_state._nest_spatial.masks import elliptical pre = jnp.array([[0.0, 0.0]]) * u.um post = jnp.array([[0.9, 0.0], [0.0, 0.9]]) * u.um aligned = np.asarray(elliptical(2.0, 1.0).contains(pre, post)) @@ -115,7 +115,7 @@ def test_rotated_90_swaps_axes(self): class TestEllipsoidal(unittest.TestCase): def test_axis_aligned_3d(self): - from brainpy_state._nest_spatial._masks import ellipsoidal + from brainpy_state._nest_spatial.masks import ellipsoidal pre = jnp.array([[0.0, 0.0, 0.0]]) * u.um # semi 1,1,0.5: in iff dx^2 + dy^2 + 4 dz^2 <= 1 post = jnp.array([[0.9, 0, 0], [0, 0.9, 0], [0, 0, 0.4], [0, 0, 0.6]]) * u.um @@ -123,7 +123,7 @@ def test_axis_aligned_3d(self): np.testing.assert_array_equal(m[0], [True, True, True, False]) def test_equal_axes_is_spherical(self): - from brainpy_state._nest_spatial._masks import ellipsoidal, spherical + from brainpy_state._nest_spatial.masks import ellipsoidal, spherical pre = jnp.array([[0.0, 0.0, 0.0]]) * u.um post = jnp.array([[0.9, 0, 0], [0, 0, 0.9], [0.7, 0.7, 0.0], [0.8, 0.8, 0.0]]) * u.um e = np.asarray(ellipsoidal(2.0, 2.0, 2.0).contains(pre, post)) # sphere radius 1 diff --git a/brainpy_state/_nest_spatial/_namespace_test.py b/brainpy_state/_nest_spatial/namespace_test.py similarity index 100% rename from brainpy_state/_nest_spatial/_namespace_test.py rename to brainpy_state/_nest_spatial/namespace_test.py diff --git a/brainpy_state/_nest_spatial/_plot.py b/brainpy_state/_nest_spatial/plot.py similarity index 97% rename from brainpy_state/_nest_spatial/_plot.py rename to brainpy_state/_nest_spatial/plot.py index c5beaa28..785a47d0 100644 --- a/brainpy_state/_nest_spatial/_plot.py +++ b/brainpy_state/_nest_spatial/plot.py @@ -11,9 +11,9 @@ import numpy as np import brainunit as u -from brainpy_state._nest_spatial._distance import pairwise_distance -from brainpy_state._nest_spatial._helpers import target_positions -from brainpy_state._nest_spatial._layers import _LEN, _as_len +from brainpy_state._nest_spatial.distance import pairwise_distance +from brainpy_state._nest_spatial.helpers import target_positions +from brainpy_state._nest_spatial.layers import _LEN, _as_len __all__ = ['plot_layer', 'plot_targets', 'plot_sources', 'plot_probability_parameter'] diff --git a/brainpy_state/_nest_spatial/_plot_test.py b/brainpy_state/_nest_spatial/plot_test.py similarity index 84% rename from brainpy_state/_nest_spatial/_plot_test.py rename to brainpy_state/_nest_spatial/plot_test.py index a6123d48..0bc3e17d 100644 --- a/brainpy_state/_nest_spatial/_plot_test.py +++ b/brainpy_state/_nest_spatial/plot_test.py @@ -15,10 +15,10 @@ matplotlib = None from brainpy_state import Simulator, iaf_psc_alpha -from brainpy_state._nest_spatial._layers import grid -from brainpy_state._nest_spatial._kernels import distance, gaussian -from brainpy_state._nest_spatial._masks import circular -from brainpy_state._nest_spatial._rule import spatial_pairwise_bernoulli +from brainpy_state._nest_spatial.layers import grid +from brainpy_state._nest_spatial.kernels import distance, gaussian +from brainpy_state._nest_spatial.masks import circular +from brainpy_state._nest_spatial.rule import spatial_pairwise_bernoulli @unittest.skipIf(matplotlib is None, 'matplotlib not installed') @@ -37,33 +37,33 @@ def _sim(self): return sim, pop def test_plot_layer_2d_returns_figure_with_points(self): - from brainpy_state._nest_spatial._plot import plot_layer + from brainpy_state._nest_spatial.plot import plot_layer fig = plot_layer(grid([3, 3], extent=[2.0, 2.0])) self.assertIsInstance(fig, Figure) self.assertTrue(fig.axes[0].collections) # something was scattered def test_plot_layer_3d(self): - from brainpy_state._nest_spatial._plot import plot_layer + from brainpy_state._nest_spatial.plot import plot_layer fig = plot_layer(grid([2, 2, 2], extent=[1.0, 1.0, 1.0])) self.assertIsInstance(fig, Figure) self.assertEqual(fig.axes[0].name, '3d') def test_plot_targets(self): - from brainpy_state._nest_spatial._plot import plot_targets + from brainpy_state._nest_spatial.plot import plot_targets sim, pop = self._sim() fig = plot_targets(sim, pop, pop) self.assertIsInstance(fig, Figure) self.assertGreaterEqual(len(fig.axes[0].collections), 2) # targets + source def test_plot_sources(self): - from brainpy_state._nest_spatial._plot import plot_sources + from brainpy_state._nest_spatial.plot import plot_sources sim, pop = self._sim() fig = plot_sources(sim, pop, pop) self.assertIsInstance(fig, Figure) self.assertGreaterEqual(len(fig.axes[0].collections), 2) def test_plot_probability_parameter_heatmap(self): - from brainpy_state._nest_spatial._plot import plot_probability_parameter + from brainpy_state._nest_spatial.plot import plot_probability_parameter fig = plot_probability_parameter(gaussian(distance, std=0.3), mask=circular(0.4), extent=(-0.5, 0.5, -0.5, 0.5)) self.assertIsInstance(fig, Figure) diff --git a/brainpy_state/_nest_spatial/_rule.py b/brainpy_state/_nest_spatial/rule.py similarity index 95% rename from brainpy_state/_nest_spatial/_rule.py rename to brainpy_state/_nest_spatial/rule.py index 0fa0baa7..5c567f1b 100644 --- a/brainpy_state/_nest_spatial/_rule.py +++ b/brainpy_state/_nest_spatial/rule.py @@ -1,7 +1,7 @@ # Copyright 2026 BrainX Ecosystem Limited. Apache 2.0. """Distance-dependent pairwise-Bernoulli connection rule. -``spatial_pairwise_bernoulli`` is an ordinary :class:`~brainpy_state._nest_network._rules.ConnRule` +``spatial_pairwise_bernoulli`` is an ordinary :class:`~brainpy_state._nest_network.rules.ConnRule` that additionally needs the pre/post node coordinates. It is constructed *unbound*; the :class:`~brainpy_state.Simulator` binds sliced positions via :meth:`SpatialConnRule.with_coords` at ``connect`` time, then the existing static / plastic projection paths sample it unchanged. @@ -13,9 +13,9 @@ import jax import jax.numpy as jnp -from brainpy_state._nest_network._rules import ConnRule -from brainpy_state._nest_network._connectivity import ConnSpec -from brainpy_state._nest_spatial._distance import pairwise_distance +from brainpy_state._nest_network.rules import ConnRule +from brainpy_state._nest_network.connectivity import ConnSpec +from brainpy_state._nest_spatial.distance import pairwise_distance __all__ = ['SpatialConnRule', 'spatial_pairwise_bernoulli'] @@ -30,7 +30,7 @@ class SpatialConnRule(ConnRule): Parameters ---------- p : callable or float - A distance kernel ``p(d)`` (e.g. :func:`~brainpy_state._nest_spatial._kernels.gaussian`) + A distance kernel ``p(d)`` (e.g. :func:`~brainpy_state._nest_spatial.kernels.gaussian`) or a constant probability. mask : object, optional A mask with ``contains(pre_pos, post_pos) -> bool (n_pre, n_post)`` (hard cutoff). diff --git a/brainpy_state/_nest_spatial/_rule_test.py b/brainpy_state/_nest_spatial/rule_test.py similarity index 93% rename from brainpy_state/_nest_spatial/_rule_test.py rename to brainpy_state/_nest_spatial/rule_test.py index 891117c5..45cd744a 100644 --- a/brainpy_state/_nest_spatial/_rule_test.py +++ b/brainpy_state/_nest_spatial/rule_test.py @@ -7,12 +7,12 @@ import numpy as np import brainunit as u -from brainpy_state._nest_network._rules import ConnRule -from brainpy_state._nest_spatial._layers import grid -from brainpy_state._nest_spatial._distance import pairwise_distance -from brainpy_state._nest_spatial._kernels import distance, gaussian -from brainpy_state._nest_spatial._masks import circular -from brainpy_state._nest_spatial._rule import SpatialConnRule, spatial_pairwise_bernoulli +from brainpy_state._nest_network.rules import ConnRule +from brainpy_state._nest_spatial.layers import grid +from brainpy_state._nest_spatial.distance import pairwise_distance +from brainpy_state._nest_spatial.kernels import distance, gaussian +from brainpy_state._nest_spatial.masks import circular +from brainpy_state._nest_spatial.rule import SpatialConnRule, spatial_pairwise_bernoulli def _bind(rule, lay_a, lay_b): diff --git a/brainpy_state/_nest_synapse/bernoulli_synapse.py b/brainpy_state/_nest_synapse/bernoulli_synapse.py index 95223dba..21bbd2f4 100644 --- a/brainpy_state/_nest_synapse/bernoulli_synapse.py +++ b/brainpy_state/_nest_synapse/bernoulli_synapse.py @@ -3,20 +3,20 @@ Rebuilt as a frozen parameter spec plus a pure, *stochastic* ``update(state, ctx)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The synapse is +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The synapse is non-plastic: on each presynaptic spike it delivers the full (per-edge) ``weight`` with probability ``p_transmit`` and drops it otherwise — a per-edge Bernoulli gate on the delivered amplitude, with **no weight state evolving**. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import jax import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( to_unit_interval, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_synapse/bernoulli_synapse_rule_test.py b/brainpy_state/_nest_synapse/bernoulli_synapse_rule_test.py index 5e7fa5f0..70d4f0c5 100644 --- a/brainpy_state/_nest_synapse/bernoulli_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/bernoulli_synapse_rule_test.py @@ -17,10 +17,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import bernoulli_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(E, key=None, pre=None): diff --git a/brainpy_state/_nest_synapse/cont_delay_synapse.py b/brainpy_state/_nest_synapse/cont_delay_synapse.py index 9173296d..a031db55 100644 --- a/brainpy_state/_nest_synapse/cont_delay_synapse.py +++ b/brainpy_state/_nest_synapse/cont_delay_synapse.py @@ -3,7 +3,7 @@ Rebuilt as a frozen parameter spec plus the plain static ``update(state, ctx)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. The synapse is +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The synapse is non-plastic: no per-edge state evolves and the effective weight is just the constant (per-edge) ``weight`` — identical to :class:`static_synapse`. Its one distinguishing feature, a delay that need *not* be an integer multiple of the @@ -11,13 +11,13 @@ seam, opted into here via the class attribute ``fractional_delay = True``. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import brainstate import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa +from brainpy_state._nest_base.plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa __all__ = ['cont_delay_synapse'] diff --git a/brainpy_state/_nest_synapse/cont_delay_synapse_rule_test.py b/brainpy_state/_nest_synapse/cont_delay_synapse_rule_test.py index 14062e05..abc0086e 100644 --- a/brainpy_state/_nest_synapse/cont_delay_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/cont_delay_synapse_rule_test.py @@ -20,11 +20,11 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) brainstate.environ.set(dt=0.1 * u.ms) # resolution floor reference from brainpy_state import cont_delay_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(E, pre=None): diff --git a/brainpy_state/_nest_synapse/diffusion_connection.py b/brainpy_state/_nest_synapse/diffusion_connection.py index 6f255317..16ad79f6 100644 --- a/brainpy_state/_nest_synapse/diffusion_connection.py +++ b/brainpy_state/_nest_synapse/diffusion_connection.py @@ -5,7 +5,7 @@ import numpy as np from brainstate.typing import ArrayLike -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # diff --git a/brainpy_state/_nest_synapse/diffusion_connection_test.py b/brainpy_state/_nest_synapse/diffusion_connection_test.py index 61c6f79c..c2bc494d 100644 --- a/brainpy_state/_nest_synapse/diffusion_connection_test.py +++ b/brainpy_state/_nest_synapse/diffusion_connection_test.py @@ -25,7 +25,7 @@ from brainpy.state import diffusion_connection jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_synapse/gap_junction.py b/brainpy_state/_nest_synapse/gap_junction.py index dd0e3974..4af1e471 100644 --- a/brainpy_state/_nest_synapse/gap_junction.py +++ b/brainpy_state/_nest_synapse/gap_junction.py @@ -5,7 +5,7 @@ import numpy as np from brainstate.typing import ArrayLike -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # diff --git a/brainpy_state/_nest_synapse/gap_junction_test.py b/brainpy_state/_nest_synapse/gap_junction_test.py index 54c58987..8763792e 100644 --- a/brainpy_state/_nest_synapse/gap_junction_test.py +++ b/brainpy_state/_nest_synapse/gap_junction_test.py @@ -26,7 +26,7 @@ from brainpy.state import gap_junction jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_synapse/quantal_stp_synapse.py b/brainpy_state/_nest_synapse/quantal_stp_synapse.py index b9a89883..d3e88e5a 100644 --- a/brainpy_state/_nest_synapse/quantal_stp_synapse.py +++ b/brainpy_state/_nest_synapse/quantal_stp_synapse.py @@ -2,7 +2,7 @@ """NEST-faithful ``quantal_stp_synapse`` — probabilistic-release STP spec + rule. Rebuilt as a frozen spec + a pure, *stochastic* ``update(state, ctx)`` rule -kernel on :class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. +kernel on :class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Each connection has ``n`` (static) release sites; ``a`` are currently available. On a spike: facilitate ``u``, stochastically recover depleted sites, then release ``n_rel ~ Binomial(a, u)`` sites, delivering ``w_eff = n_rel * weight`` @@ -10,14 +10,14 @@ (mean release converges to the ``tsodyks2`` limit). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import jax import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_int, to_unit_interval, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_synapse/quantal_stp_synapse_rule_test.py b/brainpy_state/_nest_synapse/quantal_stp_synapse_rule_test.py index d4200d9c..7ffeb821 100644 --- a/brainpy_state/_nest_synapse/quantal_stp_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/quantal_stp_synapse_rule_test.py @@ -14,10 +14,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import quantal_stp_synapse, tsodyks2_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(key, t, E): diff --git a/brainpy_state/_nest_synapse/rate_connection_delayed.py b/brainpy_state/_nest_synapse/rate_connection_delayed.py index b525f72a..cb11b8ec 100644 --- a/brainpy_state/_nest_synapse/rate_connection_delayed.py +++ b/brainpy_state/_nest_synapse/rate_connection_delayed.py @@ -5,7 +5,7 @@ import numpy as np from brainstate.typing import ArrayLike -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # diff --git a/brainpy_state/_nest_synapse/rate_connection_delayed_test.py b/brainpy_state/_nest_synapse/rate_connection_delayed_test.py index f595d39c..986c3ac8 100644 --- a/brainpy_state/_nest_synapse/rate_connection_delayed_test.py +++ b/brainpy_state/_nest_synapse/rate_connection_delayed_test.py @@ -26,7 +26,7 @@ from brainpy.state import lin_rate_ipn, rate_connection_delayed jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_synapse/rate_connection_instantaneous.py b/brainpy_state/_nest_synapse/rate_connection_instantaneous.py index a287738b..d2045823 100644 --- a/brainpy_state/_nest_synapse/rate_connection_instantaneous.py +++ b/brainpy_state/_nest_synapse/rate_connection_instantaneous.py @@ -5,7 +5,7 @@ import numpy as np from brainstate.typing import ArrayLike -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # diff --git a/brainpy_state/_nest_synapse/rate_connection_instantaneous_test.py b/brainpy_state/_nest_synapse/rate_connection_instantaneous_test.py index d29aceda..7898ca01 100644 --- a/brainpy_state/_nest_synapse/rate_connection_instantaneous_test.py +++ b/brainpy_state/_nest_synapse/rate_connection_instantaneous_test.py @@ -27,7 +27,7 @@ from brainpy.state import lin_rate_ipn, rate_connection_instantaneous jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_synapse/sic_connection.py b/brainpy_state/_nest_synapse/sic_connection.py index 6004cb2e..9853cdfb 100644 --- a/brainpy_state/_nest_synapse/sic_connection.py +++ b/brainpy_state/_nest_synapse/sic_connection.py @@ -5,7 +5,7 @@ import numpy as np from brainstate.typing import ArrayLike -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse # Copyright 2026 BrainX Ecosystem Limited. All Rights Reserved. # @@ -37,7 +37,7 @@ class sic_connection(NESTSynapse): astrocyte's per-step ``SIC``) and the integer ``delay_steps``, validates the sender/receiver model pair, and is consumed by :class:`~brainpy_state.Simulator`, which builds the routing — an ``as_current`` - :class:`~brainpy_state._nest_network._event_proj.EventProjection` that reads the + :class:`~brainpy_state._nest_network.event_proj.EventProjection` that reads the astrocyte's emission holder and deposits ``weight·SIC`` into the neuron's labelled ``'I_SIC'`` current channel each step. diff --git a/brainpy_state/_nest_synapse/sic_connection_test.py b/brainpy_state/_nest_synapse/sic_connection_test.py index d525a6c7..39a7ad1d 100644 --- a/brainpy_state/_nest_synapse/sic_connection_test.py +++ b/brainpy_state/_nest_synapse/sic_connection_test.py @@ -26,7 +26,7 @@ from brainpy_state import sic_connection, aeif_cond_alpha_astro, astrocyte_lr_1994 jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) def _is_nest_available(): diff --git a/brainpy_state/_nest_synapse/static_synapse.py b/brainpy_state/_nest_synapse/static_synapse.py index 6c76e0d2..b2105e17 100644 --- a/brainpy_state/_nest_synapse/static_synapse.py +++ b/brainpy_state/_nest_synapse/static_synapse.py @@ -2,17 +2,17 @@ """NEST-faithful ``static_synapse`` — fixed-weight synapse spec + trivial rule. Rebuilt as a frozen parameter spec plus the simplest possible pure rule kernel -on :class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`: the +on :class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`: the effective weight is just the (per-edge) constant ``weight``, and no state evolves. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa +from brainpy_state._nest_base.plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa __all__ = ['static_synapse'] diff --git a/brainpy_state/_nest_synapse/static_synapse_hom_w.py b/brainpy_state/_nest_synapse/static_synapse_hom_w.py index 60cc6588..aff4d64b 100644 --- a/brainpy_state/_nest_synapse/static_synapse_hom_w.py +++ b/brainpy_state/_nest_synapse/static_synapse_hom_w.py @@ -2,21 +2,21 @@ """NEST-faithful ``static_synapse_hom_w`` — homogeneous-weight static synapse. Rebuilt as a frozen spec + trivial pure rule on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. Identical to +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Identical to :class:`~brainpy_state._nest_synapse.static_synapse.static_synapse` except the weight is a single value shared by every connection (NEST common property): the substrate stores ``'weight'`` as a 0-d :class:`brainstate.ParamState`. Per-connection ``delay`` and ``receptor_type`` remain settable. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse from typing import Mapping import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa +from brainpy_state._nest_base.plastic_base import unit_of, validate_delay, validate_receptor_type, weight_to_pa __all__ = ['static_synapse_hom_w'] diff --git a/brainpy_state/_nest_synapse/static_synapse_hom_w_rule_test.py b/brainpy_state/_nest_synapse/static_synapse_hom_w_rule_test.py index b637e40d..427f53f0 100644 --- a/brainpy_state/_nest_synapse/static_synapse_hom_w_rule_test.py +++ b/brainpy_state/_nest_synapse/static_synapse_hom_w_rule_test.py @@ -10,10 +10,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import static_synapse_hom_w -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(E): diff --git a/brainpy_state/_nest_synapse/static_synapse_rule_test.py b/brainpy_state/_nest_synapse/static_synapse_rule_test.py index 835ec4bf..4098dfdb 100644 --- a/brainpy_state/_nest_synapse/static_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/static_synapse_rule_test.py @@ -10,10 +10,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import static_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ctx(E): diff --git a/brainpy_state/_nest_synapse/tsodyks2_synapse.py b/brainpy_state/_nest_synapse/tsodyks2_synapse.py index 1c54c274..3f3c2efb 100644 --- a/brainpy_state/_nest_synapse/tsodyks2_synapse.py +++ b/brainpy_state/_nest_synapse/tsodyks2_synapse.py @@ -2,20 +2,20 @@ """NEST-faithful ``tsodyks2_synapse`` — multiplicative STP spec + pure rule. Rebuilt as a frozen spec + pure ``update(state, ctx)`` rule kernel on -:class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. Per-edge +:class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Per-edge ``weight`` and per-edge state ``u`` (utilization), ``x`` (available resources), ``t_lastspike``; shared ``U``, ``tau_rec``, ``tau_fac``. The delivered amplitude is ``w_eff = x*u * weight`` with ``x`` updated **before** ``u`` (using the old ``u``), exactly as in NEST ``models/tsodyks2_synapse.h``. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, to_unit_interval, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_synapse/tsodyks2_synapse_rule_test.py b/brainpy_state/_nest_synapse/tsodyks2_synapse_rule_test.py index 2fe3ef68..6a1580f9 100644 --- a/brainpy_state/_nest_synapse/tsodyks2_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/tsodyks2_synapse_rule_test.py @@ -10,10 +10,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import tsodyks2_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _spike_ctx(t, E=1): diff --git a/brainpy_state/_nest_synapse/tsodyks_synapse.py b/brainpy_state/_nest_synapse/tsodyks_synapse.py index 3a8758fe..d246d281 100644 --- a/brainpy_state/_nest_synapse/tsodyks_synapse.py +++ b/brainpy_state/_nest_synapse/tsodyks_synapse.py @@ -2,7 +2,7 @@ """NEST-faithful ``tsodyks_synapse`` — Tsodyks (2000) STP spec + pure rule. Rebuilt as a frozen parameter spec plus a pure ``update(state, ctx)`` rule -kernel on :class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. +kernel on :class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. Per-edge ``weight`` and per-edge state ``x`` (recovered), ``y`` (active), ``u`` (utilization), ``t_lastspike``; shared ``U`` and time constants. Uses NEST's ``expm1`` propagator form (``Pzz = expm1(-h/tau_rec)``, ``x -= Pzz*z``); @@ -11,13 +11,13 @@ (they are floating-point distinct). """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, to_unit_interval, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_synapse/tsodyks_synapse_hom.py b/brainpy_state/_nest_synapse/tsodyks_synapse_hom.py index fbb54f00..89496a50 100644 --- a/brainpy_state/_nest_synapse/tsodyks_synapse_hom.py +++ b/brainpy_state/_nest_synapse/tsodyks_synapse_hom.py @@ -2,7 +2,7 @@ """NEST-faithful ``tsodyks_synapse_hom`` — homogeneous Tsodyks STP spec + rule. Rebuilt as a frozen parameter spec plus a pure ``update(state, ctx)`` rule -kernel that runs on :class:`~brainpy_state._nest_network._event_plastic.EventPlasticProj`. +kernel that runs on :class:`~brainpy_state._nest_network.event_plastic.EventPlasticProj`. The ``_hom`` variant shares ``weight``, ``U`` and the time constants across all connections (NEST common properties) and keeps ``x, y, u, t_lastspike`` per-edge. It uses NEST's *plain-exp* propagator form (``Pzz = exp(-h/tau_rec)``, @@ -11,13 +11,13 @@ distinct, so each is kept exactly as NEST has it. """ from __future__ import annotations -from brainpy_state._nest_base._base import NESTSynapse +from brainpy_state._nest_base.base import NESTSynapse import jax.numpy as jnp import brainunit as u from brainstate.typing import ArrayLike -from brainpy_state._nest_base._plastic_base import ( +from brainpy_state._nest_base.plastic_base import ( frozen, to_ms, to_scalar_float, unit_of, validate_delay, validate_receptor_type, weight_to_pa, ) diff --git a/brainpy_state/_nest_synapse/tsodyks_synapse_hom_rule_test.py b/brainpy_state/_nest_synapse/tsodyks_synapse_hom_rule_test.py index 7b4090e8..2d32d26e 100644 --- a/brainpy_state/_nest_synapse/tsodyks_synapse_hom_rule_test.py +++ b/brainpy_state/_nest_synapse/tsodyks_synapse_hom_rule_test.py @@ -12,10 +12,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import tsodyks_synapse_hom -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ref_hom(seq_h, U=0.5, tpsc=3., tfac=0., trec=800., w=1.0): diff --git a/brainpy_state/_nest_synapse/tsodyks_synapse_rule_test.py b/brainpy_state/_nest_synapse/tsodyks_synapse_rule_test.py index defed979..f0fdc9ad 100644 --- a/brainpy_state/_nest_synapse/tsodyks_synapse_rule_test.py +++ b/brainpy_state/_nest_synapse/tsodyks_synapse_rule_test.py @@ -12,10 +12,10 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import tsodyks_synapse -from brainpy_state._nest_network._event_plastic import KernelContext +from brainpy_state._nest_network.event_plastic import KernelContext def _ref_tsodyks(seq_h, U=0.5, tpsc=3., tfac=0., trec=800., w=1.0): diff --git a/brainpy_state/_nest_validation/BrodyHopfield_test.py b/brainpy_state/_nest_validation/BrodyHopfield_test.py index 18398e47..87856b80 100644 --- a/brainpy_state/_nest_validation/BrodyHopfield_test.py +++ b/brainpy_state/_nest_validation/BrodyHopfield_test.py @@ -40,7 +40,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/CampbellSiegert_test.py b/brainpy_state/_nest_validation/CampbellSiegert_test.py index e1666f84..5b030cef 100644 --- a/brainpy_state/_nest_validation/CampbellSiegert_test.py +++ b/brainpy_state/_nest_validation/CampbellSiegert_test.py @@ -31,7 +31,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import examples.nest_like.CampbellSiegert as demo diff --git a/brainpy_state/_nest_validation/_stdp_dopamine_drive.py b/brainpy_state/_nest_validation/_stdp_dopamine_drive.py index 7efcceb7..fa7da89c 100644 --- a/brainpy_state/_nest_validation/_stdp_dopamine_drive.py +++ b/brainpy_state/_nest_validation/_stdp_dopamine_drive.py @@ -385,7 +385,7 @@ def bp_dopamine_weight_trace(rule, pre_fire, post_fire, dopa_arrival, n_steps, * import jax.numpy as jnp import brainunit as u from brainstate import transform - from brainpy_state._nest_network._event_plastic import VoltageCoupledPlasticProj + from brainpy_state._nest_network.event_plastic import VoltageCoupledPlasticProj from brainpy_state._nest_device.volume_transmitter import volume_transmitter class _Sink: # delivery target (ignored); not None diff --git a/brainpy_state/_nest_validation/aeif_cond_alpha_astro_test.py b/brainpy_state/_nest_validation/aeif_cond_alpha_astro_test.py index 1dee45a9..7708795c 100644 --- a/brainpy_state/_nest_validation/aeif_cond_alpha_astro_test.py +++ b/brainpy_state/_nest_validation/aeif_cond_alpha_astro_test.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/aeif_cond_alpha_conductance_test.py b/brainpy_state/_nest_validation/aeif_cond_alpha_conductance_test.py index 540e441d..5cf573d9 100644 --- a/brainpy_state/_nest_validation/aeif_cond_alpha_conductance_test.py +++ b/brainpy_state/_nest_validation/aeif_cond_alpha_conductance_test.py @@ -23,7 +23,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/aeif_cond_beta_multisynapse_test.py b/brainpy_state/_nest_validation/aeif_cond_beta_multisynapse_test.py index 426f75c9..fa7dfd2c 100644 --- a/brainpy_state/_nest_validation/aeif_cond_beta_multisynapse_test.py +++ b/brainpy_state/_nest_validation/aeif_cond_beta_multisynapse_test.py @@ -24,7 +24,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/aeif_cond_exp_conductance_test.py b/brainpy_state/_nest_validation/aeif_cond_exp_conductance_test.py index b757f0c6..ee5f27fe 100644 --- a/brainpy_state/_nest_validation/aeif_cond_exp_conductance_test.py +++ b/brainpy_state/_nest_validation/aeif_cond_exp_conductance_test.py @@ -33,7 +33,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/aeif_psc_alpha_psc_current_test.py b/brainpy_state/_nest_validation/aeif_psc_alpha_psc_current_test.py index 76588999..377700c8 100644 --- a/brainpy_state/_nest_validation/aeif_psc_alpha_psc_current_test.py +++ b/brainpy_state/_nest_validation/aeif_psc_alpha_psc_current_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/aeif_psc_exp_psc_current_test.py b/brainpy_state/_nest_validation/aeif_psc_exp_psc_current_test.py index 7d339871..edf677e3 100644 --- a/brainpy_state/_nest_validation/aeif_psc_exp_psc_current_test.py +++ b/brainpy_state/_nest_validation/aeif_psc_exp_psc_current_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/artificial_synchrony_test.py b/brainpy_state/_nest_validation/artificial_synchrony_test.py index bfc33218..a0207ead 100644 --- a/brainpy_state/_nest_validation/artificial_synchrony_test.py +++ b/brainpy_state/_nest_validation/artificial_synchrony_test.py @@ -26,7 +26,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np diff --git a/brainpy_state/_nest_validation/astrocyte_brunel_test.py b/brainpy_state/_nest_validation/astrocyte_brunel_test.py index 0088469a..77051f4f 100644 --- a/brainpy_state/_nest_validation/astrocyte_brunel_test.py +++ b/brainpy_state/_nest_validation/astrocyte_brunel_test.py @@ -39,7 +39,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/astrocyte_interaction_test.py b/brainpy_state/_nest_validation/astrocyte_interaction_test.py index 54aab493..b189dabb 100644 --- a/brainpy_state/_nest_validation/astrocyte_interaction_test.py +++ b/brainpy_state/_nest_validation/astrocyte_interaction_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/astrocyte_sic_test.py b/brainpy_state/_nest_validation/astrocyte_sic_test.py index 948605e3..eb3622f7 100644 --- a/brainpy_state/_nest_validation/astrocyte_sic_test.py +++ b/brainpy_state/_nest_validation/astrocyte_sic_test.py @@ -38,7 +38,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/astrocyte_single_test.py b/brainpy_state/_nest_validation/astrocyte_single_test.py index 64f21ab0..b822c335 100644 --- a/brainpy_state/_nest_validation/astrocyte_single_test.py +++ b/brainpy_state/_nest_validation/astrocyte_single_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/astrocyte_small_network_test.py b/brainpy_state/_nest_validation/astrocyte_small_network_test.py index 60bf78a2..7d643af0 100644 --- a/brainpy_state/_nest_validation/astrocyte_small_network_test.py +++ b/brainpy_state/_nest_validation/astrocyte_small_network_test.py @@ -47,7 +47,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/balancedneuron_test.py b/brainpy_state/_nest_validation/balancedneuron_test.py index 0d4542aa..224cbabc 100644 --- a/brainpy_state/_nest_validation/balancedneuron_test.py +++ b/brainpy_state/_nest_validation/balancedneuron_test.py @@ -17,7 +17,7 @@ from scipy.optimize import bisect jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/bernoulli_synapse_parity_test.py b/brainpy_state/_nest_validation/bernoulli_synapse_parity_test.py index bd02d1d0..b52284ba 100644 --- a/brainpy_state/_nest_validation/bernoulli_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/bernoulli_synapse_parity_test.py @@ -35,7 +35,7 @@ from brainstate import transform jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state import bernoulli_synapse diff --git a/brainpy_state/_nest_validation/brette_et_al_2007_test.py b/brainpy_state/_nest_validation/brette_et_al_2007_test.py index 2580a9ba..8cd9b957 100644 --- a/brainpy_state/_nest_validation/brette_et_al_2007_test.py +++ b/brainpy_state/_nest_validation/brette_et_al_2007_test.py @@ -26,7 +26,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/brainpy_state/_nest_validation/brette_gerstner_fig_2c_test.py b/brainpy_state/_nest_validation/brette_gerstner_fig_2c_test.py index 55c474de..065dd8c0 100644 --- a/brainpy_state/_nest_validation/brette_gerstner_fig_2c_test.py +++ b/brainpy_state/_nest_validation/brette_gerstner_fig_2c_test.py @@ -34,7 +34,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation.tolerance_conventions import TraceTolerance diff --git a/brainpy_state/_nest_validation/brette_gerstner_fig_3d_test.py b/brainpy_state/_nest_validation/brette_gerstner_fig_3d_test.py index 2b1ad2cd..7356cd23 100644 --- a/brainpy_state/_nest_validation/brette_gerstner_fig_3d_test.py +++ b/brainpy_state/_nest_validation/brette_gerstner_fig_3d_test.py @@ -30,7 +30,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation.tolerance_conventions import TraceTolerance diff --git a/brainpy_state/_nest_validation/brunel_alpha_evolution_strategies_test.py b/brainpy_state/_nest_validation/brunel_alpha_evolution_strategies_test.py index 59aee485..6e0baadf 100644 --- a/brainpy_state/_nest_validation/brunel_alpha_evolution_strategies_test.py +++ b/brainpy_state/_nest_validation/brunel_alpha_evolution_strategies_test.py @@ -21,7 +21,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np diff --git a/brainpy_state/_nest_validation/brunel_alpha_test.py b/brainpy_state/_nest_validation/brunel_alpha_test.py index bcbf72cb..11b11c81 100644 --- a/brainpy_state/_nest_validation/brunel_alpha_test.py +++ b/brainpy_state/_nest_validation/brunel_alpha_test.py @@ -10,7 +10,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/brainpy_state/_nest_validation/brunel_delta_test.py b/brainpy_state/_nest_validation/brunel_delta_test.py index f3952415..6b6e7330 100644 --- a/brainpy_state/_nest_validation/brunel_delta_test.py +++ b/brainpy_state/_nest_validation/brunel_delta_test.py @@ -10,7 +10,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/brunel_exp_multisynapse_test.py b/brainpy_state/_nest_validation/brunel_exp_multisynapse_test.py index 12877612..b1a0caf8 100644 --- a/brainpy_state/_nest_validation/brunel_exp_multisynapse_test.py +++ b/brainpy_state/_nest_validation/brunel_exp_multisynapse_test.py @@ -18,7 +18,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/brunel_siegert_test.py b/brainpy_state/_nest_validation/brunel_siegert_test.py index 6dc112c2..c5178418 100644 --- a/brainpy_state/_nest_validation/brunel_siegert_test.py +++ b/brainpy_state/_nest_validation/brunel_siegert_test.py @@ -29,7 +29,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import numpy.testing as npt diff --git a/brainpy_state/_nest_validation/clopath_synapse_parity_test.py b/brainpy_state/_nest_validation/clopath_synapse_parity_test.py index 1c14e566..88039327 100644 --- a/brainpy_state/_nest_validation/clopath_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/clopath_synapse_parity_test.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/clopath_synapse_small_network_test.py b/brainpy_state/_nest_validation/clopath_synapse_small_network_test.py index 9e1c6256..8d56b944 100644 --- a/brainpy_state/_nest_validation/clopath_synapse_small_network_test.py +++ b/brainpy_state/_nest_validation/clopath_synapse_small_network_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/clopath_synapse_spike_pairing_test.py b/brainpy_state/_nest_validation/clopath_synapse_spike_pairing_test.py index b0c526d6..1f9df276 100644 --- a/brainpy_state/_nest_validation/clopath_synapse_spike_pairing_test.py +++ b/brainpy_state/_nest_validation/clopath_synapse_spike_pairing_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/cont_delay_synapse_parity_test.py b/brainpy_state/_nest_validation/cont_delay_synapse_parity_test.py index f5e40ef1..538f27ad 100644 --- a/brainpy_state/_nest_validation/cont_delay_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/cont_delay_synapse_parity_test.py @@ -37,7 +37,7 @@ from brainstate import transform jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state import cont_delay_synapse diff --git a/brainpy_state/_nest_validation/correlospinmatrix_detector_two_neuron_test.py b/brainpy_state/_nest_validation/correlospinmatrix_detector_two_neuron_test.py index eaae6d6b..54e76219 100644 --- a/brainpy_state/_nest_validation/correlospinmatrix_detector_two_neuron_test.py +++ b/brainpy_state/_nest_validation/correlospinmatrix_detector_two_neuron_test.py @@ -32,7 +32,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/cross_check_mip_corrdet_test.py b/brainpy_state/_nest_validation/cross_check_mip_corrdet_test.py index 525a955a..5fa87ca8 100644 --- a/brainpy_state/_nest_validation/cross_check_mip_corrdet_test.py +++ b/brainpy_state/_nest_validation/cross_check_mip_corrdet_test.py @@ -20,7 +20,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/device_parity_test.py b/brainpy_state/_nest_validation/device_parity_test.py index 6a6b9f8d..165722f8 100644 --- a/brainpy_state/_nest_validation/device_parity_test.py +++ b/brainpy_state/_nest_validation/device_parity_test.py @@ -9,7 +9,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state diff --git a/brainpy_state/_nest_validation/ei_clustered_network_test.py b/brainpy_state/_nest_validation/ei_clustered_network_test.py index 11ba93e8..58bc9076 100644 --- a/brainpy_state/_nest_validation/ei_clustered_network_test.py +++ b/brainpy_state/_nest_validation/ei_clustered_network_test.py @@ -39,7 +39,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np diff --git a/brainpy_state/_nest_validation/evaluate_quantal_stp_synapse_test.py b/brainpy_state/_nest_validation/evaluate_quantal_stp_synapse_test.py index 29d5b6c8..9feb192c 100644 --- a/brainpy_state/_nest_validation/evaluate_quantal_stp_synapse_test.py +++ b/brainpy_state/_nest_validation/evaluate_quantal_stp_synapse_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/evaluate_tsodyks2_synapse_test.py b/brainpy_state/_nest_validation/evaluate_tsodyks2_synapse_test.py index 75f6ebd9..97cec0fb 100644 --- a/brainpy_state/_nest_validation/evaluate_tsodyks2_synapse_test.py +++ b/brainpy_state/_nest_validation/evaluate_tsodyks2_synapse_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/gap_junction_inhibitory_network_parity_test.py b/brainpy_state/_nest_validation/gap_junction_inhibitory_network_parity_test.py index 9058efd4..35284699 100644 --- a/brainpy_state/_nest_validation/gap_junction_inhibitory_network_parity_test.py +++ b/brainpy_state/_nest_validation/gap_junction_inhibitory_network_parity_test.py @@ -40,7 +40,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u @@ -156,7 +156,7 @@ class TestGapInhibitoryNetworkParity(unittest.TestCase): @classmethod def setUpClass(cls): jax.clear_caches() # stiff-HH x64 hygiene (21) - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) skip_n = int(SKIP_MS / 0.5) # NEST multimeter at 0.5 ms skip_b = int(SKIP_MS / DT) # brainpy voltmeter at dt cls.chi_nest = {GAP_ASYNC: [], GAP_SYNC: []} diff --git a/brainpy_state/_nest_validation/gap_junction_no_nest_test.py b/brainpy_state/_nest_validation/gap_junction_no_nest_test.py index 321c4515..3e444228 100644 --- a/brainpy_state/_nest_validation/gap_junction_no_nest_test.py +++ b/brainpy_state/_nest_validation/gap_junction_no_nest_test.py @@ -14,7 +14,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from examples.nest_like.gap_junctions_two_neurons import run_two_neuron, synchrony_gap from examples.nest_like.gap_junctions_inhibitory_network import run_network, golomb_chi diff --git a/brainpy_state/_nest_validation/gap_junction_parity_test.py b/brainpy_state/_nest_validation/gap_junction_parity_test.py index f540d907..5c803eca 100644 --- a/brainpy_state/_nest_validation/gap_junction_parity_test.py +++ b/brainpy_state/_nest_validation/gap_junction_parity_test.py @@ -46,7 +46,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u @@ -144,7 +144,7 @@ class TestGapJunctionTwoNeuronParity(unittest.TestCase): @classmethod def setUpClass(cls): jax.clear_caches() # stiff-HH x64 hygiene (cluster 21) - brainstate.environ.set(precision=64, platform='cpu') + brainstate.environ.set(precision=64) cls.ns = _nest_two_neuron() # (samples, 2) cls.bp = _bp_two_neuron() # (samples, 2) diff --git a/brainpy_state/_nest_validation/gif_cond_exp_conductance_test.py b/brainpy_state/_nest_validation/gif_cond_exp_conductance_test.py index e3d9bfb5..bf42fccf 100644 --- a/brainpy_state/_nest_validation/gif_cond_exp_conductance_test.py +++ b/brainpy_state/_nest_validation/gif_cond_exp_conductance_test.py @@ -28,7 +28,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/gif_cond_exp_multisynapse_test.py b/brainpy_state/_nest_validation/gif_cond_exp_multisynapse_test.py index 99be0955..b5860e0f 100644 --- a/brainpy_state/_nest_validation/gif_cond_exp_multisynapse_test.py +++ b/brainpy_state/_nest_validation/gif_cond_exp_multisynapse_test.py @@ -28,7 +28,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/gif_pop_psc_exp_demo_test.py b/brainpy_state/_nest_validation/gif_pop_psc_exp_demo_test.py index 0ba56092..94d93105 100644 --- a/brainpy_state/_nest_validation/gif_pop_psc_exp_demo_test.py +++ b/brainpy_state/_nest_validation/gif_pop_psc_exp_demo_test.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/gif_population_test.py b/brainpy_state/_nest_validation/gif_population_test.py index bd87d194..e85c1ca6 100644 --- a/brainpy_state/_nest_validation/gif_population_test.py +++ b/brainpy_state/_nest_validation/gif_population_test.py @@ -34,7 +34,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/glif_cond_neuron_test.py b/brainpy_state/_nest_validation/glif_cond_neuron_test.py index 0b48e533..f437546a 100644 --- a/brainpy_state/_nest_validation/glif_cond_neuron_test.py +++ b/brainpy_state/_nest_validation/glif_cond_neuron_test.py @@ -40,7 +40,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/glif_psc_double_alpha_neuron_test.py b/brainpy_state/_nest_validation/glif_psc_double_alpha_neuron_test.py index 14851d5e..d2f33815 100644 --- a/brainpy_state/_nest_validation/glif_psc_double_alpha_neuron_test.py +++ b/brainpy_state/_nest_validation/glif_psc_double_alpha_neuron_test.py @@ -26,7 +26,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/glif_psc_neuron_test.py b/brainpy_state/_nest_validation/glif_psc_neuron_test.py index ef546e4c..239da02b 100644 --- a/brainpy_state/_nest_validation/glif_psc_neuron_test.py +++ b/brainpy_state/_nest_validation/glif_psc_neuron_test.py @@ -48,7 +48,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/hh_cond_exp_traub_conductance_test.py b/brainpy_state/_nest_validation/hh_cond_exp_traub_conductance_test.py index d453b948..62d5d85a 100644 --- a/brainpy_state/_nest_validation/hh_cond_exp_traub_conductance_test.py +++ b/brainpy_state/_nest_validation/hh_cond_exp_traub_conductance_test.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/hh_phaseplane_test.py b/brainpy_state/_nest_validation/hh_phaseplane_test.py index 080fef8c..f179351b 100644 --- a/brainpy_state/_nest_validation/hh_phaseplane_test.py +++ b/brainpy_state/_nest_validation/hh_phaseplane_test.py @@ -27,7 +27,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/hh_psc_alpha_clopath_psc_current_test.py b/brainpy_state/_nest_validation/hh_psc_alpha_clopath_psc_current_test.py index 43d94e43..e35e4dc8 100644 --- a/brainpy_state/_nest_validation/hh_psc_alpha_clopath_psc_current_test.py +++ b/brainpy_state/_nest_validation/hh_psc_alpha_clopath_psc_current_test.py @@ -30,7 +30,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/hh_psc_alpha_test.py b/brainpy_state/_nest_validation/hh_psc_alpha_test.py index db9bd755..e2f28276 100644 --- a/brainpy_state/_nest_validation/hh_psc_alpha_test.py +++ b/brainpy_state/_nest_validation/hh_psc_alpha_test.py @@ -20,7 +20,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/ht_synapse_parity_test.py b/brainpy_state/_nest_validation/ht_synapse_parity_test.py index cabe77af..919727c2 100644 --- a/brainpy_state/_nest_validation/ht_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/ht_synapse_parity_test.py @@ -18,7 +18,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import ht_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/iaf_bw_2001_nest_parity_test.py b/brainpy_state/_nest_validation/iaf_bw_2001_nest_parity_test.py index 70ee7010..2a3ae035 100644 --- a/brainpy_state/_nest_validation/iaf_bw_2001_nest_parity_test.py +++ b/brainpy_state/_nest_validation/iaf_bw_2001_nest_parity_test.py @@ -33,7 +33,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/iaf_bw_2001_recurrent_nmda_parity_test.py b/brainpy_state/_nest_validation/iaf_bw_2001_recurrent_nmda_parity_test.py index ab29d9f4..f092da64 100644 --- a/brainpy_state/_nest_validation/iaf_bw_2001_recurrent_nmda_parity_test.py +++ b/brainpy_state/_nest_validation/iaf_bw_2001_recurrent_nmda_parity_test.py @@ -46,7 +46,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/iaf_chxk_2008_conductance_test.py b/brainpy_state/_nest_validation/iaf_chxk_2008_conductance_test.py index 0828fb6a..6abe3880 100644 --- a/brainpy_state/_nest_validation/iaf_chxk_2008_conductance_test.py +++ b/brainpy_state/_nest_validation/iaf_chxk_2008_conductance_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/iaf_cond_alpha_conductance_test.py b/brainpy_state/_nest_validation/iaf_cond_alpha_conductance_test.py index 1113a913..0b7bdf77 100644 --- a/brainpy_state/_nest_validation/iaf_cond_alpha_conductance_test.py +++ b/brainpy_state/_nest_validation/iaf_cond_alpha_conductance_test.py @@ -21,7 +21,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/iaf_cond_beta_conductance_test.py b/brainpy_state/_nest_validation/iaf_cond_beta_conductance_test.py index eb6ab938..9e35e7fc 100644 --- a/brainpy_state/_nest_validation/iaf_cond_beta_conductance_test.py +++ b/brainpy_state/_nest_validation/iaf_cond_beta_conductance_test.py @@ -24,7 +24,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/iaf_cond_exp_sfa_rr_conductance_test.py b/brainpy_state/_nest_validation/iaf_cond_exp_sfa_rr_conductance_test.py index bbb3b782..03a66a34 100644 --- a/brainpy_state/_nest_validation/iaf_cond_exp_sfa_rr_conductance_test.py +++ b/brainpy_state/_nest_validation/iaf_cond_exp_sfa_rr_conductance_test.py @@ -23,7 +23,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/iaf_psc_alpha_parity_test.py b/brainpy_state/_nest_validation/iaf_psc_alpha_parity_test.py index cd11cde0..42d138ee 100644 --- a/brainpy_state/_nest_validation/iaf_psc_alpha_parity_test.py +++ b/brainpy_state/_nest_validation/iaf_psc_alpha_parity_test.py @@ -10,7 +10,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state._nest_network import one_to_one, EventProjection diff --git a/brainpy_state/_nest_validation/iaf_tum_2000_stp_test.py b/brainpy_state/_nest_validation/iaf_tum_2000_stp_test.py index dbb4f57e..112502db 100644 --- a/brainpy_state/_nest_validation/iaf_tum_2000_stp_test.py +++ b/brainpy_state/_nest_validation/iaf_tum_2000_stp_test.py @@ -49,7 +49,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/if_curve_test.py b/brainpy_state/_nest_validation/if_curve_test.py index 9a45c4ca..d72ef85a 100644 --- a/brainpy_state/_nest_validation/if_curve_test.py +++ b/brainpy_state/_nest_validation/if_curve_test.py @@ -17,7 +17,7 @@ import jax jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/izhikevich_test.py b/brainpy_state/_nest_validation/izhikevich_test.py index 4d46dc80..e3f4510e 100644 --- a/brainpy_state/_nest_validation/izhikevich_test.py +++ b/brainpy_state/_nest_validation/izhikevich_test.py @@ -25,7 +25,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/jonke_synapse_parity_test.py b/brainpy_state/_nest_validation/jonke_synapse_parity_test.py index 4d996494..62ec52cb 100644 --- a/brainpy_state/_nest_validation/jonke_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/jonke_synapse_parity_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import jonke_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/lin_rate_ipn_network_test.py b/brainpy_state/_nest_validation/lin_rate_ipn_network_test.py index d8f08e92..ad2225f3 100644 --- a/brainpy_state/_nest_validation/lin_rate_ipn_network_test.py +++ b/brainpy_state/_nest_validation/lin_rate_ipn_network_test.py @@ -35,7 +35,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/mat_psc_exp_test.py b/brainpy_state/_nest_validation/mat_psc_exp_test.py index 8bfe9693..8f1eb49f 100644 --- a/brainpy_state/_nest_validation/mat_psc_exp_test.py +++ b/brainpy_state/_nest_validation/mat_psc_exp_test.py @@ -28,7 +28,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/mc_neuron_test.py b/brainpy_state/_nest_validation/mc_neuron_test.py index d4b9eb94..d4ceecf9 100644 --- a/brainpy_state/_nest_validation/mc_neuron_test.py +++ b/brainpy_state/_nest_validation/mc_neuron_test.py @@ -32,7 +32,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/multimeter_file_test.py b/brainpy_state/_nest_validation/multimeter_file_test.py index 374bc3b6..52fa02d7 100644 --- a/brainpy_state/_nest_validation/multimeter_file_test.py +++ b/brainpy_state/_nest_validation/multimeter_file_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/one_neuron_test.py b/brainpy_state/_nest_validation/one_neuron_test.py index 7a3a4461..ca0336f8 100644 --- a/brainpy_state/_nest_validation/one_neuron_test.py +++ b/brainpy_state/_nest_validation/one_neuron_test.py @@ -15,7 +15,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/one_neuron_with_noise_test.py b/brainpy_state/_nest_validation/one_neuron_with_noise_test.py index 078df256..a2bc3b4f 100644 --- a/brainpy_state/_nest_validation/one_neuron_with_noise_test.py +++ b/brainpy_state/_nest_validation/one_neuron_with_noise_test.py @@ -14,7 +14,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/plot_weight_matrices_test.py b/brainpy_state/_nest_validation/plot_weight_matrices_test.py index ebf57557..f58b4411 100644 --- a/brainpy_state/_nest_validation/plot_weight_matrices_test.py +++ b/brainpy_state/_nest_validation/plot_weight_matrices_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/pong_dopa_test.py b/brainpy_state/_nest_validation/pong_dopa_test.py index 1e19db16..cc5ff82c 100644 --- a/brainpy_state/_nest_validation/pong_dopa_test.py +++ b/brainpy_state/_nest_validation/pong_dopa_test.py @@ -31,10 +31,10 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import spike_recorder -from brainpy_state._nest_network._event_plastic import VoltageCoupledPlasticProj +from brainpy_state._nest_network.event_plastic import VoltageCoupledPlasticProj import examples.nest_like.pong_networks as pn DT = pn.DT diff --git a/brainpy_state/_nest_validation/pong_game_test.py b/brainpy_state/_nest_validation/pong_game_test.py index 29bb3175..2914e55b 100644 --- a/brainpy_state/_nest_validation/pong_game_test.py +++ b/brainpy_state/_nest_validation/pong_game_test.py @@ -13,7 +13,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import examples.nest_like.pong as pong diff --git a/brainpy_state/_nest_validation/pong_rstdp_test.py b/brainpy_state/_nest_validation/pong_rstdp_test.py index 33243b61..42884428 100644 --- a/brainpy_state/_nest_validation/pong_rstdp_test.py +++ b/brainpy_state/_nest_validation/pong_rstdp_test.py @@ -34,7 +34,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import examples.nest_like.pong_networks as pn from examples.nest_like.pong_networks import calculate_stdp, DT diff --git a/brainpy_state/_nest_validation/pong_run_test.py b/brainpy_state/_nest_validation/pong_run_test.py index c43291a5..8ab0596b 100644 --- a/brainpy_state/_nest_validation/pong_run_test.py +++ b/brainpy_state/_nest_validation/pong_run_test.py @@ -27,7 +27,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import examples.nest_like.pong as pong import examples.nest_like.pong_run as pr diff --git a/brainpy_state/_nest_validation/precise_spiking_test.py b/brainpy_state/_nest_validation/precise_spiking_test.py index d3f76ce1..ca13448c 100644 --- a/brainpy_state/_nest_validation/precise_spiking_test.py +++ b/brainpy_state/_nest_validation/precise_spiking_test.py @@ -25,7 +25,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/pulsepacket_test.py b/brainpy_state/_nest_validation/pulsepacket_test.py index f10515ad..b9af8274 100644 --- a/brainpy_state/_nest_validation/pulsepacket_test.py +++ b/brainpy_state/_nest_validation/pulsepacket_test.py @@ -22,7 +22,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/quantal_stp_parity_test.py b/brainpy_state/_nest_validation/quantal_stp_parity_test.py index 986f937b..6ec85a05 100644 --- a/brainpy_state/_nest_validation/quantal_stp_parity_test.py +++ b/brainpy_state/_nest_validation/quantal_stp_parity_test.py @@ -25,7 +25,7 @@ from brainstate import transform jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state import quantal_stp_synapse diff --git a/brainpy_state/_nest_validation/rate_core_edge_cases_test.py b/brainpy_state/_nest_validation/rate_core_edge_cases_test.py index ffcf3ce2..dead01e8 100644 --- a/brainpy_state/_nest_validation/rate_core_edge_cases_test.py +++ b/brainpy_state/_nest_validation/rate_core_edge_cases_test.py @@ -25,7 +25,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_core_forloop_test.py b/brainpy_state/_nest_validation/rate_core_forloop_test.py index 84db0eed..d21579ac 100644 --- a/brainpy_state/_nest_validation/rate_core_forloop_test.py +++ b/brainpy_state/_nest_validation/rate_core_forloop_test.py @@ -21,7 +21,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_core_no_nest_test.py b/brainpy_state/_nest_validation/rate_core_no_nest_test.py index 69d2c96a..5ee17b46 100644 --- a/brainpy_state/_nest_validation/rate_core_no_nest_test.py +++ b/brainpy_state/_nest_validation/rate_core_no_nest_test.py @@ -34,7 +34,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_coupling_micro_parity_test.py b/brainpy_state/_nest_validation/rate_coupling_micro_parity_test.py index 5e4620df..eab35478 100644 --- a/brainpy_state/_nest_validation/rate_coupling_micro_parity_test.py +++ b/brainpy_state/_nest_validation/rate_coupling_micro_parity_test.py @@ -31,7 +31,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_delayed_connection_parity_test.py b/brainpy_state/_nest_validation/rate_delayed_connection_parity_test.py index 029eaf3c..a3f44b68 100644 --- a/brainpy_state/_nest_validation/rate_delayed_connection_parity_test.py +++ b/brainpy_state/_nest_validation/rate_delayed_connection_parity_test.py @@ -26,7 +26,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_generator_source_test.py b/brainpy_state/_nest_validation/rate_generator_source_test.py index 5807bc47..028be54f 100644 --- a/brainpy_state/_nest_validation/rate_generator_source_test.py +++ b/brainpy_state/_nest_validation/rate_generator_source_test.py @@ -22,7 +22,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_mult_coupling_parity_test.py b/brainpy_state/_nest_validation/rate_mult_coupling_parity_test.py index 5cf164a4..aa07629c 100644 --- a/brainpy_state/_nest_validation/rate_mult_coupling_parity_test.py +++ b/brainpy_state/_nest_validation/rate_mult_coupling_parity_test.py @@ -43,7 +43,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_network_parity_test.py b/brainpy_state/_nest_validation/rate_network_parity_test.py index 2d6e916f..fa785509 100644 --- a/brainpy_state/_nest_validation/rate_network_parity_test.py +++ b/brainpy_state/_nest_validation/rate_network_parity_test.py @@ -42,7 +42,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_neuron_dm_test.py b/brainpy_state/_nest_validation/rate_neuron_dm_test.py index 5d7264f2..cc5f8b56 100644 --- a/brainpy_state/_nest_validation/rate_neuron_dm_test.py +++ b/brainpy_state/_nest_validation/rate_neuron_dm_test.py @@ -30,7 +30,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u # noqa: F401 (kept for parity with sibling test modules / x64 env) diff --git a/brainpy_state/_nest_validation/rate_nonlinearity_test.py b/brainpy_state/_nest_validation/rate_nonlinearity_test.py index 3cf0b6b1..d0be2120 100644 --- a/brainpy_state/_nest_validation/rate_nonlinearity_test.py +++ b/brainpy_state/_nest_validation/rate_nonlinearity_test.py @@ -38,7 +38,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/rate_transformer_node_substrate_test.py b/brainpy_state/_nest_validation/rate_transformer_node_substrate_test.py index 05413e2f..abd457c5 100644 --- a/brainpy_state/_nest_validation/rate_transformer_node_substrate_test.py +++ b/brainpy_state/_nest_validation/rate_transformer_node_substrate_test.py @@ -22,7 +22,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u import braintools diff --git a/brainpy_state/_nest_validation/receptors_and_current_test.py b/brainpy_state/_nest_validation/receptors_and_current_test.py index a11ec3b1..62984b2d 100644 --- a/brainpy_state/_nest_validation/receptors_and_current_test.py +++ b/brainpy_state/_nest_validation/receptors_and_current_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/recording_demo_test.py b/brainpy_state/_nest_validation/recording_demo_test.py index b42fb595..38c88cb4 100644 --- a/brainpy_state/_nest_validation/recording_demo_test.py +++ b/brainpy_state/_nest_validation/recording_demo_test.py @@ -19,7 +19,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/repeated_stimulation_test.py b/brainpy_state/_nest_validation/repeated_stimulation_test.py index af3d649c..6c1b05c4 100644 --- a/brainpy_state/_nest_validation/repeated_stimulation_test.py +++ b/brainpy_state/_nest_validation/repeated_stimulation_test.py @@ -13,7 +13,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/brainpy_state/_nest_validation/sensitivity_to_perturbation_test.py b/brainpy_state/_nest_validation/sensitivity_to_perturbation_test.py index dd325c2c..3026add0 100644 --- a/brainpy_state/_nest_validation/sensitivity_to_perturbation_test.py +++ b/brainpy_state/_nest_validation/sensitivity_to_perturbation_test.py @@ -28,7 +28,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np diff --git a/brainpy_state/_nest_validation/siegert_diffusion_test.py b/brainpy_state/_nest_validation/siegert_diffusion_test.py index c8dd32d2..c8067e9f 100644 --- a/brainpy_state/_nest_validation/siegert_diffusion_test.py +++ b/brainpy_state/_nest_validation/siegert_diffusion_test.py @@ -22,7 +22,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/brainpy_state/_nest_validation/siegert_substrate_test.py b/brainpy_state/_nest_validation/siegert_substrate_test.py index e58e2951..f9013082 100644 --- a/brainpy_state/_nest_validation/siegert_substrate_test.py +++ b/brainpy_state/_nest_validation/siegert_substrate_test.py @@ -28,7 +28,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/sinusoidal_gamma_generator_test.py b/brainpy_state/_nest_validation/sinusoidal_gamma_generator_test.py index 3ab70a2c..af449aae 100644 --- a/brainpy_state/_nest_validation/sinusoidal_gamma_generator_test.py +++ b/brainpy_state/_nest_validation/sinusoidal_gamma_generator_test.py @@ -20,7 +20,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/sinusoidal_poisson_generator_test.py b/brainpy_state/_nest_validation/sinusoidal_poisson_generator_test.py index a4ee38b0..84b9b963 100644 --- a/brainpy_state/_nest_validation/sinusoidal_poisson_generator_test.py +++ b/brainpy_state/_nest_validation/sinusoidal_poisson_generator_test.py @@ -19,7 +19,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/spatial_3d_test.py b/brainpy_state/_nest_validation/spatial_3d_test.py index 783ad092..48c9ecb2 100644 --- a/brainpy_state/_nest_validation/spatial_3d_test.py +++ b/brainpy_state/_nest_validation/spatial_3d_test.py @@ -23,7 +23,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_exponential_test.py b/brainpy_state/_nest_validation/spatial_exponential_test.py index d88c835d..c044ab4e 100644 --- a/brainpy_state/_nest_validation/spatial_exponential_test.py +++ b/brainpy_state/_nest_validation/spatial_exponential_test.py @@ -14,7 +14,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_gabor_test.py b/brainpy_state/_nest_validation/spatial_gabor_test.py index c1532328..7247debd 100644 --- a/brainpy_state/_nest_validation/spatial_gabor_test.py +++ b/brainpy_state/_nest_validation/spatial_gabor_test.py @@ -16,7 +16,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_gamma_test.py b/brainpy_state/_nest_validation/spatial_gamma_test.py index 65ac1678..c6271c4f 100644 --- a/brainpy_state/_nest_validation/spatial_gamma_test.py +++ b/brainpy_state/_nest_validation/spatial_gamma_test.py @@ -15,7 +15,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_gaussian_kernel_test.py b/brainpy_state/_nest_validation/spatial_gaussian_kernel_test.py index 6781fc4a..aee3c45b 100644 --- a/brainpy_state/_nest_validation/spatial_gaussian_kernel_test.py +++ b/brainpy_state/_nest_validation/spatial_gaussian_kernel_test.py @@ -24,7 +24,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_grid_test.py b/brainpy_state/_nest_validation/spatial_grid_test.py index 5c98941f..80279913 100644 --- a/brainpy_state/_nest_validation/spatial_grid_test.py +++ b/brainpy_state/_nest_validation/spatial_grid_test.py @@ -25,7 +25,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/brainpy_state/_nest_validation/spatial_masks_test.py b/brainpy_state/_nest_validation/spatial_masks_test.py index ffeb8734..9af48de4 100644 --- a/brainpy_state/_nest_validation/spatial_masks_test.py +++ b/brainpy_state/_nest_validation/spatial_masks_test.py @@ -14,7 +14,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u @@ -25,7 +25,7 @@ from brainpy_state import Simulator, iaf_psc_alpha from brainpy_state._nest_spatial import grid, spatial_pairwise_bernoulli -from brainpy_state._nest_spatial._masks import rectangular, doughnut, elliptical, ellipsoidal +from brainpy_state._nest_spatial.masks import rectangular, doughnut, elliptical, ellipsoidal from brainpy_state._nest_validation.nest_compare import requires_nest S2, E2 = [5, 5], [4.0, 4.0] @@ -76,7 +76,7 @@ class TestMaskGeometry(unittest.TestCase): def test_doughnut_is_circular_difference(self): # doughnut(in, out) == circular(out) minus circular(in) (inner exclusive). - from brainpy_state._nest_spatial._masks import circular + from brainpy_state._nest_spatial.masks import circular inner, outer = 0.9, 1.8 outer_adj = _bp_adj(S2, E2, circular(outer)) inner_adj = _bp_adj(S2, E2, circular(inner)) @@ -86,7 +86,7 @@ def test_doughnut_is_circular_difference(self): self.assertEqual(len(doughnut_adj & inner_adj), 0) # nothing strictly inside inner def test_elliptical_major_equals_minor_is_circular(self): - from brainpy_state._nest_spatial._masks import circular + from brainpy_state._nest_spatial.masks import circular self.assertEqual(_bp_adj(S2, E2, elliptical(2.4, 2.4)), _bp_adj(S2, E2, circular(1.2))) # semi == radius diff --git a/brainpy_state/_nest_validation/spatial_queries_test.py b/brainpy_state/_nest_validation/spatial_queries_test.py index 49c774ff..8323e85e 100644 --- a/brainpy_state/_nest_validation/spatial_queries_test.py +++ b/brainpy_state/_nest_validation/spatial_queries_test.py @@ -19,7 +19,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u @@ -30,8 +30,8 @@ from brainpy_state import Simulator, iaf_psc_alpha from brainpy_state._nest_spatial import grid, spatial_pairwise_bernoulli -from brainpy_state._nest_spatial._masks import circular, elliptical -from brainpy_state._nest_spatial._helpers import ( +from brainpy_state._nest_spatial.masks import circular, elliptical +from brainpy_state._nest_spatial.helpers import ( nearest_element, select_nodes_by_mask, dump_layer_nodes, dump_layer_connections, ) from brainpy_state._nest_validation.nest_compare import requires_nest diff --git a/brainpy_state/_nest_validation/static_synapse_parity_test.py b/brainpy_state/_nest_validation/static_synapse_parity_test.py index dbdbd806..48dcdfec 100644 --- a/brainpy_state/_nest_validation/static_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/static_synapse_parity_test.py @@ -18,7 +18,7 @@ from brainstate import transform jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state import static_synapse diff --git a/brainpy_state/_nest_validation/stdp_dopamine_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_dopamine_synapse_parity_test.py index 77cb801d..ac7f6031 100644 --- a/brainpy_state/_nest_validation/stdp_dopamine_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_dopamine_synapse_parity_test.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/stdp_facetshw_synapse_hom_parity_test.py b/brainpy_state/_nest_validation/stdp_facetshw_synapse_hom_parity_test.py index 351777ab..812145a7 100644 --- a/brainpy_state/_nest_validation/stdp_facetshw_synapse_hom_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_facetshw_synapse_hom_parity_test.py @@ -36,7 +36,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_facetshw_synapse_hom from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_nn_pre_centered_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_nn_pre_centered_synapse_parity_test.py index a627a7d5..fa8a2bbb 100644 --- a/brainpy_state/_nest_validation/stdp_nn_pre_centered_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_nn_pre_centered_synapse_parity_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_nn_pre_centered_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_nn_restr_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_nn_restr_synapse_parity_test.py index b2a3c4e2..b8344746 100644 --- a/brainpy_state/_nest_validation/stdp_nn_restr_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_nn_restr_synapse_parity_test.py @@ -26,7 +26,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_nn_restr_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_nn_symm_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_nn_symm_synapse_parity_test.py index b6e370e9..b40a0266 100644 --- a/brainpy_state/_nest_validation/stdp_nn_symm_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_nn_symm_synapse_parity_test.py @@ -29,7 +29,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_nn_symm_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_pl_synapse_hom_parity_test.py b/brainpy_state/_nest_validation/stdp_pl_synapse_hom_parity_test.py index 921a9d53..db4dc182 100644 --- a/brainpy_state/_nest_validation/stdp_pl_synapse_hom_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_pl_synapse_hom_parity_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_pl_synapse_hom from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_synapse_hom_parity_test.py b/brainpy_state/_nest_validation/stdp_synapse_hom_parity_test.py index 41daae23..ade0f658 100644 --- a/brainpy_state/_nest_validation/stdp_synapse_hom_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_synapse_hom_parity_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_synapse_hom from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_synapse_parity_test.py index 983c51fa..d96cea90 100644 --- a/brainpy_state/_nest_validation/stdp_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_synapse_parity_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stdp_triplet_synapse_parity_test.py b/brainpy_state/_nest_validation/stdp_triplet_synapse_parity_test.py index 99f56833..3b7cdfee 100644 --- a/brainpy_state/_nest_validation/stdp_triplet_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/stdp_triplet_synapse_parity_test.py @@ -19,7 +19,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import stdp_triplet_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/stp_parity_test.py b/brainpy_state/_nest_validation/stp_parity_test.py index e5eb6558..808b366d 100644 --- a/brainpy_state/_nest_validation/stp_parity_test.py +++ b/brainpy_state/_nest_validation/stp_parity_test.py @@ -34,7 +34,7 @@ from brainstate import transform jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainpy_state from brainpy_state import tsodyks_synapse, tsodyks_synapse_hom, tsodyks2_synapse diff --git a/brainpy_state/_nest_validation/sudoku_clue_clamp_test.py b/brainpy_state/_nest_validation/sudoku_clue_clamp_test.py index a4e94f69..2cedc473 100644 --- a/brainpy_state/_nest_validation/sudoku_clue_clamp_test.py +++ b/brainpy_state/_nest_validation/sudoku_clue_clamp_test.py @@ -17,7 +17,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from examples.nest_like.sudoku_net import SudokuNet diff --git a/brainpy_state/_nest_validation/sudoku_example_test.py b/brainpy_state/_nest_validation/sudoku_example_test.py index 76fe196d..7518770e 100644 --- a/brainpy_state/_nest_validation/sudoku_example_test.py +++ b/brainpy_state/_nest_validation/sudoku_example_test.py @@ -17,7 +17,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from examples.nest_like import sudoku as harness from examples.nest_like.sudoku_puzzles import get_puzzle, make_easy_puzzle diff --git a/brainpy_state/_nest_validation/sudoku_solve_test.py b/brainpy_state/_nest_validation/sudoku_solve_test.py index 4b0078d2..69690635 100644 --- a/brainpy_state/_nest_validation/sudoku_solve_test.py +++ b/brainpy_state/_nest_validation/sudoku_solve_test.py @@ -29,7 +29,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import requires_nest from examples.nest_like.sudoku_net import SudokuNet, SudokuSolver diff --git a/brainpy_state/_nest_validation/sudoku_topology_test.py b/brainpy_state/_nest_validation/sudoku_topology_test.py index 6a6adb88..7236c540 100644 --- a/brainpy_state/_nest_validation/sudoku_topology_test.py +++ b/brainpy_state/_nest_validation/sudoku_topology_test.py @@ -15,7 +15,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import Simulator, poisson_generator, parrot_neuron, spike_recorder diff --git a/brainpy_state/_nest_validation/synapsecollection_test.py b/brainpy_state/_nest_validation/synapsecollection_test.py index ff40c9d8..bd157e45 100644 --- a/brainpy_state/_nest_validation/synapsecollection_test.py +++ b/brainpy_state/_nest_validation/synapsecollection_test.py @@ -28,7 +28,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_distributional, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/testiaf_test.py b/brainpy_state/_nest_validation/testiaf_test.py index 25952df2..73895879 100644 --- a/brainpy_state/_nest_validation/testiaf_test.py +++ b/brainpy_state/_nest_validation/testiaf_test.py @@ -15,7 +15,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/tripartite_connect_test.py b/brainpy_state/_nest_validation/tripartite_connect_test.py index 858f2b32..e3dbcb5e 100644 --- a/brainpy_state/_nest_validation/tripartite_connect_test.py +++ b/brainpy_state/_nest_validation/tripartite_connect_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/two_comps_test.py b/brainpy_state/_nest_validation/two_comps_test.py index 348b5087..cd85d5e0 100644 --- a/brainpy_state/_nest_validation/two_comps_test.py +++ b/brainpy_state/_nest_validation/two_comps_test.py @@ -37,7 +37,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/twoneurons_test.py b/brainpy_state/_nest_validation/twoneurons_test.py index cf36a3ea..2da25644 100644 --- a/brainpy_state/_nest_validation/twoneurons_test.py +++ b/brainpy_state/_nest_validation/twoneurons_test.py @@ -15,7 +15,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/vinit_example_test.py b/brainpy_state/_nest_validation/vinit_example_test.py index 8bd01e73..727a8ea4 100644 --- a/brainpy_state/_nest_validation/vinit_example_test.py +++ b/brainpy_state/_nest_validation/vinit_example_test.py @@ -16,7 +16,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/vogels_sprekeler_synapse_parity_test.py b/brainpy_state/_nest_validation/vogels_sprekeler_synapse_parity_test.py index 6bd8d630..028f0baf 100644 --- a/brainpy_state/_nest_validation/vogels_sprekeler_synapse_parity_test.py +++ b/brainpy_state/_nest_validation/vogels_sprekeler_synapse_parity_test.py @@ -15,7 +15,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import vogels_sprekeler_synapse from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest diff --git a/brainpy_state/_nest_validation/volume_transmitter_parity_test.py b/brainpy_state/_nest_validation/volume_transmitter_parity_test.py index ce5af8ec..8cf9ef02 100644 --- a/brainpy_state/_nest_validation/volume_transmitter_parity_test.py +++ b/brainpy_state/_nest_validation/volume_transmitter_parity_test.py @@ -25,7 +25,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state._nest_validation.nest_compare import compare_trace, requires_nest from brainpy_state._nest_validation import tolerance_conventions as tc diff --git a/brainpy_state/_nest_validation/wang_decision_making_no_nest_test.py b/brainpy_state/_nest_validation/wang_decision_making_no_nest_test.py index 00e506f1..2bfb0579 100644 --- a/brainpy_state/_nest_validation/wang_decision_making_no_nest_test.py +++ b/brainpy_state/_nest_validation/wang_decision_making_no_nest_test.py @@ -14,7 +14,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from examples.nest_like.wang_decision_making import (build, run_decision, decision_from_rates) diff --git a/brainpy_state/_nest_validation/wang_decision_making_test.py b/brainpy_state/_nest_validation/wang_decision_making_test.py index 379a3bed..5c276db0 100644 --- a/brainpy_state/_nest_validation/wang_decision_making_test.py +++ b/brainpy_state/_nest_validation/wang_decision_making_test.py @@ -40,7 +40,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) try: import nest diff --git a/brainpy_state/_nest_validation/weight_recorder_audit_test.py b/brainpy_state/_nest_validation/weight_recorder_audit_test.py index e3be4dae..3db63dda 100644 --- a/brainpy_state/_nest_validation/weight_recorder_audit_test.py +++ b/brainpy_state/_nest_validation/weight_recorder_audit_test.py @@ -33,7 +33,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import ( stdp_synapse, stdp_synapse_hom, stdp_pl_synapse_hom, jonke_synapse, diff --git a/docs/Makefile b/docs/Makefile index e8605adb..d386987c 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,21 +1,21 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SPHINXPROJ = brainpy_state -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SPHINXPROJ = brainpy_state +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_templates/classtemplate.rst b/docs/_templates/classtemplate.rst index 956b044f..eeb823a9 100644 --- a/docs/_templates/classtemplate.rst +++ b/docs/_templates/classtemplate.rst @@ -1,9 +1,9 @@ -.. role:: hidden - :class: hidden-section -.. currentmodule:: {{ module }} - - -{{ name | underline}} - -.. autoclass:: {{ name }} - :members: +.. role:: hidden + :class: hidden-section +.. currentmodule:: {{ module }} + + +{{ name | underline}} + +.. autoclass:: {{ name }} + :members: diff --git a/docs/api/base.rst b/docs/api/base.rst index d79cf42f..132e753a 100644 --- a/docs/api/base.rst +++ b/docs/api/base.rst @@ -1,15 +1,15 @@ -Base Classes -============ - -Abstract base classes that all neuron and synapse models inherit from. - -.. currentmodule:: brainpy.state - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - Dynamics - Neuron - Synapse +Base Classes +============ + +Abstract base classes that all neuron and synapse models inherit from. + +.. currentmodule:: brainpy.state + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + Dynamics + Neuron + Synapse diff --git a/docs/api/brainpy-inputs.rst b/docs/api/brainpy-inputs.rst index 4268728e..c3f1d552 100644 --- a/docs/api/brainpy-inputs.rst +++ b/docs/api/brainpy-inputs.rst @@ -1,29 +1,29 @@ -BrainPy-style Input Generators -============================== - -Input spike and current generation models. - -.. currentmodule:: brainpy.state - -Spike Generators ----------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - SpikeTime - PoissonSpike - PoissonEncoder - -Input Functions ---------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - PoissonInput - poisson_input +BrainPy-style Input Generators +============================== + +Input spike and current generation models. + +.. currentmodule:: brainpy.state + +Spike Generators +---------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + SpikeTime + PoissonSpike + PoissonEncoder + +Input Functions +--------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + PoissonInput + poisson_input diff --git a/docs/api/brainpy-neurons.rst b/docs/api/brainpy-neurons.rst index 8eed4d8e..010f632a 100644 --- a/docs/api/brainpy-neurons.rst +++ b/docs/api/brainpy-neurons.rst @@ -1,51 +1,51 @@ -BrainPy-style Neurons -===================== - -BrainPy-style spiking neuron models. - -.. currentmodule:: brainpy.state - -Leaky Integrate-and-Fire Models -------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - IF - LIF - LIFRef - ALIF - ExpIF - ExpIFRef - AdExIF - AdExIFRef - QuaIF - AdQuaIF - AdQuaIFRef - Gif - GifRef - -Izhikevich Models ------------------ - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - Izhikevich - IzhikevichRef - -Hodgkin-Huxley Models ---------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - HH - MorrisLecar - WangBuzsakiHH +BrainPy-style Neurons +===================== + +BrainPy-style spiking neuron models. + +.. currentmodule:: brainpy.state + +Leaky Integrate-and-Fire Models +------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + IF + LIF + LIFRef + ALIF + ExpIF + ExpIFRef + AdExIF + AdExIFRef + QuaIF + AdQuaIF + AdQuaIFRef + Gif + GifRef + +Izhikevich Models +----------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + Izhikevich + IzhikevichRef + +Hodgkin-Huxley Models +--------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + HH + MorrisLecar + WangBuzsakiHH diff --git a/docs/api/brainpy-plasticity.rst b/docs/api/brainpy-plasticity.rst index ee718ded..6d43010f 100644 --- a/docs/api/brainpy-plasticity.rst +++ b/docs/api/brainpy-plasticity.rst @@ -1,14 +1,14 @@ -BrainPy-style Plasticity -======================== - -Short-term synaptic plasticity models. - -.. currentmodule:: brainpy.state - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - STP - STD +BrainPy-style Plasticity +======================== + +Short-term synaptic plasticity models. + +.. currentmodule:: brainpy.state + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + STP + STD diff --git a/docs/api/brainpy-projections.rst b/docs/api/brainpy-projections.rst index 8cdc8268..af72366f 100644 --- a/docs/api/brainpy-projections.rst +++ b/docs/api/brainpy-projections.rst @@ -1,41 +1,41 @@ -BrainPy-style Projections -========================= - -Connect neural populations with the Comm-Syn-Out architecture. - -.. currentmodule:: brainpy.state - -Projection Classes ------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - Projection - AlignPostProj - DeltaProj - CurrentProj - -Projection Helper Functions ----------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - align_pre_projection - align_post_projection - -Gap Junction Projections ------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - SymmetryGapJunction - AsymmetryGapJunction +BrainPy-style Projections +========================= + +Connect neural populations with the Comm-Syn-Out architecture. + +.. currentmodule:: brainpy.state + +Projection Classes +------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + Projection + AlignPostProj + DeltaProj + CurrentProj + +Projection Helper Functions +---------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + align_pre_projection + align_post_projection + +Gap Junction Projections +------------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + SymmetryGapJunction + AsymmetryGapJunction diff --git a/docs/api/brainpy-readouts.rst b/docs/api/brainpy-readouts.rst index c6a356c4..b46519f4 100644 --- a/docs/api/brainpy-readouts.rst +++ b/docs/api/brainpy-readouts.rst @@ -1,13 +1,13 @@ -BrainPy-style Readouts -====================== - -Readout modules for converting spiking or rate-coded outputs. - -.. currentmodule:: brainpy.state - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - LeakyRateReadout +BrainPy-style Readouts +====================== + +Readout modules for converting spiking or rate-coded outputs. + +.. currentmodule:: brainpy.state + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + LeakyRateReadout diff --git a/docs/api/brainpy-synapses.rst b/docs/api/brainpy-synapses.rst index d4c1004c..24c6a078 100644 --- a/docs/api/brainpy-synapses.rst +++ b/docs/api/brainpy-synapses.rst @@ -1,30 +1,30 @@ -BrainPy-style Synapses -====================== - -BrainPy-style synaptic dynamics models. - -.. currentmodule:: brainpy.state - -Simple Synapse Models ---------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - Expon - DualExpon - Alpha - -Biological Receptor Models --------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - AMPA - GABAa - BioNMDA +BrainPy-style Synapses +====================== + +BrainPy-style synaptic dynamics models. + +.. currentmodule:: brainpy.state + +Simple Synapse Models +--------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + Expon + DualExpon + Alpha + +Biological Receptor Models +-------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + AMPA + GABAa + BioNMDA diff --git a/docs/api/brainpy-synouts.rst b/docs/api/brainpy-synouts.rst index 2164d412..15f367b4 100644 --- a/docs/api/brainpy-synouts.rst +++ b/docs/api/brainpy-synouts.rst @@ -1,16 +1,16 @@ -BrainPy-style Synaptic Outputs -============================== - -Synaptic output models for converting conductances to currents. - -.. currentmodule:: brainpy.state - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - SynOut - COBA - CUBA - MgBlock +BrainPy-style Synaptic Outputs +============================== + +Synaptic output models for converting conductances to currents. + +.. currentmodule:: brainpy.state + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + SynOut + COBA + CUBA + MgBlock diff --git a/docs/api/nest-base.rst b/docs/api/nest-base.rst index ebd59059..2f378baf 100644 --- a/docs/api/nest-base.rst +++ b/docs/api/nest-base.rst @@ -1,42 +1,42 @@ -.. warning:: - - **Experimental — In Development.** The NEST-compatible model family is - under active development. Parameter names, defaults, numerical behavior, - and the set of available models may change without notice across 0.0.x - releases. See the :doc:`NEST-style status page ` for - current scope and limitations. - - -NEST Base Classes -================= - -Abstract marker base classes for all NEST-compatible models in -``brainpy.state``. Every NEST-compatible class inherits from exactly one -of these four bases, which makes it easy to introspect model type at -runtime (e.g. ``isinstance(model, NESTPlasticity)``). - -.. currentmodule:: brainpy.state - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - NESTNeuron - NESTSynapse - NESTPlasticity - NESTDevice - - -Class Hierarchy ---------------- - -.. code-block:: text - - brainstate.nn.Dynamics - └─ Dynamics (_base.py) - ├─ Neuron (_base.py) - │ └─ NESTNeuron (_nest_base/_base.py) - ├─ NESTSynapse (_nest_base/_base.py) - │ └─ NESTPlasticity (_nest_base/_base.py) - └─ NESTDevice (_nest_base/_base.py) +.. warning:: + + **Experimental — In Development.** The NEST-compatible model family is + under active development. Parameter names, defaults, numerical behavior, + and the set of available models may change without notice across 0.0.x + releases. See the :doc:`NEST-style status page ` for + current scope and limitations. + + +NEST Base Classes +================= + +Abstract marker base classes for all NEST-compatible models in +``brainpy.state``. Every NEST-compatible class inherits from exactly one +of these four bases, which makes it easy to introspect model type at +runtime (e.g. ``isinstance(model, NESTPlasticity)``). + +.. currentmodule:: brainpy.state + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + NESTNeuron + NESTSynapse + NESTPlasticity + NESTDevice + + +Class Hierarchy +--------------- + +.. code-block:: text + + brainstate.nn.Dynamics + └─ Dynamics (_base.py) + ├─ Neuron (_base.py) + │ └─ NESTNeuron (_nest_base/_base.py) + ├─ NESTSynapse (_nest_base/_base.py) + │ └─ NESTPlasticity (_nest_base/_base.py) + └─ NESTDevice (_nest_base/_base.py) diff --git a/docs/api/nest-devices.rst b/docs/api/nest-devices.rst index 45a36acf..18b676fc 100644 --- a/docs/api/nest-devices.rst +++ b/docs/api/nest-devices.rst @@ -1,110 +1,110 @@ -.. warning:: - - **Experimental — In Development.** The NEST-compatible model family is - under active development. Parameter names, defaults, numerical behavior, - and the set of available models may change without notice across 0.0.x - releases. See the :doc:`NEST-style status page ` for - current scope and limitations. - - -NEST-Compatible Devices -======================= - -Stimulation and recording devices compatible with the `NEST simulator `_. - -.. currentmodule:: brainpy.state - - -Current Generators ------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - dc_generator - ac_generator - noise_generator - step_current_generator - step_rate_generator - - -Spike Generators ----------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - spike_generator - spike_train_injector - spike_dilutor - - -Poisson Generators ------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - poisson_generator - poisson_generator_ps - inhomogeneous_poisson_generator - sinusoidal_poisson_generator - - -Other Generators ----------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - gamma_sup_generator - sinusoidal_gamma_generator - mip_generator - ppd_sup_generator - pulsepacket_generator - - -Recording Devices ------------------ - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - multimeter - spike_recorder - weight_recorder - - -Detectors ---------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - correlation_detector - correlomatrix_detector - correlospinmatrix_detector - spin_detector - - -Other Devices -------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - volume_transmitter +.. warning:: + + **Experimental — In Development.** The NEST-compatible model family is + under active development. Parameter names, defaults, numerical behavior, + and the set of available models may change without notice across 0.0.x + releases. See the :doc:`NEST-style status page ` for + current scope and limitations. + + +NEST-Compatible Devices +======================= + +Stimulation and recording devices compatible with the `NEST simulator `_. + +.. currentmodule:: brainpy.state + + +Current Generators +------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + dc_generator + ac_generator + noise_generator + step_current_generator + step_rate_generator + + +Spike Generators +---------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + spike_generator + spike_train_injector + spike_dilutor + + +Poisson Generators +------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + poisson_generator + poisson_generator_ps + inhomogeneous_poisson_generator + sinusoidal_poisson_generator + + +Other Generators +---------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + gamma_sup_generator + sinusoidal_gamma_generator + mip_generator + ppd_sup_generator + pulsepacket_generator + + +Recording Devices +----------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + multimeter + spike_recorder + weight_recorder + + +Detectors +--------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + correlation_detector + correlomatrix_detector + correlospinmatrix_detector + spin_detector + + +Other Devices +------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + volume_transmitter diff --git a/docs/api/nest-neurons.rst b/docs/api/nest-neurons.rst index eab62cb3..e57573bc 100644 --- a/docs/api/nest-neurons.rst +++ b/docs/api/nest-neurons.rst @@ -1,210 +1,210 @@ -.. warning:: - - **Experimental — In Development.** The NEST-compatible model family is - under active development. Parameter names, defaults, numerical behavior, - and the set of available models may change without notice across 0.0.x - releases. See the :doc:`NEST-style status page ` for - current scope and limitations. - - -NEST-Compatible Neuron Models -============================= - -Neuron models compatible with the `NEST simulator `_. - -.. currentmodule:: brainpy.state - - -IAF Neurons — Current-Based (psc) ----------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - iaf_psc_delta - iaf_psc_delta_ps - iaf_psc_alpha - iaf_psc_alpha_multisynapse - iaf_psc_alpha_ps - iaf_psc_exp - iaf_psc_exp_multisynapse - iaf_psc_exp_htum - iaf_psc_exp_ps - iaf_psc_exp_ps_lossless - - -IAF Neurons — Conductance-Based (cond) ---------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - iaf_cond_alpha - iaf_cond_alpha_mc - iaf_cond_beta - iaf_cond_exp - iaf_cond_exp_sfa_rr - - -IAF Neurons — Specialized Variants ------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - iaf_bw_2001 - iaf_bw_2001_exact - iaf_chs_2007 - iaf_chxk_2008 - iaf_tum_2000 - - -Adaptive Exponential IF (AdEx) Neurons --------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - aeif_cond_alpha - aeif_cond_alpha_astro - aeif_cond_alpha_multisynapse - aeif_cond_beta_multisynapse - aeif_cond_exp - aeif_psc_alpha - aeif_psc_delta - aeif_psc_delta_clopath - aeif_psc_exp - - -Generalized IF (GIF) Neurons ------------------------------ - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - gif_cond_exp - gif_cond_exp_multisynapse - gif_pop_psc_exp - gif_psc_exp - gif_psc_exp_multisynapse - - -Multi-Timescale Adaptive Threshold (MAT) Neurons -------------------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - mat2_psc_exp - amat2_psc_exp - - -Generalized LIF (GLIF) Neurons — Allen Institute -------------------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - glif_cond - glif_psc - glif_psc_double_alpha - - -Hodgkin-Huxley Family ---------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - hh_psc_alpha - hh_psc_alpha_clopath - hh_psc_alpha_gap - hh_cond_exp_traub - hh_cond_beta_gap_traub - ht_neuron - - -Izhikevich Neuron ------------------ - -.. autosummary:: - :toctree: generated/nest/ - :nosignatures: - :template: classtemplate.rst - - izhikevich - - -Point Process Neurons ---------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - pp_psc_delta - pp_cond_exp_mc_urbanczik - - -Binary Neurons --------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - mcculloch_pitts_neuron - ginzburg_neuron - erfc_neuron - - -Rate Neurons ------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - lin_rate_ipn - lin_rate_opn - tanh_rate_ipn - tanh_rate_opn - sigmoid_rate_ipn - sigmoid_rate_gg_1998_ipn - gauss_rate_ipn - threshold_lin_rate_ipn - threshold_lin_rate_opn - rate_neuron_ipn - rate_neuron_opn - rate_transformer_node - siegert_neuron - - -Other Spiking Neurons ---------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - ignore_and_fire +.. warning:: + + **Experimental — In Development.** The NEST-compatible model family is + under active development. Parameter names, defaults, numerical behavior, + and the set of available models may change without notice across 0.0.x + releases. See the :doc:`NEST-style status page ` for + current scope and limitations. + + +NEST-Compatible Neuron Models +============================= + +Neuron models compatible with the `NEST simulator `_. + +.. currentmodule:: brainpy.state + + +IAF Neurons — Current-Based (psc) +---------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + iaf_psc_delta + iaf_psc_delta_ps + iaf_psc_alpha + iaf_psc_alpha_multisynapse + iaf_psc_alpha_ps + iaf_psc_exp + iaf_psc_exp_multisynapse + iaf_psc_exp_htum + iaf_psc_exp_ps + iaf_psc_exp_ps_lossless + + +IAF Neurons — Conductance-Based (cond) +--------------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + iaf_cond_alpha + iaf_cond_alpha_mc + iaf_cond_beta + iaf_cond_exp + iaf_cond_exp_sfa_rr + + +IAF Neurons — Specialized Variants +------------------------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + iaf_bw_2001 + iaf_bw_2001_exact + iaf_chs_2007 + iaf_chxk_2008 + iaf_tum_2000 + + +Adaptive Exponential IF (AdEx) Neurons +-------------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + aeif_cond_alpha + aeif_cond_alpha_astro + aeif_cond_alpha_multisynapse + aeif_cond_beta_multisynapse + aeif_cond_exp + aeif_psc_alpha + aeif_psc_delta + aeif_psc_delta_clopath + aeif_psc_exp + + +Generalized IF (GIF) Neurons +----------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + gif_cond_exp + gif_cond_exp_multisynapse + gif_pop_psc_exp + gif_psc_exp + gif_psc_exp_multisynapse + + +Multi-Timescale Adaptive Threshold (MAT) Neurons +------------------------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + mat2_psc_exp + amat2_psc_exp + + +Generalized LIF (GLIF) Neurons — Allen Institute +------------------------------------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + glif_cond + glif_psc + glif_psc_double_alpha + + +Hodgkin-Huxley Family +--------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + hh_psc_alpha + hh_psc_alpha_clopath + hh_psc_alpha_gap + hh_cond_exp_traub + hh_cond_beta_gap_traub + ht_neuron + + +Izhikevich Neuron +----------------- + +.. autosummary:: + :toctree: generated/nest/ + :nosignatures: + :template: classtemplate.rst + + izhikevich + + +Point Process Neurons +--------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + pp_psc_delta + pp_cond_exp_mc_urbanczik + + +Binary Neurons +-------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + mcculloch_pitts_neuron + ginzburg_neuron + erfc_neuron + + +Rate Neurons +------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + lin_rate_ipn + lin_rate_opn + tanh_rate_ipn + tanh_rate_opn + sigmoid_rate_ipn + sigmoid_rate_gg_1998_ipn + gauss_rate_ipn + threshold_lin_rate_ipn + threshold_lin_rate_opn + rate_neuron_ipn + rate_neuron_opn + rate_transformer_node + siegert_neuron + + +Other Spiking Neurons +--------------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + ignore_and_fire diff --git a/docs/api/nest-plasticity.rst b/docs/api/nest-plasticity.rst index d5483db5..9ab30a20 100644 --- a/docs/api/nest-plasticity.rst +++ b/docs/api/nest-plasticity.rst @@ -1,75 +1,75 @@ -.. warning:: - - **Experimental — In Development.** The NEST-compatible model family is - under active development. Parameter names, defaults, numerical behavior, - and the set of available models may change without notice across 0.0.x - releases. See the :doc:`NEST-style status page ` for - current scope and limitations. - - -NEST-Compatible Plasticity Models -================================== - -Activity-dependent plasticity synapse models compatible with the -`NEST simulator `_. -All classes inherit from :class:`NESTPlasticity`. -For static and structural synapse models see :doc:`nest-synapses`. - -.. currentmodule:: brainpy.state - - -Short-Term Plasticity (STP) ----------------------------- - -Transient, reversible weight changes on the timescale of individual spikes, -following the Tsodyks-Markram formalism. - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - tsodyks_synapse - tsodyks_synapse_hom - tsodyks2_synapse - quantal_stp_synapse - - -Spike-Timing Dependent Plasticity (STDP) ------------------------------------------ - -Long-term weight changes driven by the relative timing of pre- and -post-synaptic spikes. - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - stdp_synapse - stdp_synapse_hom - stdp_pl_synapse_hom - stdp_facetshw_synapse_hom - stdp_nn_pre_centered_synapse - stdp_nn_restr_synapse - stdp_nn_symm_synapse - stdp_triplet_synapse - stdp_dopamine_synapse - - -Voltage-Based / Specialised Learning Rules -------------------------------------------- - -Weight updates that depend on membrane voltage trajectories or -supervised teaching signals. - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - clopath_synapse - jonke_synapse - urbanczik_synapse - vogels_sprekeler_synapse - ht_synapse +.. warning:: + + **Experimental — In Development.** The NEST-compatible model family is + under active development. Parameter names, defaults, numerical behavior, + and the set of available models may change without notice across 0.0.x + releases. See the :doc:`NEST-style status page ` for + current scope and limitations. + + +NEST-Compatible Plasticity Models +================================== + +Activity-dependent plasticity synapse models compatible with the +`NEST simulator `_. +All classes inherit from :class:`NESTPlasticity`. +For static and structural synapse models see :doc:`nest-synapses`. + +.. currentmodule:: brainpy.state + + +Short-Term Plasticity (STP) +---------------------------- + +Transient, reversible weight changes on the timescale of individual spikes, +following the Tsodyks-Markram formalism. + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + tsodyks_synapse + tsodyks_synapse_hom + tsodyks2_synapse + quantal_stp_synapse + + +Spike-Timing Dependent Plasticity (STDP) +----------------------------------------- + +Long-term weight changes driven by the relative timing of pre- and +post-synaptic spikes. + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + stdp_synapse + stdp_synapse_hom + stdp_pl_synapse_hom + stdp_facetshw_synapse_hom + stdp_nn_pre_centered_synapse + stdp_nn_restr_synapse + stdp_nn_symm_synapse + stdp_triplet_synapse + stdp_dopamine_synapse + + +Voltage-Based / Specialised Learning Rules +------------------------------------------- + +Weight updates that depend on membrane voltage trajectories or +supervised teaching signals. + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + clopath_synapse + jonke_synapse + urbanczik_synapse + vogels_sprekeler_synapse + ht_synapse diff --git a/docs/api/nest-synapses.rst b/docs/api/nest-synapses.rst index 4b526893..99ac8b13 100644 --- a/docs/api/nest-synapses.rst +++ b/docs/api/nest-synapses.rst @@ -1,46 +1,46 @@ -.. warning:: - - **Experimental — In Development.** The NEST-compatible model family is - under active development. Parameter names, defaults, numerical behavior, - and the set of available models may change without notice across 0.0.x - releases. See the :doc:`NEST-style status page ` for - current scope and limitations. - - -NEST-Compatible Synapse Models -============================== - -Static and structural synapse models compatible with the -`NEST simulator `_. -For activity-dependent plasticity models see :doc:`nest-plasticity`. - -.. currentmodule:: brainpy.state - - -Static Synapses ---------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - static_synapse - static_synapse_hom_w - bernoulli_synapse - cont_delay_synapse - - -Gap Junctions & Special Connections ------------------------------------- - -.. autosummary:: - :toctree: generated/ - :nosignatures: - :template: classtemplate.rst - - gap_junction - diffusion_connection - rate_connection_instantaneous - rate_connection_delayed - sic_connection +.. warning:: + + **Experimental — In Development.** The NEST-compatible model family is + under active development. Parameter names, defaults, numerical behavior, + and the set of available models may change without notice across 0.0.x + releases. See the :doc:`NEST-style status page ` for + current scope and limitations. + + +NEST-Compatible Synapse Models +============================== + +Static and structural synapse models compatible with the +`NEST simulator `_. +For activity-dependent plasticity models see :doc:`nest-plasticity`. + +.. currentmodule:: brainpy.state + + +Static Synapses +--------------- + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + static_synapse + static_synapse_hom_w + bernoulli_synapse + cont_delay_synapse + + +Gap Junctions & Special Connections +------------------------------------ + +.. autosummary:: + :toctree: generated/ + :nosignatures: + :template: classtemplate.rst + + gap_junction + diffusion_connection + rate_connection_instantaneous + rate_connection_delayed + sic_connection diff --git a/docs/conf.py b/docs/conf.py index 0587e78c..53b45f26 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,165 +1,165 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# a_list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# - -import os -import shutil -import sys - -sys.path.insert(0, os.path.abspath('../docs/')) -sys.path.insert(0, os.path.abspath('../')) -shutil.copyfile('../changelog.md', './changelog.md') -shutil.rmtree('./_build', ignore_errors=True) -shutil.rmtree('./__pycache__', ignore_errors=True) -shutil.rmtree('./api/generated', ignore_errors=True) - -# -- Project information ----------------------------------------------------- - -project = 'brainpy.state' -copyright = '2020-, brainpy.state' -author = 'BrainX Team' - -from highlight_lexer import fix_ipython2_lexer_in_notebooks - -fix_ipython2_lexer_in_notebooks(os.path.dirname(os.path.abspath(__file__))) - -import brainpy_state - -release = brainpy_state.__version__ - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.autosummary', - 'sphinx.ext.intersphinx', - 'sphinx.ext.mathjax', - 'sphinx.ext.napoleon', - 'sphinx.ext.viewcode', - 'sphinx_autodoc_typehints', - 'myst_nb', - 'matplotlib.sphinxext.plot_directive', - 'sphinx_thebe', - 'sphinx_design', - 'sphinx_math_dollar', - 'brainx_sphinx_header', - # 'sphinx-mathjax-offline', -] - - - -html_baseurl = 'https://brainx.chaobrain.com/brainpy-state/' - -# Prefer NumPy-style docstrings across the API docs. -napoleon_google_docstring = False -napoleon_numpy_docstring = True -napoleon_include_init_with_doc = True -napoleon_include_private_with_doc = False -napoleon_include_special_with_doc = False -napoleon_use_admonition_for_examples = False -napoleon_use_admonition_for_notes = False -napoleon_use_admonition_for_references = False -napoleon_use_ivar = False -napoleon_use_param = True -napoleon_use_rtype = True -napoleon_preprocess_types = True -napoleon_attr_annotations = True -napoleon_custom_sections = [ - 'Additional State Variables', - 'Attributes (State Variables)', - 'Attributes Set', - 'Comparison with tsodyks_synapse', - 'Computational Complexity', - 'Computational Complexity and Performance', - 'Computational Properties', - 'Computational considerations', - 'Description', - 'Event timing semantics', - 'Failure Modes', - 'Implementation Notes', - 'Mathematical Description', - 'Mathematical Formulation', - 'Mathematical Interpretation', - 'Mathematical Model', - 'Mathematical formulation', - 'Mathematical model', - 'Numerical Considerations', - 'Parameter Mapping', - 'Receptor Types', - 'Recordables', - 'Short description', - 'Short Description', - 'Side Effects', - 'State variables', - 'State Variables', - 'Summary', - 'Update Procedure', - 'Warnings', -] -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] -source_suffix = ['.rst', '.ipynb', '.md'] - -# source_suffix = '.rst' -autosummary_generate = True - -# The master toctree document. -master_doc = 'index' -intersphinx_mapping = { - "python": ("https://docs.python.org/3.8", None), - "sphinx": ("https://www.sphinx-doc.org/en/master", None), -} -nitpick_ignore = [ - ("py:class", "docutils.nodes.document"), - ("py:class", "docutils.parsers.rst.directives.body.Sidebar"), -] -suppress_warnings = ["myst.domains", "ref.ref", "ref.footnote"] -numfig = True -myst_enable_extensions = ["dollarmath", "amsmath", "deflist", "colon_fence"] -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'nest-status/internal/**', 'superpowers/**'] - - -html_theme = "sphinx_book_theme" -html_logo = "_static/brainpystate_vertical.png" -html_title = "brainpy.state documentation" -html_copy_source = True -html_sourcelink_suffix = "" -html_favicon = "_static/brainpystate_vertical.png" -html_last_updated_fmt = "" -html_css_files = ['css/theme.css'] - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] -jupyter_execute_notebooks = "off" -thebe_config = { - "repository_url": "https://github.com/binder-examples/jupyter-stacks-datascience", - "repository_branch": "master", -} - -# -- Options for myst ---------------------------------------------- -# Notebook cell execution timeout; defaults to 30. -execution_timeout = 200 - -autodoc_default_options = { - 'exclude-members': '....,default_rng', -} +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# a_list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# + +import os +import shutil +import sys + +sys.path.insert(0, os.path.abspath('../docs/')) +sys.path.insert(0, os.path.abspath('../')) +shutil.copyfile('../changelog.md', './changelog.md') +shutil.rmtree('./_build', ignore_errors=True) +shutil.rmtree('./__pycache__', ignore_errors=True) +shutil.rmtree('./api/generated', ignore_errors=True) + +# -- Project information ----------------------------------------------------- + +project = 'brainpy.state' +copyright = '2020-, brainpy.state' +author = 'BrainX Team' + +from highlight_lexer import fix_ipython2_lexer_in_notebooks + +fix_ipython2_lexer_in_notebooks(os.path.dirname(os.path.abspath(__file__))) + +import brainpy_state + +release = brainpy_state.__version__ + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', + 'sphinx.ext.mathjax', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'sphinx_autodoc_typehints', + 'myst_nb', + 'matplotlib.sphinxext.plot_directive', + 'sphinx_thebe', + 'sphinx_design', + 'sphinx_math_dollar', + 'brainx_sphinx_header', + # 'sphinx-mathjax-offline', +] + + + +html_baseurl = 'https://brainx.chaobrain.com/brainpy-state/' + +# Prefer NumPy-style docstrings across the API docs. +napoleon_google_docstring = False +napoleon_numpy_docstring = True +napoleon_include_init_with_doc = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = False +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True +napoleon_preprocess_types = True +napoleon_attr_annotations = True +napoleon_custom_sections = [ + 'Additional State Variables', + 'Attributes (State Variables)', + 'Attributes Set', + 'Comparison with tsodyks_synapse', + 'Computational Complexity', + 'Computational Complexity and Performance', + 'Computational Properties', + 'Computational considerations', + 'Description', + 'Event timing semantics', + 'Failure Modes', + 'Implementation Notes', + 'Mathematical Description', + 'Mathematical Formulation', + 'Mathematical Interpretation', + 'Mathematical Model', + 'Mathematical formulation', + 'Mathematical model', + 'Numerical Considerations', + 'Parameter Mapping', + 'Receptor Types', + 'Recordables', + 'Short description', + 'Short Description', + 'Side Effects', + 'State variables', + 'State Variables', + 'Summary', + 'Update Procedure', + 'Warnings', +] +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] +source_suffix = ['.rst', '.ipynb', '.md'] + +# source_suffix = '.rst' +autosummary_generate = True + +# The master toctree document. +master_doc = 'index' +intersphinx_mapping = { + "python": ("https://docs.python.org/3.8", None), + "sphinx": ("https://www.sphinx-doc.org/en/master", None), +} +nitpick_ignore = [ + ("py:class", "docutils.nodes.document"), + ("py:class", "docutils.parsers.rst.directives.body.Sidebar"), +] +suppress_warnings = ["myst.domains", "ref.ref", "ref.footnote"] +numfig = True +myst_enable_extensions = ["dollarmath", "amsmath", "deflist", "colon_fence"] +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'nest-status/internal/**', 'superpowers/**'] + + +html_theme = "sphinx_book_theme" +html_logo = "_static/brainpystate_vertical.png" +html_title = "brainpy.state documentation" +html_copy_source = True +html_sourcelink_suffix = "" +html_favicon = "_static/brainpystate_vertical.png" +html_last_updated_fmt = "" +html_css_files = ['css/theme.css'] + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] +jupyter_execute_notebooks = "off" +thebe_config = { + "repository_url": "https://github.com/binder-examples/jupyter-stacks-datascience", + "repository_branch": "master", +} + +# -- Options for myst ---------------------------------------------- +# Notebook cell execution timeout; defaults to 30. +execution_timeout = 200 + +autodoc_default_options = { + 'exclude-members': '....,default_rng', +} diff --git a/docs/examples/gallery.rst b/docs/examples/gallery.rst index 7deef781..4707c091 100644 --- a/docs/examples/gallery.rst +++ b/docs/examples/gallery.rst @@ -1,182 +1,182 @@ -Examples Gallery -================ - -Welcome to the ``brainpy.state`` examples gallery! Here you'll find complete, runnable examples demonstrating various aspects of computational neuroscience modeling. - -All examples are available in the `examples/ `_ directory of the brainpy.state repository. - -Classical Network Models -------------------------- - -These examples reproduce influential models from the computational neuroscience literature. - -.. grid:: 2 - :gutter: 3 - - .. grid-item-card:: E-I Balanced Networks - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/102_EI_net_1996.py - - Implements the classic excitatory-inhibitory balanced network showing chaotic dynamics. - - - 80% excitatory, 20% inhibitory neurons - - Random sparse connectivity - - Balanced excitation and inhibition - - Asynchronous irregular firing - - - .. grid-item-card:: COBA Network (2005) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/103_COBA_2005.py - - Conductance-based synaptic integration in balanced networks. - - - Conductance-based synapses (COBA) - - Reversal potentials - - More biologically realistic - - Stable asynchronous activity - - - .. grid-item-card:: CUBA Network (2005) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/104_CUBA_2005.py - - Current-based synaptic integration (simpler, faster variant). - - - Current-based synapses (CUBA) - - Faster computation - - Widely used for large-scale simulations - - - - .. grid-item-card:: COBA with Hodgkin-Huxley Neurons (2007) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/106_COBA_HH_2007.py - - More detailed neuron model with sodium and potassium channels. - - - Hodgkin-Huxley neuron dynamics - - Action potential generation - - Biophysically detailed - - Computationally intensive - - -Oscillations and Rhythms -------------------------- - -.. grid:: 2 - :gutter: 3 - - .. grid-item-card:: Gamma Oscillation (1996) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/107_gamma_oscillation_1996.py - - Interneuron network generating gamma oscillations (30-80 Hz). - - - Interneuron-based gamma - - Inhibition-based synchrony - - Physiologically relevant frequency - - Network oscillations - - .. grid-item-card:: Synfire Chains (199x) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/108_synfire_chains_199.py - - Demonstrates reliable spike sequence propagation. - - - Feedforward architecture - - Reliable spike timing - - Wave propagation - - Temporal coding - - .. grid-item-card:: Fast Global Oscillation - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/109_fast_global_oscillation.py - - High-frequency oscillations (>100 Hz) in inhibitory networks. - - - Very fast oscillations - - Gap junction coupling - - Inhibitory synchrony - - Pathological rhythms - - -Gamma Oscillation Mechanisms (Susin & Destexhe 2021) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Series of models exploring different gamma generation mechanisms: - -.. grid:: 2 - :gutter: 3 - - .. grid-item-card:: Asynchronous Irregular (AI) - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/110_Susin_Destexhe_2021_gamma_oscillation_AI.py - - AI state: No oscillations, irregular firing - - - Background activity state - - Asynchronous firing - - No clear rhythm - - - .. grid-item-card:: CHING Mechanism - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/111_Susin_Destexhe_2021_gamma_oscillation_CHING.py - - Coherent High-frequency INhibition-based Gamma - - - Coherent inhibition - - High-frequency gamma - - Interneuron synchrony - - - .. grid-item-card:: ING Mechanism - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/112_Susin_Destexhe_2021_gamma_oscillation_ING.py - - Inhibition-based Gamma - - - Pure inhibitory network - - Gamma through inhibition - - Fast synaptic kinetics - - - .. grid-item-card:: PING Mechanism - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/113_Susin_Destexhe_2021_gamma_oscillation_PING.py - - Pyramidal-Interneuron Gamma - - - E-I loop generates gamma - - Most common mechanism - - Excitatory-inhibitory interaction - - - -Spiking Neural Network Training --------------------------------- - -.. grid:: 2 - :gutter: 3 - - .. grid-item-card:: Supervised Learning with Surrogate Gradients - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/200_surrogate_grad_lif.py - - Trains a simple spiking network using surrogate gradients. - - - Surrogate gradient method - - LIF neuron training - - Simple classification task - - Gradient-based learning - - - .. grid-item-card:: Fashion-MNIST Classification - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/201_surrogate_grad_lif_fashion_mnist.py - - Trains a spiking network on Fashion-MNIST dataset. - - - Fashion-MNIST dataset - - Multi-layer SNN - - Spike-based processing - - Real-world classification - - - .. grid-item-card:: MNIST with Readout Layer - :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/202_mnist_lif_readout.py - - Uses readout layer for classification. - - - MNIST handwritten digits - - Specialized readout layer - - Spike counting - - Classification from spike rates +Examples Gallery +================ + +Welcome to the ``brainpy.state`` examples gallery! Here you'll find complete, runnable examples demonstrating various aspects of computational neuroscience modeling. + +All examples are available in the `examples/ `_ directory of the brainpy.state repository. + +Classical Network Models +------------------------- + +These examples reproduce influential models from the computational neuroscience literature. + +.. grid:: 2 + :gutter: 3 + + .. grid-item-card:: E-I Balanced Networks + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/102_EI_net_1996.py + + Implements the classic excitatory-inhibitory balanced network showing chaotic dynamics. + + - 80% excitatory, 20% inhibitory neurons + - Random sparse connectivity + - Balanced excitation and inhibition + - Asynchronous irregular firing + + + .. grid-item-card:: COBA Network (2005) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/103_COBA_2005.py + + Conductance-based synaptic integration in balanced networks. + + - Conductance-based synapses (COBA) + - Reversal potentials + - More biologically realistic + - Stable asynchronous activity + + + .. grid-item-card:: CUBA Network (2005) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/104_CUBA_2005.py + + Current-based synaptic integration (simpler, faster variant). + + - Current-based synapses (CUBA) + - Faster computation + - Widely used for large-scale simulations + + + + .. grid-item-card:: COBA with Hodgkin-Huxley Neurons (2007) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/106_COBA_HH_2007.py + + More detailed neuron model with sodium and potassium channels. + + - Hodgkin-Huxley neuron dynamics + - Action potential generation + - Biophysically detailed + - Computationally intensive + + +Oscillations and Rhythms +------------------------- + +.. grid:: 2 + :gutter: 3 + + .. grid-item-card:: Gamma Oscillation (1996) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/107_gamma_oscillation_1996.py + + Interneuron network generating gamma oscillations (30-80 Hz). + + - Interneuron-based gamma + - Inhibition-based synchrony + - Physiologically relevant frequency + - Network oscillations + + .. grid-item-card:: Synfire Chains (199x) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/108_synfire_chains_199.py + + Demonstrates reliable spike sequence propagation. + + - Feedforward architecture + - Reliable spike timing + - Wave propagation + - Temporal coding + + .. grid-item-card:: Fast Global Oscillation + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/109_fast_global_oscillation.py + + High-frequency oscillations (>100 Hz) in inhibitory networks. + + - Very fast oscillations + - Gap junction coupling + - Inhibitory synchrony + - Pathological rhythms + + +Gamma Oscillation Mechanisms (Susin & Destexhe 2021) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Series of models exploring different gamma generation mechanisms: + +.. grid:: 2 + :gutter: 3 + + .. grid-item-card:: Asynchronous Irregular (AI) + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/110_Susin_Destexhe_2021_gamma_oscillation_AI.py + + AI state: No oscillations, irregular firing + + - Background activity state + - Asynchronous firing + - No clear rhythm + + + .. grid-item-card:: CHING Mechanism + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/111_Susin_Destexhe_2021_gamma_oscillation_CHING.py + + Coherent High-frequency INhibition-based Gamma + + - Coherent inhibition + - High-frequency gamma + - Interneuron synchrony + + + .. grid-item-card:: ING Mechanism + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/112_Susin_Destexhe_2021_gamma_oscillation_ING.py + + Inhibition-based Gamma + + - Pure inhibitory network + - Gamma through inhibition + - Fast synaptic kinetics + + + .. grid-item-card:: PING Mechanism + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/113_Susin_Destexhe_2021_gamma_oscillation_PING.py + + Pyramidal-Interneuron Gamma + + - E-I loop generates gamma + - Most common mechanism + - Excitatory-inhibitory interaction + + + +Spiking Neural Network Training +-------------------------------- + +.. grid:: 2 + :gutter: 3 + + .. grid-item-card:: Supervised Learning with Surrogate Gradients + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/200_surrogate_grad_lif.py + + Trains a simple spiking network using surrogate gradients. + + - Surrogate gradient method + - LIF neuron training + - Simple classification task + - Gradient-based learning + + + .. grid-item-card:: Fashion-MNIST Classification + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/201_surrogate_grad_lif_fashion_mnist.py + + Trains a spiking network on Fashion-MNIST dataset. + + - Fashion-MNIST dataset + - Multi-layer SNN + - Spike-based processing + - Real-world classification + + + .. grid-item-card:: MNIST with Readout Layer + :link: https://github.com/chaobrain/brainpy.state/tree/main/examples/202_mnist_lif_readout.py + + Uses readout layer for classification. + + - MNIST handwritten digits + - Specialized readout layer + - Spike counting + - Classification from spike rates diff --git a/docs/highlight_lexer.py b/docs/highlight_lexer.py index 95544807..a8031b75 100644 --- a/docs/highlight_lexer.py +++ b/docs/highlight_lexer.py @@ -1,123 +1,123 @@ -# Copyright 2024 Brain Simulation Ecosystem Limited. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== - - -import glob -import json -import sys -import os - - -def fix_ipython2_lexer_in_notebooks(directory_path): - """ - 批量修复指定目录中所有 Jupyter Notebook 文件的 ipython2 lexer 问题 - """ - # 查找所有.ipynb文件 - notebook_files = glob.glob(os.path.join(directory_path, "*.ipynb")) - - if not notebook_files: - print(f"在目录 {directory_path} 中未找到任何 .ipynb 文件") - return - - fixed_count = 0 - - for file_path in notebook_files: - try: - with open(file_path, 'r', encoding='utf-8') as f: - data = json.load(f) - - needs_fix = False - - # 检查并修复顶层元数据 - if 'metadata' in data: - # 修复 language_info - if 'language_info' in data['metadata']: - lang_info = data['metadata']['language_info'] - if lang_info.get('name') == 'ipython2': - lang_info['name'] = 'ipython3' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 顶层 language_info.name") - - if lang_info.get('pygments_lexer') == 'ipython2': - lang_info['pygments_lexer'] = 'ipython3' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 顶层 language_info.pygments_lexer") - - # 修复 kernelspec - if 'kernelspec' in data['metadata']: - kernelspec = data['metadata']['kernelspec'] - if kernelspec.get('language') == 'ipython2': - kernelspec['language'] = 'python' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 顶层 kernelspec.language") - - if kernelspec.get('name') == 'ipython2': - kernelspec['name'] = 'python3' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 顶层 kernelspec.name") - - # 检查并修复单元格元数据 - for i, cell in enumerate(data.get('cells', [])): - if 'metadata' in cell: - # 修复单元格级别的语言设置 - if 'language' in cell['metadata'] and cell['metadata']['language'] == 'ipython2': - cell['metadata']['language'] = 'ipython3' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 单元格 {i} 的语言设置") - - # 修复其他可能的 lexer 设置 - if 'pygments_lexer' in cell['metadata'] and cell['metadata']['pygments_lexer'] == 'ipython2': - cell['metadata']['pygments_lexer'] = 'ipython3' - needs_fix = True - print(f"修复 {os.path.basename(file_path)}: 单元格 {i} 的 pygments_lexer 设置") - - # 如果需要修复,保存文件 - if needs_fix: - # 创建备份 - backup_path = file_path + '.backup' - with open(backup_path, 'w', encoding='utf-8') as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - # 保存修复后的文件 - with open(file_path, 'w', encoding='utf-8') as f: - json.dump(data, f, indent=2, ensure_ascii=False) - - fixed_count += 1 - print(f"已修复并备份: {os.path.basename(file_path)}") - else: - print(f"无需修复: {os.path.basename(file_path)}") - - except Exception as e: - print(f"处理文件 {file_path} 时出错: {str(e)}") - - print(f"\n处理完成! 共修复了 {fixed_count} 个文件") - return fixed_count - - -if __name__ == "__main__": - print(os.path.dirname(os.path.abspath(__file__))) - - # 使用当前目录,或者指定您的文档目录路径 - target_directory = input("请输入包含.ipynb文件的目录路径(直接回车使用当前目录): ").strip() - - if not target_directory: - target_directory = "." - - if not os.path.isdir(target_directory): - print(f"错误: 目录 '{target_directory}' 不存在") - sys.exit(1) - - print(f"开始处理目录: {os.path.abspath(target_directory)}") - fix_ipython2_lexer_in_notebooks(target_directory) +# Copyright 2024 Brain Simulation Ecosystem Limited. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== + + +import glob +import json +import sys +import os + + +def fix_ipython2_lexer_in_notebooks(directory_path): + """ + 批量修复指定目录中所有 Jupyter Notebook 文件的 ipython2 lexer 问题 + """ + # 查找所有.ipynb文件 + notebook_files = glob.glob(os.path.join(directory_path, "*.ipynb")) + + if not notebook_files: + print(f"在目录 {directory_path} 中未找到任何 .ipynb 文件") + return + + fixed_count = 0 + + for file_path in notebook_files: + try: + with open(file_path, 'r', encoding='utf-8') as f: + data = json.load(f) + + needs_fix = False + + # 检查并修复顶层元数据 + if 'metadata' in data: + # 修复 language_info + if 'language_info' in data['metadata']: + lang_info = data['metadata']['language_info'] + if lang_info.get('name') == 'ipython2': + lang_info['name'] = 'ipython3' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 顶层 language_info.name") + + if lang_info.get('pygments_lexer') == 'ipython2': + lang_info['pygments_lexer'] = 'ipython3' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 顶层 language_info.pygments_lexer") + + # 修复 kernelspec + if 'kernelspec' in data['metadata']: + kernelspec = data['metadata']['kernelspec'] + if kernelspec.get('language') == 'ipython2': + kernelspec['language'] = 'python' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 顶层 kernelspec.language") + + if kernelspec.get('name') == 'ipython2': + kernelspec['name'] = 'python3' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 顶层 kernelspec.name") + + # 检查并修复单元格元数据 + for i, cell in enumerate(data.get('cells', [])): + if 'metadata' in cell: + # 修复单元格级别的语言设置 + if 'language' in cell['metadata'] and cell['metadata']['language'] == 'ipython2': + cell['metadata']['language'] = 'ipython3' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 单元格 {i} 的语言设置") + + # 修复其他可能的 lexer 设置 + if 'pygments_lexer' in cell['metadata'] and cell['metadata']['pygments_lexer'] == 'ipython2': + cell['metadata']['pygments_lexer'] = 'ipython3' + needs_fix = True + print(f"修复 {os.path.basename(file_path)}: 单元格 {i} 的 pygments_lexer 设置") + + # 如果需要修复,保存文件 + if needs_fix: + # 创建备份 + backup_path = file_path + '.backup' + with open(backup_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + # 保存修复后的文件 + with open(file_path, 'w', encoding='utf-8') as f: + json.dump(data, f, indent=2, ensure_ascii=False) + + fixed_count += 1 + print(f"已修复并备份: {os.path.basename(file_path)}") + else: + print(f"无需修复: {os.path.basename(file_path)}") + + except Exception as e: + print(f"处理文件 {file_path} 时出错: {str(e)}") + + print(f"\n处理完成! 共修复了 {fixed_count} 个文件") + return fixed_count + + +if __name__ == "__main__": + print(os.path.dirname(os.path.abspath(__file__))) + + # 使用当前目录,或者指定您的文档目录路径 + target_directory = input("请输入包含.ipynb文件的目录路径(直接回车使用当前目录): ").strip() + + if not target_directory: + target_directory = "." + + if not os.path.isdir(target_directory): + print(f"错误: 目录 '{target_directory}' 不存在") + sys.exit(1) + + print(f"开始处理目录: {os.path.abspath(target_directory)}") + fix_ipython2_lexer_in_notebooks(target_directory) diff --git a/docs/quickstart/index.rst b/docs/quickstart/index.rst index a70009a6..61a67361 100644 --- a/docs/quickstart/index.rst +++ b/docs/quickstart/index.rst @@ -1,40 +1,40 @@ -Quickstart -========== - -Welcome to the quickstart guide for ``brainpy.state``! This section will help you get up and running -with the State-based programming paradigm for building and simulating spiking neural networks. - -Whether you're new to BrainPy or transitioning from ``brainpy.dyn``, this guide provides everything -you need to start building neural models with the improved State-based approach. - - -What you'll learn ------------------ - -This quickstart guide covers: - -- **Installation**: How to install BrainPy with the appropriate backend (CPU, GPU, TPU) for your needs -- **5-Minute Tutorial**: A hands-on introduction to building your first neural network with ``brainpy.state`` -- **BrainPy-style Modeling Guide**: Understanding the fundamental concepts of building neural models with the BrainPy-style API - - -Getting started ---------------- - -If you're new to ``brainpy.state``, we recommend following these steps: - -1. Start with :doc:`installation` to set up your environment -2. Follow the :doc:`5min-tutorial` to build your first model -3. Review the :doc:`../brainpy-guide/index` to understand the underlying principles - -For experienced users, you can jump directly to the concepts overview or explore the tutorials and examples sections. - - -.. toctree:: - :hidden: - :maxdepth: 2 - - installation.rst - overview.ipynb - 5min-tutorial.ipynb - +Quickstart +========== + +Welcome to the quickstart guide for ``brainpy.state``! This section will help you get up and running +with the State-based programming paradigm for building and simulating spiking neural networks. + +Whether you're new to BrainPy or transitioning from ``brainpy.dyn``, this guide provides everything +you need to start building neural models with the improved State-based approach. + + +What you'll learn +----------------- + +This quickstart guide covers: + +- **Installation**: How to install BrainPy with the appropriate backend (CPU, GPU, TPU) for your needs +- **5-Minute Tutorial**: A hands-on introduction to building your first neural network with ``brainpy.state`` +- **BrainPy-style Modeling Guide**: Understanding the fundamental concepts of building neural models with the BrainPy-style API + + +Getting started +--------------- + +If you're new to ``brainpy.state``, we recommend following these steps: + +1. Start with :doc:`installation` to set up your environment +2. Follow the :doc:`5min-tutorial` to build your first model +3. Review the :doc:`../brainpy-guide/index` to understand the underlying principles + +For experienced users, you can jump directly to the concepts overview or explore the tutorials and examples sections. + + +.. toctree:: + :hidden: + :maxdepth: 2 + + installation.rst + overview.ipynb + 5min-tutorial.ipynb + diff --git a/docs/quickstart/installation.rst b/docs/quickstart/installation.rst index ca0ff5c2..b1ef1b67 100644 --- a/docs/quickstart/installation.rst +++ b/docs/quickstart/installation.rst @@ -1,164 +1,164 @@ -Installation Guide -================== - -``brainpy.state`` is a flexible, efficient, and extensible framework for computational neuroscience and -brain-inspired computation. This guide will help you install ``brainpy.state`` on your system. - -Requirements ------------- - -- Python 3.10 or later -- pip package manager -- Supported platforms: Linux (Ubuntu 16.04+), macOS (10.12+), Windows - -Basic Installation ------------------- - -Install the latest version of ``brainpy.state``: - -.. code-block:: bash - - pip install brainpy.state -U - -This will install brainpy.state with CPU support by default. - -Hardware-Specific Installation -------------------------------- - -Depending on your hardware, you can install ``brainpy.state`` with optimized support: - -CPU Only -~~~~~~~~ - -For CPU-only installations: - -.. code-block:: bash - - pip install brainpy.state[cpu] -U - -This is suitable for development, testing, and small-scale simulations. - -GPU Support (CUDA) -~~~~~~~~~~~~~~~~~~ - -For NVIDIA GPU acceleration: - -**CUDA 12.x:** - -.. code-block:: bash - - pip install brainpy.state[cuda12] -U - -**CUDA 13.x:** - -.. code-block:: bash - - pip install brainpy.state[cuda13] -U - -.. note:: - Make sure you have the appropriate CUDA toolkit installed on your system before installing the GPU version. - -TPU Support -~~~~~~~~~~~ - -For Google Cloud TPU support: - -.. code-block:: bash - - pip install brainpy.state[tpu] -U - -This is typically used when running on Google Cloud Platform or Colab with TPU runtime. - -Ecosystem Installation ----------------------- - -To install ``brainpy.state`` along with the entire ecosystem of tools: - -.. code-block:: bash - - pip install BrainX -U - -This includes: - -- ``brainpy.state``: Main framework -- ``brainstate``: State management and compilation backend -- ``brainunit``: Physical units system -- ``braintools``: Utilities and tools -- Additional ecosystem packages - -Verifying Installation ----------------------- - -To verify that ``brainpy.state`` is installed correctly: - -.. code-block:: python - - import brainpy_state - import brainpy - import brainstate - import brainunit as u - - print(f"brainpy.state version: {brainpy_state.__version__}") - print(f"brainstate version: {brainstate.__version__}") - - # Test basic functionality - neuron = brainpy.state.LIF(10) - print("Installation successful!") - -Development Installation ------------------------- - -If you want to install brainpy.state from source for development: - -.. code-block:: bash - - git clone https://github.com/chaobrain/brainpy.state.git - cd brainpy.state - pip install -e . - -This creates an editable installation that reflects your local changes. - -Troubleshooting ---------------- - -Common Issues -~~~~~~~~~~~~~ - -**ImportError: No module named 'brainpy.state'** - -Make sure you've activated the correct Python environment and that the installation completed successfully. - -**CUDA not found** - -If you installed the GPU version but get CUDA errors, ensure that: - -1. Your NVIDIA drivers are up to date -2. CUDA toolkit is installed and matches the version (12.x or 13.x) -3. Your GPU is CUDA-capable - -**Version Conflicts** - -If you're upgrading from a previous version, you might need to uninstall the old version first: - -.. code-block:: bash - - pip uninstall brainpy.state - pip install brainpy.state -U - -Getting Help -~~~~~~~~~~~~ - -If you encounter issues: - -- Check the `GitHub Issues `_ -- Read the documentation at `https://brainx.chaobrain.com/brainpy-state/ `_ -- Join our community discussions - -Next Steps ----------- - -Now that you have brainpy.state installed, you can: - -- Follow the :doc:`5-minute tutorial <5min-tutorial>` for a quick introduction -- Read the :doc:`BrainPy-style modeling guide <../brainpy-guide/index>` to understand brainpy.state's architecture -- Explore the `examples `_ for detailed guides +Installation Guide +================== + +``brainpy.state`` is a flexible, efficient, and extensible framework for computational neuroscience and +brain-inspired computation. This guide will help you install ``brainpy.state`` on your system. + +Requirements +------------ + +- Python 3.10 or later +- pip package manager +- Supported platforms: Linux (Ubuntu 16.04+), macOS (10.12+), Windows + +Basic Installation +------------------ + +Install the latest version of ``brainpy.state``: + +.. code-block:: bash + + pip install brainpy.state -U + +This will install brainpy.state with CPU support by default. + +Hardware-Specific Installation +------------------------------- + +Depending on your hardware, you can install ``brainpy.state`` with optimized support: + +CPU Only +~~~~~~~~ + +For CPU-only installations: + +.. code-block:: bash + + pip install brainpy.state[cpu] -U + +This is suitable for development, testing, and small-scale simulations. + +GPU Support (CUDA) +~~~~~~~~~~~~~~~~~~ + +For NVIDIA GPU acceleration: + +**CUDA 12.x:** + +.. code-block:: bash + + pip install brainpy.state[cuda12] -U + +**CUDA 13.x:** + +.. code-block:: bash + + pip install brainpy.state[cuda13] -U + +.. note:: + Make sure you have the appropriate CUDA toolkit installed on your system before installing the GPU version. + +TPU Support +~~~~~~~~~~~ + +For Google Cloud TPU support: + +.. code-block:: bash + + pip install brainpy.state[tpu] -U + +This is typically used when running on Google Cloud Platform or Colab with TPU runtime. + +Ecosystem Installation +---------------------- + +To install ``brainpy.state`` along with the entire ecosystem of tools: + +.. code-block:: bash + + pip install BrainX -U + +This includes: + +- ``brainpy.state``: Main framework +- ``brainstate``: State management and compilation backend +- ``brainunit``: Physical units system +- ``braintools``: Utilities and tools +- Additional ecosystem packages + +Verifying Installation +---------------------- + +To verify that ``brainpy.state`` is installed correctly: + +.. code-block:: python + + import brainpy_state + import brainpy + import brainstate + import brainunit as u + + print(f"brainpy.state version: {brainpy_state.__version__}") + print(f"brainstate version: {brainstate.__version__}") + + # Test basic functionality + neuron = brainpy.state.LIF(10) + print("Installation successful!") + +Development Installation +------------------------ + +If you want to install brainpy.state from source for development: + +.. code-block:: bash + + git clone https://github.com/chaobrain/brainpy.state.git + cd brainpy.state + pip install -e . + +This creates an editable installation that reflects your local changes. + +Troubleshooting +--------------- + +Common Issues +~~~~~~~~~~~~~ + +**ImportError: No module named 'brainpy.state'** + +Make sure you've activated the correct Python environment and that the installation completed successfully. + +**CUDA not found** + +If you installed the GPU version but get CUDA errors, ensure that: + +1. Your NVIDIA drivers are up to date +2. CUDA toolkit is installed and matches the version (12.x or 13.x) +3. Your GPU is CUDA-capable + +**Version Conflicts** + +If you're upgrading from a previous version, you might need to uninstall the old version first: + +.. code-block:: bash + + pip uninstall brainpy.state + pip install brainpy.state -U + +Getting Help +~~~~~~~~~~~~ + +If you encounter issues: + +- Check the `GitHub Issues `_ +- Read the documentation at `https://brainx.chaobrain.com/brainpy-state/ `_ +- Join our community discussions + +Next Steps +---------- + +Now that you have brainpy.state installed, you can: + +- Follow the :doc:`5-minute tutorial <5min-tutorial>` for a quick introduction +- Read the :doc:`BrainPy-style modeling guide <../brainpy-guide/index>` to understand brainpy.state's architecture +- Explore the `examples `_ for detailed guides diff --git a/examples/nest_like/BrodyHopfield.py b/examples/nest_like/BrodyHopfield.py index 1fd363b0..664c280b 100644 --- a/examples/nest_like/BrodyHopfield.py +++ b/examples/nest_like/BrodyHopfield.py @@ -48,7 +48,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/CampbellSiegert.py b/examples/nest_like/CampbellSiegert.py index 7985699b..98bee895 100644 --- a/examples/nest_like/CampbellSiegert.py +++ b/examples/nest_like/CampbellSiegert.py @@ -32,7 +32,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/aeif_cond_beta_multisynapse.py b/examples/nest_like/aeif_cond_beta_multisynapse.py index a040a29e..5ccad2a7 100644 --- a/examples/nest_like/aeif_cond_beta_multisynapse.py +++ b/examples/nest_like/aeif_cond_beta_multisynapse.py @@ -29,7 +29,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/artificial_synchrony.py b/examples/nest_like/artificial_synchrony.py index 2b76aa97..2fcdd08b 100644 --- a/examples/nest_like/artificial_synchrony.py +++ b/examples/nest_like/artificial_synchrony.py @@ -23,7 +23,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/astrocyte_brunel_bernoulli.py b/examples/nest_like/astrocyte_brunel_bernoulli.py index bdce258a..23419a56 100644 --- a/examples/nest_like/astrocyte_brunel_bernoulli.py +++ b/examples/nest_like/astrocyte_brunel_bernoulli.py @@ -38,7 +38,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/astrocyte_brunel_fixed_indegree.py b/examples/nest_like/astrocyte_brunel_fixed_indegree.py index dfd684ec..bb5e556d 100644 --- a/examples/nest_like/astrocyte_brunel_fixed_indegree.py +++ b/examples/nest_like/astrocyte_brunel_fixed_indegree.py @@ -28,7 +28,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/astrocyte_interaction.py b/examples/nest_like/astrocyte_interaction.py index c0c74a4f..5a2e8a84 100644 --- a/examples/nest_like/astrocyte_interaction.py +++ b/examples/nest_like/astrocyte_interaction.py @@ -22,7 +22,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/astrocyte_single.py b/examples/nest_like/astrocyte_single.py index 945c39b3..c8a549b1 100644 --- a/examples/nest_like/astrocyte_single.py +++ b/examples/nest_like/astrocyte_single.py @@ -23,7 +23,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/astrocyte_small_network.py b/examples/nest_like/astrocyte_small_network.py index 6753d6b4..1b9330fb 100644 --- a/examples/nest_like/astrocyte_small_network.py +++ b/examples/nest_like/astrocyte_small_network.py @@ -32,7 +32,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/balancedneuron.py b/examples/nest_like/balancedneuron.py index 1cde31a1..ddea7305 100644 --- a/examples/nest_like/balancedneuron.py +++ b/examples/nest_like/balancedneuron.py @@ -15,7 +15,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brette_et_al_2007.py b/examples/nest_like/brette_et_al_2007.py index 2de6fd31..92691cc0 100644 --- a/examples/nest_like/brette_et_al_2007.py +++ b/examples/nest_like/brette_et_al_2007.py @@ -38,7 +38,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brette_gerstner_fig_2c.py b/examples/nest_like/brette_gerstner_fig_2c.py index a8241473..4235117e 100644 --- a/examples/nest_like/brette_gerstner_fig_2c.py +++ b/examples/nest_like/brette_gerstner_fig_2c.py @@ -36,7 +36,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brette_gerstner_fig_3d.py b/examples/nest_like/brette_gerstner_fig_3d.py index 43598fcc..5f63ca4c 100644 --- a/examples/nest_like/brette_gerstner_fig_3d.py +++ b/examples/nest_like/brette_gerstner_fig_3d.py @@ -37,7 +37,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brunel_alpha.py b/examples/nest_like/brunel_alpha.py index cc95a13b..84c98648 100644 --- a/examples/nest_like/brunel_alpha.py +++ b/examples/nest_like/brunel_alpha.py @@ -12,7 +12,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import scipy.special as sp diff --git a/examples/nest_like/brunel_alpha_evolution_strategies.py b/examples/nest_like/brunel_alpha_evolution_strategies.py index 3b7f15f1..41d130f3 100644 --- a/examples/nest_like/brunel_alpha_evolution_strategies.py +++ b/examples/nest_like/brunel_alpha_evolution_strategies.py @@ -19,7 +19,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import scipy.special as sp diff --git a/examples/nest_like/brunel_delta.py b/examples/nest_like/brunel_delta.py index cbf22f7c..36c03518 100644 --- a/examples/nest_like/brunel_delta.py +++ b/examples/nest_like/brunel_delta.py @@ -13,7 +13,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brunel_exp_multisynapse.py b/examples/nest_like/brunel_exp_multisynapse.py index 311d890d..2ce67043 100644 --- a/examples/nest_like/brunel_exp_multisynapse.py +++ b/examples/nest_like/brunel_exp_multisynapse.py @@ -13,7 +13,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/brunel_siegert.py b/examples/nest_like/brunel_siegert.py index 6d6bf96f..48f83cdc 100644 --- a/examples/nest_like/brunel_siegert.py +++ b/examples/nest_like/brunel_siegert.py @@ -25,7 +25,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/clopath_synapse_small_network.py b/examples/nest_like/clopath_synapse_small_network.py index 6ac443c3..1242b5cb 100644 --- a/examples/nest_like/clopath_synapse_small_network.py +++ b/examples/nest_like/clopath_synapse_small_network.py @@ -30,7 +30,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/clopath_synapse_spike_pairing.py b/examples/nest_like/clopath_synapse_spike_pairing.py index 14fd4c96..9fa4eb9b 100644 --- a/examples/nest_like/clopath_synapse_spike_pairing.py +++ b/examples/nest_like/clopath_synapse_spike_pairing.py @@ -23,7 +23,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/correlospinmatrix_detector_two_neuron.py b/examples/nest_like/correlospinmatrix_detector_two_neuron.py index 5e82417b..85ae9de8 100644 --- a/examples/nest_like/correlospinmatrix_detector_two_neuron.py +++ b/examples/nest_like/correlospinmatrix_detector_two_neuron.py @@ -36,7 +36,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/cross_check_mip_corrdet.py b/examples/nest_like/cross_check_mip_corrdet.py index 26c2d56c..52f21dea 100644 --- a/examples/nest_like/cross_check_mip_corrdet.py +++ b/examples/nest_like/cross_check_mip_corrdet.py @@ -27,7 +27,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/csa_example.py b/examples/nest_like/csa_example.py index 5f3eb08a..e515a241 100644 --- a/examples/nest_like/csa_example.py +++ b/examples/nest_like/csa_example.py @@ -35,7 +35,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/ei_clustered_network.py b/examples/nest_like/ei_clustered_network.py index ec6a4ddc..72acd0c2 100644 --- a/examples/nest_like/ei_clustered_network.py +++ b/examples/nest_like/ei_clustered_network.py @@ -47,7 +47,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/evaluate_quantal_stp_synapse.py b/examples/nest_like/evaluate_quantal_stp_synapse.py index 5385f205..567f1a23 100644 --- a/examples/nest_like/evaluate_quantal_stp_synapse.py +++ b/examples/nest_like/evaluate_quantal_stp_synapse.py @@ -29,7 +29,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import braintools import numpy as np diff --git a/examples/nest_like/evaluate_tsodyks2_synapse.py b/examples/nest_like/evaluate_tsodyks2_synapse.py index 87239f7f..6e12ae5d 100644 --- a/examples/nest_like/evaluate_tsodyks2_synapse.py +++ b/examples/nest_like/evaluate_tsodyks2_synapse.py @@ -21,7 +21,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import braintools import numpy as np diff --git a/examples/nest_like/gap_junctions_inhibitory_network.py b/examples/nest_like/gap_junctions_inhibitory_network.py index 76f027a2..5447649b 100644 --- a/examples/nest_like/gap_junctions_inhibitory_network.py +++ b/examples/nest_like/gap_junctions_inhibitory_network.py @@ -22,7 +22,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/gap_junctions_two_neurons.py b/examples/nest_like/gap_junctions_two_neurons.py index 3390eee2..c4a21d11 100644 --- a/examples/nest_like/gap_junctions_two_neurons.py +++ b/examples/nest_like/gap_junctions_two_neurons.py @@ -24,7 +24,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import jax.numpy as jnp import numpy as np diff --git a/examples/nest_like/gif_cond_exp_multisynapse.py b/examples/nest_like/gif_cond_exp_multisynapse.py index 3c419b69..c8249093 100644 --- a/examples/nest_like/gif_cond_exp_multisynapse.py +++ b/examples/nest_like/gif_cond_exp_multisynapse.py @@ -30,7 +30,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/gif_pop_psc_exp.py b/examples/nest_like/gif_pop_psc_exp.py index 2ccae8c6..63a47cb4 100644 --- a/examples/nest_like/gif_pop_psc_exp.py +++ b/examples/nest_like/gif_pop_psc_exp.py @@ -51,7 +51,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/gif_population.py b/examples/nest_like/gif_population.py index dcba2261..6b2ab778 100644 --- a/examples/nest_like/gif_population.py +++ b/examples/nest_like/gif_population.py @@ -36,7 +36,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/glif_cond_neuron.py b/examples/nest_like/glif_cond_neuron.py index c3f2ee3e..a43bb3ac 100644 --- a/examples/nest_like/glif_cond_neuron.py +++ b/examples/nest_like/glif_cond_neuron.py @@ -37,7 +37,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/glif_psc_double_alpha_neuron.py b/examples/nest_like/glif_psc_double_alpha_neuron.py index 15276df1..7c89a292 100644 --- a/examples/nest_like/glif_psc_double_alpha_neuron.py +++ b/examples/nest_like/glif_psc_double_alpha_neuron.py @@ -34,7 +34,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/glif_psc_neuron.py b/examples/nest_like/glif_psc_neuron.py index ee20ef31..fcfecf5e 100644 --- a/examples/nest_like/glif_psc_neuron.py +++ b/examples/nest_like/glif_psc_neuron.py @@ -42,7 +42,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/hh_phaseplane.py b/examples/nest_like/hh_phaseplane.py index 67ab02c0..21b5a611 100644 --- a/examples/nest_like/hh_phaseplane.py +++ b/examples/nest_like/hh_phaseplane.py @@ -35,7 +35,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import functools diff --git a/examples/nest_like/hh_psc_alpha.py b/examples/nest_like/hh_psc_alpha.py index 8ee5c815..308f4a87 100644 --- a/examples/nest_like/hh_psc_alpha.py +++ b/examples/nest_like/hh_psc_alpha.py @@ -19,7 +19,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/iaf_tum_2000_short_term_depression.py b/examples/nest_like/iaf_tum_2000_short_term_depression.py index 5298ba16..8815b7c6 100644 --- a/examples/nest_like/iaf_tum_2000_short_term_depression.py +++ b/examples/nest_like/iaf_tum_2000_short_term_depression.py @@ -27,7 +27,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/iaf_tum_2000_short_term_facilitation.py b/examples/nest_like/iaf_tum_2000_short_term_facilitation.py index a4c620c2..2a3dd231 100644 --- a/examples/nest_like/iaf_tum_2000_short_term_facilitation.py +++ b/examples/nest_like/iaf_tum_2000_short_term_facilitation.py @@ -28,7 +28,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/if_curve.py b/examples/nest_like/if_curve.py index 284d3dc9..4d77c798 100644 --- a/examples/nest_like/if_curve.py +++ b/examples/nest_like/if_curve.py @@ -14,7 +14,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/izhikevich.py b/examples/nest_like/izhikevich.py index 5399e686..7fb6b69a 100644 --- a/examples/nest_like/izhikevich.py +++ b/examples/nest_like/izhikevich.py @@ -31,7 +31,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/lin_rate_ipn_network.py b/examples/nest_like/lin_rate_ipn_network.py index 8b332104..a4189fba 100644 --- a/examples/nest_like/lin_rate_ipn_network.py +++ b/examples/nest_like/lin_rate_ipn_network.py @@ -29,7 +29,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/mat_psc_exp.py b/examples/nest_like/mat_psc_exp.py index d439faa4..f0f504be 100644 --- a/examples/nest_like/mat_psc_exp.py +++ b/examples/nest_like/mat_psc_exp.py @@ -29,7 +29,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/mc_neuron.py b/examples/nest_like/mc_neuron.py index 891024b8..03461d4b 100644 --- a/examples/nest_like/mc_neuron.py +++ b/examples/nest_like/mc_neuron.py @@ -36,7 +36,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/multimeter_file.py b/examples/nest_like/multimeter_file.py index e55d90aa..689d1765 100644 --- a/examples/nest_like/multimeter_file.py +++ b/examples/nest_like/multimeter_file.py @@ -28,7 +28,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/one_neuron.py b/examples/nest_like/one_neuron.py index 658832d0..f85e8cc8 100644 --- a/examples/nest_like/one_neuron.py +++ b/examples/nest_like/one_neuron.py @@ -17,7 +17,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/one_neuron_with_noise.py b/examples/nest_like/one_neuron_with_noise.py index 1a711ea2..9befc5f1 100644 --- a/examples/nest_like/one_neuron_with_noise.py +++ b/examples/nest_like/one_neuron_with_noise.py @@ -18,7 +18,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/plot_weight_matrices.py b/examples/nest_like/plot_weight_matrices.py index f34833c2..b7e73767 100644 --- a/examples/nest_like/plot_weight_matrices.py +++ b/examples/nest_like/plot_weight_matrices.py @@ -32,7 +32,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/pong.py b/examples/nest_like/pong.py index 960e9cfc..6210bfb6 100644 --- a/examples/nest_like/pong.py +++ b/examples/nest_like/pong.py @@ -22,7 +22,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) LEFT_SCORE = -1 RIGHT_SCORE = +1 diff --git a/examples/nest_like/pong_networks.py b/examples/nest_like/pong_networks.py index d88a9896..b4aa0010 100644 --- a/examples/nest_like/pong_networks.py +++ b/examples/nest_like/pong_networks.py @@ -35,7 +35,7 @@ import brainunit as u jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) from brainpy_state import (Simulator, host_spike_drive, host_current_drive, parrot_neuron, iaf_psc_exp, spike_recorder, noise_generator, diff --git a/examples/nest_like/pong_run.py b/examples/nest_like/pong_run.py index a06ee225..41dfad94 100644 --- a/examples/nest_like/pong_run.py +++ b/examples/nest_like/pong_run.py @@ -35,7 +35,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import examples.nest_like.pong as pong from examples.nest_like.pong_networks import PongNetRSTDP, PongNetDopa diff --git a/examples/nest_like/precise_spiking.py b/examples/nest_like/precise_spiking.py index 520aa28b..4a0961f1 100644 --- a/examples/nest_like/precise_spiking.py +++ b/examples/nest_like/precise_spiking.py @@ -31,7 +31,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/pulsepacket.py b/examples/nest_like/pulsepacket.py index 3be16246..87fc4b21 100644 --- a/examples/nest_like/pulsepacket.py +++ b/examples/nest_like/pulsepacket.py @@ -36,7 +36,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/rate_neuron_dm.py b/examples/nest_like/rate_neuron_dm.py index 9763890e..6a4cb044 100644 --- a/examples/nest_like/rate_neuron_dm.py +++ b/examples/nest_like/rate_neuron_dm.py @@ -23,7 +23,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/receptors_and_current.py b/examples/nest_like/receptors_and_current.py index f35a0dfe..10fdbff9 100644 --- a/examples/nest_like/receptors_and_current.py +++ b/examples/nest_like/receptors_and_current.py @@ -30,7 +30,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/recording_demo.py b/examples/nest_like/recording_demo.py index b6630a7c..0bdfd8c8 100644 --- a/examples/nest_like/recording_demo.py +++ b/examples/nest_like/recording_demo.py @@ -29,7 +29,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/repeated_stimulation.py b/examples/nest_like/repeated_stimulation.py index 597aef88..019e8697 100644 --- a/examples/nest_like/repeated_stimulation.py +++ b/examples/nest_like/repeated_stimulation.py @@ -21,7 +21,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/sensitivity_to_perturbation.py b/examples/nest_like/sensitivity_to_perturbation.py index c427b925..1afcc6f0 100644 --- a/examples/nest_like/sensitivity_to_perturbation.py +++ b/examples/nest_like/sensitivity_to_perturbation.py @@ -32,7 +32,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/sinusoidal_gamma_generator.py b/examples/nest_like/sinusoidal_gamma_generator.py index 7a6a3dd8..b910cb0e 100644 --- a/examples/nest_like/sinusoidal_gamma_generator.py +++ b/examples/nest_like/sinusoidal_gamma_generator.py @@ -40,7 +40,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/sinusoidal_poisson_generator.py b/examples/nest_like/sinusoidal_poisson_generator.py index 396bb86f..d704e24f 100644 --- a/examples/nest_like/sinusoidal_poisson_generator.py +++ b/examples/nest_like/sinusoidal_poisson_generator.py @@ -38,7 +38,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/spatial_3d_gauss.py b/examples/nest_like/spatial_3d_gauss.py index 338bddcd..0844b21e 100644 --- a/examples/nest_like/spatial_3d_gauss.py +++ b/examples/nest_like/spatial_3d_gauss.py @@ -20,7 +20,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/spatial_csa.py b/examples/nest_like/spatial_csa.py index 1e254d9b..0336ae53 100644 --- a/examples/nest_like/spatial_csa.py +++ b/examples/nest_like/spatial_csa.py @@ -24,7 +24,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/spatial_gabor.py b/examples/nest_like/spatial_gabor.py index b69f68ec..35948cca 100644 --- a/examples/nest_like/spatial_gabor.py +++ b/examples/nest_like/spatial_gabor.py @@ -31,7 +31,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/spatial_gaussex.py b/examples/nest_like/spatial_gaussex.py index 6757008f..0ede0432 100644 --- a/examples/nest_like/spatial_gaussex.py +++ b/examples/nest_like/spatial_gaussex.py @@ -25,7 +25,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/spatial_grid_iaf.py b/examples/nest_like/spatial_grid_iaf.py index 51b9194f..61875d58 100644 --- a/examples/nest_like/spatial_grid_iaf.py +++ b/examples/nest_like/spatial_grid_iaf.py @@ -25,7 +25,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/sudoku.py b/examples/nest_like/sudoku.py index 11541fdc..c4cd6736 100644 --- a/examples/nest_like/sudoku.py +++ b/examples/nest_like/sudoku.py @@ -34,7 +34,7 @@ import numpy as np jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import brainunit as u diff --git a/examples/nest_like/sudoku_net.py b/examples/nest_like/sudoku_net.py index 9639fa83..1d1646b5 100644 --- a/examples/nest_like/sudoku_net.py +++ b/examples/nest_like/sudoku_net.py @@ -36,7 +36,7 @@ import brainstate import brainunit as u -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import braintools from brainpy import state as bps diff --git a/examples/nest_like/synapsecollection.py b/examples/nest_like/synapsecollection.py index 96e3f4f6..3edf7bfa 100644 --- a/examples/nest_like/synapsecollection.py +++ b/examples/nest_like/synapsecollection.py @@ -37,7 +37,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/testiaf.py b/examples/nest_like/testiaf.py index 1570cf88..540bf3fd 100644 --- a/examples/nest_like/testiaf.py +++ b/examples/nest_like/testiaf.py @@ -13,7 +13,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/two_comps.py b/examples/nest_like/two_comps.py index 74b90777..d8b5c174 100644 --- a/examples/nest_like/two_comps.py +++ b/examples/nest_like/two_comps.py @@ -35,7 +35,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/twoneurons.py b/examples/nest_like/twoneurons.py index 4be8183e..8a35d70f 100644 --- a/examples/nest_like/twoneurons.py +++ b/examples/nest_like/twoneurons.py @@ -15,7 +15,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/examples/nest_like/urbanczik_synapse_example.py b/examples/nest_like/urbanczik_synapse_example.py index d72d55e7..6fa4720b 100644 --- a/examples/nest_like/urbanczik_synapse_example.py +++ b/examples/nest_like/urbanczik_synapse_example.py @@ -40,7 +40,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import jax.numpy as jnp import numpy as np diff --git a/examples/nest_like/vinit_example.py b/examples/nest_like/vinit_example.py index 00a18a56..77b829e5 100644 --- a/examples/nest_like/vinit_example.py +++ b/examples/nest_like/vinit_example.py @@ -12,7 +12,7 @@ import jax import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import braintools diff --git a/examples/nest_like/wang_decision_making.py b/examples/nest_like/wang_decision_making.py index 7b33b132..eff3bf57 100644 --- a/examples/nest_like/wang_decision_making.py +++ b/examples/nest_like/wang_decision_making.py @@ -56,7 +56,7 @@ import brainstate jax.config.update('jax_enable_x64', True) -brainstate.environ.set(precision=64, platform='cpu') +brainstate.environ.set(precision=64) import numpy as np import brainunit as u diff --git a/pyproject.toml b/pyproject.toml index 789e1805..1695d191 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,80 +1,80 @@ -[build-system] -requires = ["setuptools>=64"] -build-backend = "setuptools.build_meta" - - -[project] -name = "brainpy_state" -description = "brainpy.state: stateful spiking neural network models in BrainPy" -readme = "README.md" -requires-python = ">=3.11" -authors = [ - { name = "BrainX Team", email = "chao.brain@qq.com" } -] -license = {text = "Apache-2.0"} -classifiers = [ - "License :: OSI Approved :: Apache Software License", - "Natural Language :: English", - "Operating System :: OS Independent", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", - "Programming Language :: Python :: 3.14", - "Intended Audience :: Science/Research", - "Topic :: Scientific/Engineering :: Bio-Informatics", - "Topic :: Scientific/Engineering :: Mathematics", - "Topic :: Scientific/Engineering :: Artificial Intelligence", - "Topic :: Software Development :: Libraries", -] -keywords = [ - "computational neuroscience", - "brain-inspired computation", - "brain modeling", - "brain dynamics modeling", - "brain dynamics programming" -] -dependencies = [ - "numpy>=1.15", - "jax", - "brainpy>=2.7.6", - "brainstate>=0.5.0", - "brainunit", - "brainevent>=0.0.4", - "braintools>=0.0.9", -] -dynamic = ['version'] - - -[tool.setuptools.dynamic] -version = {attr = "brainpy_state._version.__version__"} - - -[tool.setuptools.packages.find] -include = ["brainpy_state*"] - - -[project.urls] -"Bug Tracker" = "https://github.com/chaobrain/brainpy.state/issues" -"Documentation" = "https://brainx.chaobrain.com/brainpy-state/" -"Source Code" = "https://github.com/chaobrain/brainpy.state" - - -[project.optional-dependencies] -cpu = ["jax[cpu]"] -cuda12 = ["jax[cuda12]"] -cuda13 = ["jax[cuda13]"] -tpu = ["jax[tpu]"] - - -[tool.pytest.ini_options] -# Registered so `-m requires_nest` / `-m "not requires_nest"` don't emit an -# "unknown mark" warning on every run. The marker is attached by the -# `@requires_nest` decorator in `_nest/_validation/nest_compare.py`; the live-NEST -# parity classes carry it (run by `nest-comparison.yml`, deselected by the fast CI -# gate). Parallelism (`-n auto`) is set per-workflow in the CI command, not here, so -# local and ad-hoc runs stay serial/explicit by default. -markers = [ - "requires_nest: live-NEST comparison test; needs the NEST simulator installed", -] +[build-system] +requires = ["setuptools>=64"] +build-backend = "setuptools.build_meta" + + +[project] +name = "brainpy_state" +description = "brainpy.state: stateful spiking neural network models in BrainPy" +readme = "README.md" +requires-python = ">=3.11" +authors = [ + { name = "BrainX Team", email = "chao.brain@qq.com" } +] +license = {text = "Apache-2.0"} +classifiers = [ + "License :: OSI Approved :: Apache Software License", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Intended Audience :: Science/Research", + "Topic :: Scientific/Engineering :: Bio-Informatics", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development :: Libraries", +] +keywords = [ + "computational neuroscience", + "brain-inspired computation", + "brain modeling", + "brain dynamics modeling", + "brain dynamics programming" +] +dependencies = [ + "numpy>=1.15", + "jax", + "brainpy>=2.7.6", + "brainstate>=0.5.0", + "brainunit", + "brainevent>=0.0.4", + "braintools>=0.0.9", +] +dynamic = ['version'] + + +[tool.setuptools.dynamic] +version = {attr = "brainpy_state._version.__version__"} + + +[tool.setuptools.packages.find] +include = ["brainpy_state*"] + + +[project.urls] +"Bug Tracker" = "https://github.com/chaobrain/brainpy.state/issues" +"Documentation" = "https://brainx.chaobrain.com/brainpy-state/" +"Source Code" = "https://github.com/chaobrain/brainpy.state" + + +[project.optional-dependencies] +cpu = ["jax[cpu]"] +cuda12 = ["jax[cuda12]"] +cuda13 = ["jax[cuda13]"] +tpu = ["jax[tpu]"] + + +[tool.pytest.ini_options] +# Registered so `-m requires_nest` / `-m "not requires_nest"` don't emit an +# "unknown mark" warning on every run. The marker is attached by the +# `@requires_nest` decorator in `_nest/_validation/nest_compare.py`; the live-NEST +# parity classes carry it (run by `nest-comparison.yml`, deselected by the fast CI +# gate). Parallelism (`-n auto`) is set per-workflow in the CI command, not here, so +# local and ad-hoc runs stay serial/explicit by default. +markers = [ + "requires_nest: live-NEST comparison test; needs the NEST simulator installed", +] diff --git a/requirements-dev.txt b/requirements-dev.txt index b78ef562..5bd4a308 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,17 +1,17 @@ --r requirements.txt - -matplotlib -msgpack -tqdm -numba -setuptools - - -# test requirements -pytest -pytest-xdist # for parallel test execution -absl-py - -# NEST simulator for comparison tests (not available on PyPI) -# Install via conda: conda install -c conda-forge nest-simulator +-r requirements.txt + +matplotlib +msgpack +tqdm +numba +setuptools + + +# test requirements +pytest +pytest-xdist # for parallel test execution +absl-py + +# NEST simulator for comparison tests (not available on PyPI) +# Install via conda: conda install -c conda-forge nest-simulator # NEST is only available on Linux and macOS; tests skip automatically on Windows. \ No newline at end of file diff --git a/requirements-doc.txt b/requirements-doc.txt index 0bff3c21..eed29e96 100644 --- a/requirements-doc.txt +++ b/requirements-doc.txt @@ -1,19 +1,19 @@ --r requirements.txt - -matplotlib -numba - -# document requirements -pandoc -Jinja2 -sphinx -myst-nb -sphinx_thebe -sphinx-autodoc-typehints -sphinx-book-theme>=1.2.0 -sphinx-copybutton>=0.5.2 -sphinx-remove-toctrees -jupyter-sphinx>=0.5.3 -sphinx-design -sphinx_math_dollar -brainx-sphinx-header>=0.5.0 +-r requirements.txt + +matplotlib +numba + +# document requirements +pandoc +Jinja2 +sphinx +myst-nb +sphinx_thebe +sphinx-autodoc-typehints +sphinx-book-theme>=1.2.0 +sphinx-copybutton>=0.5.2 +sphinx-remove-toctrees +jupyter-sphinx>=0.5.3 +sphinx-design +sphinx_math_dollar +brainx-sphinx-header>=0.5.0 diff --git a/requirements.txt b/requirements.txt index 482bf1f0..5d6a9766 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -numpy -brainstate>=0.2.0 -brainunit -brainevent>=0.0.4 -braintools>=0.1.0 -brainpy>=2.7.6 -jax -tqdm +numpy +brainstate>=0.2.0 +brainunit +brainevent>=0.0.4 +braintools>=0.1.0 +brainpy>=2.7.6 +jax +tqdm