Skip to main content

LCLS Unified Task Executor.

Project description

LUTE

Docs Release build

Description

lute, or LUTE, is the LCLS Unified Task Executor - an automated workflow package for running analysis pipelines at SLAC's LCLS. This project is the next iteration of btx.

This package is used to run arbitrary analysis code (first-party or third-party) in the form of individual analysis Tasks. Tasks can be linked together to form complete end-to-end analysis pipelines or workflows. For workflow management, the package interfaces with Airflow running on S3DF.

Installation

Usage

Roadmap

A timeline is available in ...

Contributing

All contributions most proceed through pull (merge) requests (PRs). Please fork the repository and open a PR when ready to merge your contribution. There is a specific PR template (coming soon...) which should be used to describe the nature of the contribution and how it was implemented. Before beginning, please read through the following guidelines regarding code style, naming conventions and general practices.

Docstrings and Documentation

Modules, classes, and functions should be documented with docstrings. The Google style should be followed, with a minor addition - namely, module level docstrings should include a list of public classes, functions, etc. Example usage sections are optional but recommended for clarity. Refer to the link above for the full specification, or below for an abbreviated example.

"""This is a module level docstring.

Classes:
    Class1: Short description

Functions:
    function1(prototype): Short description

Exceptions:
    MyException: When/why it is raised.

Example usage:
    How one might use the classes and functions. Test modules may include how
        to run them.
"""

class Class1:
    """Class descriptions can go here or in __init__.

    Attributes:
        public_attr (type): Description
        # properties should be documented separately in their getter.
    """
    def __init__(self, arg1: type) -> None:
        """Description of class can go here.

        Args:
            param1 (type): Description
        """
        ...

    @property
    def my_property(self) -> type:
        """type: Property attributes are documented here."""
        ...

def function1(arg1: type) -> type:
    """Function description.

    Args:
        arg1 (type):  Description

    Returns: # Or Yields for generators
        name (type): Description # Alternatively, can just be `type: Description`

    Raises:
        MyException: Why?
    """
    ...

For documentation generation, MkDocs is used. Docstrings written using the above style guidelines should be parsed correctly for automatically generated documentation.

Branch Conventions

For development of new features on your personal forks of the repository, please try to follow the following naming convention for your branches: {ACRONYM}/{description}. Please see below, under commit messages, for the relevant acronyms. For example, a PR implementing a new feature which produces summaries in the eLog may be called: ENH/elog_summaries.

As new features are implemented in personal forks, this official repository maintains only two branches, which are used to indicate the state of the project in terms of feature-list and stability.

  • The main branch contains the latest stable release.
  • The dev branch contains the most recent features and changes. This branch should not be used for untested or partially implemented features; however, any and all new additions versus the main branch are subject to change. When opening a PR for a new feature, it should be merged first to the dev branch. This branch is periodically merged into main following the development timeline and list of milestones. Once merged into main, the commit is tagged, and a new release is made.

Code Style

  • Type hints should be used throughout the code base. For the time being, support is still provided for Python 3.9, so certain more recent typing constructions are not available. E.g.
my_var: str | int = get_str_or_int()

while valid in Python 3.10+, is unavailable in Python 3.9. Instead please use the typing module:

from typing import Union
my_var: Union[str, int] = get_str_or_int()

The typing module contains many other useful features for type hint support.

Note that it is possible to use from __future__ import annotations to enable the use of these features. It is a breaking change and is used on a module-by-module basis, please investigate if it applies to your use case.

Commit Messages

Inspired by pcdshub repositories, in turn following NumPy conventions, all commit messages should ideally be prefixed by a three letter acronym. Each of these acronyms has a specific meaning, making it easy to discern at a glance what the intended purpose of the commit is (bug fix, new feature, etc.). Pull (merge) request titles, and origin branches, should use the same acronyms. The following acronyms are in use:

Acronym Meaning
BUG Bug fix
DEP Deprecate a feature
DOC Documentation (either source code, or ADRs, design docs, etc.)
ENH Enhancement - new feature.
MNT Maintenance (refactoring, typos, name changes, code style, linting, etc)
SKL Skeleton. This should be used to outline what will later be an ENH.
TST Related to tests.
UTL Utilities. This can be any new tool or changes to CI/CD, etc.

Class and Object Naming Conventions

Style, Formatting, Linting

This repository uses Black for formatting of Python code. Ruff is used for linting with flake8 rules, and mypy for type checking.

Github actions implement checks for compliance. Formatting changes are auto-committed.

Debugging Code

Temporary debugging code should not be commited to the repository. E.g., extraneous print statements, etc, which are added when fixing a bug. Nonetheless, a selection of permanent debugging options may be included in the code provided they can be disabled when not running in debug mode. For standard operation, this package should be run using the -O flag which disables assert statements and sets the constant __debug__ = False. Without that flag, the package is considered to be running in "debug mode". As such, to include debug related code, please use a construction similar to the following:

if __debug__:
    # We are in debugging mode!
    # Here is my debug code
    ...
else: # optional clause if needed
    # Python was run like: `python -O ...`
    ...

Debug logging code (i.e. logger.debug("my message")) need not be placed inside the above if statement. However, the configuration statement for logging level should be. Ideally this is placed at the top of each module.

Authors and acknowledgment

License

This project's license is available in LICENSE.md.

Project status

Early active development - the public API is still subject to change, but some degree of stability can be expected at this point. The codebase is in active usage in production.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lute_lcls-0.2.0.tar.gz (2.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

lute_lcls-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

lute_lcls-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

lute_lcls-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

lute_lcls-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

lute_lcls-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

lute_lcls-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

lute_lcls-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

Details for the file lute_lcls-0.2.0.tar.gz.

File metadata

  • Download URL: lute_lcls-0.2.0.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lute_lcls-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d6a42760af7ad7aea4250cb3e67c6adf2aff56916422a7686c9b0b75645f0949
MD5 8537374f976938c19b7f891223266218
BLAKE2b-256 ad8f2262d782022a664ef8ff7b2bba02ef8dc0376b3c89c671d4cd561c89447d

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0.tar.gz:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 49b338680914b06b18688d68faac0a639a1a98b6ebe6fa6f65b242145fcfe1ad
MD5 8d77c155c710b295829c53bd7785c80c
BLAKE2b-256 46051832689bc837401fd547c1005fb7ad7f305cebdf8a53a15e3b0c3863c66f

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 88cab323cc31d6ca68300d419e036827d31472ac5912c46a44a2b0529eadfbee
MD5 2f59266e4889a25abd0da5455f7a5dc7
BLAKE2b-256 75a500cdb6896e5cdb668322219853b30940a9d48d4cf5ee5fb6c129571f82df

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9b6b646f673efc9a39fa324b7dfb6234904c17f5c4f0631f4220ba9e504f31b2
MD5 b7ad0eb2ad2605238e2dd51de7136916
BLAKE2b-256 ad32b343e8b91ff8a380c35a480a98de06725f1545075059c1fa49095698a9ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0dc1e92f15cad5bcf7850b6a1e0e307d704c7bcea19d1cac93242e88b1d1b1fe
MD5 e29c6368277072c5224c58a4deceda87
BLAKE2b-256 72b51a9009f76c3eeb69b28f3aa01968f8e0bfcec3a2209c1ba491071a6518ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1edfdea461f85f366555b2264817af5ef46792e4ec0665b8f857ca124a63207f
MD5 33d63a95d59d453766396f06c9e90940
BLAKE2b-256 777051fca6e6d1167039e9a5a6232a9334dcb5fa04ca1e044b46b744bfcddf02

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b90471141f0bc3e845338f6e7e88311757d28db1449e3963c190f83a09695eb
MD5 78307e8236ac01c680e703672d7b7376
BLAKE2b-256 9e0e0e31fe2bb1c5d68929f3aa38ebc69ab867d9d2ad698a80a13ce185d2e90c

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 70524011f6f429da6434e993e50a291f36c066a36da68ace1a79fcc47c6fd912
MD5 e261dc0ec6a86d0ace60d2dbca8de052
BLAKE2b-256 a9875352d430f73acb57e8b9f0c77250bce96933151a1e9fc318174659703e3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 48ddf8c8f011c3db66fe044f260a602e5c227fd6e13fa19b7ddfd3a852bf999e
MD5 c28ee2cbe8238d8ac40b45c2c863b162
BLAKE2b-256 452a1a3c5955c49dd3e8f21bf146d5557537c0a19a011c827ec975839c4a77be

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 bb130c19bf232a20ce6b249dc5163b758f681497080c39667881fb52f805dc5d
MD5 0f0d3cd1060b3b54a5627ed5b7a6f8ef
BLAKE2b-256 2f7ac202f843b4fbe37938bf071f5325045749ac3dbb103d8b6f19d380a70c1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7239aabbc1f966eafb7bbde88f4822602a619a23b3272b171df46bb83cb74598
MD5 fd83b502941efacc98d60804e2752a4f
BLAKE2b-256 7fb8dc94053c04f5c4415e0f837891d592e6dc77201227e6e74f1033337a0d92

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 609eef567c50f4c4ba729c8c19c78c8cd3aee94ad2ab811e4330e9880300c5b6
MD5 add17d28132ab1292420e59db1736bb8
BLAKE2b-256 38bf0d141a109202665f28cf4fc3d3e165f0839fbb6da71f900b04916989bcc8

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lute_lcls-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for lute_lcls-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c83089f96132a793bd24f99a46308e68e566e3b4c6cf27af0cdb0044dd5e5d88
MD5 67e40e1ae0e60118c5959bc3667fbe28
BLAKE2b-256 5f4bab955547ff20b1a86ed58db30a60988e877907f9fa1d05428a1bf1123ac0

See more details on using hashes here.

Provenance

The following attestation bundles were made for lute_lcls-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on slac-lcls/lute

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page