diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38ee9d4f..b42d6f7d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,14 +23,14 @@ jobs: && !contains(github.event.head_commit.message, '[skip tests]') strategy: matrix: - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.10", "3.11", "3.12"] fail-fast: false - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies @@ -41,25 +41,25 @@ jobs: - name: Lint run: | flake8 -v - - uses: hidakatsuya/action-setup-diff-pdf@v1.3.0 - if: "matrix.python-version == '3.11'" + - uses: hidakatsuya/action-setup-diff-pdf@v1.4.0 + if: "matrix.python-version == '3.12'" with: diff-pdf-version: '0.5' - - uses: actions/cache@v3 + - uses: actions/cache@v4 name: Tectonic Cache - if: "matrix.python-version == '3.11'" + if: "matrix.python-version == '3.12'" with: path: ~/.cache/Tectonic key: ${{ runner.os }}-tectonic-${{ hashFiles('**/*.tex') }} restore-keys: | ${{ runner.os }}-tectonic- - uses: wtfjoke/setup-tectonic@v2 - if: "matrix.python-version == '3.11'" + if: "matrix.python-version == '3.12'" with: github-token: ${{ secrets.GITHUB_TOKEN }} biber-version: "latest" - name: Set environment variables - if: "matrix.python-version == '3.11'" + if: "matrix.python-version == '3.12'" run: | echo "TEST_GXPDF=1" >> "$GITHUB_ENV" - name: Test @@ -79,12 +79,12 @@ jobs: --nbval-sanitize-with test/.nbval_sanitize.cfg \ "${PYTEST_ARGS[@]}" - name: Upload coverage to Codecov - if: "matrix.python-version == '3.11'" + if: "matrix.python-version == '3.12'" uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} - uses: actions/upload-artifact@v4 - if: "matrix.python-version == '3.11' && failure()" + if: "matrix.python-version == '3.12' && failure()" with: name: PDF-diffs path: test/diff @@ -106,11 +106,11 @@ jobs: url: https://pypi.org/p/galgebra steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.12" - name: Install wheel run: | python -m pip install wheel packaging diff --git a/examples/ipython/lt.ipynb b/examples/ipython/lt.ipynb index 2bfab038..4710bbe3 100644 --- a/examples/ipython/lt.ipynb +++ b/examples/ipython/lt.ipynb @@ -263,7 +263,7 @@ "source": [ "index_values = symbols('1 2 3', int=True)\n", "coords = (x1, x2, x3) = symbols('x__1, x__2, x__3', real=True)\n", - "m3= Ga('\\mbf{e}*1|2|3', g=[1,-1,-1], coords=index_values, wedge=False)\n", + "m3= Ga(r'\\mbf{e}*1|2|3', g=[1,-1,-1], coords=index_values, wedge=False)\n", "e1, e2, e3 = m3.mv() # basis vectors \n", "re1, re2, re3 = m3.mvr() # reciprocal basis vectors\n", "kappa = m3.mv('kappa', 0) # generic 0-vector\n", diff --git a/examples/primer/cm3.ipynb b/examples/primer/cm3.ipynb index cbd79aac..9cc58bc5 100644 --- a/examples/primer/cm3.ipynb +++ b/examples/primer/cm3.ipynb @@ -89,7 +89,7 @@ "\n", "cm3coords = (o,x,y,z,infty) = symbols('o 1 2 3 infty', real=True)\n", "cm3g = '0 0 0 0 -1, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0, -1 0 0 0 0'\n", - "cm3 = Ga('o \\mathbf{e}_1 \\mathbf{e}_2 \\mathbf{e}_3 \\infty', g = cm3g, coords = cm3coords)\n", + "cm3 = Ga(r'o \\mathbf{e}_1 \\mathbf{e}_2 \\mathbf{e}_3 \\infty', g = cm3g, coords = cm3coords)\n", "(eo, e1, e2, e3, eoo) = cm3.mv()\n", "ep = eo - eoo/2 # ep^2 = +1 Geometric Algebra for Computer Science 408\n", "em = eo + eoo/2 # em^2 = -1\n", diff --git a/examples/primer/gprint.ipynb b/examples/primer/gprint.ipynb index 63ff1b24..61039268 100644 --- a/examples/primer/gprint.ipynb +++ b/examples/primer/gprint.ipynb @@ -78,7 +78,7 @@ "source": [ "# Set up standard G^3 geometric algebra\n", "g3coords = (x,y,z) = symbols('x y z', real=True) # Without real=True, symbols are complex\n", - "g3 = Ga('\\mathbf{e}', g=[1,1,1], coords=g3coords)\n", + "g3 = Ga(r'\\mathbf{e}', g=[1,1,1], coords=g3coords)\n", "(ex, ey, ez) = g3.mv() # Program names of basis vectors.\n", "(exr, eyr, ezr) = g3.mvr() # Program names of reciprocal basis vectors." ] diff --git a/examples/primer/h3.ipynb b/examples/primer/h3.ipynb index ccf942db..ca40f62a 100644 --- a/examples/primer/h3.ipynb +++ b/examples/primer/h3.ipynb @@ -71,7 +71,7 @@ "source": [ "h3coords = (x,y,z,e) = symbols('x y z e', real=True)\n", "# h3 = Ga('e_x e_y e_z e_e', g=[1,1,1,1], coords=h3coords)\n", - "h3 = Ga('\\mathbf{e}', g=[1,1,1,1], coords=h3coords)\n", + "h3 = Ga(r'\\mathbf{e}', g=[1,1,1,1], coords=h3coords)\n", "(ex,ey,ez,ee) = h3.mv()" ] }, diff --git a/examples/primer/primer.ipynb b/examples/primer/primer.ipynb index cdc466b6..d822b46e 100644 --- a/examples/primer/primer.ipynb +++ b/examples/primer/primer.ipynb @@ -321,7 +321,7 @@ } ], "source": [ - "gprint('\\grad = ', grad)" + "gprint(r'\\grad = ', grad)" ] }, { diff --git a/examples/primer/sp2.ipynb b/examples/primer/sp2.ipynb index 15ef6677..a752f2b5 100644 --- a/examples/primer/sp2.ipynb +++ b/examples/primer/sp2.ipynb @@ -37,7 +37,7 @@ "basis = 'e_phi e_theta'\n", "coords = (phi,th) = symbols('phi theta', real=True)\n", "g = [sin(phi)*cos(th), sin(phi)*sin(th), cos(phi)]\n", - "sp2 = Ga('\\mathbf{e}', g=None , coords=coords, \\\n", + "sp2 = Ga(r'\\mathbf{e}', g=None , coords=coords, \\\n", " X=[sin(phi)*cos(th), sin(phi)*sin(th), cos(phi)], norm=True)\n", "\n", "(ephi, eth) = sp2.mv()\n", diff --git a/examples/primer/sp2g3.ipynb b/examples/primer/sp2g3.ipynb index d89f2f81..a0ec7aec 100644 --- a/examples/primer/sp2g3.ipynb +++ b/examples/primer/sp2g3.ipynb @@ -69,7 +69,7 @@ "\n", "# g3: Base manifold.\n", "g3coords = (x,y,z) = symbols('x y z', real=True) \n", - "g3 = Ga('\\mathbf{e}', g=[1,1,1], coords=g3coords)\n", + "g3 = Ga(r'\\mathbf{e}', g=[1,1,1], coords=g3coords)\n", "(ex, ey, ez) = g3.mv()\n", "\n", "# sp2: Submanifold\n", diff --git a/examples/primer/spacetime.ipynb b/examples/primer/spacetime.ipynb index 6cd9bcc2..96cef984 100644 --- a/examples/primer/spacetime.ipynb +++ b/examples/primer/spacetime.ipynb @@ -67,7 +67,7 @@ "source": [ "txyz = (t, x, y, z) = symbols('t x y z', real=True)\n", "stcoords = (t,x,y,z) = symbols('t x y z')\n", - "st = Ga('\\mathbf{e}', g=[1, -1, -1, -1], coords=stcoords)\n", + "st = Ga(r'\\mathbf{e}', g=[1, -1, -1, -1], coords=stcoords)\n", "(et, ex, ey, ez) = st.mv()" ] }, diff --git a/setup.py b/setup.py index 16f48e1e..bab5b24a 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ package_dir={'galgebra': 'galgebra'}, # Sympy 1.4 is needed for printing tests to pass, but 1.3 will still work install_requires=['sympy'], - python_requires='>=3.6', + python_requires='>=3.10', long_description=long_description, long_description_content_type='text/markdown', classifiers=[ @@ -33,10 +33,9 @@ 'License :: OSI Approved :: BSD License', 'Natural Language :: English', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: 3.12', 'Topic :: Scientific/Engineering :: Mathematics', 'Topic :: Scientific/Engineering :: Physics', ], diff --git a/test/test_mv.py b/test/test_mv.py index 1cf40d45..01cc7695 100644 --- a/test/test_mv.py +++ b/test/test_mv.py @@ -1,4 +1,4 @@ -import distutils.version +from packaging.version import Version import pytest import sympy @@ -204,7 +204,7 @@ def test_arithmetic(self): lambda ga: 1, lambda ga: ga.mv(sympy.S.One), pytest.param(lambda ga: sympy.S.One, marks=pytest.mark.skipif( - distutils.version.LooseVersion(sympy.__version__) < "1.6", + Version(sympy.__version__) < Version("1.6"), # until sympy/sympy@bec42df53cf2486d485065ddad1c31011a48bf3b reason="Cannot override < and > on sympy.Expr" )) diff --git a/test_requirements.txt b/test_requirements.txt index a356b280..bffdcb59 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -2,6 +2,7 @@ wheel sympy == 1.12 flake8 +packaging pytest-cov nbval