@@ -191,7 +191,7 @@ jobs:
191191
192192 - name : Smoke test
193193 run : |
194- python -c "import dpnp, dpctl; dpctl.lsplatform()"
194+ python -c "import dpctl; dpctl.lsplatform()"
195195 python -c "import dpnp; print(dpnp.__version__)"
196196
197197 - name : Run tests
@@ -332,7 +332,7 @@ jobs:
332332
333333 - name : Smoke test
334334 run : |
335- python -c "import dpnp, dpctl; dpctl.lsplatform()"
335+ python -c "import dpctl; dpctl.lsplatform()"
336336 python -c "import dpnp; print(dpnp.__version__)"
337337
338338 - name : Run tests
@@ -414,6 +414,190 @@ jobs:
414414 env :
415415 ANACONDA_TOKEN : ${{ secrets.ANACONDA_TOKEN }}
416416
417+ array-api-conformity :
418+ name : Array API conformity
419+
420+ needs : build
421+
422+ permissions :
423+ # Needed to add a comment to a pull request's issue
424+ pull-requests : write
425+
426+ strategy :
427+ matrix :
428+ python : ['3.12']
429+ os : [ubuntu-22.04]
430+
431+ runs-on : ${{ matrix.os }}
432+
433+ defaults :
434+ run :
435+ shell : bash -el {0}
436+
437+ continue-on-error : true
438+
439+ env :
440+ array-api-tests-path : ' ${{ github.workspace }}/array-api-tests/'
441+ json-report-file : ' ${{ github.workspace }}/.report.json'
442+ dpnp-repo-path : ' ${{ github.workspace }}/dpnp/'
443+ array-api-skips-file : ' ${{ github.workspace }}/dpnp/.github/workflows/array-api-skips.txt'
444+ channel-path : ' ${{ github.workspace }}/channel/'
445+ pkg-path-in-channel : ' ${{ github.workspace }}/channel/linux-64/'
446+ extracted-pkg-path : ' ${{ github.workspace }}/pkg/'
447+ ver-json-path : ' ${{ github.workspace }}/version.json'
448+
449+ steps :
450+ - name : Download artifact
451+ uses : actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
452+ with :
453+ name : ${{ env.PACKAGE_NAME }} ${{ runner.os }} Python ${{ matrix.python }}
454+ path : ${{ env.pkg-path-in-channel }}
455+
456+ - name : Extract package archive
457+ run : |
458+ mkdir -p ${{ env.extracted-pkg-path }}
459+ tar -xvf ${{ env.pkg-path-in-channel }}/${{ env.PACKAGE_NAME }}-*.tar.bz2 -C ${{ env.extracted-pkg-path }}
460+
461+ - name : Setup miniconda
462+ id : setup_miniconda
463+ continue-on-error : true
464+ uses : conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0
465+ with :
466+ miniforge-version : latest
467+ use-mamba : ' true'
468+ channels : conda-forge
469+ conda-remove-defaults : ' true'
470+ python-version : ${{ matrix.python }}
471+ activate-environment : ' array-api-conformity'
472+
473+ - name : ReSetup miniconda
474+ if : steps.setup_miniconda.outcome == 'failure'
475+ uses : conda-incubator/setup-miniconda@d2e6a045a86077fb6cad6f5adf368e9076ddaa8d # v3.1.0
476+ with :
477+ miniforge-version : latest
478+ use-mamba : ' true'
479+ channels : conda-forge
480+ conda-remove-defaults : ' true'
481+ python-version : ${{ matrix.python }}
482+ activate-environment : ' array-api-conformity'
483+
484+ - name : Install conda-index
485+ id : install_conda_index
486+ continue-on-error : true
487+ run : mamba install conda-index=${{ env.CONDA_INDEX_VERSION }}
488+
489+ - name : ReInstall conda-index
490+ if : steps.install_conda_index.outcome == 'failure'
491+ run : mamba install conda-index=${{ env.CONDA_INDEX_VERSION }}
492+
493+ - name : Create conda channel
494+ run : |
495+ python -m conda_index ${{ env.channel-path }}
496+
497+ - name : Test conda channel
498+ run : |
499+ conda search ${{ env.PACKAGE_NAME }} -c ${{ env.channel-path }} --override-channels --info --json > ${{ env.ver-json-path }}
500+ cat ${{ env.ver-json-path }}
501+
502+ - name : Get package version
503+ run : |
504+ export PACKAGE_VERSION=$(python -c "${{ env.VER_SCRIPT1 }} ${{ env.VER_SCRIPT2 }}")
505+
506+ echo PACKAGE_VERSION=${PACKAGE_VERSION}
507+ echo "PACKAGE_VERSION=$PACKAGE_VERSION" >> $GITHUB_ENV
508+
509+ - name : Install dpnp
510+ id : install_dpnp
511+ continue-on-error : true
512+ run : |
513+ mamba install ${{ env.PACKAGE_NAME }}=${{ env.PACKAGE_VERSION }} pytest python=${{ matrix.python }} ${{ env.TEST_CHANNELS }}
514+ env :
515+ TEST_CHANNELS : ' -c ${{ env.channel-path }} ${{ env.CHANNELS }}'
516+
517+ - name : ReInstall dpnp
518+ if : steps.install_dpnp.outcome == 'failure'
519+ run : |
520+ mamba install ${{ env.PACKAGE_NAME }}=${{ env.PACKAGE_VERSION }} pytest python=${{ matrix.python }} ${{ env.TEST_CHANNELS }}
521+ env :
522+ TEST_CHANNELS : ' -c ${{ env.channel-path }} ${{ env.CHANNELS }}'
523+
524+ - name : List installed packages
525+ run : mamba list
526+
527+ - name : Smoke test
528+ run : |
529+ python -c "import dpctl; dpctl.lsplatform()"
530+ python -c "import dpnp; print(dpnp.__version__)"
531+
532+ - name : Clone array API tests repo
533+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
534+ with :
535+ repository : ' data-apis/array-api-tests'
536+ path : ${{ env.array-api-tests-path }}
537+ fetch-depth : 0
538+ submodules : ' recursive'
539+
540+ - name : Install array API test dependencies
541+ run : |
542+ pip install -r requirements.txt
543+ working-directory : ${{ env.array-api-tests-path }}
544+
545+ - name : Install jq
546+ run : |
547+ sudo apt-get install jq
548+
549+ - name : List installed packages
550+ run : mamba list
551+
552+ - name : Smoke test
553+ run : |
554+ python -c "import dpctl; dpctl.lsplatform()"
555+ python -c "import dpnp; print(dpnp.__version__)"
556+
557+ # need to fetch array-api-skips.txt
558+ - name : Checkout DPNP repo
559+ uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
560+ with :
561+ path : ${{ env.dpnp-repo-path }}
562+
563+ - name : Run array API conformance tests
564+ run : |
565+ python -m pytest --json-report --json-report-file=${{ env.json-report-file }} --disable-deadline --skips-file ${{ env.array-api-skips-file }} array_api_tests || true
566+ env :
567+ ARRAY_API_TESTS_MODULE : ' dpnp'
568+ SYCL_CACHE_PERSISTENT : 1
569+ working-directory : ${{ env.array-api-tests-path }}
570+
571+ - name : Set Github environment variables
572+ run : |
573+ FILE=${{ env.json-report-file }}
574+ if test -f "$FILE"; then
575+ PASSED_TESTS=$(jq '.summary | .passed // 0' $FILE)
576+ FAILED_TESTS=$(jq '.summary | .failed // 0' $FILE)
577+ SKIPPED_TESTS=$(jq '.summary | .skipped // 0' $FILE)
578+ MESSAGE="Array API standard conformance tests for dpnp=$PACKAGE_VERSION ran successfully.
579+ Passed: $PASSED_TESTS
580+ Failed: $FAILED_TESTS
581+ Skipped: $SKIPPED_TESTS"
582+ echo "MESSAGE<<EOF" >> $GITHUB_ENV
583+ echo "$MESSAGE" >> $GITHUB_ENV
584+ echo "EOF" >> $GITHUB_ENV
585+ else
586+ echo "Array API standard conformance tests failed to run for dpnp=$PACKAGE_VERSION."
587+ exit 1
588+ fi
589+
590+ - name : Output API summary
591+ run : echo "::notice ${{ env.MESSAGE }}"
592+
593+ - name : Post result to PR
594+ if : ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork }}
595+ uses : mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2.8.2
596+ with :
597+ message : |
598+ ${{ env.MESSAGE }}
599+ allow-repeats : false
600+
417601 cleanup_packages :
418602 name : Clean up anaconda packages
419603
0 commit comments