Exemplo n.º 1
0
 def get_stencil_class_name(cls, stencil_id):
     components = stencil_id.qualified_name.split(".")
     class_name = "{name}__{backend}_{id}".format(name=components[-1],
                                                  backend=gt_utils.slugify(
                                                      cls.name),
                                                  id=stencil_id.version)
     return class_name
Exemplo n.º 2
0
    def _test_generation(cls, test, externals_dict):
        """Test source code generation for all *backends* and *stencil suites*.

        The generated implementations are cached in a :class:`utils.ImplementationsDB`
        instance, to avoid duplication of (potentially expensive) compilations.
        """
        backend_slug = gt_utils.slugify(test["backend"], valid_symbols="")
        implementation = gtscript.stencil(
            backend=test["backend"],
            definition=test["definition"],
            name=cls.__module__ +
            f".{test['suite']}_{backend_slug}_{test['test_id']}",
            rebuild=True,
            externals=externals_dict,
        )

        for k, v in externals_dict.items():
            implementation.constants[k] = v

        assert isinstance(implementation, StencilObject)
        assert implementation.backend == test["backend"]

        # Assert strict equality for Dawn backends
        if implementation.backend.startswith("dawn"):
            assert all(
                field_info.boundary == cls.global_boundaries[name]
                for name, field_info in implementation.field_info.items()
                if field_info is not None)
        else:
            assert all(
                field_info.boundary >= cls.global_boundaries[name]
                for name, field_info in implementation.field_info.items()
                if field_info is not None)

        test["implementations"].append(implementation)
Exemplo n.º 3
0
    def _test_generation(cls, test, externals_dict):
        """Test source code generation for all *backends* and *stencil suites*.

        The generated implementations are cached in a :class:`utils.ImplementationsDB`
        instance, to avoid duplication of (potentially expensive) compilations.
        """
        backend_slug = gt_utils.slugify(test["backend"], valid_symbols="")
        implementation = gtscript.stencil(
            backend=test["backend"],
            definition=test["definition"],
            name=cls.__module__ +
            f".{test['suite']}_{backend_slug}_{test['test_id']}",
            rebuild=True,
            externals=externals_dict,
        )

        for k, v in externals_dict.items():
            implementation.constants[k] = v

        assert isinstance(implementation, StencilObject)
        assert implementation.backend == test["backend"]

        for name, field_info in implementation.field_info.items():
            if field_info.access == AccessKind.NONE:
                continue
            for i, ax in enumerate("IJK"):
                assert (ax not in field_info.axes or ax == "K"
                        or field_info.boundary[i] >=
                        cls.global_boundaries[name][i])
        test["implementations"].append(implementation)
Exemplo n.º 4
0
 def backend_root_path(self) -> pathlib.Path:
     cpython_id = "py{version.major}{version.minor}_{api_version}".format(
         version=sys.version_info, api_version=sys.api_version
     )
     backend_root = self.root_path / cpython_id / gt_utils.slugify(self.builder.backend.name)
     if not backend_root.exists():
         if not backend_root.parent.exists():
             backend_root.parent.mkdir(parents=False)
         backend_root.mkdir(parents=False)
     return backend_root
Exemplo n.º 5
0
    def get_base_path(cls):
        # Initialize cache folder
        cache_root = os.path.join(
            gt_config.cache_settings["root_path"], gt_config.cache_settings["dir_name"]
        )
        if not os.path.exists(cache_root):
            gt_utils.make_dir(cache_root, is_cache=True)

        cpython_id = "py{major}{minor}_{api}".format(
            major=sys.version_info.major, minor=sys.version_info.minor, api=sys.api_version
        )
        base_path = os.path.join(cache_root, cpython_id, gt_utils.slugify(cls.name))
        return base_path
Exemplo n.º 6
0
 def module_postfix(self) -> str:
     backend_name = gt_utils.slugify(self.builder.backend.name)
     id_version = self.stencil_id.version
     return f"__{backend_name}_{id_version}"