# GT4Py - GridTools Framework
#
# Copyright (c) 2014-2023, ETH Zurich
# All rights reserved.
#
# This file is part of the GT4Py project and the GridTools framework.
# GT4Py is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or any later
# version. See the LICENSE.txt file at the top-level directory of this
# distribution for a copy of the license or check <https://www.gnu.org/licenses/>.
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""
GT4Py-NEXT - Performance portable and composable weather & climate stencils.

This module deviates from the project coding style (Google Python style) in the following way:

[style guide link](https://google.github.io/styleguide/pyguide.html#22-imports):

Fnctions and classes are imported from other modules in order to explicitly re-export them
to create a streamlined user experience. `from module import *` can be used but only if the
module in question is a submodule, defines `__all__` and exports many public API objects.
"""

from . import common, ffront, iterator, program_processors, type_inference
from .common import Dimension, DimensionKind, Field, GridType
from .ffront import fbuiltins
from .ffront.decorator import field_operator, program, scan_operator
from .ffront.fbuiltins import *  # noqa: F403  # fbuiltins defines __all__ and we explicitly want to reexport everything here
from .ffront.fbuiltins import FieldOffset
from .iterator.embedded import (
    NeighborTableOffsetProvider,
    StridedNeighborOffsetProvider,
    index_field,
    np_as_located_field,
)


__all__ = [
    # submodules
    "common",
    "ffront",
    "iterator",
    "program_processors",
    "type_inference",
    # from common
    "Dimension",
    "DimensionKind",
    "Field",
    "GridType",
    # from iterator
    "NeighborTableOffsetProvider",
    "StridedNeighborOffsetProvider",
    "index_field",
    "np_as_located_field",
    # from ffront
    "FieldOffset",
    "field_operator",
    "program",
    "scan_operator",
    *fbuiltins.__all__,
]
