Style Guide#

The Earth2Studio style guide is set of conventions we have adopted detailing how to write code for this project. A consistent style and process makes the package much easier to understand for users and ensure compliance requirements are met.

Code Formatting#

Earth2Studio uses black as the code formatter. All committed code is expected to be compliant with the version of black specified in the pyproject.toml. Pre-commit will format your code for you or one can run make format to run black on all files.

Additional Code formatting principles:

  • Files are always lower-case reflecting, use shortened name of component they hold

  • Class names are capitalized using camel-case

  • Function names are lower case using snake-case

Linting#

Linting is performed by ruff which includes many processes to ensure code between files is as consistent as possible. Ruff is configured in the projects pyproject.toml. Pre-commit will run linting for you or one can run make lint to run ruff on all files.

Type Hints#

Earth2Studio is a MyPy compliant package, meaning type hints are required for all functions (parameters and return object). MyPy is configured in the packages pyproject.toml. On top of requiring type hints, the following guidelines should be used:

  • To help keep APIs a concise, several of the common types used through out the package are defined in earth2studio/utils/type.py which should be used when applicable.

from collections import OrderedDict

import numpy as np

CoordSystem = OrderedDict[str, np.ndarray]

# Specific dimension custom types
VariableArray = np.ndarray[str]
LeadTimeArray = np.ndarray[np.timedelta64]
TimeArray = np.ndarray[np.datetime64]
  • Earth2Studio is Python 3.10+, thus type hinting using generic objects should be used instead of the typing package. See PEP 585 for details.

  • Earth2Studio is Python 3.10+, thus the | operator should be used instead of Union and Optional type operators. See PEP 604 for details.

Note

The pre-commit hook PyUpgrade will enforce Python 3.10 type styles automatically.

Licensing Information#

All source code files must start with this paragraph:

# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Signing Your Work#

We require that all contributors “sign-off” on their commits. This certifies that the contribution is your original work, or you have rights to submit it under the same license, or a compatible license. Any contribution which contains commits that are not Signed-Off will not be accepted.

To sign off on a commit you simply use the --signoff (or -s) option when committing your changes:

git commit -s -m "Adding a cool feature."

This will append the following to your commit message:

Signed-off-by: Your Name <your@email.com>