name: "build" on: pull_request: schedule: - cron: "0 0 * * *" # Run everyday jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 # keras needs hdf5 on pre-prelease Python. - run: sudo apt-get update -qq && sudo apt-get install --yes libhdf5-dev - uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: uv.lock - uses: actions/setup-python@v7 with: python-version-file: .python-version allow-prereleases: true - run: uv sync --group=test - name: Run tests # opencv-python is gated out on 3.14t (no cp314t wheel yet), so skip the # files that import cv2. Pure-Python algorithms in computer_vision/ and # data_compression/ still run; digital_image_processing/ is almost entirely # cv2-based so it is skipped as a tree. Re-enable when a cp314t wheel ships. # --ignore-gil-enabled: some compiled deps (sklearn, xgboost, ...) don't # yet ship the Py_mod_gil slot, so importing them re-enables the GIL under # 3.14t. That's an upstream-wheel gap, not our code; the flag lets the suite # run anyway and pytest-run-parallel still reports which tests are not # thread-safe. Drop the flag once the scientific stack ships free-threaded wheels. # qiskit is likewise gated out of the 3.14t deps (Qiskit/qiskit#16893), so the # single file that imports it (quantum/q_fourier_transform.py) is skipped too. run: uv run --with=pytest-run-parallel pytest --iterations=8 --parallel-threads=auto --ignore-gil-enabled --ignore=computer_vision/cnn_classification.py --ignore=computer_vision/flip_augmentation.py --ignore=computer_vision/harris_corner.py --ignore=computer_vision/mosaic_augmentation.py --ignore=data_compression/peak_signal_to_noise_ratio.py --ignore=digital_image_processing/ --ignore=docs/conf.py --ignore=dynamic_programming/k_means_clustering_tensorflow.py --ignore=machine_learning/lstm/lstm_prediction.py --ignore=neural_network/input_data.py --ignore=project_euler/ --ignore=quantum/q_fourier_transform.py --ignore=scripts/validate_solutions.py --ignore=web_programming/current_stock_price.py --ignore=web_programming/fetch_anime_and_play.py --cov-report=term-missing:skip-covered --cov=. . - if: ${{ success() }} run: scripts/build_directory_md.py 2>&1 | tee DIRECTORY.md