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",