generate_composite_base_case#

generate_composite_base_case(*, when: str | dict[str, str] | None = None, flag: str | None = None, script: str | None = None) None#

Create an composite base job that depends on all of the parameterized jobs generated by this file.

The composite base job will run after all other parameterized jobs and can be used to to ensure that the overall behavior of the parameterized jobs. For example, a parameter may represent a step size and the composite base job will verify convergence as the step size parameter is reduced.

The composite base job has access to all of parameterized jobs’ parameters through the dependencies attribute.

Usage#

.pyt:

import canary
canary.directives.generate_composite_base_case(*, flag=None, script=None, when=...)

.vvt:

#VVT: analyze (options=..., platforms=..., testname=...) : (flag|script)

Parameters#

  • when: Restrict processing of the directive to this condition

  • flag: Run the test script with the --FLAG option on the command line. flag should start with a hyphen (-). The script should parse this value and perform the appropriate analysis.

  • script: Run script during the analysis phase (instead of the test file).

The when expression is limited to the following conditions:

  • testname: Restrict processing of the directive to this test name

  • platforms: Restrict processing of the directive to certain platform or platforms

  • options: Restrict processing of the directive to command line -o options

  • parameters: Restrict processing of the directive to certain parameter names and values

References#

Examples#

import canary
canary.directives.generate_composite_base_case(flag="--base", when="platforms='not darwin'")
canary.directives.parameterize("a,b", [(1, 2), (3, 4)])
# VVT: analyze (platforms="not darwin") : --analyze
# VVT: parameterize : a,b = 1,2 3,4

will run an analysis job after jobs [a=1,b=3] and [a=2,b=4] have run to completion. The canary.testinstance and vvtest_util modules will contain information regarding the previously run jobs so that a collective analysis can be performed.

For either file type, the script must query the command line arguments to determine the type of test to run:

import argparse
import sys

import canary
canary.directives.generate_composite_base_case(flag="--base", when="platforms='not darwin'")
canary.directives.parameterize("a,b", [(1, 2), (3, 4)])


def test() -> int:
    ...

def base() -> int:
    ...

def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--base", action="store_true")
    args = parser.parse_args()
    if args.analyze:
        return base()
    return test()


if __name__ == "__main__":
    sys.exit(main())