Skip to content

Add pytket extensions index page to pytket API docs #4588

Add pytket extensions index page to pytket API docs

Add pytket extensions index page to pytket API docs #4588

Workflow file for this run

name: Build and test
on:
pull_request:
branches:
- main
- develop
push:
branches:
- develop
schedule:
# 03:00 every Saturday morning
- cron: '0 3 * * 6'
workflow_dispatch: {}
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
check_changes:
name: Check tket library version
runs-on: ubuntu-22.04
outputs:
tket_or_workflow_changed: ${{ steps.filter.outputs.tket_or_workflow }}
tket_changed: ${{ steps.filter.outputs.tket }}
doxyfile_or_workflow_changed: ${{ steps.filter.outputs.doxyfile_or_workflow }}
pytket_or_workflow_changed: ${{ steps.filter.outputs.pytket_or_workflow }}
tket_ver: ${{ steps.tket_ver.outputs.tket_ver }}
tket_package_exists: ${{ steps.tket_package_exists.outputs.tket_package_exists }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- uses: dorny/paths-filter@v2.11.1
id: filter
with:
base: ${{ github.ref }}
filters: |
tket:
- '{tket/src/**,tket/include/**,tket/conanfile.py,tket/CMakeLists.txt,tket/cmake/**,tket/test/**,tket/proptest/**}'
tket_or_workflow:
- '{tket/src/**,tket/include/**,tket/conanfile.py,tket/CMakeLists.txt,tket/cmake/**,tket/test/**,tket/proptest/**}'
- '.github/workflows/build_and_test.yml'
doxyfile_or_workflow:
- '{tket/Doxyfile}'
- '.github/workflows/build_and_test.yml'
pytket_or_workflow:
- 'pytket/**'
- '.github/workflows/build_and_test.yml'
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: parse version from conanfile
id: tket_ver
run: |
tket_ver=$(conan inspect tket/conanfile.py | grep "^version: " | awk '{print $2}')
echo "tket_ver=${tket_ver}" >> $GITHUB_OUTPUT
- name: See if version exists on remote
id: test_package_exists
run: |
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
tket_package_exists=`conan search -r tket-libs "tket/${{ steps.tket_ver.outputs.tket_ver }}@tket/stable" | grep "not found" > /dev/null 2>&1 && echo false || echo true`
echo "tket_package_exists=${tket_package_exists}" >> $GITHUB_OUTPUT
- name: Check tket version bump
if: github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'develop' && steps.filter.outputs.tket == 'true' && steps.test_package_exists.outputs.tket_package_exists == 'true'
run: exit 1
check_docs_tket:
name: Check documentation build
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.doxyfile_or_workflow_changed == 'true'
runs-on: 'ubuntu-22.04'
steps:
- uses: actions/checkout@v4
- name: Check doxygen
run: |
sudo apt install -y doxygen graphviz
cd tket && doxygen
check_format_tket:
name: Check C++ code formatting
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true'
runs-on: 'macos-12'
steps:
- uses: actions/checkout@v4
- name: Check C++ code formatting
run: |
brew update
brew install clang-format@17
git ls-files "*.cpp" "*.hpp" | xargs clang-format -style=file --dry-run --Werror
build_test_tket:
name: Build and test (tket)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true'
strategy:
matrix:
os: ['ubuntu-22.04', 'macos-12', 'macos-13-xlarge']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: apt update
if: matrix.os == 'ubuntu-22.04'
run: sudo apt update
- name: Select Python 3.10
# otherwise turtlebrowser/get-conan@v1.2 fails on macos-12
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: Set up conan
run: |
conan profile detect
DEFAULT_PROFILE_PATH=`conan profile path default`
PROFILE_PATH=./conan-profiles/${{ matrix.os }}
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH}
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
- name: Install runtime test requirements
if: matrix.os == 'ubuntu-22.04' && github.event_name == 'schedule'
run: |
sudo apt install texlive texlive-latex-extra latexmk
mkdir -p ~/texmf/tex/latex
wget http://mirrors.ctan.org/graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex -P ~/texmf/tex/latex
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: tket-static-${{ matrix.os }}
- name: further ccache config
run: |
ccache --set-config base_dir=${HOME}
ccache --set-config compiler_check=content
ccache --set-config namespace=WITH_TESTS
ccache -p
- name: Build tket
run: conan create tket -s build_type=Release --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True
- name: Upload package
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
run: |
ccache --set-config namespace=WITHOUT_TESTS
conan create tket --user=tket --channel=stable -o boost/*:header_only=True
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }}
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs
build_test_tket_windows:
name: Build and test (tket)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true'
strategy:
matrix:
os: ['windows-2022']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: Set up conan
shell: bash
run: |
conan profile detect
DEFAULT_PROFILE_PATH=`conan profile path default`
PROFILE_PATH=./conan-profiles/${{ matrix.os }}
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH}
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
- name: normalize line endings in conanfile and src directory
# This is necessary to ensure consistent revisions across platforms.
# Conan's revision hash is composed of hashes of all the exported files,
# so we must normalize the line endings in these.
run: |
$tket_files = Get-ChildItem "tket" -File -Recurse
foreach ($f in $tket_files) {
$normalized_file = [IO.File]::ReadAllText($f) -replace "`r`n", "`n"
[IO.File]::WriteAllText($f, $normalized_file)
}
- name: ninja ccache setup
# This is what hendrikmuhs/ccache-action does, but for windows (theirs is buggy on windows)
id: ninja-ccache-setup
run: |
choco upgrade ccache ninja
$ccache_dir = ccache --get-config cache_dir
echo ccache_dir=$ccache_dir >> $env:GITHUB_OUTPUT
ccache --set-config=max_size='500M'
ccache --set-config=compression=true
ccache --set-config compiler_check=content
ccache --set-config namespace=WITH_TESTS
ccache -p
- name: Get current time
uses: josStorer/get-current-time@v2.1.1
id: current_time
with:
format: YYYYMMDDHHmmss
- name: ccache windows
uses: actions/cache@v3
with:
path: ${{ steps.ninja-ccache-setup.outputs.ccache_dir }}
key: tket-static-${{ matrix.os }}-${{ steps.current_time.outputs.formattedTime }}
restore-keys: |
tket-static-${{ matrix.os }}-
- name: Build tket
# On windows use build + export-pkg so build directory is consistent across runs (i.e. don't build from conan cache)
# Necessary because setting ccache base_dir doesn't currently work on windows
run: |
conan build tket --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True -c tools.cmake.cmaketoolchain:generator=Ninja
conan export-pkg tket --user=tket --channel=stable -o boost/*:header_only=True -o with_all_tests=True -c tools.cmake.cmaketoolchain:generator=Ninja
- name: Upload package
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
run: |
ccache --set-config namespace=WITHOUT_TESTS
conan build tket --user=tket --channel=stable -o boost/*:header_only=True
conan export-pkg tket --user=tket --channel=stable -o boost/*:header_only=True
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }}
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs
- name: ccache stats
run: |
ccache -s #show stats
ccache -z #show stats
build_test_tket_not_required:
name: Build and test (tket)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed != 'true'
strategy:
matrix:
os: ['ubuntu-22.04', 'macos-12', 'windows-2022', 'macos-13-xlarge']
runs-on: ${{ matrix.os }}
steps:
- run: echo "no changes to tket"
build_test_pytket_ubuntu:
name: Build and test pytket (ubuntu)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: Set up conan
run: |
conan profile detect
DEFAULT_PROFILE_PATH=`conan profile path default`
PROFILE_PATH=./conan-profiles/ubuntu-22.04
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH}
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: tket-dynamic-ubuntu-22.04
- name: further ccache config
run: |
ccache --set-config base_dir=${HOME}
ccache --set-config compiler_check=content
ccache -p
- name: Build tket
if: needs.check_changes.outputs.tket_changed == 'true'
run: conan create tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf ""
- name: Install tket
if: needs.check_changes.outputs.tket_changed != 'true'
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True
- name: check that version is consistent
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }}
- name: Install pytket requirements
run: |
conan create recipes/pybind11
conan create recipes/pybind11_json/all --version 0.2.13
- name: Set up Python (pull request)
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Set up Python (push)
if: github.event_name == 'push'
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Set up Python (schedule)
if: github.event_name == 'schedule'
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Build pytket
run: |
cd pytket
pip install -e .[ZX] -v
- name: Run doctests
run: |
cd pytket
pip install pytest
pytest --doctest-modules pytket
- name: Test pytket with coverage
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
run: |
cd pytket/tests
pip install -r requirements.txt
pytest --ignore=simulator/ --hypothesis-seed=1 --cov=../pytket --cov-branch --cov-report=html --cov-report=xml:htmlcov/cov.xml
- name: Test pytket
if: github.event_name != 'pull_request' || github.event_name == 'workflow_dispatch'
run: |
cd pytket/tests
pip install -r requirements.txt
pytest --ignore=simulator/
- name: Test building docs
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
timeout-minutes: 20
run: |
pip install -r pytket/docs/requirements.txt
./.github/workflows/build-docs
- name: Upload artefact
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v3
with:
name: pytket_docs
path: pytket/docs/build/html/
- name: Upload pytket coverage artefact
if: github.event_name == 'pull_request' || github.event_name == 'push' || github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v3
with:
name: pytket_test_coverage
path: pytket/tests/htmlcov
- name: Upload package
if: github.event_name == 'push' && github.ref == 'refs/heads/develop' && needs.check_changes.outputs.tket_changed == 'true'
run: |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }}
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs
build_test_pytket_macos:
name: Build and test pytket (macos)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true'
strategy:
matrix:
os: ['macos-12', 'macos-13-xlarge']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Select Python 3.10
# otherwise turtlebrowser/get-conan@v1.2 fails on macos-12
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: Set up conan
run: |
conan profile detect
DEFAULT_PROFILE_PATH=`conan profile path default`
PROFILE_PATH=./conan-profiles/${{ matrix.os }}
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH}
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: tket-dynamic-macos-12
- name: further ccache config
run: |
ccache --set-config base_dir=${HOME}
ccache --set-config compiler_check=content
ccache -p
- name: Build tket
if: needs.check_changes.outputs.tket_changed == 'true'
run: conan create tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf ""
- name: Install tket
if: needs.check_changes.outputs.tket_changed != 'true'
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True
- name: check that version is consistent
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }}
- name: Install pytket requirements
run: |
conan create recipes/pybind11
conan create recipes/pybind11_json/all --version 0.2.13
- name: Set up Python (pull request)
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
run: brew install python@3.9
- name: Set up Python (push)
if: github.event_name == 'push'
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Set up Python (schedule)
if: github.event_name == 'schedule'
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Build pytket
run: |
cd pytket
python${{ matrix.python-version }} -m pip install -e .[ZX] -v
- name: Run doctests
run: |
cd pytket
python${{ matrix.python-version }} -m pip install pytest
python${{ matrix.python-version }} -m pytest --doctest-modules pytket
- name: Test pytket
run: |
cd pytket/tests
python${{ matrix.python-version }} -m pip install -r requirements.txt
python${{ matrix.python-version }} -m pytest --ignore=simulator/
- name: Check type stubs are up-to-date and run mypy
if: matrix.os == 'macos-12' && (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch')
run: |
python${{ matrix.python-version }} -m pip install -U mypy
python${{ matrix.python-version }} -m pip install -U pybind11-stubgen
cd pytket
./stub_generation/regenerate_stubs
git diff --quiet pytket/_tket && echo "Stubs are up-to-date" || exit 1 # fail if stubs change after regeneration
python${{ matrix.python-version }} -m mypy --config-file=mypy.ini --no-incremental -p pytket -p tests
- name: Upload package
if: github.event_name == 'push' && github.ref == 'refs/heads/develop' && needs.check_changes.outputs.tket_changed == 'true'
run: |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }}
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs
build_test_pytket_windows:
name: Build and test pytket (windows)
needs: check_changes
if: needs.check_changes.outputs.tket_or_workflow_changed == 'true' || needs.check_changes.outputs.pytket_or_workflow_changed == 'true'
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- name: Install conan
uses: turtlebrowser/get-conan@v1.2
- name: Set up conan
shell: bash
run: |
conan profile detect
DEFAULT_PROFILE_PATH=`conan profile path default`
PROFILE_PATH=./conan-profiles/windows-2022
diff ${DEFAULT_PROFILE_PATH} ${PROFILE_PATH} || true
cp ${PROFILE_PATH} ${DEFAULT_PROFILE_PATH}
conan remote add tket-libs https://quantinuumsw.jfrog.io/artifactory/api/conan/tket1-libs --index 0
- name: normalize line endings in conanfile and src directory
# This is necessary to ensure consistent revisions across platforms.
# Conan's revision hash is composed of hashes of all the exported files,
# so we must normalize the line endings in these.
run: |
$tket_files = Get-ChildItem "tket" -File -Recurse
foreach ($f in $tket_files) {
$normalized_file = [IO.File]::ReadAllText($f) -replace "`r`n", "`n"
[IO.File]::WriteAllText($f, $normalized_file)
}
- name: ccache setup
# This is what hendrikmuhs/ccache-action does, but for windows (theirs is buggy on windows)
id: ccache-setup
run: |
choco upgrade ccache
$ccache_dir = ccache --get-config cache_dir
echo ccache_dir=$ccache_dir >> $env:GITHUB_OUTPUT
ccache --set-config=max_size='500M'
ccache --set-config=compression=true
ccache --set-config compiler_check=content
ccache --set-config namespace=WITH_TESTS
ccache -p
- name: Get current time
uses: josStorer/get-current-time@v2.1.1
id: current_time
with:
format: YYYYMMDDHHmmss
- name: ccache windows
uses: actions/cache@v3
with:
path: ${{ steps.ccache-setup.outputs.ccache_dir }}
key: tket-dynamic-visual-studio-windows-2022-${{ steps.current_time.outputs.formattedTime }}
restore-keys: |
tket-dynamic-visual-studio-windows-2022
- name: get ccache version
id: ccache-ver
shell: bash
run: |
ccache_ver=$(choco list -e ccache | grep "ccache" | grep -ioE '[0-9]+\.[0-9]+\.[0-9]+')
echo "Found ccache version ${ccache_ver}"
echo "ccache_ver=${ccache_ver}" >> $GITHUB_OUTPUT
- name: Build tket
if: needs.check_changes.outputs.tket_changed == 'true'
run: |
$env:TKET_VSGEN_CCACHE_EXE = 'C:\\ProgramData\\chocolatey\\lib\\ccache\\tools\\ccache-${{ steps.ccache-ver.outputs.ccache_ver }}-windows-x86_64\\ccache.exe'
conan build tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True
conan export-pkg tket --user tket --channel stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True -tf `"`"
- name: Install tket
if: needs.check_changes.outputs.tket_changed != 'true'
run: conan install --requires tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -o boost/*:header_only=True -o tklog/*:shared=True -o tket/*:shared=True
- name: check that version is consistent
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
run: ./.github/workflows/check-tket-reqs ${{ needs.check_changes.outputs.tket_ver }}
- name: Install pytket requirements
run: |
conan create recipes/pybind11
conan create recipes/pybind11_json/all --version 0.2.13
- name: Set up Python (3.9)
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Set up Python (3.10)
if: github.event_name == 'push'
uses: actions/setup-python@v4
with:
python-version: "3.10"
- name: Set up Python (3.11)
if: github.event_name == 'schedule'
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Build pytket
run: |
cd pytket
pip install -e .[ZX] -v
- name: Run doctests
run: |
cd pytket
pip install pytest
pytest --doctest-modules pytket
- name: Test pytket
run: |
cd pytket/tests
pip install -r requirements.txt
pytest --ignore=simulator/
- name: Upload package
if: github.event_name == 'push' && github.ref == 'refs/heads/develop' && needs.check_changes.outputs.tket_changed == 'true'
run: |
conan remote login -p ${{ secrets.JFROG_ARTIFACTORY_TOKEN_3 }} tket-libs ${{ secrets.JFROG_ARTIFACTORY_USER_3 }}
conan upload tket/${{ needs.check_changes.outputs.tket_ver }}@tket/stable -r=tket-libs
- name: ccache stats
run: |
ccache -s #show stats
ccache -z #show stats
publish_pytket_coverage:
name: Publish pytket coverage
needs: build_test_pytket_ubuntu
concurrency: gh_pages
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
ref: gh-pages
- name: Download artefact
uses: actions/download-artifact@v3
with:
name: pytket_test_coverage
path: htmlcov/
- name: Configure git
run: |
git config --global user.email "tket-bot@cambridgequantum.com"
git config --global user.name "«$GITHUB_WORKFLOW» github action"
- name: Remove old report
run: git rm -r docs/pytket/test-coverage
- name: Add report to repository
run: |
mv htmlcov docs/pytket/test-coverage
git add -f docs/pytket/test-coverage
git commit --allow-empty -m "Add generated pytket coverage report."
- name: Publish report
run: git push origin gh-pages:gh-pages
check_pytket_coverage:
name: Check pytket line and branch coverage
needs: build_test_pytket_ubuntu
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Download artefact
uses: actions/download-artifact@v3
with:
name: pytket_test_coverage
path: pytket-test-coverage/
- name: Compare with latest report from develop
run: |
wget https://cqcl.github.io/tket/pytket/test-coverage/cov.xml -O oldcov.xml
./.github/workflows/compare-pytket-coverage oldcov.xml pytket-test-coverage/cov.xml