name: Run tests

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ['3.10', '3.11', '3.13']
        # there was (and likely still is) conflict between tf, oneflow and paddle in protobuf versions.
        # cupy is not tested because it demands gpu
        # oneflow testing is dropped, see details at https://github.com/Oneflow-Inc/oneflow/issues/10340
        # paddle  testing is dropped because of divergence with numpy in py3.10, paddle==2.6.1
        frameworks: ['numpy pytorch tensorflow jax mlx']
        # The last pytensor release for 3.9 does not have a pin to numpy < 2, but not compatible with numpy 2,
        # so we skip it in testing
        include:
          - python-version: '3.10'
            frameworks: 'pytensor'
          - python-version: '3.13'
            frameworks: 'pytensor'


    steps:
      - uses: actions/checkout@v5
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: pip
      - name: Check for ruff compliance
        run: |
          pip install ruff==0.11.7 && ruff check . && ruff format . --check
      - name: Run tests
        run: |
          pip install -e . && python -m einops.tests.run_tests ${{ matrix.frameworks }} --pip-install
