diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 56b5815a..f0eee523 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -15,6 +15,10 @@ on:
required: false
default: false
+defaults:
+ run:
+ shell: bash -el {0}
+
jobs:
test:
runs-on: ubuntu-latest
@@ -30,11 +34,15 @@ jobs:
env:
SSH_KEY: ${{ secrets.SSH_KEY }}
SSH_CONFIG: ${{ secrets.SSH_CONFIG }}
- GH_TOKEN: ${{ secrets.GH_TOKEN }}
+ GH_TOKEN: ${{ secrets.PUBLIC_GH_TOKEN }}
steps:
- uses: nengo/nengo-bones/actions/setup@main
with:
python-version: "3.8"
+ - name: Install pandoc
+ if: ${{ matrix.script == 'docs' }}
+ run: |
+ micromamba install pandoc
- name: Install ffmpeg for docs
if: ${{ matrix.script == 'docs' }}
uses: FedericoCarboni/setup-ffmpeg@v2
diff --git a/.nengobones.yml b/.nengobones.yml
index f4e68683..2f906d96 100644
--- a/.nengobones.yml
+++ b/.nengobones.yml
@@ -52,6 +52,8 @@ docs_conf_py:
examples/notebooks/06-chaotic_attractor.html: examples/notebooks/06-chaotic-attractor.html
nengo_logo: nengo-fpga-full-light.svg
nengo_logo_color: "#541a8b"
+ sphinx_options:
+ linkcheck_ignore: [(https:\/\/www\.tulembedded\.com\/FPGA\/ProductsPYNQ-Z2\.html)]
ci_scripts:
- template: static
diff --git a/.templates/LICENSE.rst.template b/.templates/LICENSE.rst.template
index db2779ec..2c7e6cae 100644
--- a/.templates/LICENSE.rst.template
+++ b/.templates/LICENSE.rst.template
@@ -15,7 +15,7 @@ NengoFPGA imports or vendorizes several open source libraries.
* `NumPy `_ - Used under
`BSD license `__
* `Sphinx `_ - Used under
- `BSD license `__
+ `BSD license `__
* `numpydoc `_ - Used under
`BSD license `__
* `IPython `_ - Used under
diff --git a/LICENSE.rst b/LICENSE.rst
index a5d41ea5..44c563cc 100644
--- a/LICENSE.rst
+++ b/LICENSE.rst
@@ -19,7 +19,7 @@ Commercial Use Licenses are available to purchase for a yearly fee.
Academic and Personal Use Licenses for NengoFPGA are available at
a reduced cost.
Both types of licences can be obtained from the
-ABR store at ``_.
+ABR store at ``_.
If you have any sales questions,
please contact ``_.
@@ -27,6 +27,7 @@ If you have any technical support questions, please post them on the ABR
community forums at ``_ or contact
``_.
+
This license pertains only to the NengoFPGA interface software. License information
for the supported hardware implementations can be found at their respective license
pages:
@@ -42,7 +43,7 @@ NengoFPGA imports or vendorizes several open source libraries.
* `NumPy `_ - Used under
`BSD license `__
* `Sphinx `_ - Used under
- `BSD license `__
+ `BSD license `__
* `numpydoc `_ - Used under
`BSD license `__
* `IPython `_ - Used under
diff --git a/docs/conf.py b/docs/conf.py
index c9588f05..7d136143 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -74,6 +74,9 @@
default_role = "py:obj"
pygments_style = "sphinx"
user_agent = "nengo_fpga"
+linkcheck_ignore = [
+ "(https:\\/\\/www\\.tulembedded\\.com\\/FPGA\\/ProductsPYNQ-Z2\\.html)"
+]
project = "NengoFPGA"
authors = "Applied Brain Research"
@@ -108,7 +111,7 @@
var _paq = window._paq = window._paq || [];
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
_paq.push(["setCookieDomain", "*.appliedbrainresearch.com"]);
- _paq.push(["setDomains", ["*.appliedbrainresearch.com","*.edge.nengo.ai","*.forum.nengo.ai","*.labs.nengo.ai","*.nengo.ai"]]);
+ _paq.push(["setDomains", ["*.appliedbrainresearch.com","*.edge.nengo.ai","*.forum.nengo.ai","*.nengo.ai"]]);
_paq.push(["enableCrossDomainLinking"]);
_paq.push(["setDoNotTrack", true]);
_paq.push(['trackPageView']);
diff --git a/nengo_fpga/tests/test_networks.py b/nengo_fpga/tests/test_networks.py
index c213a19b..c16fd83a 100644
--- a/nengo_fpga/tests/test_networks.py
+++ b/nengo_fpga/tests/test_networks.py
@@ -16,6 +16,7 @@
)
+@pytest.mark.xdist_group(name="fpga_config")
def test_init(config_contents, gen_configs, mocker):
"""Test the FPGA network's init function."""
@@ -117,6 +118,7 @@ def test_func(x):
assert hasattr(dummy_net, "connection")
+@pytest.mark.xdist_group(name="fpga_config")
def test_init_default(config_contents, gen_configs, mocker):
"""Test the FPGA network's init function."""
@@ -164,7 +166,7 @@ def test_init_default(config_contents, gen_configs, mocker):
assert dummy_net.connection.pre == dummy_net.ensemble
assert dummy_net.connection.post == dummy_net.output
assert dummy_net.connection.function is None
- assert type(dummy_net.connection.transform) == nengo.transforms.NoTransform
+ assert isinstance(dummy_net.connection.transform, nengo.transforms.NoTransform)
assert np.all(
dummy_net.connection.eval_points == nengo.Connection.eval_points.default
)
@@ -208,6 +210,7 @@ def test_data_filepath(dummy_net, mocker):
assert dummy_net.local_data_filepath == os.path.join(path, fname)
+@pytest.mark.xdist_group(name="fpga_config")
def test_terminate_client(dummy_net, dummy_com, config_contents, mocker):
"""Test the FPGA network's terminate_client function."""
@@ -224,6 +227,7 @@ def test_terminate_client(dummy_net, dummy_com, config_contents, mocker):
assert send_mock.call_args_list[0][0][1] == address
+@pytest.mark.xdist_group(name="fpga_config")
def test_close(dummy_net, dummy_com, mocker):
"""Test the FPGA network's close function."""
@@ -268,6 +272,7 @@ def test_close(dummy_net, dummy_com, mocker):
assert np.all(dummy_net.recv_buffer == 0)
+@pytest.mark.xdist_group(name="fpga_config")
def test_cleanup(dummy_net, mocker):
"""Test the FPGA network's cleanup function."""
@@ -293,6 +298,7 @@ def test_cleanup(dummy_net, mocker):
@pytest.mark.parametrize(
"ssh_method", [None, ("ssh_pwd", "passwd"), ("ssh_key", "key-path")]
)
+@pytest.mark.xdist_group(name="fpga_config")
def test_connect_ssh_client(
ssh_method, dummy_net, config_contents, gen_configs, mocker
):
@@ -337,6 +343,7 @@ def test_connect_ssh_client(
)
+@pytest.mark.xdist_group(name="fpga_config")
def test_connect_thread_func(dummy_net, dummy_com, config_contents, mocker):
"""
Test the FPGA network's connect_thread_func.
@@ -412,6 +419,7 @@ def test_connect_thread_func(dummy_net, dummy_com, config_contents, mocker):
net_close_mock.assert_called_once()
+@pytest.mark.xdist_group(name="fpga_config")
def test_connect(dummy_net, mocker):
"""Test the FPGA network's connect function."""
@@ -574,6 +582,7 @@ def test_check_ssh_str(dummy_net):
assert error_strs[-1] == s
+@pytest.mark.xdist_group(name="fpga_config")
def test_reset(dummy_net, mocker):
"""Test the FPGA network's reset function."""
@@ -596,6 +605,7 @@ def test_reset(dummy_net, mocker):
connect_mock.assert_called_once()
+@pytest.mark.xdist_group(name="fpga_config")
def test_ssh_string(dummy_net, config_contents):
"""
Test we have the correct arguments in the string command.
@@ -704,6 +714,7 @@ class DummyRule(nengo.learning_rules.LearningRuleType):
_, _ = validate_net(dummy_net)
+@pytest.mark.xdist_group(name="fpga_config")
def test_save_params(config_contents, gen_configs, mocker):
"""Test saving params to file."""
@@ -859,6 +870,7 @@ def recv_func(data):
assert val == x
+@pytest.mark.xdist_group(name="fpga_config")
def test_builder(dummy_net, mocker):
"""Build a few networks to hit all the builder code."""
diff --git a/pyproject.toml b/pyproject.toml
index 6232a11b..7b48c1b1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@
requires = ["setuptools<64", "wheel"]
[tool.black]
-target-version = ['py36']
+target-version = ['py38']
[tool.isort]
profile = "black"
diff --git a/setup.py b/setup.py
index 9ba1f1c6..9c12a8ea 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
# Automatically generated by nengo-bones, do not edit this file directly
import io
@@ -69,7 +67,7 @@ def read(*filenames, **kwargs):
"optional": optional_req,
"tests": tests_req,
},
- python_requires=">=3.6",
+ python_requires=">=3.8",
package_data={
"nengo_fpga": [
"fpga_config",