mirror of
				https://github.com/ml-explore/mlx.git
				synced 2025-11-04 02:28:13 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			604 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			604 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
version: 2.1
 | 
						|
 | 
						|
orbs:
 | 
						|
  apple: ml-explore/pr-approval@0.1.0
 | 
						|
 | 
						|
parameters:
 | 
						|
  nightly_build:
 | 
						|
    type: boolean
 | 
						|
    default: false
 | 
						|
 | 
						|
jobs:
 | 
						|
  build_documentation:
 | 
						|
    parameters:
 | 
						|
      upload-docs:
 | 
						|
        type: boolean
 | 
						|
        default: false
 | 
						|
    macos:
 | 
						|
      xcode: "16.2.0"
 | 
						|
    resource_class: m2pro.medium
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Install
 | 
						|
          command: |
 | 
						|
            brew install python@3.9
 | 
						|
            brew install doxygen
 | 
						|
            python3.9 -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            pip install --upgrade pip
 | 
						|
            pip install --upgrade cmake
 | 
						|
            pip install -r docs/requirements.txt
 | 
						|
            pip install . -v
 | 
						|
      - when:
 | 
						|
          condition:
 | 
						|
            not: << parameters.upload-docs >>
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
               name: Build documentation
 | 
						|
               command: |
 | 
						|
                 source env/bin/activate
 | 
						|
                 cd docs && doxygen && make html O=-W
 | 
						|
      - when:
 | 
						|
          condition: << parameters.upload-docs >>
 | 
						|
          steps:
 | 
						|
            - add_ssh_keys:
 | 
						|
                fingerprints:
 | 
						|
                  - "SHA256:OhcVVMovbT0pkgMeiVRyxMnjV9R2t+hKBsNcuxq9h+0"
 | 
						|
            - run:
 | 
						|
               name: Upload documentation
 | 
						|
               command: |
 | 
						|
                 source env/bin/activate
 | 
						|
                 git config user.email "mlx@group.apple.com"
 | 
						|
                 git config user.name "CircleCI Docs"
 | 
						|
                 git checkout gh-pages
 | 
						|
                 git rebase main
 | 
						|
                 cd docs
 | 
						|
                 git rm -rf build/html
 | 
						|
                 doxygen && make html O=-W
 | 
						|
                 git add -f build/html
 | 
						|
                 git commit -m "rebase"
 | 
						|
                 git push -f origin gh-pages
 | 
						|
 | 
						|
  linux_build_and_test:
 | 
						|
    machine:
 | 
						|
      image: ubuntu-2204:current
 | 
						|
      resource_class: large
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Run style checks
 | 
						|
          command: |
 | 
						|
            pip install pre-commit
 | 
						|
            pre-commit run --all
 | 
						|
            if ! git diff --quiet; then echo 'Style checks failed, please install pre-commit and run pre-commit run --all and push the change'; exit 1; fi
 | 
						|
      - run:
 | 
						|
          name: Install dependencies
 | 
						|
          command: |
 | 
						|
            export DEBIAN_FRONTEND=noninteractive
 | 
						|
            export NEEDRESTART_MODE=a
 | 
						|
            sudo apt-get update
 | 
						|
            sudo apt-get upgrade -y
 | 
						|
            pip install --upgrade cmake
 | 
						|
            sudo apt-get install -y libblas-dev liblapack-dev liblapacke-dev
 | 
						|
            sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev
 | 
						|
      - run:
 | 
						|
          name: Install Python package
 | 
						|
          command: |
 | 
						|
            pip install -e ".[dev]"
 | 
						|
      - run:
 | 
						|
          name: Generate package stubs
 | 
						|
          command: |
 | 
						|
            echo "stubs"
 | 
						|
            pip install typing_extensions
 | 
						|
            python setup.py generate_stubs
 | 
						|
      - run:
 | 
						|
          name: Run Python tests
 | 
						|
          command: |
 | 
						|
            python -m unittest discover python/tests -v
 | 
						|
            mpirun --bind-to none -host localhost:8 -np 8 python python/tests/mpi_test_distributed.py
 | 
						|
            mlx.launch --verbose -n 8 python/tests/ring_test_distributed.py -v 2> >(tee -a stderr.log >&2)
 | 
						|
            if $(grep "\[WARN\]" stderr.log); then echo "Distributed ring test failed"; exit 1; fi
 | 
						|
      - run:
 | 
						|
          name: Build CPP only
 | 
						|
          command: |
 | 
						|
            mkdir -p build && cd build
 | 
						|
            cmake .. -DMLX_BUILD_METAL=OFF -DCMAKE_BUILD_TYPE=DEBUG
 | 
						|
            make -j `nproc`
 | 
						|
      - run:
 | 
						|
          name: Run CPP tests
 | 
						|
          command: ./build/tests/tests
 | 
						|
 | 
						|
  mac_build_and_test:
 | 
						|
    parameters:
 | 
						|
      xcode_version:
 | 
						|
        type: string
 | 
						|
        default: "16.2.0"
 | 
						|
      macosx_deployment_target:
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
    macos:
 | 
						|
      xcode: << parameters.xcode_version >>
 | 
						|
    environment:
 | 
						|
      MACOSX_DEPLOYMENT_TARGET: << parameters.macosx_deployment_target >>
 | 
						|
    resource_class: m2pro.medium
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Install dependencies
 | 
						|
          command: |
 | 
						|
            brew install python@3.9
 | 
						|
            brew install openmpi
 | 
						|
            python3.9 -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            pip install --upgrade pip
 | 
						|
            pip install --upgrade cmake
 | 
						|
            pip install nanobind==2.4.0
 | 
						|
            pip install numpy
 | 
						|
            pip install torch
 | 
						|
            pip install tensorflow
 | 
						|
            pip install unittest-xml-reporting
 | 
						|
      - run:
 | 
						|
          name: Install Python package
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            DEBUG=1 CMAKE_ARGS="-DCMAKE_COMPILE_WARNING_AS_ERROR=ON" \
 | 
						|
              pip install -e . -v
 | 
						|
      - run:
 | 
						|
          name: Generate package stubs
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            pip install typing_extensions
 | 
						|
            python setup.py generate_stubs
 | 
						|
      - run:
 | 
						|
          name: Run Python tests
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            LOW_MEMORY=1 DEVICE=cpu python -m xmlrunner discover -v python/tests -o test-results/cpu
 | 
						|
            LOW_MEMORY=1 DEVICE=gpu METAL_DEVICE_WRAPPER_TYPE=1 METAL_DEBUG_ERROR_MODE=0 python -m xmlrunner discover -v python/tests -o test-results/gpu
 | 
						|
            mpirun --bind-to none -host localhost:8 -np 8 -x DYLD_LIBRARY_PATH=/opt/homebrew/lib/ python python/tests/mpi_test_distributed.py
 | 
						|
            mlx.launch --verbose -n 8 python/tests/ring_test_distributed.py -v 2> >(tee -a stderr.log >&2)
 | 
						|
            if $(grep "\[WARN\]" stderr.log); then echo "Distributed ring test failed"; exit 1; fi
 | 
						|
      - run:
 | 
						|
          name: Build example extension
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            cd examples/extensions
 | 
						|
            pip install -r requirements.txt
 | 
						|
            python setup.py build_ext -j8
 | 
						|
      - store_test_results:
 | 
						|
          path: test-results
 | 
						|
      - run:
 | 
						|
          name: Build CPP only
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            mkdir -p build && cd build && cmake .. && make -j `sysctl -n hw.ncpu`
 | 
						|
      - run:
 | 
						|
          name: Run CPP tests
 | 
						|
          command: |
 | 
						|
            DEVICE=gpu METAL_DEVICE_WRAPPER_TYPE=1 METAL_DEBUG_ERROR_MODE=0 ./build/tests/tests
 | 
						|
      - run:
 | 
						|
          name: Build small binary
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            cd build/
 | 
						|
            cmake .. -DCMAKE_BUILD_TYPE=MinSizeRel \
 | 
						|
              -DBUILD_SHARED_LIBS=ON \
 | 
						|
              -DMLX_BUILD_CPU=OFF \
 | 
						|
              -DMLX_BUILD_SAFETENSORS=OFF \
 | 
						|
              -DMLX_BUILD_GGUF=OFF \
 | 
						|
              -DMLX_METAL_JIT=ON
 | 
						|
            make -j `sysctl -n hw.ncpu`
 | 
						|
      - run:
 | 
						|
          name: Run Python tests with JIT
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            CMAKE_ARGS="-DMLX_METAL_JIT=ON" \
 | 
						|
              pip install -e . -v
 | 
						|
            LOW_MEMORY=1 DEVICE=gpu METAL_DEVICE_WRAPPER_TYPE=1 \
 | 
						|
              METAL_DEBUG_ERROR_MODE=0 \
 | 
						|
              python -m xmlrunner discover -v python/tests -o test-results/gpu_jit
 | 
						|
 | 
						|
  cuda_build_and_test:
 | 
						|
    machine:
 | 
						|
      image: linux-cuda-12:2023.11.1
 | 
						|
      resource_class: gpu.nvidia.small.gen2
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Install Python package
 | 
						|
          command: |
 | 
						|
            sudo apt-get update
 | 
						|
            sudo apt-get install libblas-dev liblapack-dev liblapacke-dev
 | 
						|
            python3 -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            CMAKE_ARGS="-DMLX_BUILD_CUDA=ON -DCMAKE_CUDA_COMPILER=`which nvcc`" \
 | 
						|
              pip install -e ".[dev]"
 | 
						|
      - run:
 | 
						|
          name: Run Python tests
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            LOW_MEMORY=1 DEVICE=cpu python -m unittest discover python/tests -v
 | 
						|
            LOW_MEMORY=1 DEVICE=gpu python -m tests discover python/tests -v
 | 
						|
 | 
						|
  build_release:
 | 
						|
    parameters:
 | 
						|
      python_version:
 | 
						|
        type: string
 | 
						|
        default: "3.9"
 | 
						|
      xcode_version:
 | 
						|
        type: string
 | 
						|
        default: "16.2.0"
 | 
						|
      build_env:
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
      macosx_deployment_target:
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
    macos:
 | 
						|
      xcode: << parameters.xcode_version >>
 | 
						|
    resource_class: m2pro.medium
 | 
						|
    environment:
 | 
						|
      MACOSX_DEPLOYMENT_TARGET: << parameters.macosx_deployment_target >>
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Install dependencies
 | 
						|
          command: |
 | 
						|
            brew install python@<< parameters.python_version >>
 | 
						|
            brew install openmpi
 | 
						|
            python<< parameters.python_version >> -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            pip install --upgrade pip
 | 
						|
            pip install --upgrade cmake
 | 
						|
            pip install nanobind==2.4.0
 | 
						|
            pip install --upgrade setuptools
 | 
						|
            pip install numpy
 | 
						|
            pip install twine
 | 
						|
            pip install build
 | 
						|
      - run:
 | 
						|
          name: Install Python package
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            env -u MACOSX_DEPLOYMENT_TARGET DEV_RELEASE=1 \
 | 
						|
              pip install . -v
 | 
						|
      - run:
 | 
						|
          name: Generate package stubs
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            pip install typing_extensions
 | 
						|
            python setup.py generate_stubs
 | 
						|
      - run:
 | 
						|
          name: Build Python package
 | 
						|
          command: |
 | 
						|
            source env/bin/activate
 | 
						|
            python setup.py clean --all
 | 
						|
            << parameters.build_env >> MLX_BUILD_STAGE=1 python -m build -w
 | 
						|
      - when:
 | 
						|
          condition:
 | 
						|
            equal: ["3.9", << parameters.python_version >>]
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
                name: Build common package
 | 
						|
                command: |
 | 
						|
                  source env/bin/activate
 | 
						|
                  python setup.py clean --all
 | 
						|
                  << parameters.build_env >> MLX_BUILD_STAGE=2 python -m build -w
 | 
						|
      - when:
 | 
						|
          condition: << parameters.build_env >>
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
                name: Upload package
 | 
						|
                command: |
 | 
						|
                  source env/bin/activate
 | 
						|
                  twine upload dist/*
 | 
						|
      - store_artifacts:
 | 
						|
          path: dist/
 | 
						|
 | 
						|
  build_linux_release:
 | 
						|
    parameters:
 | 
						|
      python_version:
 | 
						|
        type: string
 | 
						|
        default: "3.9"
 | 
						|
      build_env:
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
    machine:
 | 
						|
      image: ubuntu-2204:current
 | 
						|
      resource_class: large
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Build wheel
 | 
						|
          command: |
 | 
						|
            PYTHON=python<< parameters.python_version >>
 | 
						|
            export DEBIAN_FRONTEND=noninteractive
 | 
						|
            export NEEDRESTART_MODE=a
 | 
						|
            sudo apt-get update
 | 
						|
            sudo apt-get upgrade -y
 | 
						|
            TZ=Etc/UTC sudo apt-get -y install tzdata
 | 
						|
            sudo apt-get install -y apt-utils
 | 
						|
            sudo apt-get install -y software-properties-common
 | 
						|
            sudo add-apt-repository -y ppa:deadsnakes/ppa
 | 
						|
            sudo apt-get install -y $PYTHON $PYTHON-dev $PYTHON-full
 | 
						|
            sudo apt-get install -y libblas-dev liblapack-dev liblapacke-dev
 | 
						|
            sudo apt-get install -y build-essential git
 | 
						|
            $PYTHON -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            pip install --upgrade pip
 | 
						|
            pip install --upgrade cmake
 | 
						|
            pip install auditwheel
 | 
						|
            pip install patchelf
 | 
						|
            pip install build
 | 
						|
            pip install twine
 | 
						|
            << parameters.build_env >> pip install ".[dev]" -v
 | 
						|
            pip install typing_extensions
 | 
						|
            python setup.py generate_stubs
 | 
						|
            python setup.py clean --all
 | 
						|
            MLX_BUILD_STAGE=1 << parameters.build_env >> python -m build -w
 | 
						|
            bash python/scripts/repair_linux.sh
 | 
						|
      - when:
 | 
						|
          condition:
 | 
						|
            equal: ["3.9", << parameters.python_version >>]
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
                name: Build common package
 | 
						|
                command: |
 | 
						|
                  source env/bin/activate
 | 
						|
                  python setup.py clean --all
 | 
						|
                  << parameters.build_env >> MLX_BUILD_STAGE=2 \
 | 
						|
                    python -m build -w
 | 
						|
                  auditwheel repair dist/mlx_cpu*.whl --plat manylinux_2_35_x86_64
 | 
						|
      - when:
 | 
						|
          condition: << parameters.build_env >>
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
                name: Upload packages
 | 
						|
                command: |
 | 
						|
                  source env/bin/activate
 | 
						|
                  twine upload wheelhouse/*.whl
 | 
						|
      - store_artifacts:
 | 
						|
          path: wheelhouse/
 | 
						|
 | 
						|
  build_cuda_release:
 | 
						|
    parameters:
 | 
						|
      build_env:
 | 
						|
        type: string
 | 
						|
        default: ""
 | 
						|
    machine:
 | 
						|
      image: linux-cuda-12:2024.11.1
 | 
						|
      resource_class: gpu.nvidia.small.gen2
 | 
						|
    steps:
 | 
						|
      - checkout
 | 
						|
      - run:
 | 
						|
          name: Build wheel
 | 
						|
          command: |
 | 
						|
            sudo apt-get update
 | 
						|
            sudo apt-get install libblas-dev liblapack-dev liblapacke-dev
 | 
						|
            sudo apt-get install zip
 | 
						|
            python -m venv env
 | 
						|
            source env/bin/activate
 | 
						|
            pip install auditwheel
 | 
						|
            pip install patchelf
 | 
						|
            pip install build
 | 
						|
            pip install twine
 | 
						|
            << parameters.build_env >> MLX_BUILD_STAGE=2 \
 | 
						|
              CMAKE_ARGS="-DMLX_BUILD_CUDA=ON -DCMAKE_CUDA_COMPILER=`which nvcc`" \
 | 
						|
              python -m build -w
 | 
						|
            bash python/scripts/repair_cuda.sh
 | 
						|
      - when:
 | 
						|
          condition: << parameters.build_env >>
 | 
						|
          steps:
 | 
						|
            - run:
 | 
						|
                name: Upload package
 | 
						|
                command: |
 | 
						|
                  source env/bin/activate
 | 
						|
                  twine upload wheelhouse/*.whl
 | 
						|
      - store_artifacts:
 | 
						|
          path: wheelhouse/
 | 
						|
 | 
						|
workflows:
 | 
						|
  build_and_test:
 | 
						|
    when:
 | 
						|
      and:
 | 
						|
        - matches:
 | 
						|
            pattern: "^(?!pull/)[-\\w]+$"
 | 
						|
            value: << pipeline.git.branch >>
 | 
						|
        - not: << pipeline.parameters.nightly_build >>
 | 
						|
    jobs:
 | 
						|
      - mac_build_and_test:
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              macosx_deployment_target: ["13.5", "14.0"]
 | 
						|
      - linux_build_and_test
 | 
						|
      - cuda_build_and_test 
 | 
						|
      - build_documentation 
 | 
						|
 | 
						|
  build_pypi_release:
 | 
						|
    when:
 | 
						|
      and:
 | 
						|
        - not: << pipeline.parameters.nightly_build >>
 | 
						|
    jobs:
 | 
						|
      - build_release:
 | 
						|
          filters:
 | 
						|
            tags:
 | 
						|
              only: /^v.*/
 | 
						|
            branches:
 | 
						|
              ignore: /.*/
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
 | 
						|
              macosx_deployment_target: ["13.5", "14.0", "15.0"]
 | 
						|
              build_env: ["PYPI_RELEASE=1"]
 | 
						|
              xcode_version: ["16.2.0", "15.0.0"]
 | 
						|
            exclude:
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.9"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.10"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.11"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.12"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.13"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.9"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.10"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.11"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.12"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.13"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.9"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.10"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.11"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.12"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.13"
 | 
						|
                build_env: "PYPI_RELEASE=1"
 | 
						|
      - build_documentation:
 | 
						|
          filters:
 | 
						|
            tags:
 | 
						|
              only: /^v.*/
 | 
						|
            branches:
 | 
						|
              ignore: /.*/
 | 
						|
          upload-docs: true
 | 
						|
      - build_linux_release:
 | 
						|
          filters:
 | 
						|
            tags:
 | 
						|
              only: /^v.*/
 | 
						|
            branches:
 | 
						|
              ignore: /.*/
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
 | 
						|
              build_env: ["PYPI_RELEASE=1"]
 | 
						|
      - build_cuda_release:
 | 
						|
          filters:
 | 
						|
            tags:
 | 
						|
              only: /^v.*/
 | 
						|
            branches:
 | 
						|
              ignore: /.*/
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              build_env: ["PYPI_RELEASE=1"]
 | 
						|
 | 
						|
  prb:
 | 
						|
    when:
 | 
						|
      matches:
 | 
						|
        pattern: "^pull/\\d+(/head)?$"
 | 
						|
        value: << pipeline.git.branch >>
 | 
						|
    jobs:
 | 
						|
      - hold:
 | 
						|
          type: approval
 | 
						|
      - apple/authenticate:
 | 
						|
          context: pr-approval
 | 
						|
      - mac_build_and_test:
 | 
						|
          requires: [ hold ]
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              macosx_deployment_target: ["13.5", "14.0"]
 | 
						|
      - linux_build_and_test:
 | 
						|
          requires: [ hold ]
 | 
						|
      - cuda_build_and_test:
 | 
						|
          requires: [ hold ]
 | 
						|
  nightly_build:
 | 
						|
    when:
 | 
						|
      and:
 | 
						|
        - equal: [ main, << pipeline.git.branch >> ]
 | 
						|
        - << pipeline.parameters.nightly_build >>
 | 
						|
    jobs:
 | 
						|
      - build_release:
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
 | 
						|
              macosx_deployment_target: ["13.5", "14.0", "15.0"]
 | 
						|
              xcode_version: ["16.2.0", "15.0.0"]
 | 
						|
            exclude:
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.9"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.10"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.11"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.12"
 | 
						|
              - macosx_deployment_target: "13.5"
 | 
						|
                xcode_version: "16.2.0"
 | 
						|
                python_version: "3.13"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.9"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.10"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.11"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.12"
 | 
						|
              - macosx_deployment_target: "14.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.13"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.9"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.10"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.11"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.12"
 | 
						|
              - macosx_deployment_target: "15.0"
 | 
						|
                xcode_version: "15.0.0"
 | 
						|
                python_version: "3.13"
 | 
						|
      - build_linux_release:
 | 
						|
          matrix:
 | 
						|
            parameters:
 | 
						|
              python_version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
 | 
						|
      - build_cuda_release
 |