# packages

pkgId: 73c62b1f81bf4d46bd7a9feb37c92b89019cb3d6a411942e7b2edaffe9c3d24a
name: python-launch-cli-help
arch: noarch
version: 0.14.1
epoch: 0
release: 1
summary: Development documents and examples for launch-cli
url: https://github.com/launchbynttdata/launch-cli
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-launch-cli-0.14.1-1.src.rpm
location_href: Packages/python-launch-cli-help-0.14.1-1.noarch.rpm
checksum_type: sha256
description:
  Simple CLI utility for common Launch tasks. This is intended to be built upon as new tasks are discovered.



  - Python 3.11+ and pip
  - A GitHub account



  To use this tool, you will need to create a GitHub Personal Access Token (PAT) if you have not already done so.

  The PAT must be provided to this script through the `GITHUB_TOKEN` environment variable. Alternate credential stores are planned but not yet supported.



  To generate a PAT that includes the necessary rights for `launch-cli`, follow [our instructions here](./docs/generating-a-token.md).

  More information on GitHub PATs can be found [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).



  There are two paths you can take to install, your choice will depend on what you intend to do with `launch-cli`. If you intend to use the tool's built-in commands as part of your normal role as a Launch engineer (this is the most common option), you should perform the **End User Installation** below. If you intend to develop additional features for `launch-cli`, please follow the **Development Installation** below.

  For either case, you will need to have Python 3.11 or greater installed on your system. How you choose to install that is up to you, but the installation steps assume you have an executable called `python3.11` in your path and the `pip` module installed.



  1. Issue the following command to install the latest version:

  ```sh
  python3.11 -m pip install launch-cli
  ```

  2. You can now use the `launch` command family from your CLI. Issue `launch --help` to confirm the launch command is available in your shell.

  In the unlikely event that you need to install a specific version of `launch-cli` you may specify a version found on our [releases page](https://github.com/launchbynttdata/launch-cli/releases):

  ```sh
  python3.11 -m pip install launch-cli==0.1.0
  ```



  1. Clone this repository to your machine and enter the repository's directory.
  2. Create a new virtual environment and activate it:
        windows 11 - `py -m venv .venv` and `.venv\Scripts\activate`
        other OS - `python3.11 -m venv .venv && source .venv/bin/activate`
  3. Issue the command `python3.11 -m pip install -e '.[dev]'` to create an editable installation.
  4. You can now use the `launch` command family from your CLI, and changes made to most code should be available the next time you run the CLI command, but changes to the entrypoint or pyproject.toml may require that you issue the pip install command again to update the generated shortcut.



  Once installed, you can use the `launch` command from your shell. The `launch` command provides integrated help text, which can be viewed by issuing the `--help` flag, like so:

  ```sh
  $ launch --help
  Usage: launch [OPTIONS] COMMAND [ARGS]...

    Launch CLI tooling to help automate common tasks performed by Launch
    engineers and their clients.

  Options:
    -v, --verbose  Increase verbosity of all subcommands
    --help         Show this message and exit.

  Commands:
    github  Command family for GitHub-related tasks.
    ...
  ```

  We started with a group of commands under `github`, but you should expect the list of available commands to grow as the tooling expands to cover more of our use cases. To dig into the commands (or subgroups) available, you may issue the `--help` flag on a subcommand in the same way to explore a group of commands:

  ```sh
  $ launch github --help
  Usage: launch github [OPTIONS] COMMAND [ARGS]...

    Command family for GitHub-related tasks.

  Options:
    --help  Show this message and exit.

  Commands:
    access   Command family for dealing with GitHub access.
    hooks    Command family for dealing with GitHub webhooks.
    version  Command family for dealing with GitHub versioning.
  ```

  One very important thing to keep in mind is that options correspond to the group or command and cannot be issued in arbitrary places in the command. To use the `--verbose` flag to increase the output, you must place it following the `launch` command and before any subcommands, as shown below:

  ```sh
  launch --verbose github access ...
  ```



  The service family of commands represents all the automation needed for the lifecycle management of a service built and used with the Launch platform.

  `launch service create`: command is used to create a new service for the launch platform. This will create a new repository to the standard needed to run on the launch platform. This will be a properties driven only repository.

  Example command use:
  ```sh
  $ launch service create --name my-service --in-file ~/workplace/data/launch_az_inputs.json
  ```

  `launch service update`: command updates a service repository with the new supplied --in-file. This command is used if you have added new environments, pipelines resources, or other aspects outside of service configuration. Updating service configs, such as *.tfvars, should be handled through your normal SCM tool such as `git`. If for example, you want to add a new instance, this would be the correct command.

  Example command use:
  ```sh
  $ launch service update --name my-service --in-file  ~/workplace/data/launch_az_inputs.json --git-message 'adding instance 001'
  ```

  `launch service generate`: command to generate a service from a skeleton repository in you .launch_config file. From this defined skeleton repository based on jinja2 templates, this will dynamically generate a repository with this skeleton rendered with the --name service repository properties. This will create a new directory with the prefix `<service_name>-singleRun`.

  Example command use:
  ```sh
  $ launch service generate --name my-service --service-branch feature/init
  ```

  `launch service cleanup`: command to clean up launch platform generated files. This will remove any directories or files created from the 'launch service generate' command.

  Example command use:
  ```sh
  $ launch service cleanup --name my-service
  ```



  The terragrunt family of commands includes all the automation needed for the lifecycle management of a service deployed with terragrunt from a Launch platform based repository.

  All terragrunt family commands accept the same command arguments:
  ```sh
  launch terragrunt plan --help
  Usage: launch terragrunt plan [OPTIONS]

    Runs terragrunt plan against a git repository and its properties repo.

  Options:
    --organization TEXT        GitHub organization containing your repository.
                               Defaults to the launchbynttdata organization.
    --name TEXT                Name of the service repository to run the
                               terragrunt command against.  [required]
    --git-token TEXT           The git token to use to clone the repositories.
                               This defaults to the GIT_TOKEN environment
                               variable.  [required]
    --commit-sha TEXT          The commit SHA or branch to checkout in the
                               repository.
    --target-environment TEXT  The target environment to run the terragrunt
                               command against. Defaults to sandbox.
    --provider-config TEXT     Provider config is used for any specific config
                               needed for certain providers. For example, AWS
                               needs additional parameters to assume a
                               deployment role. e.x {'provider':'aws','aws':{'ro
                               le_arn':'arn:aws:iam::012345678912:role/myRole'}}
                               [required]
    --skip-git                 If set, it will ignore cloning and checking out
                               the git repository and it's properties.
    --skip-generation          If set, it will ignore generating the terragrunt
                               files.
    --skip-diff                If set, it will ignore checking the diff between
                               the pipeline and service changes.
    --pipeline-resource TEXT   If set, this will un terragrunt against the
                               specified pipeline resource. For example, setting
                               this to 'pipeline' will run terragrunt against
                               pipeline resources, 'webhooks' will run
                               terragrunt against webhooks if this services uses
                               them. This defaults to None, which will tell the
                               command to run the terragrunt command against the
                               service resources
    --path TEXT                Working directory path. Defaults to current
                               working directory.
    --override DICT            This is used to override the default values for
                               various parameters. These are used for various
                               use cases but you shouldn't have to change these.
                               e.x {'infrastructure_dir':'platform/pipeline','en
                               vironment_dir':'platform/service','properties_suf
                               fix':'properties','main_branch':'main','machine':
                               'github.com','login':'nobody','tool_versions_file
                               ':'.tool-versions'}
    --dry-run                  Perform a dry run that reports on what it would
                               do, but does not perform any action.
    --help                     Show this message and exit.
  ```

  Within each of the terragrunt commands, there are a couple of arguments that help expand and customize the way terragrunt runs.

  The first flag '--provider-config' accepts a string based dict. Each cloud provider is slightly different in order to deploy and manage resources through terragrunt. This flag allows to provide customized parameters to successfully deploy the service to that cloud provider. This is a required parameter.

  Aws example:
  ```sh
  '{
    "provider":"aws"
    "aws": {
      "role_arn": string [Required]
    }
  }'
  ```

  Azure Example:
  ```sh
  '{
    "provider":"az"
    "az": {
      "container_name": string [Optional]
      "storage_account_name": string [Optional]
      "resource_group_name": string [Optional]
    }
  }'
  ```

  Another flag '--pipeline-resource' defines a pipeline resource to run terragrunt plane against. If this is not provided, it will default to run terragrunt against the service resources itself. Setting this to 'pipeline' will run terragrunt against resources to manage the pipeline. The value 'webhooks' will deploy webhook resources if needed, etc.

  Example:
  ```sh
  --pipeline-resource 'pipeline'
  ```

  The flag '--override' provides advance functionality to modify the way terragrunt runs. It allows overriding directories, main branch names, netrc, and .tool-version file name. These options are here for unique use cases that the majority of users will not need to modify.

  `launch terragrunt plan`: command to run terragrunt plan actions against a launch platform service.

  Example command use:
  ```sh
  $ launch terragrunt plan --name my-service --commit-sha "feature/init" --target-environment "sandbox" --provider-config '{"provider":"az"}' --skip-git
  ```

  `launch terragrunt apply`: command to run terragrunt plan actions against a launch platform service.

  Example command use:
  ```sh
  $ launch terragrunt plan --name my-service --target-environment "sandbox" --provider-config '{"provider":"az"}'
  ```

  `launch terragrunt destroy`: command to run terragrunt plan actions against a launch platform service.

  Example command use:
  ```sh
  $ launch terragrunt plan --name my-service --target-environment "sandbox" --provider-config '{"provider":"az"}'
  ```


pkgId: cf77eb2641c79365d52b9a218e5adaaae266cbb8c7a13158888382471fa09a39
name: python-lavue-help
arch: noarch
version: 2.94.0
epoch: 0
release: 1
summary: Development documents and examples for lavue
url: https://github.com/lavue-org/lavue
rpm_license: GPLv2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lavue-2.94.0-1.src.rpm
location_href: Packages/python-lavue-help-2.94.0-1.noarch.rpm
checksum_type: sha256
description:
  |github workflow|
  |docs|
  |Pypi Version|
  |Python Versions|
  Authors: Christoph Rosemann <christoph.rosemann at desy.de>, Jan Kotański <jan.kotanski at desy.de>, André Rothkirch <andre.rothkirch at desy.de>


pkgId: 28d6d906c8d593c2e6a6d3f0c43e0e0516096b43942af906d2d94aed6b8d226e
name: python-lazy-github-help
arch: noarch
version: 0.2.8
epoch: 0
release: 1
summary: Development documents and examples for lazy-github
url: https://pypi.org/project/lazy-github/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lazy-github-0.2.8-1.src.rpm
location_href: Packages/python-lazy-github-help-0.2.8-1.noarch.rpm
checksum_type: sha256
description:
  ![PyPI - Version](https://img.shields.io/pypi/v/lazy-github) ![PyPI - Downloads](https://img.shields.io/pypi/dw/lazy-github)

  LazyGithub is a terminal UI client for interacting with [GitHub](https://github.com). It draws heavy inspiration from the
  [lazygit](https://github.com/jesseduffield/lazygit) project and uses [Textual](https://textual.textualize.io/) to drive the terminal UI interactions.

  ![Example screenshot](https://raw.githubusercontent.com/gizmo385/lazy-github/main/images/lazy-github-conversation-ui.svg)



  You can run the [most recently built version](https://pypi.org/project/lazy-github/) by installing it from PyPI. If you have [uv installed](https://github.com/astral-sh/uv), you can do that easily with `uvx lazy-github`.

  When you first start LazyGithub, you will be prompted with a device login code and a link to GitHub
  where you will be able to authenticate the app against your account. This allows the app to act on
  your behalf and is necessary for LazyGithub to function.

  Currently, it supports the following:

  - Listing the repositories associated with your account
  - Listing the issues, pull requests, and actions on your repositories
  - Listing the details, diff, and reviews on any of those pull requests
  - Detailed issue and pull request views, including conversation participation

  If you wish to run it from a local clone of the repository, you can do so by running the `./start.sh` located in the root of the repo.



  LazyGithub supports a number of customization options, all of which are stored in `$HOME/.config/lazy-github/config.json`.
  These can be edited manually via changing the config or by opening the settings management UI within LazyGithub. That UI
  can be accessed via the command pallete (`CMD+p`) and then searching for settings.

  ![Settings screenshot](https://raw.githubusercontent.com/gizmo385/lazy-github/main/images/lazy-github-settings-ui.png)

rpm_license:
  MIT License  Copyright (c) 2024 Christopher Chapline  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: d4bebd7736455ea1522926af02e6c5e36e178ca6b44e2c9f577a34b87ec3d9d4
name: python-lazydock-help
arch: noarch
version: 0.9.0
epoch: 0
release: 1
summary: Development documents and examples for lazydock
url: https://github.com/BHM-Bob/LazyDock
rpm_license: MIT Licence
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lazydock-0.9.0-1.src.rpm
location_href: Packages/python-lazydock-help-0.9.0-1.noarch.rpm
checksum_type: sha256
description:
  <!--
   * @Author: BHM-Bob 2262029386@qq.com
   * @Date: 2022-10-19 22:16:22
   * @LastEditors: BHM-Bob 2262029386@qq.com
   * @LastEditTime: 2024-12-02 22:59:34
   * @Description:
  -->

  <h1 style="text-align:center;">Lazy Dock</h1>

  <p style="text-align:center;">
  <img src="https://static.pepy.tech/badge/lazydock" alt="Downloads" style="display:inline-block; margin-left:auto; margin-right:auto;" />
  <img src="https://img.shields.io/pypi/dm/lazydock" alt="Downloads" style="display:inline-block; margin-left:auto; margin-right:auto;" />
  <img src="https://img.shields.io/github/downloads/BHM-Bob/LazyDock/total?label=GitHub%20all%20releases%20downloads" alt="Downloads" style="display:inline-block; margin-left:auto; margin-right:auto;" />
  </p>

  <p style="text-align:center;">
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://img.shields.io/github/repo-size/BHM-Bob/LazyDock" alt="repo size" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://img.shields.io/github/languages/code-size/BHM-Bob/LazyDock" alt="code size" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://github.com/BHM-Bob/LazyDock/releases"><img src="https://img.shields.io/github/v/release/BHM-Bob/LazyDock?label=GitHub%20Release" alt="GitHub release (latest by date)" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://github.com/BHM-Bob/LazyDock/releases"><img src="https://img.shields.io/github/commit-activity/m/BHM-Bob/LazyDock" alt="GitHub Commit Activity" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a><img src="https://img.shields.io/github/last-commit/BHM-Bob/LazyDock?label=GitHub%20Last%20Commit" alt="GitHub last commit" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  </p>

  <p style="text-align:center;">
  <a href="https://pypi.org/project/lazydock/"><img src="https://img.shields.io/pypi/status/lazydock?label=PyPI%20Status" alt="PyPI Status" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://pypi.org/project/lazydock/"><img src="https://img.shields.io/pypi/v/lazydock?label=PyPI%20Release" alt="PyPI" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://pypi.org/project/lazydock/"><img src="https://img.shields.io/pypi/pyversions/lazydock" alt="python versions" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  </p>

  <p style="text-align:center;">
  <img alt="GitHub language count" src="https://img.shields.io/github/languages/count/BHM-Bob/LazyDock">
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://img.shields.io/readthedocs/ba-py" alt="docs" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://img.shields.io/github/license/BHM-Bob/LazyDock" alt="license" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  </p>

  <p style="text-align:center;">
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://camo.githubusercontent.com/c292429e232884db22e86c2ea2ea7695bc49dc4ae13344003a95879eeb7425d8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f57696e646f77732d3030373844363f7374796c653d666f722d7468652d6261646765266c6f676f3d77696e646f7773266c6f676f436f6c6f723d7768697465" alt="windows" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  <a href="https://github.com/BHM-Bob/LazyDock/"><img src="https://camo.githubusercontent.com/7eefb2ba052806d8a9ce69863c2eeb3b03cd5935ead7bd2e9245ae2e705a1adf/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c696e75782d4643433632343f7374796c653d666f722d7468652d6261646765266c6f676f3d6c696e7578266c6f676f436f6c6f723d626c61636b" alt="linux" style="display:inline-block; margin-left:auto; margin-right:auto;" /></a>
  </p>


  <h2 style="text-align:center;">Get start</h2>


  Now, lazydock only support pypi install:
  ```
  pip install lazydock
  ```


  - [read the docs: lazydock.rtfd.io](https://lazydock.rtfd.io)


pkgId: 285786d6a2409379791f608dcefad0934642e7883dbdb043cca4ddd06e182f67
name: python-lazym-help
arch: noarch
version: 0.18.2
epoch: 0
release: 1
summary: Development documents and examples for lazym
url: https://github.com/spitfire-sidra/lazym
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lazym-0.18.2-1.src.rpm
location_href: Packages/python-lazym-help-0.18.2-1.noarch.rpm
checksum_type: sha256
description:
  lazym is an AI-powered tool that automatically generates meaningful commit messages for your Git repositories.

  *lazym is inspired by [jen-Ya/commitgpt](https://github.com/jen-Ya/commitgpt)*



  - Generates commit messages based on staged changes
  - Without the risk of leaking code snippets to external LLM services
  - Integrates seamlessly with your Git workflow
  - Uses advanced language models for intelligent message generation



  - [Ollama](https://ollama.ai/) with [Llama 3.1:8b](https://ollama.com/library/llama3.1:8b) model
  - Git (version 2.0 or higher)
  - Python 3.7 or above

  Command to pull Llama 3.1:8b model for Ollama:

  ```
  $ ollama run llama3.1:8b
  ```


  To install lazym, follow these steps:

  1. Ensure you have Python 3.7+ and pip installed on your system.
  2. Install lazym using pip:

     ```
     pip install lazym
     ```

  3. After installation, navigate to any Git repository and run the following command to set up the Git hook:

     ```
     lazym install
     ```

     This will install the necessary Git hook to enable automatic commit message generation.



  Once installed and set up, lazym works in two ways:

  1. Automatically when you make a commit:
     Simply stage your changes as usual and run `git commit`. lazym will generate a commit message based on your staged changes.

  2. Manually by running `lazym ci "<hints for LLM>"`:
     This command allows you to generate a commit message with additional context provided to the LLM.

  After generating the commit message, you'll be presented with four options:

  1. Accept and commit: Use the generated message as-is and commit.
  2. Edit message: Modify the generated message before committing.
  3. Regenerate message: Generate a new message using the same diff.
  4. Cancel commit: Abort the commit process.

  This allows you to benefit from the AI-generated suggestions while maintaining full control over your commit messages. If you're not satisfied with the generated message, you can either edit it or request a new one.



  - `lazym install`: Install the prepare-commit-msg hook in the current Git repository.
  - `lazym uninstall`: Uninstall the prepare-commit-msg hook from the current Git repository.
  - `lazym ci "<optional hints>"`: Generate a commit message with optional additional context.
  - `lazym release <type>`: Bump the version number.
    - `main`: Increases the major version (e.g., 1.2.3 -> 2.0.0)
    - `minor`: Increases the minor version (e.g., 1.2.3 -> 1.3.0)
    - `patch`: Increases the patch version (e.g., 1.2.3 -> 1.2.4)



  lazym can be configured using a `config.ini` file located at `~/.config/lazym/config.ini`. The following options are available:



  - `model`: The AI model to use for generating commit messages.
    - Default: `"llama3.1:8b"`
    - Options:
      - Ollama models: Use the model name directly (e.g., `"llama3.1:8b"`, `"codellama:7b"`)
      - Groq models: Prefix with `"groq:"` (e.g., `"groq:mixtral-8x7b-32768"`, `"groq:llama2-70b-4096"`)

  > [!NOTE]
  > To use Groq models, you need to:
  > 1. Sign up at [groq.com](https://groq.com) to get an API key
  > 2. Set the `GROQ_API_KEY` environment variable with your API key

  - `temperature`: Controls the randomness of the AI's responses.
    - Default: `0.8`
    - Range: `0.0` to `1.0`
    - Lower values make responses more focused and deterministic
    - Higher values make responses more creative and varied

  - `message_format`: The format to apply to the generated commit message.
    - Default: `"lowercase"`
    - Options:
      - `"lowercase"`: Converts the first character of the message to lowercase.
      - `"sentence case"`: Capitalizes the first character of each sentence.
      - Any other value will keep the original format as generated by the AI.

  - `prompt`: The prompt template used to generate commit messages.
    - Must include the `{diff}` placeholder where the code changes should be inserted
    - Default: empty (uses built-in prompt)
    - You can customize this to match your team's commit message style

  - `rstrip_period`: Controls whether to remove trailing periods from commit messages.
    - Default: `"true"`
    - Options:
      - `"true"`: Remove trailing periods from commit messages
      - `"false"`: Keep trailing periods if present in the generated message



  - `service`: The service to use for releases.
    - Default: `github`
    - Set to `"github"` to enable GitHub releases

  - `token`: GitHub personal access token for creating releases.
    - Default: empty
    - Required when `service` is set to `"github"`
    - Token must have `repo` scope permissions

  - `prefix_v_for_tag_name`: Whether to prefix version numbers with 'v' in release tags.
    - Default: `true`
    - Options:
      - `true`: Tags will be like `v1.2.3`
      - `false`: Tags will be like `1.2.3`

  Example configuration for GitHub releases:

  ```ini
  [DEFAULT]
  service = github
  token = ghp_your_personal_access_token
  prefix_v_for_tag_name = true
  ```

  > [!NOTE]
  > To use GitHub releases, you need to:
  > 1. Create a personal access token with `repo` scope at [GitHub Settings](https://github.com/settings/tokens)
  > 2. Configure the service and token in your `config.ini`



  You can customize how lazym generates commit messages by providing your own prompt template. There are two ways to do this:

  1. **Using `config.ini`:** Suitable for simple, one-line prompts. Specify the `prompt` option in your `config.ini` file. This method is ideal for straightforward prompts that don't require complex formatting or multiple lines.

     Example:
     ```ini
     [DEFAULT]
     prompt = "Generate a concise commit message for the following changes: {diff}"
     ```

  2. **Using `prompt.txt`:** Suitable for more complex, multi-line prompts. Create a `prompt.txt` file in the `~/.config/lazym/` directory. If this file exists, its contents will override the `prompt` setting in `config.ini`. This method is ideal for detailed prompts that require specific formatting or guidelines.

     Example `prompt.txt`:
     ```
     Generate a conventional commit message for these changes.
     Format: <type>(<scope>): <description>
     Types: feat, fix, docs, style, refactor, test, chore
     Keep the message under 72 chars.

     Changes:
     {diff}
     ```

  If no prompt is specified in either `config.ini` or `prompt.txt`, lazym will use its built-in prompt template that follows general Git best practices.


pkgId: a6130c0245986d88fe7bad285ea094efff7f7f6cc5aa72abfc7cb17cbcf617da
name: python-lazyqml-help
arch: noarch
version: 3.1.1
epoch: 0
release: 1
summary: Development documents and examples for lazyqml
url: https://github.com/QHPC-SP-Research-Lab/LazyQML
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lazyqml-3.1.1-1.src.rpm
location_href: Packages/python-lazyqml-help-3.1.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Pypi](https://img.shields.io/badge/pypi-%23ececec.svg?style=for-the-badge&logo=pypi&logoColor=1f73b7)](https://pypi.python.org/pypi/lazyqml)
  ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white)
  ![NumPy](https://img.shields.io/badge/numpy-%23013243.svg?style=for-the-badge&logo=numpy&logoColor=white)
  ![Pandas](https://img.shields.io/badge/pandas-%23150458.svg?style=for-the-badge&logo=pandas&logoColor=white)
  ![PyTorch](https://img.shields.io/badge/PyTorch-%23EE4C2C.svg?style=for-the-badge&logo=PyTorch&logoColor=white)
  ![scikit-learn](https://img.shields.io/badge/scikit--learn-%23F7931E.svg?style=for-the-badge&logo=scikit-learn&logoColor=white)
  ![nVIDIA](https://img.shields.io/badge/cuda-000000.svg?style=for-the-badge&logo=nVIDIA&logoColor=green)
  ![Linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black)
  LazyQML is a Python library designed to streamline, automate, and accelerate experimentation with Quantum Machine Learning (QML) architectures, right on classical computers.
  With LazyQML, you can:
    - 🛠️ Build, test, and benchmark QML models with minimal effort.
    - ⚡ Compare different QML architectures, hyperparameters seamlessly.
    - 🧠 Gather knowledge about the most suitable architecture for your problem.

  - Rapid Prototyping: Experiment with different QML models using just a few lines of code.
  - Automated Benchmarking: Evaluate performance and trade-offs across architectures effortlessly.
  - Flexible & Modular: From basic quantum circuits to hybrid quantum-classical models—LazyQML has you covered.

  For detailed usage instructions, API reference, and code examples, please refer to the official LazyQML documentation.

  - Python >= 3.10
  > [!CAUTION]
  > This library is only supported by Linux Systems. It doesn't support Windows nor MacOS.

  To install lazyqml, run this command in your terminal:
  ```
  pip install lazyqml
  ```
  This is the preferred method to install lazyqml, as it will always install the most recent stable release.
  If you don't have [pip](https://pip.pypa.io) installed, this [Python installation guide](http://docs.python-guide.org/en/latest/starting/installation/) can guide you through the process.

  To install lazyqml from sources, run this command in your terminal:
  ```
  pip install git+https://github.com/QHPC-SP-Research-Lab/LazyQML
  ```

  ```python
  from sklearn.datasets import load_iris
  from lazyqml.lazyqml import *

  data = load_iris()
  X = data.data
  y = data.target
  classifier = QuantumClassifier(nqubits={4}, classifiers={Model.QNN, Model.QSVM}, epochs=10)

  classifier.fit(X=X, y=y, test_size=0.4)
  ```

  - José Ranilla Pastor - ranilla@uniovi.es
  - Elías Fernández Combarro - efernandezca@uniovi.es
  - Diego García Vega - diegogarciavega@gmail.com
  - Fernando Álvaro Plou Llorente - ploufernando@uniovi.es
  - Alejandro Leal Castaño - lealcalejandro@uniovi.es
  - Group - https://qhpc.uniovi.es

  If you used LazyQML in your work, please cite:
  - García-Vega, D., Plou Llorente, F., Leal Castaño, A., Combarro, E.F., Ranilla, J.: Lazyqml: A python library to benchmark quantum machine learning models. In: 30th European Conference on Parallel and Distributed Processing (2024)

  - Free software: MIT License


pkgId: 1d861c011a54e16c9d92440cd6be7cddcc60dc3cc48c2fe9801c78392fd84c77
name: python-lbg-tools-help
arch: noarch
version: 1.1.0
epoch: 0
release: 1
summary: Development documents and examples for lbg-tools
url: https://pypi.org/project/lbg-tools/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lbg-tools-1.1.0-1.src.rpm
location_href: Packages/python-lbg-tools-help-1.1.0-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/lbg_tools?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/lbg_tools/)
  [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/jfcrenshaw/lbg_tools/smoke-test.yml)](https://github.com/jfcrenshaw/lbg_tools/actions/workflows/smoke-test.yml)
  [![Codecov](https://codecov.io/gh/jfcrenshaw/lbg_tools/branch/main/graph/badge.svg)](https://codecov.io/gh/jfcrenshaw/lbg_tools)

  Tools for forecasting Lyman-break Galaxies.



  For regular installation, use PyPI: `pip install lbg_tools`

  For dev installation, create a python environment, activate it, then run `bash .setup_dev.sh`.



  [![Template](https://img.shields.io/badge/Template-LINCC%20Frameworks%20Python%20Project%20Template-brightgreen)](https://lincc-ppt.readthedocs.io/en/latest/)

  This project was automatically generated using the LINCC-Frameworks
  [python-project-template](https://github.com/lincc-frameworks/python-project-template).

rpm_license:
  MIT License  Copyright (c) 2024 John Franklin Crenshaw  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: 2c64dcaab09cfa400d92126e0c568783f9ac32014fd481e26e47728693aeb9c1
name: python-lbm-caiman-python-help
arch: noarch
version: 1.0.11
epoch: 0
release: 1
summary: Development documents and examples for lbm-caiman-python
url: https://github.com/millerbrainobservatory/LBM-CaImAn-Python
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lbm-caiman-python-1.0.11-1.src.rpm
location_href: Packages/python-lbm-caiman-python-help-1.0.11-1.noarch.rpm
checksum_type: sha256
description:
  Miniforge is the supported `conda` distribution. Anaconda and Miniconda require extra steps and is not covered in this guide.
  Note: Sometimes conda or mamba will get stuck at a step, such as creating an environment or installing a package.
  Pressing Enter on your keyboard can sometimes help it continue when it pauses.
  1. Install `mamba` into your *base* environment:
  ``` bash
  conda activate base
  conda install -c conda-forge mamba
  ```
  2. Create a new environment and install [mesmerize-core](https://github.com/nel-lab/mesmerize-core/tree/master)
  - Here, we use the `-n` flag to name the environment `lbm` , but you can name it whatever you'd like.
  - This step will install Python, mesmerize-core, CaImAn, and all required dependencies for those packages.
  ``` bash
  conda create -n lbm -c conda-forge mesmerize-core
  ```
  If you already have `CaImAn` installed:
  ``` bash
  conda install -n name-of-env-with-caiman mesmerize-core
  ```
  Activate the environment and install `caimanmanager`:
  - if you used a name other than `lbm`, be sure to match the name you use here.
  ``` bash
  conda activate lbm
  caimanmanager install
  ```
  3. Install [LBM-CaImAn-Python](https://pypi.org/project/lbm-caiman-python/) from pip:
  ``` bash
  pip install lbm_caiman_python
  ```
  4. Install [scanreader](https://github.com/atlab/scanreader):
  ``` bash
  pip install git+https://github.com/atlab/scanreader.git
  ```
  5. (Optional) Install `mesmerize-viz`:
  Several notebooks make use of [mesmerize-viz](https://github.com/kushalkolar/mesmerize-viz) for visualizing registration/segmentation results.
  ``` bash
  pip install mesmerize-viz
  ```
  https://www.youtube.com/watch?v=GWvaEeqA1hw

  To get the newest version of this package:
  ``` bash
  git clone https://github.com/MillerBrainObservatory/LBM-CaImAn-Python.git
  cd LBM-CaImAn-Python
  pip install ".[docs]"
  ```


  if conda is behaving slow, clean the conda installation and update `conda-forge`:
  ``` bash
  conda clean -a
  conda update -c conda-forge --all
  ```
  Don't forget to press enter a few times if conda is taking a long time.

  The recommended conda installer is [miniforge](https://github.com/conda-forge/miniforge).
  This is a community-driven `conda`/`mamba` installer with pre-configured packages specific to [conda-forge](https://conda-forge.org/).
  This helps avoid `conda-channel` conflicts and avoids any issues with the Anaconda TOS.
  You can install the installer from a unix command line:
  ``` bash
  curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
  bash Miniforge3-$(uname)-$(uname -m).sh
  ```
  Or download the installer for your operating system [here](https://github.com/conda-forge/miniforge/releases).

  If you are attempting to use fastplotlib and receive errors about graphics drivers, see the [fastplotlib driver documentation](https://github.com/fastplotlib/fastplotlib?tab=readme-ov-file#gpu-drivers-and-requirements).


pkgId: 231b23cbead536766db130ccf1d91f1008187b50cb35f01f8b925389bda25cd7
name: python-lbt-dragonfly-help
arch: noarch
version: 0.11.549
epoch: 0
release: 1
summary: Development documents and examples for lbt-dragonfly
url: https://github.com/ladybug-tools/lbt-dragonfly
rpm_license: AGPL-3.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lbt-dragonfly-0.11.549-1.src.rpm
location_href: Packages/python-lbt-dragonfly-help-0.11.549-1.noarch.rpm
checksum_type: sha256
description:
  ![Dragonfly](http://www.ladybug.tools/assets/img/dragonfly.png)

  [![Build Status](https://github.com/ladybug-tools/lbt-dragonfly/actions/workflows/ci.yaml/badge.svg)](https://github.com/ladybug-tools/lbt-dragonfly/actions)

  [![Python 3.10](https://img.shields.io/badge/python-3.10-purple.svg)](https://www.python.org/downloads/release/python-31013/) [![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/) [![Python 2.7](https://img.shields.io/badge/python-2.7-green.svg)](https://www.python.org/downloads/release/python-270/) [![IronPython](https://img.shields.io/badge/ironpython-2.7-red.svg)](https://github.com/IronLanguages/ironpython2/releases/tag/ipy-2.7.8/)



  Collection of all Dragonfly core Python libraries.

  Note that this repository and corresponding Python package does not contain any source
  code on its own and it simply exists to provide a shortcut for installing all of
  the dragonfly core libraries and extensions together.



  Running `pip install lbt-dragonfly` will result in the installation of the following
  dragonfly Python packages:

  * [dragonfly-energy](https://github.com/ladybug-tools/dragonfly-energy)
  * [dragonfly-radiance](https://github.com/ladybug-tools/dragonfly-radiance)
  * [dragonfly-uwg](https://github.com/ladybug-tools/dragonfly-uwg)
  * [dragonfly-display](https://github.com/ladybug-tools/dragonfly-display)



  Since both dragonfly extensions use the dragonfly core libraries, the following
  dependencies are also included:

  * [dragonfly-core](https://github.com/ladybug-tools/dragonfly-core)
  * [dragonfly-schema](https://github.com/ladybug-tools/dragonfly-schema)



  Since dragonfly uses ladybug and honeybee, the following dependencies are also included:

  * [lbt-ladybug](https://github.com/ladybug-tools/lbt-ladybug)
  * [lbt-honeybee](https://github.com/ladybug-tools/lbt-honeybee)


pkgId: e6b4077f5f0661e6be3c93c4660f4da99ac42359d41ec8a7fa740f29ac84bb10
name: python-lbt-honeybee-help
arch: noarch
version: 0.8.496
epoch: 0
release: 1
summary: Development documents and examples for lbt-honeybee
url: https://github.com/ladybug-tools/lbt-honeybee
rpm_license: AGPL-3.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lbt-honeybee-0.8.496-1.src.rpm
location_href: Packages/python-lbt-honeybee-help-0.8.496-1.noarch.rpm
checksum_type: sha256
description:
  ![Honeybee](http://www.ladybug.tools/assets/img/honeybee.png)

  [![Build Status](https://github.com/ladybug-tools/lbt-honeybee/actions/workflows/ci.yaml/badge.svg)](https://github.com/ladybug-tools/lbt-honeybee/actions)

  [![Python 3.10](https://img.shields.io/badge/python-3.10-orange.svg)](https://www.python.org/downloads/release/python-3100/) [![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/) [![IronPython](https://img.shields.io/badge/ironpython-2.7-red.svg)](https://github.com/IronLanguages/ironpython2/releases/tag/ipy-2.7.8/)



  A collection of Honeybee core Python libraries and Honeybee extensions.

  Note that this Python package and corresponding repository does not contain any source
  code and simply exists to provide a shortcut for installing all of the honeybee
  extension packages together.



  ```console
  pip install lbt-honeybee -U
  ```



  Running `pip install lbt-honeybee -U` will result in the installation of the following
  honeybee Python packages:

  * [honeybee-display](https://github.com/ladybug-tools/honeybee-display)
  * [honeybee-radiance-postprocess](https://github.com/ladybug-tools/honeybee-radiance-postprocess)
  * [honeybee-radiance](https://github.com/ladybug-tools/honeybee-radiance)
  * [honeybee-radiance-folder](https://github.com/ladybug-tools/honeybee-radiance-folder)
  * [honeybee-radiance-command](https://github.com/ladybug-tools/honeybee-radiance-command)
  * [honeybee-energy](https://github.com/ladybug-tools/honeybee-energy)
  * [honeybee-energy-standards](https://github.com/ladybug-tools/honeybee-energy-standards)



  Since the honeybee extensions use the honeybee-core libraries, the following
  dependencies are also included:

  * [honeybee-core](https://github.com/ladybug-tools/honeybee-core)
  * [honeybee-schema](https://github.com/ladybug-tools/honeybee-schema)



  Since honeybee uses ladybug, the following are also included (installed through [lbt-ladybug](https://github.com/ladybug-tools/lbt-ladybug)):

  * [ladybug-geometry](https://github.com/ladybug-tools/ladybug-geometry)
  * [ladybug-core](https://github.com/ladybug-tools/ladybug)
  * [ladybug-comfort](https://github.com/ladybug-tools/ladybug-comfort)
  * [ladybug-display](https://github.com/ladybug-tools/ladybug-display)


pkgId: 766a71bc8860fec1f4ba712b176b1b5cb9bdf875de7d3276899dfd102c218395
name: python-lbt-ladybug-help
arch: noarch
version: 0.27.123
epoch: 0
release: 1
summary: Development documents and examples for lbt-ladybug
url: https://github.com/ladybug-tools/lbt-ladybug
rpm_license: AGPL-3.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lbt-ladybug-0.27.123-1.src.rpm
location_href: Packages/python-lbt-ladybug-help-0.27.123-1.noarch.rpm
checksum_type: sha256
description:
  ![Ladybug](http://www.ladybug.tools/assets/img/ladybug.png)

  [![Build Status](https://github.com/ladybug-tools/lbt-ladybug/workflows/CI/badge.svg)](https://github.com/ladybug-tools/lbt-ladybug/actions)

  [![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/) [![Python 2.7](https://img.shields.io/badge/python-2.7-green.svg)](https://www.python.org/downloads/release/python-270/) [![IronPython](https://img.shields.io/badge/ironpython-2.7-red.svg)](https://github.com/IronLanguages/ironpython2/releases/tag/ipy-2.7.8/)



  Collection of all Ladybug core Python libraries.

  Note that this repository and corresponding Python package does not contain any
  code and it simply exists to provide a shortcut for installing all of the ladybug
  core libraries together.



  Running `pip install lbt-ladybug -U` will result in the installation of the
  following Python packages:

  * [ladybug-geometry](https://github.com/ladybug-tools/ladybug-geometry)
  * [ladybug-core](https://github.com/ladybug-tools/ladybug)
  * [ladybug-comfort](https://github.com/ladybug-tools/ladybug-comfort)
  * [ladybug-radiance](https://github.com/ladybug-tools/ladybug-radiance)
  * [ladybug-display](https://github.com/ladybug-tools/ladybug-display)


pkgId: 3674f75e9b9b59ca383ee608169e96661296a5175ff321f07ba4b7db2f8be115
name: python-ldp-help
arch: noarch
version: 0.16.0
epoch: 0
release: 1
summary: Development documents and examples for ldp
url: https://pypi.org/project/ldp/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ldp-0.16.0-1.src.rpm
location_href: Packages/python-ldp-help-0.16.0-1.noarch.rpm
checksum_type: sha256
description:
  Agent framework for constructing language model agents and training on constructive tasks.

  This repo models agent-environment interactions using a
  [Partially Observable Markov Decision Process][pomdp] (POMDP).
  Inspired by POMDP, this repo's name `ldp` stands for Language Decision Processes.

  [pomdp]: https://en.wikipedia.org/wiki/Partially_observable_Markov_decision_process



  To install `ldp`:

  ```bash
  pip install -e .
  ```

  If you plan to export Graphviz visualizations,
  make sure you also install the `graphviz` library into your OS via:

  - Linux: `apt install graphviz`
  - macOS: `brew install graphviz`



  An agent should have two functions:

  ```py
  agent_state = await agent.init_state(tools=tools)
  new_action, new_agent_state, value = await agent.get_asv(
      agent_state, obs
  )
  ```

  An agent should have a function `get_asv(agent_state, obs)`
  that chooses an action (`a`) from the observation messages,
  and returns the next agent state (`s`) and a value estimate (`v`).
  The first argument, `agent_state`, is a state specific for the agent
  that can be used for training from episodes.
  You can make it `None` if you aren't using it.
  It could contain things like agent memory.

  The `obs` are not the complete list of observations, but rather the last list from `env.step`.
  The agent should keep track of observations via its state if it would like to keep them.

  The value can be `0`,
  it is the agent's estimate of the future rewards given its state and observations.
  This is used for training.



  The `Agent` (as well as classes in `agent.ops`)
  are [generics](https://en.wikipedia.org/wiki/Generic_programming),
  which means:

  - `Agent` is designed to support arbitrary types
  - Subclasses can exactly specify state types, making the code more readable

  If you are new to Python generics (`typing.Generic`),
  please read about them in [Python typing](https://docs.python.org/3/library/typing.html#generics).

  Below is how to specify an agent with a custom state type.

  ```py
  from dataclasses import dataclass, field
  from datetime import datetime

  from ldp.agents import Agent


  @dataclass
  class MyComplexState:
      vector: list[float]
      timestamp: datetime = field(default_factory=datetime.now)


  class MyAgent(Agent[MyComplexState]):
      """Some agent who is now type checked to match the custom state."""
  ```



  ```py
  from ldp.agent import SimpleAgent
  from aviary.env import DummyEnv

  env = DummyEnv()
  agent = SimpleAgent()

  obs, tools = await env.reset()
  agent_state = await agent.init_state(tools=tools)

  done = False
  while not done:
      action, agent_state, _ = await agent.get_asv(agent_state, obs)
      obs, reward, done, truncated = await env.step(action.value)
  ```

rpm_license:
  Apache License Version 2.0, January 2004 http://www.apache.org/licenses/  TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION  1. Definitions.  "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.  "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.  "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.  "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.  "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.  "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.  "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).  "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.  "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."  "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.  2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.  3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.  4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:  (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and  (b) You must cause any modified files to carry prominent notices stating that You changed the files; and  (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and  (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.  You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.  5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.  6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.  7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.  8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.  9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.  END OF TERMS AND CONDITIONS  APPENDIX: How to apply the Apache License to your work.  To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!)  The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.  Copyright 2024 FutureHouse  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.


pkgId: 2032cc4287fa698761b5f05de0c1fae7f2b4888ee655e9de7cb0e0bfc0dc04be
name: python-leafmap-help
arch: noarch
version: 0.42.6
epoch: 0
release: 1
summary: Development documents and examples for leafmap
url: https://github.com/opengeos/leafmap
rpm_license: MIT license
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leafmap-0.42.6-1.src.rpm
location_href: Packages/python-leafmap-help-0.42.6-1.noarch.rpm
checksum_type: sha256
description:
  [![image](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/opengeos/leafmap/blob/master/examples/notebooks/00_key_features.ipynb)
  [![image](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/opengeos/leafmap/blob/master)
  [![image](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/opengeos/leafmap/HEAD)
  [![image](https://img.shields.io/pypi/v/leafmap.svg)](https://pypi.python.org/pypi/leafmap)
  [![image](https://static.pepy.tech/badge/leafmap)](https://pepy.tech/project/leafmap)
  [![Conda Recipe](https://img.shields.io/badge/recipe-leafmap-green.svg)](https://github.com/conda-forge/leafmap-feedstock)
  [![image](https://img.shields.io/conda/vn/conda-forge/leafmap.svg)](https://anaconda.org/conda-forge/leafmap)
  [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/leafmap.svg)](https://anaconda.org/conda-forge/leafmap)
  [![image](https://github.com/opengeos/leafmap/workflows/docs/badge.svg)](https://leafmap.org)
  [![image](https://github.com/opengeos/leafmap/workflows/Linux%20build/badge.svg)](https://github.com/opengeos/leafmap/actions)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/opengeos/leafmap/master.svg)](https://results.pre-commit.ci/latest/github/opengeos/leafmap/master)
  [![image](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
  [![image](https://img.shields.io/badge/YouTube-Channel-red)](https://youtube.com/@giswqs)
  [![status](https://joss.theoj.org/papers/10.21105/joss.03414/status.svg)](https://doi.org/10.21105/joss.03414)

  [![logo](https://raw.githubusercontent.com/opengeos/leafmap/master/docs/assets/logo_rect.png)](https://github.com/opengeos/leafmap/blob/master/docs/assets/logo.png)

  **A Python package for geospatial analysis and interactive mapping in a Jupyter environment.**

  -   GitHub repo: <https://github.com/opengeos/leafmap>
  -   Documentation: <https://leafmap.org>
  -   PyPI: <https://pypi.org/project/leafmap>
  -   Conda-forge: <https://anaconda.org/conda-forge/leafmap>
  -   Leafmap tutorials on YouTube: <https://youtube.com/@giswqs>
  -   Free software: [MIT license](https://opensource.org/licenses/MIT)

  Join our Discord server 👇

  [![](https://dcbadge.limes.pink/api/server/https://discord.gg/UgZecTUq5P)](https://discord.gg/UgZecTUq5P)



  **Leafmap** is a Python package for interactive mapping and geospatial analysis with minimal coding in a Jupyter environment. It is a spin-off project of the [geemap](https://geemap.org) Python package, which was designed specifically to work with [Google Earth Engine](https://earthengine.google.com) (GEE). However, not everyone in the geospatial community has access to the GEE cloud computing platform. Leafmap is designed to fill this gap for non-GEE users. It is a free and open-source Python package that enables users to analyze and visualize geospatial data with minimal coding in a Jupyter environment, such as Google Colab, Jupyter Notebook, JupyterLab, and [marimo](https://github.com/marimo-team/marimo). Leafmap is built upon several open-source packages, such as [folium](https://github.com/python-visualization/folium) and [ipyleaflet](https://github.com/jupyter-widgets/ipyleaflet) (for creating interactive maps), [WhiteboxTools](https://github.com/jblindsay/whitebox-tools) and [whiteboxgui](https://github.com/opengeos/whiteboxgui) (for analyzing geospatial data), and [ipywidgets](https://github.com/jupyter-widgets/ipywidgets) (for designing interactive graphical user interface [GUI]). Leafmap has a toolset with various interactive tools that allow users to load vector and raster data onto the map without coding. In addition, users can use the powerful analytical backend (i.e., WhiteboxTools) to perform geospatial analysis directly within the leafmap user interface without writing a single line of code. The WhiteboxTools library currently contains **500+** tools for advanced geospatial analysis, such as [GIS Analysis](https://jblindsay.github.io/wbt_book/available_tools/gis_analysis.html), [Geomorphometric Analysis](https://jblindsay.github.io/wbt_book/available_tools/geomorphometric_analysis.html), [Hydrological Analysis](https://jblindsay.github.io/wbt_book/available_tools/hydrological_analysis.html), [LiDAR Data Analysis](https://jblindsay.github.io/wbt_book/available_tools/lidar_tools.html), [Mathematical and Statistical Analysis](https://jblindsay.github.io/wbt_book/available_tools/mathand_stats_tools.html), and [Stream Network Analysis](https://jblindsay.github.io/wbt_book/available_tools/stream_network_analysis.html).



  This project is supported by Amazon Web Services ([AWS](https://aws.amazon.com)).



  There is a plethora of Python packages for geospatial analysis, such as [geopandas](https://geopandas.org) for vector data analysis and [xarray](https://docs.xarray.dev) for raster data analysis. As listed at [pyviz.org](https://pyviz.org), there are also many options for plotting data on a map in Python, ranging from libraries focused specifically on maps like [ipyleaflet](https://ipyleaflet.readthedocs.io) and [folium](https://python-visualization.github.io/folium) to general-purpose plotting tools that also support geospatial data types, such as [hvPlot](https://hvplot.pyviz.org), [bokeh](http://bokeh.org), and [plotly](https://plotly.com/python). While these tools provide powerful capabilities, displaying geospatial data from different file formats on an interactive map and performing basic analyses can be challenging, especially for users with limited coding skills. Furthermore, many tools lack bi-directional communication between the frontend (browser) and the backend (Python), limiting their interactivity and usability for exploring map data.

  Leafmap addresses these challenges by leveraging the bidirectional communication provided by ipyleaflet, enabling users to load and visualize geospatial datasets with just one line of code. Leafmap also provides an interactive graphical user interface (GUI) for loading geospatial datasets without any coding. It is designed for anyone who wants to analyze and visualize geospatial data interactively in a Jupyter environment, making it particularly accessible for novice users with limited programming skills. Advanced programmers can also benefit from leafmap for geospatial data analysis and building interactive web applications.



  Launch the interactive notebook tutorial for the **leafmap** Python package with Google Colab, Binder, or Amazon Sagemaker Studio Lab now:

  [![image](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/opengeos/leafmap/blob/master)
  [![image](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/opengeos/leafmap/HEAD)
  [![Open In Studio Lab](https://studiolab.sagemaker.aws/studiolab.svg)](https://studiolab.sagemaker.aws/import/github/opengeos/leafmap/blob/master/examples/notebooks/00_key_features.ipynb)

  Check out this excellent article on Medium - [Leafmap a new Python Package for Geospatial data science](https://link.medium.com/HRRKDcynYgb)

  To learn more about leafmap, check out the leafmap documentation website - <https://leafmap.org>

  ![](https://i.imgur.com/abd8pTH.gif)



  Leafmap offers a wide range of features and capabilities that empower geospatial data scientists, researchers, and developers to unlock the potential of their data. Some of the key features include:

  -   **Creating an interactive map with just one line of code:** Leafmap makes it easy to create an interactive map by providing a simple API that allows you to load and visualize geospatial datasets with minimal coding.

  -   **Switching between different mapping backends:** Leafmap supports multiple mapping backends, including ipyleaflet, folium, kepler.gl, pydeck, and bokeh. You can switch between these backends to create maps with different visualization styles and capabilities.

  -   **Changing basemaps interactively:** Leafmap allows you to change basemaps interactively, providing a variety of options such as OpenStreetMap, Stamen Terrain, CartoDB Positron, and many more.

  -   **Adding XYZ, WMS, and vector tile services:** You can easily add XYZ, WMS, and vector tile services to your map, allowing you to overlay additional geospatial data from various sources.

  -   **Displaying vector data:** Leafmap supports various vector data formats, including Shapefile, GeoJSON, GeoPackage, and any vector format supported by GeoPandas. You can load and display vector data on the map, enabling you to visualize and analyze spatial features.

  -   **Displaying raster data:** Leafmap allows you to load and display raster data, such as GeoTIFFs, on the map. This feature is useful for visualizing satellite imagery, digital elevation models, and other gridded datasets.

  -   **Creating custom legends and colorbars:** Leafmap provides tools for customizing legends and colorbars on the map, allowing you to represent data values with different colors and corresponding labels.

  -   **Creating split-panel maps and linked maps:** With Leafmap, you can create split-panel maps to compare different datasets side by side. You can also create linked maps that synchronize interactions between multiple maps, providing a coordinated view of different spatial data.

  -   **Downloading and visualizing OpenStreetMap data:** Leafmap allows you to download and visualize OpenStreetMap data, providing access to detailed street maps, buildings, and other points of interest.

  -   **Creating and editing vector data interactively:** Leafmap includes tools for creating and editing vector data interactively on the map. You can draw points, lines, and polygons, and modify them as needed.

  -   **Searching for geospatial data:** Leafmap provides functionality for searching and accessing geospatial data from sources such as SpatialTemporal Asset Catalogs (STAC), Microsoft Planetary Computer, AWS Open Data Registry, and OpenAerialMap.

  -   **Inspecting pixel values interactively:** Leafmap allows you to interactively inspect pixel values in raster datasets, helping you analyze and understand the data at a more granular level.

  -   **Creating choropleth maps and heat maps:** Leafmap supports the creation of choropleth maps, where colors represent different data values for specific geographic areas. You can also create heat maps to visualize data density.

  -   **Displaying data from a PostGIS database:** Leafmap provides tools for connecting to a PostGIS database and displaying spatial data stored in the database on the map.

  -   **Creating time series animations:** Leafmap enables the creation of time series animations from both vector and raster data, allowing you to visualize temporal changes in your geospatial datasets.

  -   **Analyzing geospatial data with whitebox:** Leafmap integrates with WhiteboxTools and whiteboxgui, providing a suite of geospatial analyses, such as hydrological analysis, terrain analysis, and LiDAR processing.

  -   **Segmenting and classifying remote sensing imagery:** Leafmap integrates the segment-geospatial package, which provides tools for segmenting and classifying remote sensing imagery using deep learning algorithms.

  -   **Building interactive web apps:** Leafmap supports the development of interactive web applications using frameworks like Voila, Streamlit, and Solara. This allows you to share your geospatial analyses and visualizations with others in a user-friendly web interface.

  These features and capabilities make leafmap a powerful tool for geospatial data exploration, analysis, and visualization. Whether you are a beginner or an experienced geospatial data scientist, leafmap provides an accessible and efficient way to work with geospatial data in Python.



  If you find **leafmap** useful in your research, please consider citing the following paper to support my work. Thank you for your support.

  -   Wu, Q. (2021). Leafmap: A Python package for interactive mapping and geospatial analysis with minimal coding in a Jupyter environment. _Journal of Open Source Software_, 6(63), 3414. <https://doi.org/10.21105/joss.03414>



  ![](https://assets.gishub.org/images/leafmap_demo.gif)



  I have created a [YouTube Channel](https://youtube.com/@giswqs) for sharing geospatial tutorials. You can subscribe to my channel for regular updates. Check out the following videos for 3D mapping with MapLibre and Leafmap.

  [![MapLibre tutorials](https://assets.gishub.org/images/maplibre-tutorials.png)](https://bit.ly/maplibre)


pkgId: 7479fc2beebb5b2449d6f77cb4b6d8e7fd8fc100399a27284be13342c3f3e9ec
name: python-league-shop-base-help
arch: noarch
version: 1.0.79
epoch: 0
release: 1
summary: Development documents and examples for league-shop-base
url: https://github.com/sandbox-pokhara/league-shop-base
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-league-shop-base-1.0.79-1.src.rpm
location_href: Packages/python-league-shop-base-help-1.0.79-1.noarch.rpm
checksum_type: sha256
description:
  Base models and admin for league-shop



  You can install the package via pip:

  ```
  pip install league-shop-base
  ```

  Add `lsb` to your INSTALLED_APPS.

  ```
      INSTALLED_APPS = [
          ...
          'lsb',
      ]
  ```



  ```
  LSB_SETTINGS = {
      'top_sold_skin_values': {
          'func': <dotted_module_string_path>,
          'args': <args>,
          'kwargs': <kwargs>
      }
  }
  For example:

  LSB_SETTINGS = {
      'top_sold_skin_values': {
          'func': 'lsb.utils.skins.get_top_sold_skin_values',
          'args': [0, 150],
          'kwargs': {}
      }
  }

  ```


pkgId: 4ee7f1c11b7e6afedd776056bd2512cafb93ca70e69b1566ab3f7033e5ee9a0e
name: python-lean-help
arch: noarch
version: 1.0.211
epoch: 0
release: 1
summary: Development documents and examples for lean
url: https://lean.io/cli
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lean-1.0.211-1.src.rpm
location_href: Packages/python-lean-help-1.0.211-1.noarch.rpm
checksum_type: sha256
description:
  ![Lean CLI](http://cdn.quantconnect.com.s3.us-east-1.amazonaws.com/i/github/lean-cli-splash.png)



  [![Build Status](https://github.com/QuantConnect/lean-cli/workflows/Build/badge.svg)](https://github.com/QuantConnect/lean-cli/actions?query=workflow%3ABuild)
  [![PyPI Version](https://img.shields.io/pypi/v/lean)](https://pypi.org/project/lean/)
  [![Project Status](https://img.shields.io/pypi/status/lean)](https://pypi.org/project/lean/)

  The Lean CLI is a cross-platform CLI aimed at making it easier to develop with the LEAN engine locally and in the cloud.

  Visit the [documentation website](https://www.lean.io/docs/v2/lean-cli/key-concepts/getting-started) for comprehensive and up-to-date documentation.



  - [Project scaffolding](https://www.lean.io/docs/v2/lean-cli/projects/project-management)
  - [Local autocomplete](https://www.lean.io/docs/v2/lean-cli/projects/autocomplete)
  - [Local data downloading](https://www.lean.io/docs/v2/lean-cli/datasets/downloading-quantconnect-data)
  - [Local backtesting](https://www.lean.io/docs/v2/lean-cli/backtesting/deployment#02-Run-Local-Backtests)
  - [Local debugging](https://www.lean.io/docs/v2/lean-cli/backtesting/debugging)
  - [Local research environment](https://www.lean.io/docs/v2/lean-cli/research)
  - [Local optimization](https://www.lean.io/docs/v2/lean-cli/optimization/deployment#02-Run-Local-Optimizations)
  - [Local live trading](https://www.lean.io/docs/v2/lean-cli/live-trading/quantconnect-paper-trading#02-Deploy-Local-Algorithms)
  - [Local backtest report creation](https://www.lean.io/docs/v2/lean-cli/backtesting/report#02-Generate-a-Report)
  - [Cloud synchronization](https://www.lean.io/docs/v2/lean-cli/projects/cloud-synchronization)
  - [Cloud backtesting](https://www.lean.io/docs/v2/lean-cli/backtesting/deployment#03-Run-Cloud-Backtests)
  - [Cloud optimization](https://www.lean.io/docs/v2/lean-cli/optimization/deployment#03-Run-Cloud-Optimizations)
  - [Cloud live trading](https://www.lean.io/docs/v2/lean-cli/live-trading/quantconnect-paper-trading#03-Deploy-Cloud-Algorithms)



  The CLI can be installed and updated by running `pip install --upgrade lean`.

  Note that many commands in the CLI require Docker to run. See [Get Docker](https://docs.docker.com/get-docker/) for instructions on how to install Docker for your operating system.

  **Note:** Some Linux users may need to install `tkinter` using the following commands:

  ```
  For Python 3

  sudo apt-get install python3-tk

  For Python 2.7

  sudo apt-get install python-tk
  ```
  After installing the CLI, open a terminal in an empty directory and run `lean init`. This command downloads the latest configuration file and sample data from the [QuantConnect/Lean](https://github.com/QuantConnect/Lean) repository. We recommend running all Lean CLI commands in the same directory `lean init` was ran in.



  The Lean CLI supports multiple workflows. The examples below serve as a starting point, you're free to mix local and cloud features in any way you'd like.

  A cloud-focused workflow (local development, cloud execution) with the CLI may look like this:
  1. Open a terminal in the directory you ran `lean init` in.
  2. Run `lean cloud pull` to pull remotely changed files.
  3. Start programming locally and run backtests in the cloud with `lean cloud backtest "Project Name" --open --push` whenever there is something to backtest. The `--open` flag means that the backtest results will be opened in the browser when done, while the `--push` flag means that local changes are pushed to the cloud before running the backtest.
  4. Whenever you want to create a new project, run `lean create-project "Project Name"` and `lean cloud push --project "Project Name"` to create a new project containing some basic code and to push it to the cloud.
  5. When you're finished for the moment, run `lean cloud push` to push all locally changed files to the cloud.

  A locally-focused workflow (local development, local execution) with the CLI may look like this:
  1. Open a terminal in the directory you ran `lean init` in.
  2. Run `lean create-project "Project Name"` to create a new project with some basic code to get you started.
  3. Work on your strategy in `./Project Name`.
  4. Run `lean research "Project Name"` to start a Jupyter Lab session to perform research in.
  5. Run `lean backtest "Project Name"` to run a backtest whenever there's something to test. This runs your strategy in a Docker container containing the same packages as the ones used on QuantConnect.com, but with your own data.



  *Note: the readme only contains the `--help` text of all commands. Visit the [documentation website](https://www.lean.io/docs/v2/lean-cli/key-concepts/getting-started) for more comprehensive documentation.*

  <!-- commands start -->
  - [`lean backtest`](#lean-backtest)
  - [`lean build`](#lean-build)
  - [`lean cloud backtest`](#lean-cloud-backtest)
  - [`lean cloud live`](#lean-cloud-live)
  - [`lean cloud live command`](#lean-cloud-live-command)
  - [`lean cloud live deploy`](#lean-cloud-live-deploy)
  - [`lean cloud live liquidate`](#lean-cloud-live-liquidate)
  - [`lean cloud live stop`](#lean-cloud-live-stop)
  - [`lean cloud object-store delete`](#lean-cloud-object-store-delete)
  - [`lean cloud object-store get`](#lean-cloud-object-store-get)
  - [`lean cloud object-store list`](#lean-cloud-object-store-list)
  - [`lean cloud object-store ls`](#lean-cloud-object-store-ls)
  - [`lean cloud object-store properties`](#lean-cloud-object-store-properties)
  - [`lean cloud object-store set`](#lean-cloud-object-store-set)
  - [`lean cloud optimize`](#lean-cloud-optimize)
  - [`lean cloud pull`](#lean-cloud-pull)
  - [`lean cloud push`](#lean-cloud-push)
  - [`lean cloud status`](#lean-cloud-status)
  - [`lean config get`](#lean-config-get)
  - [`lean config list`](#lean-config-list)
  - [`lean config set`](#lean-config-set)
  - [`lean config unset`](#lean-config-unset)
  - [`lean create-project`](#lean-create-project)
  - [`lean data download`](#lean-data-download)
  - [`lean data generate`](#lean-data-generate)
  - [`lean decrypt`](#lean-decrypt)
  - [`lean delete-project`](#lean-delete-project)
  - [`lean encrypt`](#lean-encrypt)
  - [`lean init`](#lean-init)
  - [`lean library add`](#lean-library-add)
  - [`lean library remove`](#lean-library-remove)
  - [`lean live`](#lean-live)
  - [`lean live add-security`](#lean-live-add-security)
  - [`lean live cancel-order`](#lean-live-cancel-order)
  - [`lean live command`](#lean-live-command)
  - [`lean live deploy`](#lean-live-deploy)
  - [`lean live liquidate`](#lean-live-liquidate)
  - [`lean live stop`](#lean-live-stop)
  - [`lean live submit-order`](#lean-live-submit-order)
  - [`lean live update-order`](#lean-live-update-order)
  - [`lean login`](#lean-login)
  - [`lean logout`](#lean-logout)
  - [`lean logs`](#lean-logs)
  - [`lean object-store delete`](#lean-object-store-delete)
  - [`lean object-store get`](#lean-object-store-get)
  - [`lean object-store list`](#lean-object-store-list)
  - [`lean object-store ls`](#lean-object-store-ls)
  - [`lean object-store properties`](#lean-object-store-properties)
  - [`lean object-store set`](#lean-object-store-set)
  - [`lean optimize`](#lean-optimize)
  - [`lean private-cloud add-compute`](#lean-private-cloud-add-compute)
  - [`lean private-cloud start`](#lean-private-cloud-start)
  - [`lean private-cloud stop`](#lean-private-cloud-stop)
  - [`lean project-create`](#lean-project-create)
  - [`lean project-delete`](#lean-project-delete)
  - [`lean report`](#lean-report)
  - [`lean research`](#lean-research)
  - [`lean whoami`](#lean-whoami)



  Backtest a project locally using Docker.

  ```
  Usage: lean backtest [OPTIONS] PROJECT

    Backtest a project locally using Docker.

    If PROJECT is a directory, the algorithm in the main.py or Main.cs file inside it will be executed.
    If PROJECT is a file, the algorithm in the specified file will be executed.

    Go to the following url to learn how to debug backtests locally using the Lean CLI:
    https://www.lean.io/docs/v2/lean-cli/backtesting/debugging

    By default the official LEAN engine image is used. You can override this using the --image option. Alternatively you
    can set the default engine image for all commands using `lean config set engine-image <image>`.

  Options:
    --output DIRECTORY              Directory to store results in (defaults to PROJECT/backtests/TIMESTAMP)
    -d, --detach                    Run the backtest in a detached Docker container and return immediately
    --debug [pycharm|ptvsd|debugpy|vsdbg|rider|local-platform]
                                    Enable a certain debugging method (see --help for more information)
    --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca]
                                    Update the Lean configuration file to retrieve data from the given historical provider
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --iqfeed-iqconnect TEXT         The path to the IQConnect binary
    --iqfeed-username TEXT          Your IQFeed username
    --iqfeed-password TEXT          Your IQFeed password
    --iqfeed-version TEXT           The product version of your IQFeed developer account
    --iqfeed-host TEXT              The IQFeed host address (Optional).
    --polygon-api-key TEXT          Your Polygon.io API Key
    --factset-auth-config-file FILE
                                    The path to the FactSet authentication configuration file
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --alpha-vantage-api-key TEXT    Your Alpha Vantage Api Key
    --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200]
                                    Your Alpha Vantage Premium API Key plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --thetadata-ws-url TEXT         The ThetaData host address (Optional).
    --thetadata-rest-url TEXT       The ThetaData host address (Optional).
    --thetadata-subscription-plan [Free|Value|Standard|Pro]
                                    Your ThetaData subscription price plan
    --terminal-link-connection-type [DAPI|SAPI]
                                    Terminal Link Connection Type [DAPI, SAPI]
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the TerminalLink server
    --terminal-link-server-port INTEGER
                                    The port of the TerminalLink server
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --download-data                 Update the Lean configuration file to download data from the QuantConnect API, alias
                                    for --data-provider-historical QuantConnect
    --data-purchase-limit INTEGER   The maximum amount of QCC to spend on downloading data during the backtest when using
                                    QuantConnect as historical data provider
    --release                       Compile C# projects in release configuration instead of debug
    --image TEXT                    The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --python-venv TEXT              The path of the python virtual environment to be used
    --update                        Pull the LEAN engine image before running the backtest
    --backtest-name TEXT            Backtest name
    --extra-docker-config TEXT      Extra docker configuration as a JSON string. For more information https://docker-
                                    py.readthedocs.io/en/stable/containers.html
    --no-update                     Use the local LEAN engine image instead of pulling the latest version
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/backtest.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/backtest.py)_



  Build Docker images of your own version of LEAN.

  ```
  Usage: lean build [OPTIONS] [ROOT]

    Build Docker images of your own version of LEAN.

    ROOT must point to a directory containing the LEAN repository:
    https://github.com/QuantConnect/Lean

    When ROOT is not given, the current directory is used as root directory.

    This command performs the following actions:
    1. The lean-cli/foundation:latest image is built from Lean/DockerfileLeanFoundation(ARM).
    2. LEAN is compiled in a Docker container using the lean-cli/foundation:latest image.
    3. The lean-cli/engine:latest image is built from Lean/Dockerfile using lean-cli/foundation:latest as base image.
    4. The lean-cli/research:latest image is built from Lean/DockerfileJupyter using lean-cli/engine:latest as base image.
    5. The default engine image is set to lean-cli/engine:latest.
    6. The default research image is set to lean-cli/research:latest.

    When the foundation Dockerfile is the same as the official foundation Dockerfile, quantconnect/lean:foundation is used
    instead of building a custom foundation image.

  Options:
    --tag TEXT  The tag to apply to custom images (defaults to latest)
    --verbose   Enable debug logging
    --help      Show this message and exit.
  ```

  _See code: [lean/commands/build.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/build.py)_



  Backtest a project in the cloud.

  ```
  Usage: lean cloud backtest [OPTIONS] PROJECT

    Backtest a project in the cloud.

    PROJECT must be the name or id of the project to run a backtest for.

    If the project that has to be backtested has been pulled to the local drive with `lean cloud pull` it is possible to
    use the --push option to push local modifications to the cloud before running the backtest.

  Options:
    --name TEXT  The name of the backtest (a random one is generated if not specified)
    --push       Push local modifications to the cloud before running the backtest
    --open       Automatically open the results in the browser when the backtest is finished
    --verbose    Enable debug logging
    --help       Show this message and exit.
  ```

  _See code: [lean/commands/cloud/backtest.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/backtest.py)_



  Interact with the QuantConnect cloud live deployments.

  ```
  Usage: lean cloud live [OPTIONS] COMMAND [ARGS]...

    Interact with the QuantConnect cloud live deployments.

  Options:
    --help  Show this message and exit.

  Commands:
    command    Send a command to a running cloud live trading project.
    deploy     Start live trading for a project in the cloud.
    liquidate  Stops live trading and liquidates existing positions for a certain project.
    stop       Stops live trading for a certain project without liquidating existing positions.
  ```



  Send a command to a running cloud live trading project.

  ```
  Usage: lean cloud live command [OPTIONS] PROJECT

    Send a command to a running cloud live trading project.

  Options:
    --data TEXT  The command to send, 'str' representation of a 'dict' e.g. "{ \"target\": \"BTCUSD\",
                 \"$type\":\"MyCommand\" }"
    --verbose    Enable debug logging
    --help       Show this message and exit.
  ```

  _See code: [lean/commands/cloud/live/command.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/live/command.py)_



  Start live trading for a project in the cloud.

  ```
  Usage: lean cloud live deploy [OPTIONS] PROJECT

    Start live trading for a project in the cloud.

    PROJECT must be the name or the id of the project to start live trading for.

    By default an interactive wizard is shown letting you configure the deployment. If --brokerage is given the command
    runs in non-interactive mode. In this mode the CLI does not prompt for input or confirmation. In non-interactive mode
    the options specific to the given brokerage are required, as well as --node, --auto-restart, --notify-order-events and
    --notify-insights.

  Options:
    --brokerage [Paper Trading|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|TDAmeritrade|Bybit|TradeStation|Alpaca]
                                    The brokerage to use
    --data-provider-live [QuantConnect|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|TDAmeritrade|Polygon|IEX|CoinApi|Bybit|TradeStation|Alpaca]
                                    The live data provider to use
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --tradier-account-id TEXT       Your Tradier account id
    --tradier-access-token TEXT     Your Tradier access token
    --tradier-environment [live|paper]
                                    Whether the developer sandbox should be used
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --binance-use-testnet [live|paper]
                                    Whether the testnet should be used
    --zerodha-api-key TEXT          Your Kite Connect API key
    --zerodha-access-token TEXT     Your Kite Connect access token
    --zerodha-product-type [mis|cnc|nrml]
                                    MIS if you are targeting intraday products, CNC if you are targeting delivery
                                    products, NRML if you are targeting carry forward products
    --zerodha-trading-segment [equity|commodity]
                                    EQUITY if you are trading equities on NSE or BSE, COMMODITY if you are trading
                                    commodities on MCX
    --zerodha-history-subscription [true|false]
                                    Whether you have a history API subscription for Zerodha
    --samco-client-id TEXT          Your Samco account Client ID
    --samco-client-password TEXT    Your Samco account password
    --samco-year-of-birth TEXT      Your year of birth (YYYY) registered with Samco
    --samco-product-type [mis|cnc|nrml]
                                    MIS if you are targeting intraday products, CNC if you are targeting delivery
                                    products, NRML if you are targeting carry forward products
    --samco-trading-segment [equity|commodity]
                                    EQUITY if you are trading equities on NSE or BSE, COMMODITY if you are trading
                                    commodities on MCX
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the SAPI server
    --terminal-link-server-port INTEGER
                                    The port of the SAPI server
    --terminal-link-emsx-broker TEXT
                                    The EMSX broker to use (Optional).
    --terminal-link-emsx-account TEXT
                                    The EMSX account to use (Optional).
    --terminal-link-emsx-team TEXT  The EMSX team to receive order events from (Optional).
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --tt-user-name TEXT             Your Trading Technologies username
    --tt-session-password TEXT      Your Trading Technologies session password
    --tt-account-name TEXT          Your Trading Technologies account name
    --tt-rest-app-key TEXT          Your Trading Technologies REST app key
    --tt-rest-app-secret TEXT       Your Trading Technologies REST app secret
    --tt-rest-environment TEXT      The REST environment to run in
    --tt-order-routing-sender-comp-id TEXT
                                    The order routing sender comp id to use
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --tdameritrade-api-key TEXT     Your TDAmeritrade API key
    --tdameritrade-access-token TEXT
                                    Your TDAmeritrade OAuth Access Token
    --tdameritrade-account-number TEXT
                                    Your TDAmeritrade account number
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --bybit-vip-level [VIP0|VIP1|VIP2|VIP3|VIP4|VIP5|SupremeVIP|Pro1|Pro2|Pro3|Pro4|Pro5]
                                    Your Bybit VIP Level
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --polygon-api-key TEXT          Your Polygon.io API Key
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --alpaca-api-key TEXT           Your Alpaca Api Key
    --alpaca-api-secret TEXT        Your Alpaca Api Secret
    --node TEXT                     The name or id of the live node to run on
    --auto-restart BOOLEAN          Whether automatic algorithm restarting must be enabled
    --notify-order-events BOOLEAN   Whether notifications must be sent for order events
    --notify-insights BOOLEAN       Whether notifications must be sent for emitted insights
    --notify-emails TEXT            A comma-separated list of 'email:subject' pairs configuring email-notifications
    --notify-webhooks TEXT          A comma-separated list of 'url:HEADER_1=VALUE_1:HEADER_2=VALUE_2:etc' pairs
                                    configuring webhook-notifications
    --notify-sms TEXT               A comma-separated list of phone numbers configuring SMS-notifications
    --notify-telegram TEXT          A comma-separated list of 'user/group Id:token(optional)' pairs configuring telegram-
                                    notifications
    --live-cash-balance TEXT        A comma-separated list of currency:amount pairs of initial cash balance
    --live-holdings TEXT            A comma-separated list of symbol:symbolId:quantity:averagePrice of initial portfolio
                                    holdings
    --push                          Push local modifications to the cloud before starting live trading
    --open                          Automatically open the live results in the browser once the deployment starts
    --show-secrets                  Show secrets as they are input
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/cloud/live/deploy.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/live/deploy.py)_



  Stops live trading and liquidates existing positions for a certain project.

  ```
  Usage: lean cloud live liquidate [OPTIONS] PROJECT

    Stops live trading and liquidates existing positions for a certain project.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/live/liquidate.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/live/liquidate.py)_



  Stops live trading for a certain project without liquidating existing positions.

  ```
  Usage: lean cloud live stop [OPTIONS] PROJECT

    Stops live trading for a certain project without liquidating existing positions.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/live/stop.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/live/stop.py)_



  Delete a value from the organization's cloud object store.

  ```
  Usage: lean cloud object-store delete [OPTIONS] KEY

    Delete a value from the organization's cloud object store.

    :param key: The desired key name to delete.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/delete.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/delete.py)_



  Download an object store value to disk from the organization's cloud object store.

  ```
  Usage: lean cloud object-store get [OPTIONS] [KEY]...

    Download an object store value to disk from the organization's cloud object store.

    :param key: The desired key to fetch, multiple can be provided.

  Options:
    --destination-folder TEXT  The destination folder to download the object store values, if not provided will use to
                               current directory
    --verbose                  Enable debug logging
    --help                     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/get.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/get.py)_



  List all values for the given root key in the organization's cloud object store.

  ```
  Usage: lean cloud object-store list [OPTIONS] [KEY]

    List all values for the given root key in the organization's cloud object store.

    :param key: The desired root key to list.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/list.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/list.py)_



  Alias for 'list'

  ```
  Usage: lean cloud object-store ls [OPTIONS] [KEY]

    List all values for the given root key in the organization's cloud object store.

    :param key: The desired root key to list.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/ls.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/ls.py)_



  Get a value properties from the organization's cloud object store.

  ```
  Usage: lean cloud object-store properties [OPTIONS] KEY

    Get a value properties from the organization's cloud object store.

    :param key: The desired key to fetch the properties for.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/properties.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/properties.py)_



  Sets the data to the given key in the organization's cloud object store.

  ```
  Usage: lean cloud object-store set [OPTIONS] KEY PATH

    Sets the data to the given key in the organization's cloud object store.

    :param key: The key to set the data to. :param path: Path to the file containing the object data.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/object_store/set.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/object_store/set.py)_



  Optimize a project in the cloud.

  ```
  Usage: lean cloud optimize [OPTIONS] PROJECT

    Optimize a project in the cloud.

    PROJECT must be the name or id of the project to optimize.

    An interactive prompt will be shown to configure the optimizer. If --target is given the command runs in non-
    interactive mode. In this mode the CLI does not prompt for input and the following options become required: --target,
    --target-direction, --parameter, --node and --parallel-nodes.

    In non-interactive mode the --parameter option can be provided multiple times to configure multiple parameters:
    - --parameter <name> <min value> <max value> <step size>
    - --parameter my-first-parameter 1 10 0.5 --parameter my-second-parameter 20 30 5

    In non-interactive mode the --constraint option can be provided multiple times to configure multiple constraints:
    - --constraint "<statistic> <operator> <value>"
    - --constraint "Sharpe Ratio >= 0.5" --constraint "Drawdown < 0.25"

    If the project that has to be optimized has been pulled to the local drive with `lean cloud pull` it is possible to
    use the --push option to push local modifications to the cloud before running the optimization.

  Options:
    --target TEXT                   The target statistic of the optimization
    --target-direction [min|max]    Whether the target must be minimized or maximized
    --parameter <TEXT FLOAT FLOAT FLOAT>...
                                    The 'parameter min max step' pairs configuring the parameters to optimize
    --constraint TEXT               The 'statistic operator value' pairs configuring the constraints of the optimization
    --node [O2-8|O4-12|O8-16]       The node type to run the optimization on
    --parallel-nodes INTEGER        The number of nodes that may be run in parallel
    --name TEXT                     The name of the optimization (a random one is generated if not specified)
    --push                          Push local modifications to the cloud before starting the optimization
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/cloud/optimize.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/optimize.py)_



  Pull projects from QuantConnect to the local drive.

  ```
  Usage: lean cloud pull [OPTIONS]

    Pull projects from QuantConnect to the local drive.

    This command overrides the content of local files with the content of their respective counterparts in the cloud.

    This command will not delete local files for which there is no counterpart in the cloud.

  Options:
    --project TEXT   Name or id of the project to pull (all cloud projects if not specified)
    --pull-bootcamp  Pull Boot Camp projects (disabled by default)
    --encrypt        Pull your cloud files and encrypt them before saving on your local drive
    --decrypt        Pull your cloud files and decrypt them before saving on your local drive
    --key FILE       Path to the encryption key to use
    --verbose        Enable debug logging
    --help           Show this message and exit.
  ```

  _See code: [lean/commands/cloud/pull.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/pull.py)_



  Push local projects to QuantConnect.

  ```
  Usage: lean cloud push [OPTIONS]

    Push local projects to QuantConnect.

    This command overrides the content of cloud files with the content of their respective local counterparts.

    This command will delete cloud files which don't have a local counterpart.

  Options:
    --project DIRECTORY  Path to the local project to push (all local projects if not specified)
    --encrypt            Push your local files and encrypt them before saving on the cloud
    --decrypt            Push your local files and decrypt them before saving on the cloud
    --key FILE           Path to the encryption key to use
    --verbose            Enable debug logging
    --help               Show this message and exit.
  ```

  _See code: [lean/commands/cloud/push.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/push.py)_



  Show the live trading status of a project in the cloud.

  ```
  Usage: lean cloud status [OPTIONS] PROJECT

    Show the live trading status of a project in the cloud.

    PROJECT must be the name or the id of the project to show the status for.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/cloud/status.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/cloud/status.py)_



  Get the current value of a configurable option.

  ```
  Usage: lean config get [OPTIONS] KEY

    Get the current value of a configurable option.

    Sensitive options like credentials cannot be retrieved this way for security reasons. Please open ~/.lean/credentials
    if you want to see your currently stored credentials.

    Run `lean config list` to show all available options.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/config/get.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/config/get.py)_



  List the configurable options and their current values.

  ```
  Usage: lean config list [OPTIONS]

    List the configurable options and their current values.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/config/list.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/config/list.py)_



  Set a configurable option.

  ```
  Usage: lean config set [OPTIONS] KEY VALUE

    Set a configurable option.

    Run `lean config list` to show all available options.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/config/set.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/config/set.py)_



  Unset a configurable option.

  ```
  Usage: lean config unset [OPTIONS] KEY

    Unset a configurable option.

    Run `lean config list` to show all available options.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/config/unset.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/config/unset.py)_



  Alias for 'project-create'

  ```
  Usage: lean create-project [OPTIONS] NAME

    Create a new project containing starter code.

    If NAME is a path containing subdirectories those will be created automatically.

    The default language can be set using `lean config set default-language python/csharp`.

  Options:
    -l, --language [python|csharp]  The language of the project to create
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/create_project.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/create_project.py)_



  Purchase and download data directly from QuantConnect or download from Support Data Providers

  ```
  Usage: lean data download [OPTIONS]

    Purchase and download data directly from QuantConnect or download from Support Data Providers

    1. Acquire Data from QuantConnect Datasets: Purchase and seamlessly download data directly from QuantConnect.

    2. Streamlined Access from Support Data Providers:

        - Choose your preferred historical data provider.

        - Initiate hassle-free downloads from our supported providers.

    We have 2 options:

        - interactive (follow instruction in lean-cli)

        - no interactive (write arguments in command line)

    An interactive wizard will show to walk you through the process of selecting data, accepting the CLI API Access and
    Data Agreement and payment. After this wizard the selected data will be downloaded automatically.

    If --dataset is given the command runs in non-interactive mode. In this mode the CLI does not prompt for input or
    confirmation but only halts when the agreement must be accepted. In non-interactive mode all options specific to the
    selected dataset are required.

    See the following url for the data that can be purchased and downloaded with this command:
    https://www.quantconnect.com/datasets

  Options:
    --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca]
                                    The name of the downloader data provider.
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --iqfeed-iqconnect TEXT         The path to the IQConnect binary
    --iqfeed-username TEXT          Your IQFeed username
    --iqfeed-password TEXT          Your IQFeed password
    --iqfeed-version TEXT           The product version of your IQFeed developer account
    --iqfeed-host TEXT              The IQFeed host address (Optional).
    --polygon-api-key TEXT          Your Polygon.io API Key
    --factset-auth-config-file FILE
                                    The path to the FactSet authentication configuration file
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --alpha-vantage-api-key TEXT    Your Alpha Vantage Api Key
    --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200]
                                    Your Alpha Vantage Premium API Key plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --thetadata-ws-url TEXT         The ThetaData host address (Optional).
    --thetadata-rest-url TEXT       The ThetaData host address (Optional).
    --thetadata-subscription-plan [Free|Value|Standard|Pro]
                                    Your ThetaData subscription price plan
    --terminal-link-connection-type [DAPI|SAPI]
                                    Terminal Link Connection Type [DAPI, SAPI]
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the TerminalLink server
    --terminal-link-server-port INTEGER
                                    The port of the TerminalLink server
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --dataset TEXT                  The name of the dataset to download non-interactively
    --overwrite                     Overwrite existing local data
    -y, --yes                       Automatically confirm payment confirmation prompts
    --data-type [Trade|Quote|Bulk|OpenInterest]
                                    Specify the type of historical data
    --resolution [Tick|Second|Minute|Hour|Daily]
                                    Specify the resolution of the historical data
    --security-type [Equity|Index|Forex|Cfd|Future|Crypto|CryptoFuture|Option|IndexOption|Commodity|FutureOption]
                                    Specify the security type of the historical data
    --market TEXT                   Specify the market name for tickers (e.g., 'USA', 'NYMEX', 'Binance') (if not provided
                                    or empty the default market for the requested security type will be used)
    --ticker TEXT                   Specify comma separated list of tickers to use for historical data request.
    --start TEXT                    Specify the start date for the historical data request in the format yyyyMMdd.
    --end TEXT                      Specify the end date for the historical data request in the format yyyyMMdd. (defaults
                                    to today)
    --image TEXT                    The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --update                        Pull the LEAN engine image before running the Downloader Data Provider
    --no-update                     Use the local LEAN engine image instead of pulling the latest version
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/data/download.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/data/download.py)_



  Generate random market data.

  ```
  Usage: lean data generate [OPTIONS]

    Generate random market data.

    This uses the random data generator in LEAN to generate realistic market data using a Brownian motion model.
    This generator supports the following security types, tick types and resolutions:
    | Security type | Generated tick types | Supported resolutions                |
    | ------------- | -------------------- | ------------------------------------ |
    | Equity        | Trade                | Tick, Second, Minute, Hour and Daily |
    | Forex         | Quote                | Tick, Second, Minute, Hour and Daily |
    | CFD           | Quote                | Tick, Second, Minute, Hour and Daily |
    | Future        | Trade and Quote      | Tick, Second, Minute, Hour and Daily |
    | Crypto        | Trade and Quote      | Tick, Second, Minute, Hour and Daily |
    | Option        | Trade and Quote      | Minute                               |

    The following data densities are available:
    - Dense: at least one data point per resolution step.
    - Sparse: at least one data point per 5 resolution steps.
    - VerySparse: at least one data point per 50 resolution steps.

    Example which generates minute data for 100 equity symbols since 2015-01-01:
    $ lean data generate --start=20150101 --symbol-count=100

    Example which generates daily data for 100 crypto symbols since 2015-01-01:
    $ lean data generate --start=20150101 --symbol-count=100 --security-type=Crypto --resolution=Daily

    By default the official LEAN engine image is used. You can override this using the --image option. Alternatively you
    can set the default engine image for all commands using `lean config set engine-image <image>`.

  Options:
    --start [yyyyMMdd]              Start date for the data to generate in yyyyMMdd format  [required]
    --end [yyyyMMdd]                End date for the data to generate in yyyyMMdd format (defaults to today)
    --symbol-count INTEGER RANGE    The number of symbols to generate data for  [x>=0]
    --tickers TEXT                  Comma separated list of tickers to use for generated data
    --security-type [Equity|Forex|Cfd|Future|Crypto|Option]
                                    The security type to generate data for (defaults to Equity)
    --resolution [Tick|Second|Minute|Hour|Daily]
                                    The resolution of the generated data (defaults to Minute)
    --data-density [Dense|Sparse|VerySparse]
                                    The density of the generated data (defaults to Dense)
    --include-coarse BOOLEAN        Whether coarse universe data should be generated for Equity data (defaults to True)
    --market TEXT                   The market to generate data for (defaults to standard market for the security type)
    --quote-trade-ratio FLOAT       The ratio of generated quotes to generated trades. Values larger than 1 mean more
                                    quotes than trades. Only used for Option, Future and Crypto (defaults to 1)
    --random-seed INTEGER RANGE     The random number generator seed. Defaults to None, which means no seed will be used
                                    [x>=0]
    --ipo-percentage FLOAT          The probability each equity generated will have an IPO event. Note that this is not
                                    the total probability for all symbols generated. Only used for Equity (defaults to
                                    5.0)
    --rename-percentage FLOAT       The probability each equity generated will have a rename event. Note that this is not
                                    the total probability for all symbols generated. Only used for Equity (defaults to
                                    30.0)
    --splits-percentage FLOAT       The probability each equity generated will have a stock split event. Note that this is
                                    not the total probability for all symbols generated. Only used for Equity (defaults to
                                    15.0)
    --dividends-percentage FLOAT    The probability each equity generated will have dividends. Note that this is not the
                                    probability for all symbols genearted. Only used for Equity (defaults to 60.0)
    --dividend-every-quarter-percentage FLOAT
                                    The probability each equity generated will have a dividend event every quarter. Note
                                    that this is not the total probability for all symbols generated. Only used for Equity
                                    (defaults to 30.0)
    --option-price-engine TEXT      The stochastic process, and returns new pricing engine to run calculations for that
                                    option (defaults to BaroneAdesiWhaleyApproximationEngine)
    --volatility-model-resolution [Tick|Second|Minute|Hour|Daily]
                                    The volatility model period span (defaults to Daily)
    --chain-symbol-count INTEGER RANGE
                                    The size of the option chain (defaults to 10)  [x>=0]
    --image TEXT                    The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --update                        Pull the LEAN engine image before running the generator
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/data/generate.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/data/generate.py)_



  Decrypt your local project using the specified decryption key.

  ```
  Usage: lean decrypt [OPTIONS] PROJECT

    Decrypt your local project using the specified decryption key.

  Options:
    --key FILE  Path to the decryption key to use
    --verbose   Enable debug logging
    --help      Show this message and exit.
  ```

  _See code: [lean/commands/decrypt.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/decrypt.py)_



  Alias for 'project-delete'

  ```
  Usage: lean delete-project [OPTIONS] PROJECT

    Delete a project locally and in the cloud if it exists.

    The project is selected by name or cloud id.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/delete_project.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/delete_project.py)_



  Encrypt your local project using the specified encryption key.

  ```
  Usage: lean encrypt [OPTIONS] PROJECT

    Encrypt your local project using the specified encryption key.

  Options:
    --key FILE  Path to the encryption key to use
    --verbose   Enable debug logging
    --help      Show this message and exit.
  ```

  _See code: [lean/commands/encrypt.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/encrypt.py)_



  Scaffold a Lean configuration file and data directory.

  ```
  Usage: lean init [OPTIONS]

    Scaffold a Lean configuration file and data directory.

  Options:
    --organization TEXT             The name or id of the organization the Lean CLI will be scaffolded for
    -l, --language [python|csharp]  The default language to use for new projects
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/init.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/init.py)_



  Add a custom library to a project.

  ```
  Usage: lean library add [OPTIONS] PROJECT NAME

    Add a custom library to a project.

    PROJECT must be the path to the project.

    NAME must be either the name of a NuGet package (for C# projects), a PyPI package (for Python projects), or a path to
    a Lean CLI library.

    If --version is not given, and the library is a NuGet or PyPI package the package, it is pinned to the latest
    compatible version. For C# projects, this is the latest available version. For Python projects, this is the latest
    version compatible with Python 3.8 (which is what the Docker images use). For Lean CLI library projects, this is
    ignored.

    Custom C# libraries are added to your project's .csproj file, which is then restored if dotnet is on your PATH and the
    --no-local flag has not been given.

    Custom Python libraries are added to your project's requirements.txt file and are installed in your local Python
    environment so you get local autocomplete for the library. The last step can be skipped with the --no-local flag.

    C# example usage:
    $ lean library add "My CSharp Project" Microsoft.ML
    $ lean library add "My CSharp Project" Microsoft.ML --version 1.5.5
    $ lean library add "My CSharp Project" "Library/My CSharp Library"

    Python example usage:
    $ lean library add "My Python Project" tensorflow
    $ lean library add "My Python Project" tensorflow --version 2.5.0
    $ lean library add "My Python Project" "Library/My Python Library"

  Options:
    --version TEXT  The version of the library to add (defaults to latest compatible version)
    --no-local      Skip making changes to your local environment
    --verbose       Enable debug logging
    --help          Show this message and exit.
  ```

  _See code: [lean/commands/library/add.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/library/add.py)_



  Remove a custom library from a project.

  ```
  Usage: lean library remove [OPTIONS] PROJECT NAME

    Remove a custom library from a project.

    PROJECT must be the path to the project directory.

    NAME must be either the name of the NuGet package (for C# projects), the PyPI package (for Python projects), or the
    path to the Lean CLI library to remove.

    Custom C# libraries are removed from the project's .csproj file, which is then restored if dotnet is on your PATH and
    the --no-local flag has not been given.

    Custom Python libraries are removed from the project's requirements.txt file.

    C# example usage:
    $ lean library remove "My CSharp Project" Microsoft.ML

    Python example usage:
    $ lean library remove "My Python Project" tensorflow

  Options:
    --no-local  Skip making changes to your local environment
    --verbose   Enable debug logging
    --help      Show this message and exit.
  ```

  _See code: [lean/commands/library/remove.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/library/remove.py)_



  Interact with the local machine.

  ```
  Usage: lean live [OPTIONS] COMMAND [ARGS]...

    Interact with the local machine.

  Options:
    --help  Show this message and exit.

  Commands:
    add-security  Represents a command to add a security to the algorithm.
    cancel-order  Represents a command to cancel a specific order by id.
    command       Send a command to a local running live trading project.
    deploy        Start live trading a project locally using Docker.
    liquidate     Liquidate the given symbol from the latest deployment of the given project.
    stop          Stop an already running local live trading project.
    submit-order  Represents a command to submit an order to the algorithm.
    update-order  Represents a command to update a specific order by id.
  ```



  Represents a command to add a security to the algorithm.

  ```
  Usage: lean live add-security [OPTIONS] PROJECT

    Represents a command to add a security to the algorithm.

  Options:
    --ticker TEXT            The ticker of the symbol to add  [required]
    --market TEXT            The market of the symbol to add  [required]
    --security-type TEXT     The security type of the symbol to add  [required]
    --resolution TEXT        The resolution of the symbol to add
    --fill-data-forward      The fill forward behavior, true to fill forward, false otherwise - defaults to true
    --leverage DECIMAL       The leverage for the security, defaults to 2 for equity, 50 for forex, and 1 for everything
                             else
    --extended-market-hours  The extended market hours flag, true to allow pre/post market data, false for only in market
                             data
    --lean-config FILE       The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                Enable debug logging
    --help                   Show this message and exit.
  ```

  _See code: [lean/commands/live/add_security.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/add_security.py)_



  Represents a command to cancel a specific order by id.

  ```
  Usage: lean live cancel-order [OPTIONS] PROJECT

    Represents a command to cancel a specific order by id.

  Options:
    --order-id INTEGER  The order id to be cancelled  [required]
    --lean-config FILE  The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose           Enable debug logging
    --help              Show this message and exit.
  ```

  _See code: [lean/commands/live/cancel_order.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/cancel_order.py)_



  Send a command to a local running live trading project.

  ```
  Usage: lean live command [OPTIONS] PROJECT

    Send a command to a local running live trading project.

  Options:
    --data TEXT         The command to send, 'str' representation of a 'dict' e.g. "{ \"target\": \"BTCUSD\",
                        \"$type\":\"MyCommand\" }"
    --lean-config FILE  The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose           Enable debug logging
    --help              Show this message and exit.
  ```

  _See code: [lean/commands/live/command.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/command.py)_



  Start live trading a project locally using Docker.

  ```
  Usage: lean live deploy [OPTIONS] PROJECT

    Start live trading a project locally using Docker.

    If PROJECT is a directory, the algorithm in the main.py or Main.cs file inside it will be executed.
    If PROJECT is a file, the algorithm in the specified file will be executed.

    By default an interactive wizard is shown letting you configure the brokerage and live data provider to use. If
    --environment, --brokerage or --data-provider-live are given the command runs in non-interactive mode. In this mode
    the CLI does not prompt for input.

    If --environment is given it must be the name of a live environment in the Lean configuration.

    If --brokerage and --data-provider-live are given, the options specific to the given brokerage/live data provider must
    also be given. The Lean config is used as fallback when a brokerage/live data provider-specific option hasn't been
    passed in. If a required option is not given and cannot be found in the Lean config the command aborts.

    By default the official LEAN engine image is used. You can override this using the --image option. Alternatively you
    can set the default engine image for all commands using `lean config set engine-image <image>`.

  Options:
    --environment TEXT              The environment to use
    --output DIRECTORY              Directory to store results in (defaults to PROJECT/live/TIMESTAMP)
    -d, --detach                    Run the live deployment in a detached Docker container and return immediately
    --brokerage [Paper Trading|Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|TDAmeritrade|Bybit|TradeStation|Alpaca]
                                    The brokerage to use
    --data-provider-live [Interactive Brokers|Tradier|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Zerodha|Samco|Terminal Link|Trading Technologies|Kraken|TDAmeritrade|IQFeed|Polygon|IEX|CoinApi|ThetaData|Custom data only|Bybit|TradeStation|Alpaca]
                                    The live data provider to use
    --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Bybit|TradeStation|Alpaca]
                                    Update the Lean configuration file to retrieve data from the given historical provider
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --tradier-account-id TEXT       Your Tradier account id
    --tradier-access-token TEXT     Your Tradier access token
    --tradier-environment [live|paper]
                                    Whether the developer sandbox should be used
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --binance-use-testnet [live|paper]
                                    Whether the testnet should be used
    --zerodha-api-key TEXT          Your Kite Connect API key
    --zerodha-access-token TEXT     Your Kite Connect access token
    --zerodha-product-type [mis|cnc|nrml]
                                    MIS if you are targeting intraday products, CNC if you are targeting delivery
                                    products, NRML if you are targeting carry forward products
    --zerodha-trading-segment [equity|commodity]
                                    EQUITY if you are trading equities on NSE or BSE, COMMODITY if you are trading
                                    commodities on MCX
    --zerodha-history-subscription [true|false]
                                    Whether you have a history API subscription for Zerodha
    --samco-client-id TEXT          Your Samco account Client ID
    --samco-client-password TEXT    Your Samco account password
    --samco-year-of-birth TEXT      Your year of birth (YYYY) registered with Samco
    --samco-product-type [mis|cnc|nrml]
                                    MIS if you are targeting intraday products, CNC if you are targeting delivery
                                    products, NRML if you are targeting carry forward products
    --samco-trading-segment [equity|commodity]
                                    EQUITY if you are trading equities on NSE or BSE, COMMODITY if you are trading
                                    commodities on MCX
    --terminal-link-connection-type [DAPI|SAPI]
                                    Terminal Link Connection Type [DAPI, SAPI]
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the TerminalLink server
    --terminal-link-server-port INTEGER
                                    The port of the TerminalLink server
    --terminal-link-emsx-broker TEXT
                                    The EMSX broker to use (Optional).
    --terminal-link-emsx-account TEXT
                                    The EMSX account to use (Optional).
    --terminal-link-emsx-team TEXT  The EMSX team to receive order events from (Optional).
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --tt-user-name TEXT             Your Trading Technologies username
    --tt-session-password TEXT      Your Trading Technologies session password
    --tt-account-name TEXT          Your Trading Technologies account name
    --tt-rest-app-key TEXT          Your Trading Technologies REST app key
    --tt-rest-app-secret TEXT       Your Trading Technologies REST app secret
    --tt-rest-environment TEXT      The REST environment to run in
    --tt-order-routing-sender-comp-id TEXT
                                    The order routing sender comp id to use
    --tt-market-data-sender-comp-id TEXT
                                    The market data sender comp id to use
    --tt-market-data-target-comp-id TEXT
                                    The market data target comp id to use
    --tt-market-data-host TEXT      The host of the market data server
    --tt-market-data-port TEXT      The port of the market data server
    --tt-order-routing-target-comp-id TEXT
                                    The order routing target comp id to use
    --tt-order-routing-host TEXT    The host of the order routing server
    --tt-order-routing-port TEXT    The port of the order routing server
    --tt-log-fix-messages BOOLEAN   Whether FIX messages should be logged (Optional).
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --tdameritrade-api-key TEXT     Your TDAmeritrade API key
    --tdameritrade-access-token TEXT
                                    Your TDAmeritrade OAuth Access Token
    --tdameritrade-account-number TEXT
                                    Your TDAmeritrade account number
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --bybit-vip-level [VIP0|VIP1|VIP2|VIP3|VIP4|VIP5|SupremeVIP|Pro1|Pro2|Pro3|Pro4|Pro5]
                                    Your Bybit VIP Level
    --bybit-use-testnet [live|paper]
                                    Whether the testnet should be used
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --ib-enable-delayed-streaming-data BOOLEAN
                                    Whether delayed data may be used when your algorithm subscribes to a security you
                                    don't have a market data subscription for (Optional).
    --iqfeed-iqconnect TEXT         The path to the IQConnect binary
    --iqfeed-username TEXT          Your IQFeed username
    --iqfeed-password TEXT          Your IQFeed password
    --iqfeed-version TEXT           The product version of your IQFeed developer account
    --iqfeed-host TEXT              The IQFeed host address (Optional).
    --polygon-api-key TEXT          Your Polygon.io API Key
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --thetadata-ws-url TEXT         The ThetaData host address (Optional).
    --thetadata-rest-url TEXT       The ThetaData host address (Optional).
    --thetadata-subscription-plan [Free|Value|Standard|Pro]
                                    Your ThetaData subscription price plan
    --alpaca-api-key TEXT           Your Alpaca Api Key
    --alpaca-api-secret TEXT        Your Alpaca Api Secret
    --factset-auth-config-file FILE
                                    The path to the FactSet authentication configuration file
    --alpha-vantage-api-key TEXT    Your Alpha Vantage Api Key
    --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200]
                                    Your Alpha Vantage Premium API Key plan
    --release                       Compile C# projects in release configuration instead of debug
    --image TEXT                    The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --python-venv TEXT              The path of the python virtual environment to be used
    --live-cash-balance TEXT        A comma-separated list of currency:amount pairs of initial cash balance
    --live-holdings TEXT            A comma-separated list of symbol:symbolId:quantity:averagePrice of initial portfolio
                                    holdings
    --update                        Pull the LEAN engine image before starting live trading
    --show-secrets                  Show secrets as they are input
    --extra-docker-config TEXT      Extra docker configuration as a JSON string. For more information https://docker-
                                    py.readthedocs.io/en/stable/containers.html
    --no-update                     Use the local LEAN engine image instead of pulling the latest version
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/live/deploy.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/deploy.py)_



  Liquidate the given symbol from the latest deployment of the given project.

  ```
  Usage: lean live liquidate [OPTIONS] PROJECT

    Liquidate the given symbol from the latest deployment of the given project.

  Options:
    --ticker TEXT         The ticker of the symbol to liquidate
    --market TEXT         The market of the symbol to liquidate
    --security-type TEXT  The security type of the symbol to liquidate
    --lean-config FILE    The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose             Enable debug logging
    --help                Show this message and exit.
  ```

  _See code: [lean/commands/live/liquidate.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/liquidate.py)_



  Stop an already running local live trading project.

  ```
  Usage: lean live stop [OPTIONS] PROJECT

    Stop an already running local live trading project.

  Options:
    --lean-config FILE  The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose           Enable debug logging
    --help              Show this message and exit.
  ```

  _See code: [lean/commands/live/stop.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/stop.py)_



  Represents a command to submit an order to the algorithm.

  ```
  Usage: lean live submit-order [OPTIONS] PROJECT

    Represents a command to submit an order to the algorithm.

  Options:
    --ticker TEXT          The ticker of the symbol to be submitted  [required]
    --market TEXT          The market of the symbol to be submitted  [required]
    --security-type TEXT   The security type of the symbol to be submitted  [required]
    --order-type TEXT      The order type to be submitted  [required]
    --quantity DECIMAL     The number of units to be ordered (directional)  [required]
    --limit-price DECIMAL  The limit price of the order be submitted
    --stop-price DECIMAL   The stop price of the order to be submitted
    --tag TEXT             The tag to be attached to the order
    --lean-config FILE     The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose              Enable debug logging
    --help                 Show this message and exit.
  ```

  _See code: [lean/commands/live/submit_order.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/submit_order.py)_



  Represents a command to update a specific order by id.

  ```
  Usage: lean live update-order [OPTIONS] PROJECT

    Represents a command to update a specific order by id.

  Options:
    --order-id INTEGER     The order id to be updated  [required]
    --quantity DECIMAL     The number of units to be updated (directional)
    --limit-price DECIMAL  The limit price of the order to be updated
    --stop-price DECIMAL   The stop price of the order to be updated
    --tag TEXT             The tag to be attached to the order
    --lean-config FILE     The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose              Enable debug logging
    --help                 Show this message and exit.
  ```

  _See code: [lean/commands/live/update_order.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/live/update_order.py)_



  Log in with a QuantConnect account.

  ```
  Usage: lean login [OPTIONS]

    Log in with a QuantConnect account.

    If user id or API token is not provided an interactive prompt will show.

    Credentials are stored in ~/.lean/credentials and are removed upon running `lean logout`.

  Options:
    -u, --user-id TEXT    QuantConnect user id
    -t, --api-token TEXT  QuantConnect API token
    --show-secrets        Show secrets as they are input
    --verbose             Enable debug logging
    --help                Show this message and exit.
  ```

  _See code: [lean/commands/login.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/login.py)_



  Log out and remove stored credentials.

  ```
  Usage: lean logout [OPTIONS]

    Log out and remove stored credentials.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/logout.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/logout.py)_



  Display the most recent backtest/live/optimization logs.

  ```
  Usage: lean logs [OPTIONS]

    Display the most recent backtest/live/optimization logs.

  Options:
    --backtest           Display the most recent backtest logs (default)
    --live               Display the most recent live logs
    --optimization       Display the most recent optimization logs
    --project DIRECTORY  The project to get the most recent logs from
    --lean-config FILE   The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose            Enable debug logging
    --help               Show this message and exit.
  ```

  _See code: [lean/commands/logs.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/logs.py)_



  Opens the local storage directory in the file explorer.

  ```
  Usage: lean object-store delete [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/delete.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/delete.py)_



  Opens the local storage directory in the file explorer.

  ```
  Usage: lean object-store get [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/get.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/get.py)_



  Opens the local storage directory in the file explorer.

  ```
  Usage: lean object-store list [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/list.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/list.py)_



  Alias for 'list'

  ```
  Usage: lean object-store ls [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/ls.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/ls.py)_



  Opens the local storage directory in the file explorer.

  ```
  Usage: lean object-store properties [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/properties.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/properties.py)_



  Opens the local storage directory in the file explorer.

  ```
  Usage: lean object-store set [OPTIONS]

    Opens the local storage directory in the file explorer.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/object_store/set.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/object_store/set.py)_



  Optimize a project's parameters locally using Docker.

  ```
  Usage: lean optimize [OPTIONS] PROJECT

    Optimize a project's parameters locally using Docker.

    If PROJECT is a directory, the algorithm in the main.py or Main.cs file inside it will be executed.
    If PROJECT is a file, the algorithm in the specified file will be executed.

    By default an interactive wizard is shown letting you configure the optimizer. If --optimizer-config or --strategy is
    given the command runs in non-interactive mode. In this mode the CLI does not prompt for input.

    The --optimizer-config option can be used to specify the configuration to run the optimizer with.
    When using the option it should point to a file like this (the algorithm-* properties should be omitted):
    https://github.com/QuantConnect/Lean/blob/master/Optimizer.Launcher/config.json

    If --strategy is given the optimizer configuration is read from the given options. In this case --strategy, --target,
    --target-direction and --parameter become required.

    In non-interactive mode the --parameter option can be provided multiple times to configure multiple parameters:
    - --parameter <name> <min value> <max value> <step size>
    - --parameter my-first-parameter 1 10 0.5 --parameter my-second-parameter 20 30 5

    In non-interactive mode the --constraint option can be provided multiple times to configure multiple constraints:
    - --constraint "<statistic> <operator> <value>"
    - --constraint "Sharpe Ratio >= 0.5" --constraint "Drawdown < 0.25"

    If --estimate is given, the optimization will not be executed.
    The runtime estimate for the optimization will be calculated and outputted.

    By default the official LEAN engine image is used. You can override this using the --image option. Alternatively you
    can set the default engine image for all commands using `lean config set engine-image <image>`.

  Options:
    --output DIRECTORY              Directory to store results in (defaults to PROJECT/optimizations/TIMESTAMP)
    -d, --detach                    Run the optimization in a detached Docker container and return immediately
    --optimizer-config FILE         The optimizer configuration file that should be used
    --strategy [Grid Search|Euler Search]
                                    The optimization strategy to use
    --target TEXT                   The target statistic of the optimization
    --target-direction [min|max]    Whether the target must be minimized or maximized
    --parameter <TEXT FLOAT FLOAT FLOAT>...
                                    The 'parameter min max step' pairs configuring the parameters to optimize
    --constraint TEXT               The 'statistic operator value' pairs configuring the constraints of the optimization
    --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca]
                                    Update the Lean configuration file to retrieve data from the given historical provider
    --download-data                 Update the Lean configuration file to download data from the QuantConnect API, alias
                                    for --data-provider-historical QuantConnect
    --data-purchase-limit INTEGER   The maximum amount of QCC to spend on downloading data during the backtest when using
                                    QuantConnect as historical data provider
    --release                       Compile C# projects in release configuration instead of debug
    --image TEXT                    The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --update                        Pull the LEAN engine image before running the optimizer
    --estimate                      Estimate optimization runtime without running it
    --max-concurrent-backtests INTEGER RANGE
                                    Maximum number of concurrent backtests to run  [x>=1]
    --extra-docker-config TEXT      Extra docker configuration as a JSON string. For more information https://docker-
                                    py.readthedocs.io/en/stable/containers.html
    --no-update                     Use the local LEAN engine image instead of pulling the latest version
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --iqfeed-iqconnect TEXT         The path to the IQConnect binary
    --iqfeed-username TEXT          Your IQFeed username
    --iqfeed-password TEXT          Your IQFeed password
    --iqfeed-version TEXT           The product version of your IQFeed developer account
    --iqfeed-host TEXT              The IQFeed host address (Optional).
    --polygon-api-key TEXT          Your Polygon.io API Key
    --factset-auth-config-file FILE
                                    The path to the FactSet authentication configuration file
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --alpha-vantage-api-key TEXT    Your Alpha Vantage Api Key
    --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200]
                                    Your Alpha Vantage Premium API Key plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --thetadata-ws-url TEXT         The ThetaData host address (Optional).
    --thetadata-rest-url TEXT       The ThetaData host address (Optional).
    --thetadata-subscription-plan [Free|Value|Standard|Pro]
                                    Your ThetaData subscription price plan
    --terminal-link-connection-type [DAPI|SAPI]
                                    Terminal Link Connection Type [DAPI, SAPI]
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the TerminalLink server
    --terminal-link-server-port INTEGER
                                    The port of the TerminalLink server
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/optimize.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/optimize.py)_



  Add private cloud compute

  ```
  Usage: lean private-cloud add-compute [OPTIONS]

    Add private cloud compute

  Options:
    --token TEXT                    The master server token
    --master-domain, --master-ip TEXT
                                    The master server domain
    --master-port INTEGER           The master server port
    --slave-domain, --slave-ip TEXT
                                    The slave server domain
    --update                        Pull the latest image before starting
    --no-update                     Do not update to the latest version
    --compute TEXT                  Compute configuration to use
    --extra-docker-config TEXT      Extra docker configuration as a JSON string
    --stop                          Stop any existing deployment
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/private_cloud/add_compute.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/private_cloud/add_compute.py)_



  Start a new private cloud

  ```
  Usage: lean private-cloud start [OPTIONS]

    Start a new private cloud

  Options:
    --master                        Run in master mode
    --slave                         Run in slave mode
    --token TEXT                    The master server token
    --master-domain, --master-ip TEXT
                                    The master server domain
    --master-port INTEGER           The master server port
    --slave-domain, --slave-ip TEXT
                                    The slave server domain
    --update                        Pull the latest image before starting
    --no-update                     Do not update to the latest version
    --compute TEXT                  Compute configuration to use
    --extra-docker-config TEXT      Extra docker configuration as a JSON string
    --stop                          Stop any existing deployment
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/private_cloud/start.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/private_cloud/start.py)_



  Stops a running private cloud

  ```
  Usage: lean private-cloud stop [OPTIONS]

    Stops a running private cloud

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/private_cloud/stop.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/private_cloud/stop.py)_



  Create a new project containing starter code.

  ```
  Usage: lean project-create [OPTIONS] NAME

    Create a new project containing starter code.

    If NAME is a path containing subdirectories those will be created automatically.

    The default language can be set using `lean config set default-language python/csharp`.

  Options:
    -l, --language [python|csharp]  The language of the project to create
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/project_create.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/project_create.py)_



  Delete a project locally and in the cloud if it exists.

  ```
  Usage: lean project-delete [OPTIONS] PROJECT

    Delete a project locally and in the cloud if it exists.

    The project is selected by name or cloud id.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/project_delete.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/project_delete.py)_



  Generate a report of a backtest.

  ```
  Usage: lean report [OPTIONS]

    Generate a report of a backtest.

    This runs the LEAN Report Creator in Docker to generate a polished, professional-grade report of a backtest.

    If --backtest-results is not given, a report is generated for the most recent local backtest.

    The name, description, and version are optional and will be blank if not given.

    If the given backtest data source file is stored in a project directory (or one of its subdirectories, like the
    default <project>/backtests/<timestamp>), the default name is the name of the project directory and the default
    description is the description stored in the project's config.json file.

    By default the official LEAN engine image is used. You can override this using the --image option. Alternatively you
    can set the default engine image for all commands using `lean config set engine-image <image>`.

  Options:
    --backtest-results FILE      Path to the JSON file containing the backtest results
    --live-results FILE          Path to the JSON file containing the live trading results
    --report-destination FILE    Path where the generated report is stored as HTML (defaults to ./report.html)
    --css FILE                   Path where the CSS override file is stored
    --html FILE                  Path where the custom HTML template file is stored
    -d, --detach                 Run the report creator in a detached Docker container and return immediately
    --strategy-name TEXT         Name of the strategy, will appear at the top-right corner of each page
    --strategy-version TEXT      Version number of the strategy, will appear next to the project name
    --strategy-description TEXT  Description of the strategy, will appear under the 'Strategy Description' section
    --overwrite                  Overwrite --report-destination if it already contains a file
    --image TEXT                 The LEAN engine image to use (defaults to quantconnect/lean:latest)
    --update                     Pull the LEAN engine image before running the report creator
    --pdf                        Create a PDF version along with the HTML version of the report
    --lean-config FILE           The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                    Enable debug logging
    --help                       Show this message and exit.
  ```

  _See code: [lean/commands/report.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/report.py)_



  Run a Jupyter Lab environment locally using Docker.

  ```
  Usage: lean research [OPTIONS] PROJECT

    Run a Jupyter Lab environment locally using Docker.

    By default the official LEAN research image is used. You can override this using the --image option. Alternatively you
    can set the default research image using `lean config set research-image <image>`.

  Options:
    --port INTEGER                  The port to run Jupyter Lab on (defaults to 8888)
    --data-provider-historical [Interactive Brokers|Oanda|Bitfinex|Coinbase Advanced Trade|Binance|Kraken|IQFeed|Polygon|FactSet|IEX|AlphaVantage|CoinApi|ThetaData|QuantConnect|Local|Terminal Link|Bybit|TradeStation|Alpaca]
                                    Update the Lean configuration file to retrieve data from the given historical provider
    --ib-user-name TEXT             Your Interactive Brokers username
    --ib-account TEXT               Your Interactive Brokers account id
    --ib-password TEXT              Your Interactive Brokers password
    --ib-weekly-restart-utc-time TEXT
                                    Weekly restart UTC time (hh:mm:ss). Each week on Sunday your algorithm is restarted at
                                    this time, and will require 2FA verification. This is required by Interactive Brokers.
                                    Use this option explicitly to override the default value. (Optional).
    --oanda-account-id TEXT         Your OANDA account id
    --oanda-access-token TEXT       Your OANDA API token
    --oanda-environment [Practice|Trade]
                                    The environment to run in, Practice for fxTrade Practice, Trade for fxTrade
    --bitfinex-api-key TEXT         Your Bitfinex API key
    --bitfinex-api-secret TEXT      Your Bitfinex API secret
    --coinbase-api-name TEXT        Your Coinbase Advanced Trade API name from file.
    --coinbase-api-private-key TEXT
                                    Your Coinbase Advanced Trade API private key from file.
    --binance-exchange-name [Binance|BinanceUS|Binance-USDM-Futures|Binance-COIN-Futures]
                                    Binance exchange name [Binance, BinanceUS, Binance-USDM-Futures, Binance-COIN-Futures]
    --binance-api-key TEXT          Your Binance API key
    --binanceus-api-key TEXT        Your Binance API key
    --binance-api-secret TEXT       Your Binance API secret
    --binanceus-api-secret TEXT     Your Binance API secret
    --kraken-api-key TEXT           Your Kraken API key
    --kraken-api-secret TEXT        Your Kraken API secret
    --kraken-verification-tier [Starter|Intermediate|Pro]
                                    Your Kraken Verification Tier
    --iqfeed-iqconnect TEXT         The path to the IQConnect binary
    --iqfeed-username TEXT          Your IQFeed username
    --iqfeed-password TEXT          Your IQFeed password
    --iqfeed-version TEXT           The product version of your IQFeed developer account
    --iqfeed-host TEXT              The IQFeed host address (Optional).
    --polygon-api-key TEXT          Your Polygon.io API Key
    --factset-auth-config-file FILE
                                    The path to the FactSet authentication configuration file
    --iex-cloud-api-key TEXT        Your iexcloud.io API token publishable key
    --iex-price-plan [Launch|Grow|Enterprise]
                                    Your IEX Cloud Price plan
    --alpha-vantage-api-key TEXT    Your Alpha Vantage Api Key
    --alpha-vantage-price-plan [Free|Plan30|Plan75|Plan150|Plan300|Plan600|Plan1200]
                                    Your Alpha Vantage Premium API Key plan
    --coinapi-api-key TEXT          Your coinapi.io Api Key
    --coinapi-product [Free|Startup|Streamer|Professional|Enterprise]
                                    CoinApi pricing plan (https://www.coinapi.io/market-data-api/pricing)
    --thetadata-ws-url TEXT         The ThetaData host address (Optional).
    --thetadata-rest-url TEXT       The ThetaData host address (Optional).
    --thetadata-subscription-plan [Free|Value|Standard|Pro]
                                    Your ThetaData subscription price plan
    --terminal-link-connection-type [DAPI|SAPI]
                                    Terminal Link Connection Type [DAPI, SAPI]
    --terminal-link-environment [Production|Beta]
                                    The environment to run in
    --terminal-link-server-host TEXT
                                    The host of the TerminalLink server
    --terminal-link-server-port INTEGER
                                    The port of the TerminalLink server
    --terminal-link-openfigi-api-key TEXT
                                    The Open FIGI API key to use for mapping options
    --terminal-link-server-auth-id TEXT
                                    The Auth ID of the TerminalLink server
    --bybit-api-key TEXT            Your Bybit API key
    --bybit-api-secret TEXT         Your Bybit API secret
    --trade-station-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --trade-station-account-id TEXT
                                    The TradeStation account Id
    --alpaca-environment [live|paper]
                                    Whether Live or Paper environment should be used
    --download-data                 Update the Lean configuration file to download data from the QuantConnect API, alias
                                    for --data-provider-historical QuantConnect
    --data-purchase-limit INTEGER   The maximum amount of QCC to spend on downloading data during the research session
                                    when using QuantConnect as historical data provider
    -d, --detach                    Run Jupyter Lab in a detached Docker container and return immediately
    --no-open                       Don't open the Jupyter Lab environment in the browser after starting it
    --image TEXT                    The LEAN research image to use (defaults to quantconnect/research:latest)
    --update                        Pull the LEAN research image before starting the research environment
    --extra-docker-config TEXT      Extra docker configuration as a JSON string. For more information https://docker-
                                    py.readthedocs.io/en/stable/containers.html
    --no-update                     Use the local LEAN research image instead of pulling the latest version
    --lean-config FILE              The Lean configuration file that should be used (defaults to the nearest lean.json)
    --verbose                       Enable debug logging
    --help                          Show this message and exit.
  ```

  _See code: [lean/commands/research.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/research.py)_



  Display who is logged in.

  ```
  Usage: lean whoami [OPTIONS]

    Display who is logged in.

  Options:
    --verbose  Enable debug logging
    --help     Show this message and exit.
  ```

  _See code: [lean/commands/whoami.py](https://github.com/QuantConnect/lean-cli/blob/master/lean/commands/whoami.py)_
  <!-- commands end -->



  To work on the Lean CLI, clone the repository, enter an environment containing Python 3.7+ and run `pip install -r requirements.txt`. This command will install the required dependencies and installs the CLI in editable mode. This means you'll be able to edit the code and immediately see the results the next time you run `lean`.

  If you need to add dependencies, first update `setup.py` (if it is a production dependency) or `requirements.txt` (if it is a development dependency) and then re-run `pip install -r requirements.txt`.

  The automated tests can be ran by running `pytest`. The filesystem and HTTP requests are mocked when running tests to make sure they run in an isolated environment.

  Can build the lean CLI by running `python setup.py sdist bdist_wheel` from the root of the project and to install it `pip install --force-reinstall dist/lean-dev-py3-none-any.whl`. To update the commands reference part of the readme run `python scripts/readme.py` from the root of the project, after installing the new version.

  Maintainers can publish new releases by pushing a Git tag containing the new version to GitHub. This will trigger a GitHub Actions workflow which releases the current `master` branch to PyPI with the value of the tag as version. Make sure the version is not prefixed with "v".


pkgId: 49896e0e3a39ce92da69a0f06d747e5a9d18e47176c4aa65d3ae169be426b3bc
name: python-leap-data-management-utils-help
arch: noarch
version: 0.0.17
epoch: 0
release: 1
summary: Development documents and examples for leap-data-management-utils
url: https://pypi.org/project/leap-data-management-utils/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leap-data-management-utils-0.0.17-1.src.rpm
location_href: Packages/python-leap-data-management-utils-help-0.0.17-1.noarch.rpm
checksum_type: sha256
description:
  This Repo is intended to be installed via the `requirements.txt` during recipe execution in `pangeo-forge-recipes`. It currently contains beam transforms to log information into BigQuery tables. Additional shared utilities and checks that are commonly used between LEAP pangeo-forge-feedstocks can live here.


pkgId: ef1940a8a9d59d96647b0a7f87615393e20426d65fbf8e1bc812c8980043dc94
name: python-ledger-app-clients.ethereum-help
arch: noarch
version: 0.4.0
epoch: 0
release: 1
summary: Development documents and examples for ledger-app-clients.ethereum
url: https://pypi.org/project/ledger-app-clients.ethereum/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ledger-app-clients.ethereum-0.4.0-1.src.rpm
location_href: Packages/python-ledger-app-clients.ethereum-help-0.4.0-1.noarch.rpm
checksum_type: sha256
description:
  This package allows to communicate with the Ledger Ethereum application, either on a
  real device, or emulated on Speculos.



  You can install the client from `pypi.org`:

    ```bash
    pip install ledger_app_clients.ethereum
    ```



  You can also install the client from this repo:

  ```bash
  pip install .
  ```


pkgId: 911e56c33927eec0a793d1c66b49605009e09ddc287bc403c416f2d6dc9c902f
name: python-lefaire-help
arch: noarch
version: 0.1.8
epoch: 0
release: 1
summary: Development documents and examples for lefaire
url: https://pypi.org/project/lefaire/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lefaire-0.1.8-1.src.rpm
location_href: Packages/python-lefaire-help-0.1.8-1.noarch.rpm
checksum_type: sha256
description:
  Pour installer Lefaire : `pip install lefaire`



  Afin de pouvoir fonctionner Lefaire doit se connecter à une base de données MariaDB.

  Pour effectuer la configuration, entrez dans votre terminal `lefaire init`.
  Puis renseignez le mot de passe root de MariaDB ainsi que l'host.



  `lefaire --help` vous renseignera sur toutes les commandes


pkgId: bbcd4bb27ba05b9c2eae392136a678a47e915ee77aa5c28de484ba2cc2cf4247
name: python-lefaso-net-scraper-help
arch: noarch
version: 0.4.0
epoch: 0
release: 1
summary: Development documents and examples for lefaso-net-scraper
url: https://github.com/abdoulfataoh/lefaso-net-scraper
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lefaso-net-scraper-0.4.0-1.src.rpm
location_href: Packages/python-lefaso-net-scraper-help-0.4.0-1.noarch.rpm
checksum_type: sha256
description:
  <div align="center">
    <p>
      <a href="https://pypi.org/project/lefaso-net-scraper/"><img src="https://raw.githubusercontent.com/abdoulfataoh/lefaso-net-scraper/master/docs/icon.png" style="width:60px;height:60px;"></a>
    </p>
  </div>

  <div align="center">
    <p>
      <a href="https://badge.fury.io/py/lefaso-net-scraper"><img src="https://badge.fury.io/py/lefaso-net-scraper.svg" alt="PyPI version"></a>
      <a href="https://pepy.tech/project/lefaso-net-scraper"><img src="https://static.pepy.tech/badge/lefaso-net-scraper"></a>
      <a href="https://github.com/abdoulfataoh/lefaso-net-scraper"><img src="https://github.com/abdoulfataoh/lefaso-net-scraper/actions/workflows/test.yaml/badge.svg"></a> <br>
      <a href="https://github.com/abdoulfataoh/lefaso-net-scraper"><img src="https://github.com/abdoulfataoh/lefaso-net-scraper/actions/workflows/publish.yaml/badge.svg"></a>
    </p>
  </div>


  lefaso-net-scraper is a robust and versatile Python library designed to efficiently extract articles from the popular online news source in Burkina Faso,  [www.lefaso.net](https://www.lefaso.net). This powerful scraping tool allows users to effortlessly collect article content and user comments on lefaso.net.




    > This scraper, like other scrapers, is based on the structure of the target website. Changes to the website's structure can affect the scraper. We use automated workflows to detect these issues frequently, but we cannot catch all of them. Please report any issues you encounter and use the latest version.




  <div align="center">

  | Field                  | Description                                          |
  |------------------------|------------------------------------------------------|
  | `article_topic`         | Category or subject of the article.                  |
  | `article_title`         | The main headline or title of the article.           |
  | `article_published_date`| Date when the article was published.                 |
  | `article_origin`        | Source or platform where the article was published.  |
  | `article_url`           | Web link to the article.                             |
  | `article_content`       | Full text or body of the article.                    |
  | `article_comments`      | Feedback or responses from readers.                  |

  </div>



  - Using pip

  ```bash
  pip install --upgrade  lefaso-net-scraper


  pip install --upgrade  lefaso-net-scraper[notebook]
  ```

  - Using poetry

  ```bash
  poetry add lefaso-net-scraper


  poetry add lefaso-net-scraper[notebook]
  ```




  ```python


  from lefaso_net_scraper import LefasoNetScraper

  section_url = 'https://lefaso.net/spip.php?rubrique473'
  scraper = LefasoNetScraper(section_url)
  data = scraper.run()
  ```

  - Settings Pagination range

  ```python


  from lefaso_net_scraper import LefasoNetScraper

  section_url = 'https://lefaso.net/spip.php?rubrique473'
  scraper = LefasoNetScraper(section_url)
  scraper.set_pagination_range(start=20, stop=100)
  data = scraper.run()
  ```

  - Save data to csv

  ```python



  from lefaso_net_scraper import LefasoNetScraper
  import pandas as pd

  section_url = 'https://lefaso.net/spip.php?rubrique473'
  scraper = LefasoNetScraper(section_url)
  data = scraper.run()
  df = pd.DataFrame.from_records(data)
  df.to_csv('path/to/df.csv')
  ```

  <p align="center">We ❤ open source</p>


pkgId: 84d74c4205c1d75e21056bfda0d61b4781161397ab51ebaee40b73ef8ba0993f
name: python-leonardo-toolset-help
arch: noarch
version: 0.1.0
epoch: 0
release: 1
summary: Development documents and examples for leonardo-toolset
url: https://github.com/peng-lab/leonardo_toolset
rpm_license: MIT license
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leonardo-toolset-0.1.0-1.src.rpm
location_href: Packages/python-leonardo-toolset-help-0.1.0-1.noarch.rpm
checksum_type: sha256
description:
  *Leonardo* is a toolbox able to resolve all sample-induced aberrations in selective plane illumination microscopy (SPIM, also called light-sheet fluorescence microscopy, LSFM) by using two major modules: (1) **DeStripe** removes the stripe artifacts caused by light absorption; (2) **FUSE** reconstructs one single high-quality image from dual-sided illumination and/or dual-sided detection while eliminating optical distortions (ghosts) caused by light refraction.

  https://leonardo-lsfm.readthedocs.io/en/latest/installation.html

  **Stable Release:** `pip install leonardo_toolset`<br>
  **Development Head:** `pip install git+https://github.com/peng-lab/leonardo_toolset.git`
  **Full software including napari plugins:** `pip install leonardo_toolset[napari]`<br>
  This **leonardo_toolset** package contains everything you need for using the toolset, including batch processing support for different workflows, such as running destriping then fusion. If you need only one specific component, you can find more info below:
  <details>
      <summary>More details about the leonardo_toolset package</summary>
      
      * Leonardo-DeStripe: https://github.com/peng-lab/lsfm_destripe
      * Leonardo-FUSE: https://github.com/peng-lab/lsfm_fuse
      
      * plugin for Leonardo-DeStripe: https://github.com/peng-lab/lsfm_destripe_napari
      * plugin for Leonardo-FUSE: https://github.com/peng-lab/lsfm_fusion_napari
  </details>

  See [CONTRIBUTING.md](CONTRIBUTING.md) for information related to developing the code.
  **MIT license**


pkgId: b84a8f865aa57e433a72ba54e688bd294db2331a492d1e1ad3c31fe6ccd261ba
name: python-lesya-help
arch: noarch
version: 0.0.8
epoch: 0
release: 1
summary: Development documents and examples for lesya
url: https://github.com/ustynov-py-dev/lesya.git
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lesya-0.0.8-1.src.rpm
location_href: Packages/python-lesya-help-0.0.8-1.noarch.rpm
checksum_type: sha256
description:
  Lesya is a simple Python package for declining Ukrainian personal names into Ukrainian grammatical cases (_відмінки_): NOMINATIVE, GENITIVE, DATIVE, ACCUSATIVE, INSTRUMENTAL, PREPOSITIONAL, and VOCATIVE (_називний, родовий, давальний, знахідний, орудний, місцевий, кличний_).



  The most common usage is to convert a name into all cases:

  ```python
  from lesya import Lesya

  person = Lesya('Леся Українка')
  print(person.nominative) # Леся Українка
  print(person.genitive) # Лесі Українки
  print(person.dative) # Лесі Українці
  print(person.accusative) # Лесю Українку
  print(person.instrumental) # Лесею Українкою
  print(person.prepositional) # Лесі Українці
  print(person.vocative) # Лесе Українко
  ```

  When printing the `Lesya` object, you will get just nominative case:

  ```python
  person = Lesya('Дмитро Андрійович Устинов')
  print(person) # Дмитро Андрійович Устинов
  ```


  You can also get a name in a specific case with square brackets:

  ```python
  from lesya import Lesya
  from lesya import CaseUA

  person = Lesya('Тарас Григорович Шевченко')
  print(person[CaseUA.DATIVE]) # Тарасу Григоровичу Шевченку
  print(person[CaseUA.PREPOSITIONAL]) # Тарасові Григоровичу Шевченкові
  print(person['орудний']) # Тарасом Григоровичем Шевченком
  ```



  Lesya works well with double last names:

  ```python
  from lesya import Lesya

  person = Lesya('Іван Семенович Нечуй-Левицький')
  print(person.forms)

  {
      'називний': 'Іван Семенович Нечуй-Левицький',
      'родовий': 'Івана Семеновича Нечуя-Левицького',
      'давальний': 'Івану Семеновичу Нечуєві-Левицькому',
      'знахідний': 'Івана Семеновича Нечуя-Левицького',
      'орудний': 'Іваном Семеновичем Нечуєм-Левицьким',
      'місцевий': 'Іванові Семеновичу Нечуєві-Левицькому',
      'кличний': 'Іване Семеновичу Нечую-Левицький'
  }
  ```



  You can get all cases at once using the forms attribute. It returns a dictionary where the keys are case names (in lowercase Ukrainian), and the values are the corresponding declined names.



  Lesya supports foreign names. However, since it does not use an ML model to automatically detect a person's gender, it works better if you explicitly provide the gender:

  ```python
  from lesya import Lesya
  from lesya import CaseUA
  from lesya import Gender

  person = Lesya('Джозеф Байден', gender='male')
  print(person[CaseUA.DATIVE]) # Джозефу Байдену
  print(person[CaseUA.PREPOSITIONAL]) # Джозефові Байденові

  person = Lesya('Камала Гаріс', gender=Gender.FEMALE)
  print(person[CaseUA.DATIVE]) # Камалі Гаріс
  print(person[CaseUA.PREPOSITIONAL]) # Камалі Гаріс
  ```

rpm_license:
  Copyright (c) 2024 Dmytro Ustynov  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


pkgId: 2f9d0af9075dec23f130692d9d63277058ef86aceccee61e5d825579bd024bb3
name: python-letta-help
arch: noarch
version: 0.6.4
epoch: 0
release: 1
summary: Development documents and examples for letta
url: https://pypi.org/project/letta/
rpm_license: Apache License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-letta-0.6.4-1.src.rpm
location_href: Packages/python-letta-help-0.6.4-1.noarch.rpm
checksum_type: sha256
description:
  <h3>
  [Homepage](https://letta.com) // [Documentation](https://docs.letta.com) // [ADE](https://app.letta.com) // [Letta Cloud](https://forms.letta.com/early-access)
  </h3>
  **👾 Letta** is an open source framework for building stateful LLM applications. You can use Letta to build **stateful agents** with advanced reasoning capabilities and transparent long-term memory. The Letta framework is white box and model-agnostic.
  [![Discord](https://img.shields.io/discord/1161736243340640419?label=Discord&logo=discord&logoColor=5865F2&style=flat-square&color=5865F2)](https://discord.gg/letta)
  [![Twitter Follow](https://img.shields.io/badge/Follow-%40Letta__AI-1DA1F2?style=flat-square&logo=x&logoColor=white)](https://twitter.com/Letta_AI)
  [![arxiv 2310.08560](https://img.shields.io/badge/Research-2310.08560-B31B1B?logo=arxiv&style=flat-square)](https://arxiv.org/abs/2310.08560)
  [![Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-silver?style=flat-square)](LICENSE)
  [![Release](https://img.shields.io/github/v/release/cpacker/MemGPT?style=flat-square&label=Release&color=limegreen)](https://github.com/cpacker/MemGPT/releases)
  [![Docker](https://img.shields.io/docker/v/letta/letta?style=flat-square&logo=docker&label=Docker&color=0db7ed)](https://hub.docker.com/r/letta/letta)
  [![GitHub](https://img.shields.io/github/stars/cpacker/MemGPT?style=flat-square&logo=github&label=Stars&color=gold)](https://github.com/cpacker/MemGPT)
  <a href="https://trendshift.io/repositories/3612" target="_blank"><img src="https://trendshift.io/api/badge/repositories/3612" alt="cpacker%2FMemGPT | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
  </div>
  > [!IMPORTANT]
  > **Looking for MemGPT?** You're in the right place!
  >


pkgId: a8ec523831f472a652b98ecfc31e400a4c592f8f28542204d52c5c63730e7738
name: python-letterboxd-stats-help
arch: noarch
version: 0.2.15
epoch: 0
release: 1
summary: Development documents and examples for letterboxd-stats
url: https://github.com/mBaratta96/letterboxd_stats
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-letterboxd-stats-0.2.15-1.src.rpm
location_href: Packages/python-letterboxd-stats-help-0.2.15-1.noarch.rpm
checksum_type: sha256
description:
  ![](./example.gif)

  Get information about your Letterboxd activity.

  Search for actors/directors, analyze your diary/watchlist/rating, check which film you have seen for a particular person. All in your terminal.



  -   Python >= 3.8
  -   A [TMDb API key](https://www.themoviedb.org/documentation/api): to retrieve all the general information for movies/people
  -   A Letterboxd account: to export your Letterboxd activity through web-scraping.



  Just run:

  ```shell
  pip3 install letterboxd_stats
  ```



  It is required to create a `config.toml`. You can create it in the default config folder (for example, `.config/letterboxd_stats` in Linux) or specify your custom folder with the `-c` command. For each platform, default config folder follows the structure of the [platformdirs](https://github.com/platformdirs/platformdirs) package.

  ```toml

  root_folder = "~/Documents/letterboxd_stats/"

  [CLI]


  poster_columns = 180

  ascending = false

  [TMDB]
  api_key = "YOUR_TMDB_API_KEY"


  get_list_runtimes = false


  [Letterboxd]
  username = "your-username"
  password = "your-password"
  ```



  ```shell
  options:
    -h, --help            show this help message and exit
    -s SEARCH, --search SEARCH
                          Search for a director
    -S SEARCH_FILM, --search-film SEARCH_FILM
                          Search for a film.
    -d, --download        Download letterboxd data from your account
    -W, --watchlist       show watchlist
    -D, --diary           show diary
    -R, --ratings         show ratings
    -L, --lists           show lists
    -l LIMIT, --limit LIMIT
                          limit the number of items of your wishlist/diary
    -c CONFIG_FOLDER, --config_folder CONFIG_FOLDER
                          Specifiy the folder of your config.toml file

  ```



  _Note: this is something I do during my free time. Therefore, I can't promise consistent support for this project._

  -   [x] Use web-scraping to add film to diary/wishlist

  -   [ ] Check followers' activity.


pkgId: f757422ed26c7a4eb40b7b3630f5d803d11387b3b6ea8b2b13d7ece91a4c39a0
name: python-leuci-map-help
arch: noarch
version: 0.1.65
epoch: 0
release: 1
summary: Development documents and examples for leuci-map
url: https://github.com/pypa/sampleproject
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leuci-map-0.1.65-1.src.rpm
location_href: Packages/python-leuci-map-help-0.1.65-1.noarch.rpm
checksum_type: sha256
description:
  A Protein Structure Density Map Visualisation Library




  ```
  python3 -m venv .venv

  source ./.venv/bin/activate
  (deactivate)
  ```

  ```
  pip install -r requirements.txt
  ```


pkgId: 7d45e7f35f4dfe9a62ccd6f8214cc9b15aa5d8a23c8ba5f131d67f18b0d2fa14
name: python-leuci-xyz-help
arch: noarch
version: 0.0.26
epoch: 0
release: 1
summary: Development documents and examples for leuci-xyz
url: https://github.com/pypa/sampleproject
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leuci-xyz-0.0.26-1.src.rpm
location_href: Packages/python-leuci-xyz-help-0.0.26-1.noarch.rpm
checksum_type: sha256
description:
  A library for manipulation and transformation of objects in 3d space




  ```
  python3 -m venv .venv

  source ./.venv/bin/activate
  (deactivate)
  ```

  ```
  pip install -r requirements.txt
  ```


pkgId: e479992472f074de1c44b6c9b29599f179053d6aea8fc873ef22e288eab93930
name: python-levanter-help
arch: noarch
version: 1.1
epoch: 0
release: 1
summary: Development documents and examples for levanter
url: https://github.com/stanford-crfm/levanter
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-levanter-1.1-1.src.rpm
location_href: Packages/python-levanter-help-1.1-1.noarch.rpm
checksum_type: sha256
description:
  <a href="https://github.com/stanford-crfm/levanter/actions?query=branch%3Amain++">
      <img alt="Build Status" src="https://img.shields.io/github/actions/workflow/status/stanford-crfm/levanter/run_tests.yaml?branch=main">
  </a>
  <a href="https://levanter.readthedocs.io/en/latest/?badge=latest">
      <img alt="Documentation Status" src="https://readthedocs.org/projects/levanter/badge/?version=latest">
  </a>
  <img alt="License" src="https://img.shields.io/github/license/stanford-crfm/levanter?color=blue" />
  <a href="https://https://pypi.org/project/levanter/">
      <img alt="PyPI" src="https://img.shields.io/pypi/v/levanter?color=blue" />
  </a>


  <!--levanter-intro-start-->
  > *You could not prevent a thunderstorm, but you could use the electricity; you could not direct the wind, but you could trim your sail so as to propel your vessel as you pleased, no matter which way the wind blew.* <br/>
  > — Cora L. V. Hatch

  Levanter is a framework for training large language models (LLMs) and other foundation models that strives for legibility, scalability, and reproducibility:

  1. **Legible**: Levanter uses our named tensor library [Haliax](https://github.com/stanford-crfm/haliax) to write easy-to-follow, composable deep learning code, while still being high performance.
  2. **Scalable**: Levanter scales to large models, and to be able to train on a variety of hardware, including GPUs and TPUs.
  3. **Reproducible**: Levanter is bitwise deterministic, meaning that the same configuration will always produce the same results, even in the face of preemption and resumption.

  We built Levanter with [JAX](https:://github.com/google/jax), [Equinox](https://github.com/patrick-kidger/equinox),
  and [Haliax](https://github.com/stanford-crfm/haliax).



  * **Distributed Training**: We support distributed training on TPUs (and soon, GPUs), including FSDP and tensor parallelism.
  * **Compatibility**: Levanter supports importing and exporting models to/from the Hugging Face ecosystem, including tokenizers, datasets, and models via [SafeTensors](https://github.com/huggingface/safetensors).
  * **Performance**: Levanter's performance rivals commercially-backed frameworks like MosaicML's Composer or Google's MaxText.
  * **Reproducibility**: Levanter is bitwise deterministic, meaning that the same configuration will always produce the same results, even in the face of preemption and resumption.
  * **Cached On-Demand Data Preprocessing**: We preprocess corpora online, but we cache the results of preprocessing so
  that resumes are much faster and so that subsequent runs are even faster. As soon as the first part of the cache is complete, Levanter will start training.
  * **Logging**: Logging is done with [WandB](https://wandb.ai/), complete with a fancy online visualization of the validation set during training.
  * **Distributed Checkpointing**: Distributed checkpointing is supported via Google's [TensorStore](https://google.github.io/tensorstore/) library. Training can even be resumed on a different number of hosts, though this breaks reproducibility for now.
  * **Optimization**: Levanter uses [Optax](https://github.com/deepmind/optax) for optimization. Our new optimizer, [Sophia](https://arxiv.org/abs/2305.14342), is coming to Levanter soon!

  <!--levanter-intro-end-->

  Levanter was created by [Stanford's Center for Research on Foundation Models (CRFM)](https://crfm.stanford.edu/)'s research engineering team. ([We're hiring!](https://crfm.stanford.edu/apply.html)) You can also find us in the #levanter channel on the unofficial [Jax LLM Discord](https://discord.gg/CKazXcbbBm)



  Here is a small set of examples to get you started. For more information about the various configuration options,
  please see the [Getting Started](./docs/Getting-Started-Training.md) guide or the [In-Depth Configuration Guide](docs/Configuration-Guide.md).
  You can also use `--help` or poke around other configs to see all the options available to you.



  Levanter's documentation is available at [levanter.readthedocs.io](https://levanter.readthedocs.io/en/latest/).
  Haliax's documentation is available at [haliax.readthedocs.io](https://haliax.readthedocs.io/en/latest/).



  <!--levanter-installation-start-->

  After [installing JAX](https://github.com/google/jax/blob/main/README.md#installation) with the appropriate configuration
  for your platform, you can install Levanter with:

  ```bash
  pip install levanter
  ```

  or using the latest version from GitHub:

  ```bash
  git clone https://github.com/stanford-crfm/levanter.git
  cd levanter
  pip install -e .
  wandb login  # optional, we use wandb for logging
  ```

  If you're developing Haliax and Levanter at the same time, you can do something like.
  ```bash
  git clone https://github.com/stanford-crfm/levanter.git
  cd levanter
  pip install -e .
  cd ..
  git clone https://github.com/stanford-crfm/haliax.git
  cd haliax
  pip install -e .
  cd ../levanter
  ```


  <!--levanter-installation-end-->

  Please refer to the [Installation Guide](docs/Installation.md) for more information on how to install Levanter.

  If you're using a TPU, more complete documentation for setting that up is available [here](docs/Getting-Started-TPU-VM.md). GPU support is still in-progress; documentation is available [here](docs/Getting-Started-CUDA.md).

  <!--levanter-user-guide-start-->



  As a kind of hello world, here's how you can train a GPT-2 "nano"-sized model on a small dataset.

  ```bash
  python -m levanter.main.train_lm --config_path config/gpt2_nano.yaml


  python -m levanter.main.train_lm --config_path gpt2_nano
  ```

  This will train a GPT2-nano model on the [WikiText-103](https://blog.einstein.ai/the-wikitext-long-term-dependency-language-modeling-dataset/) dataset.



  You can also change the dataset by changing the `dataset` field in the config file.
  If your dataset is a [Hugging Face dataset](https://huggingface.co/docs/datasets/loading_datasets.html), you can use the `data.id` field to specify it:

  ```bash
  python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.id openwebtext


  python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.id openwebtext --data.tokenizer "EleutherAI/gpt-neox-20b" --data.cache_dir "gs://path/to/cache/dir"
  ```

  If instead your data is a list of URLs, you can use the `data.train_urls` and `data.validation_urls` fields to specify them.
  Data URLS can be local files, gcs files, or http(s) URLs, or anything that [fsspec](https://filesystem-spec.readthedocs.io/en/latest/) supports.
  Levanter (really, fsspec) will automatically uncompress `.gz` and `.zstd` files, and probably other formats too.

  ```bash
  python -m levanter.main.train_lm --config_path config/gpt2_small.yaml --data.train_urls ["https://path/to/train/data_*.jsonl.gz"] --data.validation_urls ["https://path/to/val/data_*.jsonl.gz"]
  ```



  You can modify the config file to change the model, the dataset, the training parameters, and more. Here's
  the `gpt2_small.yaml` file:

  ```yaml
  data:
    train_urls:
        - "gs://pubmed-mosaic/openwebtext-sharded/openwebtext_train.{1..128}-of-128.jsonl.gz"
    validation_urls:
        - "gs://pubmed-mosaic/openwebtext-sharded/openwebtext_val.{1..8}-of-8.jsonl.gz"
    cache_dir: "gs://pubmed-mosaic/tokenized/openwebtext/"
  model:
    gpt2:
      hidden_dim: 768
      num_heads: 12
      num_layers: 12
      seq_len: 1024
      gradient_checkpointing: true
      scale_attn_by_inverse_layer_idx: true
  trainer:
    wandb:
      project: "levanter"
      tags: [ "openwebtext", "gpt2"]

    mp: p=f32,c=bfloat16
    model_axis_size: 1
    per_device_parallelism: 4

    train_batch_size: 512
  optimizer:
    learning_rate: 6E-4
    weight_decay: 0.1
    min_lr_ratio: 0.1
  ```



  Currently, we support the following architectures:
  * GPT-2
  * [LLama 1 or 2](https://ai.meta.com/llama/)
  * [Backpacks](http://backpackmodels.science/)
  * MosaicML's [MPT](https://www.mosaicml.com/blog/mpt-7b)

  We plan to add more in the future.



  Here's an example of how to continue pretraining a Llama 1 or Llama 2 model on the OpenWebText dataset:

  ```bash
  python -m levanter.main.train_lm --config_path config/llama2_7b_continued.yaml
  ```






  Please see the [TPU Getting Started](docs/Getting-Started-TPU-VM.md) guide for more information on how to set up a TPU Cloud VM and run Levanter there.



  Please see the [CUDA Getting Started](docs/Getting-Started-CUDA.md) guide for more information on how to set up a CUDA environment and run Levanter there.

  <!--levanter-user-guide-end-->



  We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information.



  Levanter is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full license text.


pkgId: 2179fcd0c951ef97f7527d87bc2a01f20eab79b8a26bf14cc07250c570f919ff
name: python-leveelogic-help
arch: noarch
version: 0.8.15
epoch: 0
release: 1
summary: Development documents and examples for leveelogic
url: https://pypi.org/project/leveelogic/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-leveelogic-0.8.15-1.src.rpm
location_href: Packages/python-leveelogic-help-0.8.15-1.noarch.rpm
checksum_type: sha256
description:
  Combineren met code van Thomas

  https://github.com/ic144/geotop_kaarten_profielen

  om automatisch profielen te genereren



  You will need a leveelogic.env with the following paths:

  * DSTABILITY_CONSOLE_EXE, location of the dstability console
  * DSTABILITY_MIGRATION_CONSOLE_PATH, location of the dstability migration console
  * CALCULATIONS_FOLDER, location of the folder to add and remove temporary calculations


pkgId: 97dc7f95f32809b1a1290f76ad75fcfef47f2ab27f031ebb85f2c6e44e10f785
name: python-level1c4pps-help
arch: noarch
version: 0.2.35
epoch: 0
release: 1
summary: Development documents and examples for level1c4pps
url: https://github.com/foua-pps/level1c4pps
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-level1c4pps-0.2.35-1.src.rpm
location_href: Packages/python-level1c4pps-help-0.2.35-1.noarch.rpm
checksum_type: sha256
description:
  [![Build status](https://github.com/foua-pps/level1c4pps/workflows/CI/badge.svg?branch=master)](https://github.com/foua-pps/level1c4pps/workflows/CI/badge.svg?branch=master)
  [![Coverage Status](https://coveralls.io/repos/github/foua-pps/level1c4pps/badge.svg)](https://coveralls.io/github/foua-pps/level1c4pps?branch=master)
  Tools to generate NWCSAF/PPS level-1C formattet netCDF files from various
  agency specific level-1 formats. So far, supports
   - EUMETSAT Meteosat Second Generation SEVIRI HRIT level-1.5
   - NOAA AVHRR GAC
   - MERSI-2/3 level-1
   - MODIS level-1
   - AVHRR eps level-1b
   - AVHRR AAPP level-1b
   - VIIRS level-1b
   - SLSTR level-1b
   - EPS-SG MetImage level-1 test data
   - EUMETSAT AVHRR GAC FDR


pkgId: 3bef593756e6fa25a0f6e2cf4075b1ea9836b1bce0daab969329404d50dfca4a
name: python-lexoid-help
arch: noarch
version: 0.1.6
epoch: 0
release: 1
summary: Development documents and examples for lexoid
url: https://pypi.org/project/lexoid/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lexoid-0.1.6-1.src.rpm
location_href: Packages/python-lexoid-help-0.1.6-1.noarch.rpm
checksum_type: sha256
description:
  Lexoid is an efficient document parsing library that supports both LLM-based and non-LLM-based (static) PDF document parsing.


  - Use the multi-modal advancement of LLMs
  - Enable convenience for users while driving innovation
  - Collaborate with a permissive license


  To install dependencies:
  ```
  make install
  ```
  or, to install with dev-dependencies:
  ```
  make dev
  ```

  To activate virtual environment:
  ```
  source .venv/bin/activate
  ```

  To use LLM-based parsing, define the following environment variables or create a `.env` file with the following definitions
  ```
  OPENAI_API_KEY=""
  GOOGLE_API_KEY=""
  ```

  To build a `.whl` file for testing:
  ```
  poetry build
  ```

  Optionally, to use `Playwright` for retrieving web content with the `.whl` package (else regular requests will be used by default):
  ```
  playwright install --with-deps --only-shell chromium
  ```


  [Example Notebook](https://github.com/oidlabs-com/Lexoid/blob/main/examples/example_notebook.ipynb)

  Here's a quick example to parse documents using Lexoid:
  ``` python
  from lexoid.api import parse
  from lexoid.api import ParserType

  parsed_md = parse("https://www.justice.gov/eoir/immigration-law-advisor", parser_type="LLM_PARSE", raw=True)

  pdf_path = "path/to/immigration-law-advisor.pdf"
  parsed_md = parse(pdf_path, parser_type="LLM_PARSE", raw=True)

  print(parsed_md)
  ```


  - path (str): The file path or URL.
  - parser_type (str, optional): The type of parser to use ("LLM_PARSE" or "STATIC_PARSE"). Defaults to "AUTO".
  - raw (bool, optional): Whether to return raw text or structured data. Defaults to False.
  - pages_per_split (int, optional): Number of pages per split for chunking. Defaults to 4.
  - max_threads (int, optional): Maximum number of threads for parallel processing. Defaults to 4.
  - **kwargs: Additional arguments for the parser.


  Initial results (_more updates soon_)
  | Rank | Model/Framework | Similarity | Time (s) |
  |------|-----------|------------|----------|
  | 1 | gpt-4o | 0.799 | 21.77|
  | 2 | gemini-1.5-pro | 0.742 | 15.77 |
  | 3 | gpt-4o-mini | 0.721 | 14.86 |
  | 4 | gemini-1.5-flash | 0.702 | 4.56 |


pkgId: b321fb52f0adf961f6d83bbddc1699d6dd36e705dbd13acef8c3d69bd66a2b50
name: python-lfss-help
arch: noarch
version: 0.9.5
epoch: 0
release: 1
summary: Development documents and examples for lfss
url: https://github.com/MenxLi/lfss
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lfss-0.9.5-1.src.rpm
location_href: Packages/python-lfss-help-0.9.5-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/lfss)](https://pypi.org/project/lfss/)

  My experiment on a lightweight and high-performance file/object storage service...

  **Highlights:**

  - User storage limit and access control.
  - Pagination and sorted file listing for vast number of files.
  - High performance: high concurrency, near-native speed on stress tests.
  - Support range requests, so you can stream large files / resume download.
  - WebDAV compatible ([NOTE](./docs/Webdav.md)).

  It stores small files and metadata in sqlite, large files in the filesystem.
  Tested on 2 million files, and it is still fast.

  Usage:
  ```sh
  pip install lfss
  lfss-user add <username> <password>
  lfss-serve
  ```

  By default, the data will be stored in `.storage_data`.
  You can change storage directory using the `LFSS_DATA` environment variable.

  I provide a simple client to interact with the service:
  ```sh
  lfss-panel --open
  ```
  Or, you can start a web server at `/frontend` and open `index.html` in your browser.

  The API usage is simple, just `GET`, `PUT`, `DELETE` to the `/<username>/file/url` path.
  The authentication can be acheived through one of the following methods:
  1. `Authorization` header with the value `Bearer sha256(<username>:<password>)`.
  2. `token` query parameter with the value `sha256(<username>:<password>)`.
  3. HTTP Basic Authentication with the username and password (If WebDAV is enabled).

  You can refer to `frontend` as an application example, `lfss/api/connector.py` for more APIs.

  By default, the service exposes all files to the public for `GET` requests,
  but file-listing is restricted to the user's own files.
  Please refer to [docs/Permission.md](./docs/Permission.md) for more details on the permission system.

  More can be found in the [docs](./docs) directory.


pkgId: b8bc0427cf3898e399110307a6bc817b41d792c577afd7edf5203d81bef97a40
name: python-lib4sbom
arch: noarch
version: 0.8.1
epoch: 0
release: 1
summary: Software Bill of Material (SBOM) generator and consumer library
url: https://github.com/anthonyharrison/lib4sbom
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-lib4sbom-0.8.1-1.src.rpm
location_href: Packages/python-lib4sbom-0.8.1-1.noarch.rpm
checksum_type: sha256
description:
  Lib4SBOM is a library to parse and generate Software Bill of Materials (SBOMs). It supports SBOMs created in both
  [SPDX](https://www.spdx.org) and [CycloneDX](https://www.cyclonedx.org) formats.

  It has been developed on the assumption that having a generic abstraction of SBOM regardless of the underlying format will be useful to developers.

  The following facilities are provided:

  - Generate SPDX SBOM in TagValue, JSON and YAML formats
  - Generate CycloneDX SBOM in JSON format
  - Parse SPDX SBOM in TagValue, JSON, YAML, XML and RDF formats
  - Parse CycloneDX SBOM in JSON and XMLformat
  - Create and manipulate a SBOM file object
  - Create and manipulate a SBOM package object
  - Create and manipulate a SBOM dependency relationship object
  - Create and manipulate a Vulnerability object
  - Create and manipulate a Software Service object
  - Generated SBOM can be output to a file or to the console



  To install use the following command:

  `pip install lib4sbom`

  Alternatively, just clone the repo and install dependencies using the following command:

  `pip install -U -r requirements.txt`

  The tool requires Python 3 (3.7+). It is recommended to use a virtual python environment especially
  if you are using different versions of python. `virtualenv` is a tool for setting up virtual python environments which
  allows you to have all the dependencies for the tool set up in a single environment, or have different environments set
  up for testing using different versions of Python.





  The SBOMParser module provides methods for parsing a SBOM in either SPDX or CycloneDX format and
  returns the file, package and relationship information from within the SBOM.

  The focus of the implementation is on providing a common set of SBOM data regardless of the SBOM format.

  SBOMs are supported in the following formats

  | SBOM Type | Version | Format   |
  | --------- |---------|----------|
  | SPDX      | 2.2     | TagValue |
  | SPDX      | 2.2     | JSON     |
  | SPDX      | 2.2     | YAML     |
  | SPDX      | 2.2     | RDF      |
  | SPDX      | 2.2     | XML      |
  | SPDX      | 2.3     | TagValue |
  | SPDX      | 2.3     | JSON     |
  | SPDX      | 2.3     | YAML     |
  | SPDX      | 2.3     | RDF       |
  | SPDX      | 2.3     | XML      |
  | CycloneDX | 1.4     | JSON     |
  | CycloneDX | 1.4     | XML      |
  | CycloneDX | 1.5     | JSON     |
  | CycloneDX | 1.5     | XML      |
  | CycloneDX | 1.6     | JSON     |
  | CycloneDX | 1.6     | XML      |

  **Note** that support for SPDX RDF and XML formats is limited to a few package attributes.

  _class_ **SBOMParser**(_sbom_type='auto_')

  This creates a simple SBOM Parser object. A single optional parameter, _sbom_type_, can be specified
  which represents the type of SBOM (either spdx, cyclonedx or auto). The default is auto in
  which case the parser will automatically work out the SBOM type using the
  following filename conventions.

  | SBOM      | Format   | Filename extension |
  | --------- |----------|--------------------|
  | SPDX      | TagValue | .spdx              |
  | SPDX      | JSON     | .spdx.json         |
  | SPDX      | YAML     | .spdx.yaml         |
  | SPDX      | YAML     | .spdx.yml          |
  | SPDX      | RDF      | .spdx.rdf          |
  | SPDX      | XML      | .spdx.xml          |
  | CycloneDX | JSON     | .json              |
  | CycloneDX | JSON     | .cdx.json          |
  | CycloneDX | JSON     | .bom.json          |
  | CycloneDX | XML      | .xml               |
  | CycloneDX | XML      | .cdx.xml           |
  | CycloneDX | XML      | .bom..xml          |

  The parser will check that the correct JSON files is being processed by the correct parser.
  A SPDX JSON file submitted to the CycloneDX parser will result in no data being processed.

  **Methods**

  parse_file(filename)
  Parses the SBOM file. If the file does not exist, a FileNotFoundError exception is raised.

  If an error occurs during the parsing of the file, a SBOMParserException exception is raised.

  get_files()
  Returns a list of file elements from within a parsed SBOM

  get_packages()
  Returns a list of packages elements from within a parsed SBOM

  get_relationships()
  Returns the relationship elements from within a parsed SBOM

  get_vulnerabilities()
  Returns the vulnerability elements from within a parsed SBOM

  get_services()
  Returns the software service elements from within a parsed SBOM

  get_type()
  Returns the type of SBOM (either spdx or cyclonedx)

  **Example**

  A test SBOM file (test_sbom.spdx) is used in the following example.

  ```bash
  SPDXVersion: SPDX-2.2
  DataLicense: CC0-1.0
  SPDXID: SPDXRef-DOCUMENT
  DocumentName: virtualenv
  DocumentNamespace: http://spdx.org/spdxdocs/virtualenv-b7ac9cce-efe8-4fe7-a544-100e6a5664e6
  LicenseListVersion: 3.18
  Creator: Tool: sbom4python-0.4.0
  Created: 2022-11-16T10:14:26Z
  CreatorComment: <text>This document has been automatically generated.</text>


  PackageName: virtualenv
  SPDXID: SPDXRef-Package-1-virtualenv
  PackageSupplier: Person: Bernat_Gabor
  PackageVersion: 20.16.7
  PackageDownloadLocation: NOASSERTION
  FilesAnalyzed: false
  PackageLicenseConcluded: MIT
  PackageLicenseDeclared: MIT
  PackageCopyrightText: NOASSERTION
  ExternalRef: PACKAGE-MANAGER purl pkg:pypi/virtualenv@20.16.7


  PackageName: distlib
  SPDXID: SPDXRef-Package-2-distlib
  PackageSupplier: Person: Vinay_Sajip
  PackageVersion: 0.3.6
  PackageDownloadLocation: NOASSERTION
  FilesAnalyzed: false
  PackageLicenseConcluded: NOASSERTION
  PackageLicenseDeclared: NOASSERTION
  PackageCopyrightText: NOASSERTION
  ExternalRef: PACKAGE-MANAGER purl pkg:pypi/distlib@0.3.6


  PackageName: filelock
  SPDXID: SPDXRef-Package-3-filelock
  PackageSupplier: Person: Benedikt_Schmitt
  PackageVersion: 3.8.0
  PackageDownloadLocation: NOASSERTION
  FilesAnalyzed: false
  PackageLicenseConcluded: Unlicense
  PackageLicenseDeclared: Unlicense
  PackageCopyrightText: NOASSERTION
  ExternalRef: PACKAGE-MANAGER purl pkg:pypi/filelock@3.8.0


  PackageName: platformdirs
  SPDXID: SPDXRef-Package-4-platformdirs
  PackageSupplier: NOASSERTION
  PackageVersion: 2.5.4
  PackageDownloadLocation: NOASSERTION
  FilesAnalyzed: false
  PackageLicenseConcluded: NOASSERTION
  PackageLicenseDeclared: NOASSERTION
  PackageCopyrightText: NOASSERTION
  ExternalRef: PACKAGE-MANAGER purl pkg:pypi/platformdirs@2.5.4

  Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-1-virtualenv
  Relationship: SPDXRef-Package-1-virtualenv CONTAINS SPDXRef-Package-2-distlib
  Relationship: SPDXRef-Package-1-virtualenv CONTAINS SPDXRef-Package-3-filelock
  Relationship: SPDXRef-Package-1-virtualenv CONTAINS SPDXRef-Package-4-platformdirs
  ```

  The following code sample shows the use of the SBOMParser module.

  ```python
  >>> from lib4sbom.parser import SBOMParser
  >>> test_parser = SBOMParser()
  >>> print (f"SBOM type {test_parser.get_type()}")
  SBOM type auto
  >>> test_parser.parse_file("test_sbom.spdx")
  >>> print (f"SBOM type {test_parser.get_type()}")
  SBOM type spdx
  >>> sbom_files = test_parser.get_files()
  >>> print (sbom_files)
  []
  >>> sbom_packages = test_parser.get_packages()
  >>> print (sbom_packages)
  [{'name': 'virtualenv', 'type': 'library', 'id': 'SPDXRef-Package-1-virtualenv', 'supplier_type': 'Person', 'supplier': 'Bernat_Gabor', 'version': '20.16.7', 'downloadlocation': 'NOASSERTION', 'filesanalysis': 'false', 'licenseconcluded': 'MIT', 'licensedeclared': 'MIT', 'externalreference': [['PACKAGE-MANAGER', 'purl', 'pkg:pypi/virtualenv@20.16.7']]}, {'name': 'distlib', 'type': 'library', 'id': 'SPDXRef-Package-2-distlib', 'supplier_type': 'Person', 'supplier': 'Vinay_Sajip', 'version': '0.3.6', 'downloadlocation': 'NOASSERTION', 'filesanalysis': 'false', 'licenseconcluded': 'NOASSERTION', 'licensedeclared': 'NOASSERTION', 'externalreference': [['PACKAGE-MANAGER', 'purl', 'pkg:pypi/distlib@0.3.6']]}, {'name': 'filelock', 'type': 'library', 'id': 'SPDXRef-Package-3-filelock', 'supplier_type': 'Person', 'supplier': 'Benedikt_Schmitt', 'version': '3.8.0', 'downloadlocation': 'NOASSERTION', 'filesanalysis': 'false', 'licenseconcluded': 'Unlicense', 'licensedeclared': 'Unlicense', 'externalreference': [['PACKAGE-MANAGER', 'purl', 'pkg:pypi/filelock@3.8.0']]}, {'name': 'platformdirs', 'type': 'library', 'id': 'SPDXRef-Package-4-platformdirs', 'supplier_type': 'Organization', 'supplier': 'Unknown', 'version': '2.5.4', 'downloadlocation': 'NOASSERTION', 'filesanalysis': 'false', 'licenseconcluded': 'NOASSERTION', 'licensedeclared': 'NOASSERTION', 'externalreference': [['PACKAGE-MANAGER', 'purl', 'pkg:pypi/platformdirs@2.5.4']]}]
  >>> print (len(sbom_packages))
  4
  >>> sbom_packages[0]
  {'name': 'virtualenv', 'type': 'library', 'id': 'SPDXRef-Package-1-virtualenv', 'supplier_type': 'Person', 'supplier': 'Bernat_Gabor', 'version': '20.16.7', 'downloadlocation': 'NOASSERTION', 'filesanalysis': 'false', 'licenseconcluded': 'MIT', 'licensedeclared': 'MIT', 'externalreference': [['PACKAGE-MANAGER', 'purl', 'pkg:pypi/virtualenv@20.16.7']]}
  >>> sbom_relationships = test_parser.get_relationships()
  >>> print (sbom_relationships)
  [{'source': 'TestDocument', 'type': 'DESCRIBES', 'target': 'virtualenv', 'source_id': 'SPDXRef-DOCUMENT', 'target_id': 'SPDXRef-Package-1-virtualenv'}, {'source': 'virtualenv', 'type': 'CONTAINS', 'target': 'distlib', 'source_id': 'SPDXRef-Package-1-virtualenv', 'target_id': 'SPDXRef-Package-2-distlib'}, {'source': 'virtualenv', 'type': 'CONTAINS', 'target': 'filelock', 'source_id': 'SPDXRef-Package-1-virtualenv', 'target_id': 'SPDXRef-Package-3-filelock'}, {'source': 'virtualenv', 'type': 'CONTAINS', 'target': 'platformdirs', 'source_id': 'SPDXRef-Package-1-virtualenv', 'target_id': 'SPDXRef-Package-4-platformdirs'}]
  >>> sbom_relationships[2]
  {'source': 'virtualenv', 'type': 'CONTAINS', 'target': 'filelock', 'source_id': 'SPDXRef-Package-1-virtualenv', 'target_id': 'SPDXRef-Package-3-filelock'}
  >>>
  ```



  The SBOMGenerator module provides methods for generating a SBOM in either SPDX or CycloneDX format.

  The focus of the implementation is on providing a single interface regardless of the SBOM type and format.

  SBOMs can be generated in the following formats

  | SBOM Type | Version | Format    |
  | --------- |---------| ----------|
  | SPDX      | 2.2     | Tag       |
  | SPDX      | 2.2     | JSON      |
  | SPDX      | 2.2     | YAML      |
  | SPDX      | 2.3     | Tag       |
  | SPDX      | 2.3     | JSON      |
  | SPDX      | 2.3     | YAML      |
  | CycloneDX | 1.4     | JSON      |
  | CycloneDX | 1.5     | JSON      |
  | CycloneDX | 1.6     | JSON      |

  The default version for CycloneDX is version 1.6. However, the version can be overridden by setting the environment variable LIB4SBOM_CYCLONEDX_VERSION to "1.4" if required.

  The default version for SPDX is version 2.3. However, the version can be overridden by setting the environment variable LIB4SBOM_SPDX_VERSION to "SPDX-2.2" if required.

  _class_ **SBOMGenerator**(_validate_license: True, sbom_type="spdx", format="tag", application="lib4sbom", version="0.1"_)

  This creates a simple SBOM Generator object. The following optional parameters can be specified:

  _validate_license_ indicates if license information is validated against the set of [SPDX license identifiers](https://spdx.org/licenses/). This option only applies for SPDX SBOMs
  as this is mandatory for CycloneDX SBOMs.

  _sbom_type_ indicates the type of SBOM to be generated. Valid options are spdx or cyclonedx

  _format_ indicates the format that the SBOM is to be generated in. Valid options are Tag, JSON or YAML. If an invalid format is specified,
  a default format of JSON will be assumed. If an unsupported format is specified for the type of SBOM (e.g. Tag or YAML for CycloneDX), a default
  format is assumed (Tag for SPDX, JSON for CycloneDX)

  _application_ and _version_ specify the name and version of the tool which created the SBOM. If these are not specified, the application name is 'lib4sbom' and the version is '0.1'

  **Methods**

  _generate(project_name, sbom_data, filename = "", send_to_output = True)_

  The method generates the SBOM file. The parameters are

  _project_name_ specifies the name of the project

  _sbom_data_ contain the SBOM data to be used in the generation. It contains details of the packages, files and relationships to be included in the SBOM.

  _filename_ is the name of the file to be generated. The default is for the output to be generated to a console.

  _send_to_output_ indicates if the output is to be sent to the filename.

  get_sbom()
  Returns the generated SBOM in the requested format

  get_type()
  Returns the type of the generated SBOM (either spdx or cyclonedx)

  get_format()
  Returns the format of the generated SBOM (one of tag, json or yaml)

  **Example**

  The following code sample shows the use of the SBOMGenerator module being used
  in the conversion of a SBOM from the Tag Value format to YAML format. The output is sent ot the console.

  ```python
  >>> from lib4sbom.parser import SBOMParser
  >>> test_parser = SBOMParser()
  >>> test_parser.parse_file("test_sbom.spdx")
  >>> from lib4sbom.generator import SBOMGenerator
  >>> test_generator = SBOMGenerator(format="yaml")
  >>> test_generator.get_type()
  'spdx'
  >>> test_generator.get_format()
  'yaml'
  >>> test_generator.generate("TestApp",test_parser.get_sbom())
  SPDXID: SPDXRef-DOCUMENT
  creationInfo:
    comment: This document has been automatically generated.
    created: '2023-01-24T13:51:36Z'
    creators:
    - 'Tool: lib4sbom-0.1.0'
    licenseListVersion: '3.18'
  dataLicense: CC0-1.0
  documentNamespace: http://spdx.org/spdxdocs/TestDocument-817c4e4c-eac4-49d9-bc41-65f0972edce8
  name: TestDocument
  ...
  - relatedSpdxElement: SPDXRef-Package-4-platformdirs
    relationshipType: DESCRIBES
    spdxElementId: SPDXRef-DOCUMENT
  - relatedSpdxElement: SPDXRef-Package-2-distlib
    relationshipType: CONTAINS
    spdxElementId: SPDXRef-Package-1-virtualenv
  - relatedSpdxElement: SPDXRef-Package-3-filelock
    relationshipType: CONTAINS
    spdxElementId: SPDXRef-Package-1-virtualenv
  - relatedSpdxElement: SPDXRef-Package-4-platformdirs
    relationshipType: CONTAINS
    spdxElementId: SPDXRef-Package-1-virtualenv
  spdxVersion: SPDX-2.3
  >>> test_generator.get_sbom()
  {'SPDXID': 'SPDXRef-DOCUMENT', 'spdxVersion': 'SPDX-2.3', 'creationInfo': {'comment': 'This document has been automatically generated.', 'creators': ['Tool: lib4sbom-0.1.0'], 'created': '2023-01-24T13:51:36Z', 'licenseListVersion': '3.18'}, 'name': 'TestDocument', 'dataLicense': 'CC0-1.0', 'documentNamespace': 'http://spdx.org/spdxdocs/TestDocument-817c4e4c-eac4-49d9-bc41-65f0972edce8', 'packages': [{'SPDXID': 'SPDXRef-Package-1-virtualenv', 'name': 'virtualenv', 'versionInfo': '20.16.7', 'supplier': 'Person: Bernat_Gabor', 'downloadLocation': 'NONE', 'filesAnalyzed': 'false', 'licenseConcluded': 'MIT', 'licenseDeclared': 'MIT', 'copyrightText': 'NOASSERTION', 'externalRefs': [{'referenceCategory': 'PACKAGE-MANAGER', 'referenceType': 'purl', 'referenceLocator': 'pkg:pypi/virtualenv@20.16.7'}]}, {'SPDXID': 'SPDXRef-Package-2-distlib', 'name': 'distlib', 'versionInfo': '0.3.6', 'supplier': 'Person: Vinay_Sajip', 'downloadLocation': 'NONE', 'filesAnalyzed': 'false', 'licenseConcluded': 'NOASSERTION', 'licenseDeclared': 'NOASSERTION', 'copyrightText': 'NOASSERTION', 'externalRefs': [{'referenceCategory': 'PACKAGE-MANAGER', 'referenceType': 'purl', 'referenceLocator': 'pkg:pypi/distlib@0.3.6'}]}, {'SPDXID': 'SPDXRef-Package-3-filelock', 'name': 'filelock', 'versionInfo': '3.8.0', 'supplier': 'Person: Benedikt_Schmitt', 'downloadLocation': 'NONE', 'filesAnalyzed': 'false', 'licenseConcluded': 'Unlicense', 'licenseDeclared': 'Unlicense', 'copyrightText': 'NOASSERTION', 'externalRefs': [{'referenceCategory': 'PACKAGE-MANAGER', 'referenceType': 'purl', 'referenceLocator': 'pkg:pypi/filelock@3.8.0'}]}, {'SPDXID': 'SPDXRef-Package-4-platformdirs', 'name': 'platformdirs', 'versionInfo': '2.5.4', 'supplier': 'Organization: Unknown', 'downloadLocation': 'NONE', 'filesAnalyzed': 'false', 'licenseConcluded': 'NOASSERTION', 'licenseDeclared': 'NOASSERTION', 'copyrightText': 'NOASSERTION', 'externalRefs': [{'referenceCategory': 'PACKAGE-MANAGER', 'referenceType': 'purl', 'referenceLocator': 'pkg:pypi/platformdirs@2.5.4'}]}], 'relationships': [{'spdxElementId': 'SPDXRef-DOCUMENT', 'relatedSpdxElement': 'SPDXRef-Package-1-virtualenv', 'relationshipType': 'DESCRIBES'}, {'spdxElementId': 'SPDXRef-DOCUMENT', 'relatedSpdxElement': 'SPDXRef-Package-2-distlib', 'relationshipType': 'DESCRIBES'}, {'spdxElementId': 'SPDXRef-DOCUMENT', 'relatedSpdxElement': 'SPDXRef-Package-3-filelock', 'relationshipType': 'DESCRIBES'}, {'spdxElementId': 'SPDXRef-DOCUMENT', 'relatedSpdxElement': 'SPDXRef-Package-4-platformdirs', 'relationshipType': 'DESCRIBES'}, {'spdxElementId': 'SPDXRef-Package-1-virtualenv', 'relatedSpdxElement': 'SPDXRef-Package-2-distlib', 'relationshipType': 'CONTAINS'}, {'spdxElementId': 'SPDXRef-Package-1-virtualenv', 'relatedSpdxElement': 'SPDXRef-Package-3-filelock', 'relationshipType': 'CONTAINS'}, {'spdxElementId': 'SPDXRef-Package-1-virtualenv', 'relatedSpdxElement': 'SPDXRef-Package-4-platformdirs', 'relationshipType': 'CONTAINS'}]}
  >>>
  ```



  _class_ **SBOMOutput**(_filename="", output_format="tag"_)

  This creates a simple SBOM Output object. The following optional parameters can be specified:

  _filename_ indicates the output destination of the SBOM to be generated. If a valid filename path is provided and a file can be created, then the output will be to a file otherwise
  it will be output to the console.

  _output_format_ indicates the format that the SBOM is to be generated in. Valid options are Tag, JSON or YAML. If an invalid format is specified,
  a default format of Tag will be assumed.

  **Methods**

  generate_output(dataset) Outputs a SBOM file. The parameters are

  _dataset_ contains SBOM data in the output format. If the SBOM data is NOT in the format specified by the output_format parameter, no output will be generated.

  **NOTE A valid dataset will normally be generated by the SBOMGenerator class and obtained by a call to the get_sbom() method.**

  get_type()
  Return the destination of the generated SBOM. Either file or console

  get_format()
  Return the format of the generated SBOM. One of Tag, JSON or YAML.

  **Example**

  The following code sample shows the use of the SBOMOutput module.

  ```python
  >>> from lib4sbom.parser import SBOMParser
  >>> test_parser = SBOMParser()
  >>> test_parser.parse_file("test_sbom.spdx")
  >>> from lib4sbom.generator import SBOMGenerator
  >>> test_generator = SBOMGenerator(format="json")
  >>> test_generator.generate("TestApp",test_parser.get_sbom())
  >>> from lib4sbom.output import SBOMOutput
  >>> sbom_output = SBOMOutput(filename="testapp.json", output_format="json")
  >>> sbom_output.generate_output(test_generator.get_sbom())
  >>>
  ```



  _class_ **SBOM**()

  This creates a simple SBOM object. This object contains all the items to be contained within the SBOM including
  components and relationships. It is left to the application manipulating the SBOM object to apply validation as appropriate
  for the presence of each attribute.

  **Methods**

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_type(). Unless indicated, the method just takes a single parameter for the value. Where indicated, multiple instances of the attribute may be defined.

  | Attribute         | Multiple | Note |
  |-------------------|----------|------|
  | Version           | No       | (1)  |
  | Type              | No       | (2)  |
  | Uuid              | No       | (3)  |
  | Bom_Version       | No       |      |

  **Note**

  1. This relates to the version of the specification of SBOM specified by the type atrribute. e.g. 1.4 for CycloneDX, SPDX-2.3 for SPDX.

  2. This refers to the type of SBOM either SPDX or CycloneDX.

  3. This relates to the unique identifier for the SBOM.

  **_Getter Methods_**

  get_sbom()
  Returns the SBOM object as a dictionary.

  **Example**

  ```python
  >>> from lib4sbom.sbom import SBOM
  >>> sbom = SBOM()
  >>> sbom.set_type(sbom_type='cyclonedx')
  >>> sbom.set_version("1.4")
  >>> sbom.set_uuid("urn:uuid:My_uuid_1234")
  >>> sbom.set_bom_version("2")
  >>> sbom.get_type()
  'cyclonedx'
  >>> from lib4sbom.data.document import SBOMDocument
  >>> my_doc = SBOMDocument()
  >>> my_doc.set_metadata_type("firmware")
  >>> sbom.add_document(my_doc.get_document())
  ```



  _class_ **SBOMDocument**()

  This creates a simple SBOMDocument object. This object contains the values of the attributes
  that can be associated with a SBOM. This includes attributes such as name, identifier, type of file,
  checksum and licence information. As each of the attributes are optional, it is left to the application manipulating the
  SBOMFile object to apply validation as appropriate for the presence of each attribute.

  **Methods**

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_filetype(). The attribute names are aligned with the attributes of the File Object in the SPDX Specification. Unless
  indicated, the method just takes a single parameter for the value. Where indicated, multiple instances of the attribute may be defined.

  | Attribute         | Multiple | Note |
  |-------------------|----------|------|
  | Name              | No       |      |
  | Id                | No       |      |
  | DataLicense       | No       |      |
  | Metadata_Type     | No       | (1)  |
  | Metadata_Supplier | No       |      |
  | Metadata_Version  | No       |      |
  | Bom_Version       | No       |      |

  **Note**

  1. This relates to the type of component which the SBOM is describing. This is attribute is only used for CycloneDX SBOMs.

  There is an additional setter method, **set_value**(_attribute, value_) which allows the setting of any attribute.

  `set_value("language", "Rust")`

  **_Getter Methods_**

  get_document()
  Returns the SBOMDocument object as a list.

  get_name()
  Returns the name of the SBOMDocument object or a default value if the attribute does not exist within the instance of the SBOMDocument object.

  get_value(attribute)
  Returns the value of the attribute. A default value is returned if the attribute does not exist within the instance of the SBOMDocument object.

  **Example**

  ```python
  >>> from lib4sbom.data.document import SBOMDocument
  >>> sbom_document = SBOMDocument()
  >>> sbom_document.set_name("test_file")
  >>> sbom_document.set_metadata_type("firmware")
  >>> sbom_document.get_name()
  'test_file'
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_document(sbom_document.get_document())
  ```



  _class_ **SBOMFile**()

  This creates a simple SBOM File object. This object contains the values of the attributes
  that can be associated with a file artefact within an SBOM. This includes attributes such as name, identifier, type of file,
  checksum and licence information. As each of the attributes are optional, it is left to the application manipulating the
  SBOMFile object to apply validation as appropriate for the presence of each attribute.

  **Methods**

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_filetype(). The attribute names are aligned with the attributes of the File Object in the SPDX Specification. Unless
  indicated, the method just takes a single parameter for the value. Where indicated, multiple instances of the attribute may be defined.

  | Attribute         | Multiple | Note |
  |-------------------|----------|------|
  | Name              | No       |      |
  | Id                | No       |      |
  | FileType          | Yes      |      |
  | Checksum          | Yes      | (1)  |
  | LicenseConcluded  | No       |      |
  | LicenceInfoInFile | Yes      |      |
  | LicenceComment    | No       |      |
  | CopyrightText     | No       |      |
  | Comment           | No       |      |
  | Notice            | No       |      |
  | Contributor       | Yes      |      |
  | Attribution       | No       |      |

  **Note**

  1. The set_checksum method takes two parameters, the checksum algorithm (e.g. SHA256) and the actual checksum value (as a string)

  There is an additional setter method, **set_value**(_attribute, value_) which allows the setting of any attribute.

  `set_value("language", "Rust")`

  **_Getter Methods_**

  get_file()
  Returns the SBOMFile object as a dictionary. The value of an attribute is returned as a string except where multiple instances of an attribute are allowed in which
  case the value of the attribute is returned as a List.

  get_name()
  Returns the name of the SBOMFile object or None if the 'name' attribute does not exist within the instance of the SBOMFile object.

  get_value(attribute)
  Returns the value of the attribute. A default value is returned if the attribute does not exist within the instance of the SBOMFile object.

  _**Utility Methods**_

  initialise() Reinitialises a SBOMFile Object. All data associated with the object is deleted.

  **Example**

  ```python
  >>> from lib4sbom.data.file import SBOMFile
  >>> sbom_file = SBOMFile()
  >>> sbom_files = {}
  >>> sbom_file.initialise()
  >>> sbom_file.set_name("test_file.c")
  >>> sbom_file.set_licenseconcluded("MIT")
  >>> file_hash = <<< some calculation >>>
  >>> sbom_file.set_checksum("SHA1", file_hash)
  >>> sbom_file.set_id("SPDXRef-File-0001")
  >>> sbom_files[sbom_file.get_name()] = sbom_file.get_file()
  >>> sbom_file.initialise()
  >>> sbom_file.set_name("makefile")
  >>> sbom_file.set_licenseconcluded("NOASSERTION")
  >>> sbom_file.set_id("SPDXRef-File-0002")
  >>> sbom_files[sbom_file.get_name()] = sbom_file.get_file()
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_files(sbom_files)
  ```



  _class_ **SBOMPackage**()

  This creates a simple SBOM Package object. This object contains the values of the attributes
  that can be associated with a package or component artefact within an SBOM. This includes attributes such as name, identifier, supplier,
  version and licence information. As each of the attributes are optional, it is left to the application manipulating the
  SBOMPackage object to apply validation as appropriate for the presence of each attribute.

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_version(). The attribute names are aligned with the attributes of the Package Object in the SPDX Specification. Unless
  indicated, the method just takes a single parameter for the value. Where indicated, multiple instances of the attribute may be defined.

  | Attribute         | Multiple | Note |
  |-------------------|----------|------|
  | Name              | No       |      |
  | Id                | No       |      |
  | Type              | No       | (1)  |
  | Checksum          | Yes      | (2)  |
  | LicenseConcluded  | No       |      |
  | LicenseDeclared   | No       | (3)  |
  | LicenceInfoInFile | Yes      |      |
  | LicenceComments   | No       |      |
  | FilesAnalysis     | No       |      |
  | CopyrightText     | No       |      |
  | Comment           | No       |      |
  | Originator        | No       |      |
  | Supplier          | No       |      |
  | Version           | No       |      |
  | Homepage          | No       |      |
  | Property          | Yes      | (4)  |
  | DownloadLocation  | No       |      |
  | Description       | No       |      |
  | ExternalReference | Yes      | (5)  |
  | Cpe               | No       |      |
  | Purl              | No       | (6)  |
  | Summary           | No       |      |
  | SourceInfo        | No       |      |
  | Filename          | No       |      |

  **Note**

  1. The set_type method is used to indicate the purpose of the package (e.g. Application, Library, Operating-System).

  2. The set_checksum method takes two parameters, the checksum algorithm (e.g. SHA256) and the actual checksum value (as a string)

  3. The set_licensedeclared method takes an optional second parameter which is the license name. In this case the first parameter, license, is assumed to be the license text rather than the license identity.

  4. The set_property method takes two parameters which are the property name and value.

  5. The set_externalreference method takes three parameters which are the category (SECURITY or PACKAGE_MANAGER), type (cpe22Type, cpe23Type or purl) and the element corresponding to the tyoe.

  6. The set_cpe takes an optional second parameter which is the CPE type (default is cpeType23).

  There is an additional setter method, **set_value**(_attribute, value_) which allows the setting of any attribute.

  `set_value("language", "Rust")`

  **_Getter Methods_**

  get_package()
  Returns the SBOMPackage object as a dictionary. The value of an attribute is returned as a string except where multiple instances of an attribute are allowed in which
  case the value of the attribute is returned as a List.

  get_name()
  Returns the name of the SBOMPackage object or None if the 'name' attribute does not exist within the instance of the SBOMPackage object.

  get_value(attribute)
  Returns the value of the attribute. A default value is returned if the attribute does not exist within the instance of the SBOMPackage object.

  get_purl()
  Returns the PURL identifier as a string for the package or None if no PURL element is defined.

  get_cpe()
  Returns the CPE identifier as a string for the package or None if no CPE element is defined.

  **_Utility Methods_**

  initialise() Reinitialises a SBOMPackage Object. All data associated with the object is deleted.

  **Example**

  ```python
  >>> from lib4sbom.data.package import SBOMPackage
  >>> sbom_packages = {}
  >>> my_package = SBOMPackage()
  >>> my_package.set_name("glibc")
  >>> my_package.set_version("2.15")
  >>> my_package.set_supplier("organisation","gnu")
  >>> my_package.set_licensedeclared("GPL3")
  >>> sbom_packages[(my_package.get_name(), my_package.get_value('version'))] = my_package.get_package()
  >>> my_package.initialise()
  >>> my_package.set_name("tomcat")
  >>> my_package.set_version("9.0.46")
  >>> my_package.set_supplier("organisation","apache")
  >>> my_package.set_licensedeclared("Apache-2.0")
  >>> sbom_packages[(my_package.get_name(), my_package.get_value('version'))] = my_package.get_package()
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_packages(sbom_packages)
  ```



  _class_ **SBOMRelationship**()

  This creates a simple SBOMRelationship object which is used to show the relationship between two items within an SBOM.
  As there are multiple types of relationships, it is left to the application manipulating the
  SBOMRelationship object to apply validation as appropriate to ensure the semantics of the relationship are correct.

  **_Setter Methods_**

  set_relationship (source, type, target)

  _source_ and _target_ are the unique identifiers of the components for which the relationship is being defined.

  _type_ is the type of relationship being defined.

  **_Getter Methods_**

  get_relationship()
  Returns the SBOMRelationship object as a dictionary.

  **Example**

  ```python
  >>> from lib4sbom.data.relationship import SBOMRelationship
  >>> sbom_relationships = []
  >>> my_relationship = SBOMRelationship()
  >>> my_relationship.set_relationship("Package-1","CONTAINS", "Package-2")
  >>> sbom_relationships.append(my_relationship)
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_relationships(sbom_relationships)
  ```



  _class_ **Vulnerability**(validation = None)

  This creates a simple vulnerability object which is used to define the details of a vulnerability typically for a component
  specified within an SBOM. As there are multiple ways of specifying the status of a vulnerability, it is left to the
  application manipulating the Vulnerability object to apply validation as appropriate to ensure the semantics of the vulnerability are correct.

  The following optional parameter can be specified:

  _validation_ indicates that the status field is to be validated against the [OpenVEX](https://openvex.dev), [CycloneDX](https://www.cyclonedx.org) or [CSAF](https://docs.oasis-open.org/csaf/csaf/v2.0/csaf-v2.0.html) specifcaitions.

  **NOTE** Vulnerability objects are only included in CyclonedDX SBOMs

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_release(). Each method takes a single parameter for the value. Multiple instances of the attribute are not allowed.


  | Attribute         | Multiple | Note |
  |-------------------|----------|------|
  | Name              | No       |      |
  | Id                | No       | (1)  |
  | Release           | No       |      |
  | Status            | No       | (2)  |
  | Comment           | No       | (3)  |
  | Description       | No       | (4)  |


  **Note**

  1. The set_id method is used to indicate the identity of the vulnerability e.g. CVE-2021-44228

  2. The set_status is used to indicate the status of the vulnerability. Validation of the value of status may be optionally performed as determined by
  the optional parameter _validation_ specified in the creation of the Vulnerability object. An invalid status is indicated by a value of None.

  3. The set_comment method is used to provide additional information to support the status value e.g. a brief justification

  4. The set_description method is used to describe the vulnerability.

  There is an additional setter method, **set_value**(_attribute, value_) which allows the setting of any attribute.

  `set_value("bom-ref", "rust@1.2.3")`

  **_Getter Methods_**

  get_vulnerability()
  Returns the vulnerability object as a dictionary.

  **Example**

  ```python
  >>> from lib4sbom.data.vulnerability import Vulnerability
  >>> vulnerabilities = []
  >>> vulnerability = Vulnerability(validation="cyclonedx")
  >>> vulnerability.set_id("CVE-2023-1235")
  >>> vulnerability.set_name("rust")
  >>> vulnerability.set_release("1.2.3")
  >>> vulnerability.set_value("bom-ref", "rust@1.2.3")
  >>> vulnerability.set_status("in_triage")
  >>> vulnerabilities.append(vulnerability.get_vulnerability())
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_vulnerabilities(vulnerabilities)
  ```



  _class_ **SBOMService**(validation = None)

  This creates a simple software service object which is used to define the details of a software service.
  As there are multiple ways of specifying a service, it is left to the
  application manipulating the service object to apply validation as appropriate to ensure the semantics of the service are correct.

  **NOTE** Services objects are only included in CyclonedDX SBOMs

  **_Setter Methods_**

  For the following attributes, a method **_set_attribute(value)_** is provided. Note that the attribute name is always in _lowercase_.
  e.g. set_release(). Each method takes a single parameter for the value. Multiple instances of the attribute are not allowed.


  | Attribute        | Multiple | Note |
  |------------------|----------|------|
  | Name             | No       |      |
  | Id               | No       | (1)  |
  | Version          | No       |      |
  | Provider         | No       | (2)  |
  | Endpoint         | Yes      |      |
  | Data             | Yes      | (3)  |
  | Property         | Yes      | (4)  |
  | License          | Yes      |      |
  | Exernalreference | Yes      | (5)  |
  | Description      | No       |      |


  **Note**

  1. The set_id method is used to indicate the identity of the service. If this is not specified, an id will be automatically generated.

  2. The set_provider is used to specify details of the service provider. There are multiple parameters which can be specified (name, url, contactname, email address and phone) at least one must be specified.

  3. The set_data method is used to provide additional information to describe the data being exhanged. There are two mandatatory parameters flow type ("Inbound", "Outbound", "Bi-directional" or "Unknown") and classification, and two optional paramters name and description.

  4. The set_property method takes two parameters which are the property name and value.

  5. The set_externalreference method takes three parameters, the URL, the type of information being referenced and an optional comment.

  There is an additional setter method, **set_value**(_attribute, value_) which allows the setting of any attribute.

  `set_value("trustzone", "Data_DMZ")`

  **_Getter Methods_**

  get_service()
  Returns the service object as a dictionary.

  **Example**

  ```python
  >>> from lib4sbom.data.service import SBOMService
  >>> sbom_services = {}
  >>> my_service=SBOMService()
  >>> my_service.set_name("Microsoft 365")
  >>> my_service.set_version("2022.04")
  >>> my_service.set_provider(name="Microsoft Inc.", contact="Fred Flintstone", email="fred@micrsoft.com")
  >>> my_service.set_description("Business productivity suite")
  >>> my_service.set_value("authenticated",True)
  >>> my_service.set_endpoint("www.microsoft.com")
  >>> my_service.set_endpoint("www.microsoft.com/owa")
  >>> my_service.set_data("Bi-directional","None",description="document")
  >>> my_service.set_data("outbound","PII",name="User information")
  >>> my_service.set_license("Apache-2.0")
  >>> my_service.set_license("MIT")
  >>> my_service.set_property("Data_Location","EU")
  >>> my_service.set_externalreference("https://www.microsoft.com","Website", "Company website")
  >>> sbom_services[(my_service.get_name(), my_service.get_value('version'))] = my_service.get_service()
  >>> from lib4sbom.sbom import SBOM
  >>> my_sbom = SBOM()
  >>> my_sbom.add_services(sbom_services)
  ```



  A number of example scripts are included in the _examples_ subdirectory.



  The following design decisions have been made in processing the SBOM files:

  1. It is assumed that the SBOM is valid and contains syntactically valid data.

  2. In SPDX format, the tool assumes that the name of a package preceeds the version and license of the package.

  3. In SPDX format, the current implementation does not currently handle multi-line elements.

  4. When processing and validating licenses, the application will use a set of synonyms to attempt to map some license identifiers to the correct [SPDX License Identifiers](https://spdx.org/licenses/). However, the
  user of the tool is reminded that they should assert the quality of any data which is provided by the tool particularly where the license identifier has been modified.

  5. When parsing an SBOM with multiple instances of a component with the same name and version, only one instance of the comnponent is retained. If mulitple instances are
  required to be preserved, consider ensuring that the component name is unique.



  1. Support later versions of SPDX (3.0).

  2. Enhance validation of SBOM data to check for all mandatory elements.

  3. Implement Python typing across modules.

  4. Migrate packaging infrastructure away from setup.py.

  5. Utilise third-party SPDX and CycloneDX parsers and generators

  6. Add further support for SPDX XML and RDF formats

  7. Add generator for CycloneDX XML documents.

  8. Implement test suite.



  Licensed under the Apache 2.0 Licence.

  The tool uses a local copy of the [SPDX Licenses List](https://github.com/spdx/license-list-data) which is released under
  [Creative Commons Attribution 3.0 (CC-BY-3.0)](http://creativecommons.org/licenses/by/3.0/).

  This tool uses information sourced from the [Blue Oak Council's License List](https://blueoakcouncil.org/list) which is released under
  [Creative Commons Attribution 1.0 (CC-BY-1.0)](https://creativecommons.org/licenses/by/1.0/).



  This tool is meant to support software development. The usefulness of the tool is dependent on the SBOM data
  which is provided to the tool. Unfortunately, the tool is unable to determine the validity or completeness of such a SBOM file; users of the tool
  are therefore reminded that they should assert the quality of any data which is provided to the tool.

  Parsing invalid SBOM files may lead to unpredictable results.



  Bugs and feature requests can be made via GitHub Issues.


pkgId: 14a8a8ffec546e466d232e177b77b2aa07441d2e3c4c5cbaa7fa146a10d76134
name: python-libasterix-help
arch: noarch
version: 0.9.0
epoch: 0
release: 1
summary: Development documents and examples for libasterix
url: https://github.com/zoranbosnjak/asterix-libs/tree/main/libs/python#readme
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libasterix-0.9.0-1.src.rpm
location_href: Packages/python-libasterix-help-0.9.0-1.noarch.rpm
checksum_type: sha256
description:
  Features:

  - asterix data parsing/decoding from bytes
  - asterix data encoding/unparsing to bytes
  - precise conversion functions for physical quantities
  - support for many asterix categories and editions
  - support for Reserved Expansion Fields (REF)
  - support for categories with multiple UAPs, eg. cat001
  - support for context dependent items, eg. I062/380/IAS
  - pure python implementation
  - type annotations for static type checking,
    including subitem access by name



  Encoding and decoding asterix example.
  This example also includes type annotations for static
  type checking with `mypy`. In a simple untyped environment,
  the type annotations and assertions could be skipped.

  ```python
  from typing import *
  from binascii import hexlify, unhexlify
  from dataclasses import dataclass

  from asterix.base import *
  import asterix.generated as gen


  Cat034 = gen.Cat_034_1_29
  Cat048 = gen.Cat_048_1_32


  class Token:
      pass

  @dataclass
  class NorthMarker(Token):
      pass

  @dataclass
  class SectorCrossing(Token):
      azimuth: float

  @dataclass
  class Plot(Token):
      rho: float
      theta: float
      ssr: str


  tx_message = [
      NorthMarker(),
      SectorCrossing(0.0),
      Plot(rho=10.0, theta=45.0, ssr='7777'),
      SectorCrossing(45.0),
  ]
  print('sending message:', tx_message)


  def encode(token: Token) -> bytes:
      if isinstance(token, NorthMarker):
          rec034 = Cat034.cv_record.create({
              '000': 1, # North marker message
              '010': (('SAC', 1), ('SIC', 2)),
          })
          datablock034 = Cat034.create([rec034])
          return datablock034.unparse().to_bytes()
      if isinstance(token, SectorCrossing):
          rec034 = Cat034.cv_record.create({
              '000': 2, # Sector crossing message
              '010': (('SAC', 1), ('SIC', 2)),
              '020': ((token.azimuth, "°")),
          })
          datablock034 = Cat034.create([rec034])
          return datablock034.unparse().to_bytes()
      if isinstance(token, Plot):
          rec048 = Cat048.cv_record.create({
              '010': (('SAC', 1), ('SIC', 2)),
              '040': (('RHO', (token.rho, "NM")), ('THETA', (token.theta, "°"))),
              '070': (0, 0, 0, 0, ('MODE3A', token.ssr)),
          })
          datablock048= Cat048.create([rec048])
          return datablock048.unparse().to_bytes()
      raise Exception('unexpected token', token)

  datablocks = [encode(token) for token in tx_message]
  tx = b''.join(datablocks)
  print('bytes on the wire:', hexlify(tx))

  assert hexlify(tx) == \
      b'220007c0010201220008d00102020030000c9801020a0020000fff220008d001020220'


  def decode(rx_bytes: bytes) -> List[Token]:
      message: List[Token] = []

      raw_datablocks = RawDatablock.parse(Bits.from_bytes(tx))
      assert not isinstance(raw_datablocks, ValueError)
      for db in raw_datablocks:
          cat = db.get_category()
          if cat == 34:
              result034 = Cat034.cv_uap.parse(db.get_raw_records())
              assert not isinstance(result034, ValueError)
              for rec034 in result034:
                  i000 = rec034.get_item('000')
                  assert i000 is not None
                  val = i000.as_uint()
                  if val == 1:
                      message.append(NorthMarker())
                  elif val == 2:
                      i020 = rec034.get_item('020')
                      assert i020 is not None
                      azimuth = i020.variation.content.as_quantity("°")
                      message.append(SectorCrossing(azimuth = azimuth))
                  else:
                      pass
          elif cat == 48:
              result048 = Cat048.cv_uap.parse(db.get_raw_records())
              assert not isinstance(result048, ValueError)
              for rec048 in result048:
                  i040 = rec048.get_item('040')
                  i070 = rec048.get_item('070')
                  assert i040 is not None
                  assert i070 is not None
                  rho = i040.variation.get_item('RHO').variation.content.as_quantity("NM")
                  theta = i040.variation.get_item('THETA').variation.content.as_quantity("°")
                  ssr = i070.variation.get_item('MODE3A').variation.content.as_string()
                  message.append(Plot(rho = rho, theta = theta, ssr = ssr))
          else:
              pass
      return message

  rx = tx
  rx_message = decode(rx)


  print('received message:', rx_message)
  assert rx_message == tx_message
  ```



  Use any of the following methods:



  Install from python package index <https://pypi.org/project/libasterix/>:

  ``` bash
  pip install libasterix
  ```



  Install from github:

  ``` bash

  pip install -e "git+https://github.com/zoranbosnjak/asterix-libs.git#egg=libasterix&subdirectory=libs/python"


  pip install -e "git+https://github.com/zoranbosnjak/asterix-libs.git@devel#egg=libasterix&subdirectory=libs/python"
  ```



  Manually copy library files from [repository](https://github.com/zoranbosnjak/asterix-libs/tree/main/libs/python/src/asterix).

  Download and copy files either alongside your project sources or
  to some location where `python` can find it.

  ```bash

  python3 -c "import sys; print('\n'.join(sys.path))"
  ```



  Check library installation.

  ```bash
  python3 -c "import asterix.base as base; print(base.AstSpec)"
  python3 -c "import asterix.generated as gen; print(gen.manifest['CATS'].keys())"
  ```



  This tutorial assumes importing complete `asterix` module into the current
  namespace. In practice however only the required objects could be imported
  or the module might be imported to a dedicated namespace.

  ```python
  from asterix.base import *
  from asterix.generated import *
  ```



  Some operation (eg. parsing) can fail on unexpected input. In such case,
  to indicate an error, this library will not raise an exception, but will
  return `ValueError('problem description')` instead.

  With this approach, a user can handle errors in a type safe way, for example:

  ```python
  def parse_datablocks(s: bytes) -> List[RawDatablock]:
      dbs = RawDatablock.parse(Bits.from_bytes(s))
      if isinstance(dbs, ValueError):
          return [] # or raise exception, or ...
      return dbs
  ```

  For clarity, the error handling part is skipped in some parts of this tutorial.



  All operation on asterix objects are *immutable*.

  For example:

  ```python
  from asterix.generated import *

  Spec = Cat_002_1_1


  rec0 = Spec.cv_record.create({})


  rec0.set_item('000', 1)
  assert rec0.get_item('000') is None


  rec1 = rec0.set_item('000', 1)
  assert rec1.get_item('000') is not None


  rec2a = rec0.set_item('000', 1).set_item('010', (('SAC', 1), ('SIC', 2)))
  rec2b = Spec.cv_record.create({'000': 1, '010': (('SAC', 1), ('SIC', 2))})
  assert rec2a.unparse() == rec2b.unparse()



  rec0 = rec0.set_item('000', 1)
  assert rec0.get_item('000') is not None
  ```



  - `cv_{name}` stands for *class variable*, to avoid name clash with
    *instance variable* with the same name (which are without prefix).
  - `RuleContent` and `RuleVariation` are necessary to cope with some
    small number of irregular cases with asterix definitions
    (that is: context dependent definitions).
  - `NonSpare` is (as name suggests) an item with some defined content.
    It is a separate class from `Item` and `Spare`, to reuse definition
    in different contexts, for example `Compound` subitems are `NonSpare`.



  Datagram is a raw binary data as received for example from UDP socket.
  This is represented with `bytes` data type in python.



  Raw datablock is asterix datablock in the form `cat|length|data` with the
  correct byte size. A datagram can contain multiple datablocks.

  This is represented in python with `class RawDatablock`.

  In some cases it might be sufficient to work with raw datablocks, for example
  in the case of asterix category filtering. In this case, it is not required
  to fully parse asterix records.

  **Example**: Category filter, drop datablocks if category == 1

  ```python
  from binascii import hexlify, unhexlify
  from asterix.base import *

  def receive_from_udp() -> bytes: # UDP rx text function
      return unhexlify(''.join([
          '01000401', # cat1 datablock
          '02000402', # cat2 datablock
          ]))

  def send_to_udp(s: bytes) -> None: # UDP tx test function
      print(hexlify(s))

  input_data = Bits.from_bytes(receive_from_udp())
  raw_datablocks = RawDatablock.parse(input_data) # can fail on wrong input
  assert not isinstance(raw_datablocks, ValueError)
  valid_datablocks = [db.unparse().to_bytes() \
                      for db in raw_datablocks if db.get_category() != 1]
  output_data = b''.join(valid_datablocks)
  send_to_udp(output_data)
  ```



  Datablock (represented as `class Datablock`) is a higher level, where we
  have a guarantee that all containing records are semantically correct
  (asterix is fully parsed or correctly constructed).

  Datablock/Record is required to work with asterix items and subitems.

  **Example**: Create 2 records and combine them to a single datablock

  ```python
  from binascii import hexlify
  from asterix.generated import *

  Spec = Cat_002_1_1 # use cat002, edition 1.1

  rec1 = Spec.cv_record.create({
      '000': 1,
      '010': (('SAC', 1), ('SIC', 2)),
      })

  rec2 = Spec.cv_record.create({
      '000': 2,
      '010': (('SAC', 1), ('SIC', 2)),
      })

  db = Spec.create([rec1, rec2])
  s = db.unparse().to_bytes() # ready to send over the network
  print(hexlify(s))
  ```

  **Example**: Parse datagram (from the example above) and extract message type
  from each record

  ```python
  from binascii import unhexlify
  from asterix.base import *
  from asterix.generated import *

  Spec = Cat_002_1_1 # use cat002, edition 1.1

  s = unhexlify(b'02000bc0010201c0010202') # ... use data from the example above
  raw_datablocks = RawDatablock.parse(Bits.from_bytes(s)) # can fail on wrong input
  assert not isinstance(raw_datablocks, ValueError)
  for db in raw_datablocks:
      records = Spec.cv_uap.parse(db.get_raw_records()) # can fail on wrong input
      assert not isinstance(records, ValueError)
      for record in records:
          i000 = record.get_item('000') # returns None if the item is not present
          assert i000 is not None
          raw_value = i000.as_uint()
          description = i000.variation.content.table_value()
          print('{}: {}'.format(raw_value, description))
  ```

  **Example**: Asterix filter, rewrite SAC/SIC code with random values.

  ```python
  import time
  import random
  from asterix.base import *
  from asterix.generated import *


  Specs = {
      48: Cat_048_1_31,
      62: Cat_062_1_19,
      63: Cat_063_1_6,
      
      }

  def process_record(sac, sic, rec):
      """Process single record."""
      return rec.set_item('010', (('SAC', sac), ('SIC', sic)))

  def process_datablock(sac, sic, db):
      """Process single raw datablock."""
      cat = db.get_category()
      Spec = Specs.get(cat)
      if Spec is None:
          return db
      
      records = Spec.cv_uap.parse(db.get_raw_records())
      new_records = [process_record(sac, sic, rec) for rec in records]
      return Spec.create(new_records)

  def rewrite_sac_sic(sac : int, sic : int, s : bytes) -> bytes:
      """Process datagram."""
      
      raw_datablocks = RawDatablock.parse(Bits.from_bytes(s))
      result = [process_datablock(sac, sic, db) for db in raw_datablocks]
      output = b''.join([db.unparse().to_bytes() for db in result])
      return output

  def rx_bytes_from_the_network():
      """Dummy rx function (generate valid asterix datagram)."""
      time.sleep(1)
      Spec = Cat_048_1_31
      rec = Spec.cv_record.create({'010': 0, '040': 0})
      db1 = Spec.create([rec, rec]).unparse().to_bytes()
      db2 = Spec.create([rec, rec]).unparse().to_bytes()
      return b''.join([db1, db2])

  def tx_bytes_to_the_network(s_output):
      """Dummy tx function."""
      print(hexlify(s_output))


  while True:
      s_input = rx_bytes_from_the_network()
      new_sac = random.randint(0,127)
      new_sic = random.randint(128,255)
      try:
          s_output = rewrite_sac_sic(new_sac, new_sic, s_input)
          tx_bytes_to_the_network(s_output)
      except Exception as e:
          print('Asterix exception: ', e)
  ```



  TODO: Add parsing/constructing expansion field example



  Make sure to use appropriate UAP name, together with a correct UAP selector
  value, for example for CAT001:

  - `['020', 'TYP'] = 0` for `plot`
  - `['020', 'TYP'] = 1` for `track`

  ```python
  from asterix.base import *
  from asterix.generated import *

  Cat1 = Cat_001_1_4

  rec01_plot = Cat1.cv_uap.spec('plot').create({
      '010': 0x0102,
      '020': ((('TYP',0),0,0,0,0,0,None),),
      '040': 0x01020304
  })

  rec01_track = Cat1.cv_uap.spec('track').create({
      '010': 0x0102,
      '020': ((('TYP',1),0,0,0,0,0,None),),
      '040': 0x01020304,
      })

  rec01_invalid = Cat1.cv_uap.spec('plot').create({
      '010': 0x0102,
      '020': ((('TYP',1),0,0,0,0,0,None),),
      '040': 0x01020304
  })

  print(Cat1.create([rec01_plot]).unparse().to_bytes().hex())
  print(Cat1.create([rec01_track]).unparse().to_bytes().hex())
  print(Cat1.create([rec01_invalid]).unparse().to_bytes().hex())
  ```



  This library defines a `manifest` structure in the form:

  ```python
  manifest = {
      'CATS': {
          1: [
              Cat_001_1_2,
              Cat_001_1_3,
              Cat_001_1_4,
          ],
          2: [
              Cat_002_1_0,
              Cat_002_1_1,
          ],
  ...
  ```

  This structure can be used to extract *latest* editions for each defined
  category, for example:

  ```python
  from asterix.generated import *

  Specs = {cat: manifest['CATS'][cat][-1] for cat in manifest['CATS']}

  for spec in Specs.values():
      print(spec.cv_category, spec.cv_edition)
  ```

  Alternatively, a prefered way is to be explicit about each edition,
  for example:

  ```python
  from asterix.generated import *

  Specs = {
      48: Cat_048_1_31,
      62: Cat_062_1_19,
      63: Cat_063_1_6,
      
      }
  ```



  *Generic processing* in this context means working with asterix data where
  the subitem names and types are determined at runtime. That is: the explicit
  subitem names are never mentioned in the application source code.

  This is in contrast to *application specific processing*, where we are
  explicit about subitems, for example ["010", "SAC"].

  **Example**: Show raw content of all toplevel items of each record

  ```python
  from binascii import unhexlify
  from asterix.generated import *

  Specs = {
      48: Cat_048_1_31,
      62: Cat_062_1_19,
      63: Cat_063_1_6,
      
  }


  s = unhexlify(''.join([
      '3e00a5254327d835a95a0d0a2baf256af940e8a8d0caa1a594e1e525f2e32bc0448b',
      '0e34c0b6211b5847038319d1b88d714b990a6e061589a414209d2e1d00ba5602248e',
      '64092c2a0410138b2c030621c2043080fe06182ee40d2fa51078192cce70e9af5435',
      'aeb2e3c74efc7107052ce9a0a721290cb5b2b566137911b5315fa412250031b95579',
      '03ed2ef47142ed8a79165c82fb803c0e38c7f7d641c1a4a77740960737']))

  def handle_nonspare(cat, name, nsp):
      print('cat{}, item {}, {}'.format(cat, name, nsp.unparse()))
      
      

  for db in RawDatablock.parse(Bits.from_bytes(s)):
      cat = db.get_category()
      Spec = Specs.get(cat)
      if Spec is None:
          print('unsupported category', cat)
          continue
      for record in Spec.cv_uap.parse(db.get_raw_records()):
          for (name, nsp) in record.items_regular.items():
              handle_nonspare(cat, name, nsp)
  ```

  **Example**: Generate dummy single record datablock with all fixed items set to zero

  ```python
  from binascii import hexlify
  from asterix.generated import *



  Spec = Cat_062_1_20

  rec = Spec.cv_record.create({})
  all_items = Spec.cv_record.cv_items_dict
  for name in all_items:
      if name is None:
          continue
      nsp = all_items[name]
      var = nsp.cv_rule.cv_variation
      if issubclass(var, Element):
          rec = rec.set_item(name, 0)
      elif issubclass(var, Group):
          rec = rec.set_item(name, 0)
      elif issubclass(var, Extended):
          pass # skip for this test
      elif issubclass(var, Repetitive):
          pass # skip for this test
      elif issubclass(var, Explicit):
          pass # skip for this test
      elif issubclass(var, Compound):
          pass # skip for this test
      else:
          raise Exception('unexpected subclass')

  s = Spec.create([rec]).unparse().to_bytes()
  print(hexlify(s))
  ```



  **Note**: Tested with `mypy` version `1.9.0`.

  [mypy](https://www.mypy-lang.org/) is a static type checker for Python.
  It is recommended to use the tool on asterix application code, to identify
  some problems which would otherwise result in runtime errors.

  Consider the following test program (`test.py`):

  ```python
  from asterix.generated import *

  Spec = Cat_008_1_3
  rec = Spec.cv_record.create({'010': (('SA',1), ('SIC',2))})
  print(rec.get_item('010').variation.get_item('SA').as_uint())
  ```

  The program contains the following bugs:
  - Misspelled item name, `SA` instead of `SAC`, on lines 4 and 5
  - `get_item('010') result is not checked if the item
    is actually present, which might result in runtime error

  ```
  $ python test.py
  ... results in runtime error (wrong item name)
  $ pip install mypy
  $ mypy test.py
  ... detects all problems, without actually running the program
  Found 3 errors in 1 file (checked 1 source file)
  ```

  Correct version of this program is:

  ```python
  from asterix.generated import *

  Spec = Cat_008_1_3
  rec = Spec.cv_record.create({'010': (('SAC',1), ('SIC',2))})
  i010 = rec.get_item('010')
  if i010 is not None:
      print(i010.variation.get_item('SAC').as_uint())
  ```

  ```
  $ mypy test.py
  Success: no issues found in 1 source file
  $ python test.py
  1
  ```


pkgId: b46eb0666bb0188c436e9038e489391fc158c3c47cf85b22559d001a53cc8e83
name: python-libboost-headers
arch: noarch
version: 1.86.0
epoch: 0
release: 1
summary: Repackaging of libboost-headers distributed via PyPI
url: https://pypi.org/project/libboost-headers/
rpm_license: BSL-1.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libboost-headers-1.86.0-1.src.rpm
location_href: Packages/python-libboost-headers-1.86.0-1.noarch.rpm
checksum_type: sha256
description:
  This repo contains automation for [Boost](https://github.com/boostorg/boost).

  It creates, packages and pushes the header-only library `libboost-headers` to PyPI.
  This repo is the equivalent of the [Anaconda libboost-headers](https://anaconda.org/conda-forge/libboost-headers) package.

  **NOTE:** Packages created by this repo only contain the raw source code and not a Python package.

  Credits go to the maintainers of the [Boost](https://github.com/boostorg/boost) package.



  The files in this repository are licensed under the Boost Software License - Version 1.0.

  The distributed boost package is a redistribution of [Boost](https://github.com/boostorg/boost) and therefore falls under the [Boost license model](https://github.com/boostorg/boost/blob/master/LICENSE_1_0.txt) as described in the [LICENCE_1_0.txt file in the Boost repository](https://github.com/boostorg/boost/blob/master/LICENSE_1_0.txt).


pkgId: 67c3feb8ad655727640c4855e4893ee0e3dee6943cce43902f3b863d7725c565
name: python-libentry
arch: noarch
version: 1.15
epoch: 0
release: 1
summary: Entries for experimental utilities.
url: https://github.com/XoriieInpottn/libentry
rpm_license: Apache-2.0 license
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libentry-1.15-1.src.rpm
location_href: Packages/python-libentry-1.15-1.noarch.rpm
checksum_type: sha256
description:
  1. Define a normal python class.
  2. Use @api.post() or @api.get() to tag a method as API method.
  3. Ensure every API method has type hint for both arguments and return value.


  1. Create an APIClient instance.
  2. Use its post() or get() method to send the request.


pkgId: 4568a82f3e0177a0fd3929cf1a9472f00b3c7b493509a10234d0252247bb3aed
name: python-libera_utils-help
arch: noarch
version: 2.4.5
epoch: 0
release: 1
summary: Development documents and examples for libera_utils
url: https://pypi.org/project/libera_utils/
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libera_utils-2.4.5-1.src.rpm
location_href: Packages/python-libera_utils-help-2.4.5-1.noarch.rpm
checksum_type: sha256
description:
  Libera Utils is a package containing modules that
  are commonly used throughout the Libera Science Data Center codebase and processing algorithms. This package is
  published on PyPI to support our L2 algorithm developers with standardized code for interacting with our AWS resources
  and a consistent API for common tasks required of all developers.



  Documentation site, including full API listing: [https://lasp-libera-sdc-libera-utils.readthedocs-hosted.com](https://lasp-libera-sdc-libera-utils.readthedocs-hosted.com)

  Additional documentation helpful for Level 2 Algorithm Developers is also available in the Libera SDC Developer Guide.
  Please contact the Libera SDC Team at LASP for access to the Developer Guide.



  ```bash
  pip install libera-utils
  ```

  Other suffixed versions such as release candidate versions
  (version strings suffixed with `rc` followed by the candidate number, e.g. `1.2.3rc2`)
  may also be available but are likely to contain bugs.


pkgId: 594350e2070d129a13274ddd41e4c1fe612766ef070d00712c7c3ca620994c1e
name: python-libertai-agents-help
arch: noarch
version: 0.1.0
epoch: 0
release: 1
summary: Development documents and examples for libertai-agents
url: https://libertai.io
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libertai-agents-0.1.0-1.src.rpm
location_href: Packages/python-libertai-agents-help-0.1.0-1.noarch.rpm
checksum_type: sha256
description:
  <div align="center">

  [![pypi](https://img.shields.io/pypi/v/libertai-agents.svg)](https://pypi.org/project/libertai-agents)
  [![python](https://img.shields.io/pypi/pyversions/libertai-agents.svg)](https://pypi.org/project/libertai-agents)

  </div>

  Framework to create and deploy decentralized agents 🚀

  > ⚠ This framework is in beta and might undergo some breaking changes before the stable release.

  Take a look at [our documentation](https://docs.libertai.io/agents) to get started!


pkgId: 2329c37e4f03a92079fdd972539f3ef2372959412e671175deb3fbaf7dbdc331
name: python-library-help
arch: noarch
version: 3.0.33
epoch: 0
release: 1
summary: Development documents and examples for library
url: https://pypi.org/project/library/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-library-3.0.33-1.src.rpm
location_href: Packages/python-library-help-3.0.33-1.noarch.rpm
checksum_type: sha256
description:
          Aggregate     5694  2 years, 7 months and 5 days  724.4 GiB   130.3 MiB
      Download all videos matching some criteria
          library download --fs open_dir.db --prefix ~/d/dump/video/ -w 'height<720' -E preview
      Stream directly to mpv
          library watch open_dir.db
  </details>

  <details><summary>Add online gallery media (gallery-dl)</summary>
      $ library gallery-add -h
      usage: library gallery-add DATABASE URL ...
      Add gallery_dl URLs to download later or periodically update
      If you have many URLs use stdin
          cat ./my-favorite-manhwa.txt | library galleryadd your.db --insert-only -
  </details>

  <details><summary>Create a tabs database; Add URLs</summary>
      $ library tabs-add -h
      usage: library tabs-add [--frequency daily weekly (monthly) quarterly yearly] [--no-sanitize] DATABASE URL ...
      Adding one URL
          library tabsadd -f daily tabs.db https://wiby.me/surprise/
          Depending on your shell you may need to escape the URL (add quotes)
          If you use Fish shell know that you can enable features to make pasting easier
              set -U fish_features stderr-nocaret qmark-noglob regex-easyesc ampersand-nobg-in-token
          Also I recommend turning Ctrl+Backspace into a super-backspace for repeating similar commands with long args
              echo 'bind \b backward-kill-bigword' >> ~/.config/fish/config.fish
      Importing from a line-delimitated file
          library tabsadd -f yearly -c reddit tabs.db (cat ~/mc/yearly-subreddit.cron)
  </details>

  <details><summary>Create a link-scraping database</summary>
      $ library links-add -h
      usage: library links-add DATABASE PATH ... [--case-sensitive] [--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]] [--selenium] [--manual] [--scroll] [--auto-pager] [--poke] [--chrome] [--local-html] [--file FILE]
      Database version of extract-links
      You can fine-tune what links get saved with --path/text/before/after-include/exclude.
          library links-add --path-include /video/
      Import links from args
          library links-add --no-extract links.db (cb)
      Import lines from stdin
          cb | library linksdb example_dbs/links.db --skip-extract -
      IRIs vs URLs
          XKLB should:
              - print paths as unquoted UTF-8 IRIs (by default)
              - accept either IRIs or URLs as input with optional flags to make parsing/searching explicitly use one or the other
              - save paths to the database "AS-IS"
      How I use it
          library links-add links.db https://video/site/ --path-include /video/
          library links-add links.db https://loginsite/ --path-include /article/ --cookies-from-browser firefox
          library links-add links.db https://loginsite/ --path-include /article/ --cookies-from-browser chrome
          cb -t text/html | xidel -s - -e '//@title' | unique | lb linksdb ~/mc/music.db -c p1 --skip-extract -
          library links-add --path-include viewtopic.php --cookies-from-browser firefox \
          --page-key start --page-start 0 --page-step 50 --fixed-pages 14 --stop-pages-no-match 1 \
          plab.db https://plab/forum/tracker.php?o=(string replace ' ' \n -- 1 4 7 10 15)&s=2&tm=-1&f=(string replace ' ' \n -- 1670 1768 60 1671 1644 1672 1111 508 555 1112 1718 1143 1717 1851 1713 1712 1775 1674 902 1675 36 1830 1803 1831 1741 1676 1677 1780 1110 1124 1784 1769 1793 1797 1804 1819 1825 1836 1842 1846 1857 1861 1867 1451 1788 1789 1792 1798 1805 1820 1826 1837 1843 1847 1856 1862 1868 284 1853 1823 1800 1801 1719 997 1818 1849 1711 1791 1762)
  </details>

  <details><summary>Auto-scrape website data to SQLite</summary>
      $ library site-add -h
      usage: library site-add DATABASE PATH ... [--auto-pager] [--poke] [--local-html] [--file FILE]
      Extract data from website requests to a database
          library siteadd jobs.st.db --poke https://hk.jobsdb.com/hk/search-jobs/python/
      Requires selenium-wire
      Requires xmltodict when using --extract-xml
          pip install selenium-wire xmltodict
      Run with `-vv` to see and interact with the browser
  </details>

  <details><summary>Add table-like data to SQLite</summary>
      $ library tables-add -h
      usage: library tables-add DATABASE PATH ... [--table STR] [--end-row INT]
      Insert data from one or more files into a SQLite database
  </details>

  <details><summary>Create a reddit database; Add subreddits</summary>
      $ library reddit-add -h
      usage: library reddit-add [--lookback N_DAYS] [--praw-site bot1] DATABASE URL ...
      Fetch data for redditors and reddits
          library redditadd interesting.db https://old.reddit.com/r/coolgithubprojects/ https://old.reddit.com/user/Diastro
      If you have a file with a list of subreddits you can do this
          library redditadd 96_Weird_History.db --subreddits (cat ~/mc/96_Weird_History-reddit.txt)
      Likewise for redditors
          library redditadd shadow_banned.db --redditors (cat ~/mc/shadow_banned.txt)
      To remove entries (for example when you get 404s)
          library search-db reddit.db playlists --or --exact subreddit1 subreddit2 --soft-delete
      Note that reddit's API is limited to 1000 posts and it usually doesn't go back very far historically.
      Also, it may be the case that reddit's API (praw) will stop working in the near future. For both of these problems
      my suggestion is to use pushshift data.
      You can find more info here: https://github.com/chapmanjacobd/reddit_mining#how-was-this-made
  </details>

  <details><summary>Create / Update a Hacker News database</summary>
      $ library hn-add -h
      usage: library hn-add [--oldest] DATABASE
      Fetch latest stories first
          library hnadd hn.db -v
          Fetching 154873 items (33212696 to 33367569)
          Saving comment 33367568
          Saving comment 33367543
          Saving comment 33367564
      Fetch oldest stories first
          library hnadd --oldest hn.db
  </details>

  <details><summary>Backup substack articles</summary>
      $ library substack -h
      usage: library substack DATABASE PATH ...
      Backup substack articles
  </details>

  <details><summary>Backup tildes comments and topics</summary>
      $ library tildes -h
      usage: library tildes DATABASE USER
      Backup tildes.net user comments and topics
          library tildes tildes.net.db xk3
      Without cookies you are limited to the first page. You can use cookies like this
          https://github.com/rotemdan/ExportCookies
          library tildes tildes.net.db xk3 --cookies ~/Downloads/cookies-tildes-net.txt
  </details>

  <details><summary>Import paths from nicotine+</summary>
      $ library nicotine-import -h
      usage: library nicotine-import DATABASE PATH ...
      Load records from Nicotine+ File Lists
          library nicotine-import ~/lb/soulseek.db /home/xk/.local/share/nicotine/usershares/*
      By default we track deletions when only one file list is specified
          library nicotine-import ~/lb/soulseek.db /home/xk/.local/share/nicotine/usershares/user1
          Marking 508387 orphaned metadata records as deleted
          library nicotine-import ~/lb/soulseek.db /home/xk/.local/share/nicotine/usershares/user2
          Marking 31862 metadata records as undeleted
          Marking 216495 orphaned metadata records as deleted
          If this is undesirable, pass the `--no-track-deleted` flag
  </details>

  <details><summary>Import places of interest (POIs)</summary>
      $ library places-import -h
      usage: library places-import DATABASE PATH ...
      Load POIs from Google Maps Google Takeout
  </details>

  <details><summary>Add arbitrary data to SQLite</summary>
      $ library row-add -h
      usage: library row-add DATABASE [--table-name TABLE_NAME] --COLUMN-NAME VALUE
      Add a row to sqlite
          library row-add t.db --test_b 1 --test-a 2
          
          |   test_b |   test_a |
          |----------|----------|
          |        1 |        2 |
  </details>

  <details><summary>Add computer info to SQLite</summary>
      $ library computers-add -h
      usage: library computers-add DATABASE HOSTNAME ...
      Create a SQLite database of SSH-able computers and their disks (nodes are playlists, node disks are media)
          library computer-add local.db blan gworky nocap zendl gak pakon
          library computer-add remote.db jp.tensile-fortress.ts.net hk kr mx uk ca
  </details>

  <details><summary>Add torrent info to SQLite</summary>
      $ library torrents-add -h
      usage: library torrents-add DATABASE PATH ...
      Create a SQLite database of torrent file data (torrents are playlists, referenced files are media)
          library torrents-add torrents.db ~/.local/data/qbittorrent/queue/
  </details>


  <details><summary>Sort text and images by similarity</summary>
      $ library cluster-sort -h
      usage: library cluster-sort [input_path | stdin] [output_path | stdout]
      Group lines of text into sorted output
          echo 'red apple
          broccoli
          yellow
          green
          orange apple
          red apple' | library cluster-sort
          orange apple
          red apple
          red apple
          broccoli
          green
          yellow
      Show the groupings
          echo 'red apple
          broccoli
          yellow
          green
          orange apple
          red apple' | library cluster-sort --print-groups
          [
              {'grouped_paths': ['orange apple', 'red apple', 'red apple']},
              {'grouped_paths': ['broccoli', 'green', 'yellow']}
          ]
      Auto-sort images into directories
          echo 'image1.jpg
          image2.jpg
          image3.jpg' | library cluster-sort --image --move-groups
      Print similar paths
          library fs 0day.db -pa --cluster --print-groups
  </details>

  <details><summary>Sort text by regex split and corpus comparison</summary>
      $ library regex-sort -h
      usage: library regex-sort [input_path | stdin] [output_path | stdout]
      regex-sort is effectively a text-processing pipeline with the following steps:
      line_splitter -- split lines into "words" (--regex)
      word_sorter -- sort words within each line (--word-sort)
      line_sorter -- sort lines (--line-sort)
      Examples:
          If your data has a lot of repeating rows it will help to sort by dup count:
              --line-sort dup,natsort
          You can use any matching regex to produce sorting words:
              --regex \b\w\w+\b  # word boundaries (default)
              --regex \b\d+\b    # digits
              --regex '.{3}'     # char counts
              --regex '.{3}' --line-sort dup,natsort -v
              (0, ((' Ja',), ('Sva',), ('aye',), ('lba',), ('n M',), ('rd ',)))  # Svalbard and Jan Mayen
              (0, ((' La',), ('Sri',), ('nka',)))  # Sri Lanka
              (0, ((' Ma',), ('San',), ('rin',)))  # San Marino
              (0, ((' Ri',), ('Pue',), ('rto',)))  # Puerto Rico
              (0, (('And',), ('orr',)))  # Andorra
              (0, (('Arm',), ('eni',)))  # Armenia
          You can use 'mcda' as a strategy for ranking multiple sort score criteria:
              --word-sorts '-dup, mcda, count, -len, -lastindex, alpha' \\  # count, -len, -lastindex, alpha are weighted by entropy
              --line-sorts '-allunique, alpha, mcda, alldup, dupmode, line'  # alldup, dupmode, line are weighted by entropy
  </details>

  <details><summary>Extract inner links from lists of web links</summary>
      $ library extract-links -h
      usage: library extract-links PATH ... [--case-sensitive] [--scroll] [--download] [--local-html] [--file FILE]
      Extract links from within local HTML fragments, files, or remote pages; filtering on link text and nearby plain-text
          library links https://en.wikipedia.org/wiki/List_of_bacon_dishes --path-include https://en.wikipedia.org/wiki/ --after-include famous
          https://en.wikipedia.org/wiki/Omelette
      Read from local clipboard and filter out links based on nearby plain text
          library links --local-html (cb -t text/html | psub) --after-exclude paranormal spooky horror podcast tech fantasy supernatural lecture sport
          
      Use --selenium for sites require JavaScript
          library links --selenium https://archive.org/search?query=subject%3A%22Archive.org+Census%22 --path-include census
          Run with `-vv` to see the browser that normally loads in the background
  </details>

  <details><summary>Extract human text from lists of web links</summary>
      $ library extract-text -h
      usage: library extract-text PATH ... [--skip-links]
      Sorting suggestions
          library extract-text --skip-links --local-html (cb -t text/html | psub) | library cs --groups | jq -r '.[] | .grouped_paths | "\n" + join("\n")'
  </details>

  <details><summary>Extract titles from lists of web links</summary>
      $ library markdown-links -h
      usage: library markdown-links URL ... [--cookies COOKIES] [--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]] [--firefox] [--chrome] [--allow-insecure] [--scroll] [--manual] [--auto-pager] [--poke] [--file FILE]
      Convert URLs into Markdown links with page titles filled in
          library markdown-links https://www.youtube.com/watch?v=IgZDDW-NXDE
          [Work For Peace](https://www.youtube.com/watch?v=IgZDDW-NXDE)
  </details>

  <details><summary>Expand search urls with query text</summary>
      $ library expand-links -h
      usage: library expand-links SEARCH_URLS QUERY ...
      Expand search URLs with multiple queries
          library expand-links -s https://www.google.com/search?q=%s -s https://duckduckgo.com/?q=%s xklb
          https://www.google.com/search?q=xklb
          https://duckduckgo.com/?q=xklb
          library expand-links -s https://www.walmart.com/search?q=%s -s https://www.target.com/s?searchTerm=%s "Dr. Pepper" pepcidine
          https://www.walmart.com/search?q=Dr%20Pepper
          https://www.target.com/s?searchTerm=Dr%20Pepper
          https://www.walmart.com/search?q=pepcidine
          https://www.target.com/s?searchTerm=pepcidine
      Open in browser
          library expand-links ... --browser
          library expand-links ... --browser chrome
  </details>

  <details><summary>Unstructured text -> compound nouns (stdin)</summary>
      $ library nouns -h
      usage: library nouns (stdin)
      Extract compound nouns and phrases from unstructured mixed HTML plain text
          xsv select text hn_comment_202210242109.csv | library nouns | sort | uniq -c | sort --numeric-sort
  </details>

  <details><summary>Unstructured text -> dates</summary>
      $ library dates -h
      usage: library dates ARGS_OR_STDIN
      Parse dates
          library dates 'October 2017'
          2017-10-01
  </details>

  <details><summary>Unstructured text -> times</summary>
      $ library times -h
      usage: library times ARGS_OR_STDIN
      Parse times
          library times 'October 2017 3pm'
          15:00:00
  </details>

  <details><summary>Unstructured text -> timestamps</summary>
      $ library timestamps -h
      usage: library timestamps ARGS_OR_STDIN
      Parse timestamps
          library timestamps 'October 2017 3pm'
          2017-10-01T15:00:00
  </details>

  <details><summary>Rename JSON keys by substring match</summary>
      $ library json-keys-rename -h
      usage: library json-keys-rename --new-key 'old key substring' (stdin)
      Rename/filter keys in JSON
          echo '{"The Place of Birthings": "Yo Mama", "extra": "key"}' | library json-keys-rename --country 'place of birth'
          {"country": "Yo Mama"}
  </details>

  <details><summary>Enumerate possible combinations</summary>
      $ library combinations -h
      usage: library combinations --PROPERTY OPTION
      Enumerate the possible combinations of things that have multiple properties with more than one options
          library combinations --prop1 opt1 --prop1 opt2 --prop2 A --prop2 B
          {"prop1": "opt1", "prop2": "A"}
          {"prop1": "opt1", "prop2": "B"}
          {"prop1": "opt2", "prop2": "A"}
          {"prop1": "opt2", "prop2": "B"}
  </details>


  <details><summary>Move files and merge folders in BSD/rsync style, rename if possible</summary>
      $ library merge-mv -h
      usage: library merge-mv SOURCE ... DEST [--simulate] [--ext EXT]
      merging-move: combine file trees
      The destination is ALWAYS a folder by default (`--dest-folder`).
      Use `--dest-bsd` to mimick BSD/GNU default `mv` behavior
      Use `--dest-file` to mimick BSD/GNU `mv --no-target-directory`
      By default it won't matter if source folders end with a path separator or not
          library merge-mv folder1  folder2/  # folder1 will be merged with folder2/
          library merge-mv folder1/ folder2/  # folder1 will be merged with folder2/
      --bsd mode: an ending path separator determines if each source is to be placed within or merged with the destination
          library merge-mv --bsd folder1/ folder2/  # folder1 will be merged with folder2/
          library merge-mv --bsd folder1  folder2/  # folder1 will be moved to folder2/folder1/
      --parent mode: always include the parent folder name when merging
          library merge-mv --parent folder1  folder2/  # folder1 will be moved to folder2/folder1/
          library merge-mv --parent folder1/ folder2/  # folder1 will be moved to folder2/folder1/
          library merge-mv --parent file1.txt folder2/ # file1 will be moved to folder2/file1_parent_folder/file1.txt
      nb. This tool, like other library subcommands, only works on files. Empty folders will not be moved to the destination
      Move files/folders without losing hierarchy metadata with --relative or relmv
          Move fresh music to your phone every Sunday
          
          library mv /mnt/d/sync/weekly/ /
          
          library relmv (
              library listen audio.db --local-media-only --where 'play_count=0' --random -L 600 -p f
          ) /mnt/d/sync/weekly/
  </details>

  <details><summary>Merge two or more file trees, check for conflicts before merging</summary>
      $ library merge-folders -h
      usage: library merge-folders [--replace] [--no-replace] [--simulate] SOURCES ... DESTINATION
      Merge multiple folders with the same file tree into a single folder.
      https://github.com/chapmanjacobd/journal/blob/main/programming/linux/misconceptions.md#mv-src-vs-mv-src
      Trumps are new or replaced files from an earlier source which now conflict with a later source.
      If you only have one source then the count of trumps will always be zero.
      The count of conflicts also includes trumps.
  </details>

  <details><summary>cp files with reflink on mergerfs</summary>
      $ library mergerfs-cp -h
      usage: library mergerfs-cp SOURCE ... DEST [--simulate] [--ext EXT]
      This command mirrors the behavior of BSD with regard to destination files and folders.
      To force the destination to always be a folder, similar to `library mv`, use `--destination-folder`
      Copy files with reflink and handle mergerfs mounts
          library mergerfs-cp --dry-run d/files* d/folder2/
          cp --interactive --reflink=always /mnt/d9/files1.txt /mnt/d9/folder2/files1.txt
          btrfs fi du /mnt/d3/files1.txt /mnt/d3/folder2/files1.txt
              Total   Exclusive  Set shared  Filename
          12.57GiB       0.00B    12.57GiB  /mnt/d3/files1.txt
          12.57GiB       0.00B    12.57GiB  /mnt/d3/folder2/files1.txt
  </details>

  <details><summary>Scatter files between folders or disks</summary>
      $ library scatter -h
      usage: library scatter [--limit LIMIT] [--policy POLICY] [--sort SORT] --targets TARGETS DATABASE RELATIVE_PATH ...
      Scatter filesystem folder trees (without mountpoints; limited functionality; good for balancing fs inodes)
          library scatter scatter.db /test/{0,1,2,3,4,5,6,7,8,9}
      Reduce number of files per folder (creates more folders)
          library scatter scatter.db --max-files-per-folder 16000 /test/{0,1,2,3,4,5,6,7,8,9}
      Balance files across filesystem folder trees or multiple devices (mostly useful for mergerfs)
      Multi-device re-bin: balance by size
          library scatter -m /mnt/d1:/mnt/d2:/mnt/d3:/mnt/d4/:/mnt/d5:/mnt/d6:/mnt/d7 fs.db subfolder/of/mergerfs/mnt
          Current path distribution:
          ╒═════════╤══════════════╤══════════════╤═══════════════╤════════════════╤═════════════════╤════════════════╕
          │ mount   │   file_count │ total_size   │ median_size   │ time_created   │ time_modified   │ time_downloaded│
          ╞═════════╪══════════════╪══════════════╪═══════════════╪════════════════╪═════════════════╪════════════════╡
          │ /mnt/d1 │        12793 │ 169.5 GB     │ 4.5 MB        │ Jan 27         │ Jul 19 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d2 │        13226 │ 177.9 GB     │ 4.7 MB        │ Jan 27         │ Jul 19 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d3 │            1 │ 717.6 kB     │ 717.6 kB      │ Jan 31         │ Jul 18 2022     │ yesterday      │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d4 │           82 │ 1.5 GB       │ 12.5 MB       │ Jan 31         │ Apr 22 2022     │ yesterday      │
          ╘═════════╧══════════════╧══════════════╧═══════════════╧════════════════╧═════════════════╧════════════════╛
          Simulated path distribution:
          5845 files should be moved
          20257 files should not be moved
          ╒═════════╤══════════════╤══════════════╤═══════════════╤════════════════╤═════════════════╤════════════════╕
          │ mount   │   file_count │ total_size   │ median_size   │ time_created   │ time_modified   │ time_downloaded│
          ╞═════════╪══════════════╪══════════════╪═══════════════╪════════════════╪═════════════════╪════════════════╡
          │ /mnt/d1 │         9989 │ 46.0 GB      │ 2.4 MB        │ Jan 27         │ Jul 19 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d2 │        10185 │ 46.0 GB      │ 2.4 MB        │ Jan 27         │ Jul 19 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d3 │         1186 │ 53.6 GB      │ 30.8 MB       │ Jan 27         │ Apr 07 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d4 │         1216 │ 49.5 GB      │ 29.5 MB       │ Jan 27         │ Apr 07 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d5 │         1146 │ 53.0 GB      │ 30.9 MB       │ Jan 27         │ Apr 07 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d6 │         1198 │ 48.8 GB      │ 30.6 MB       │ Jan 27         │ Apr 07 2022     │ Jan 31         │
          ├─────────┼──────────────┼──────────────┼───────────────┼────────────────┼─────────────────┼────────────────┤
          │ /mnt/d7 │         1182 │ 52.0 GB      │ 30.9 MB       │ Jan 27         │ Apr 07 2022     │ Jan 31         │
          ╘═════════╧══════════════╧══════════════╧═══════════════╧════════════════╧═════════════════╧════════════════╛
          
          rsync -aE --xattrs --info=progress2 --remove-source-files --files-from=/tmp/tmpmr1628ij / /mnt/d7
          
          rsync -aE --xattrs --info=progress2 --remove-source-files --files-from=/tmp/tmp9yd75f6j / /mnt/d6
          
          rsync -aE --xattrs --info=progress2 --remove-source-files --files-from=/tmp/tmpfrj141jj / /mnt/d5
          
          rsync -aE --xattrs --info=progress2 --remove-source-files --files-from=/tmp/tmpqh2euc8n / /mnt/d3
          
          rsync -aE --xattrs --info=progress2 --remove-source-files --files-from=/tmp/tmphzb0gj92 / /mnt/d4
      Multi-device re-bin: balance device inodes for specific subfolder
          library scatter -m /mnt/d1:/mnt/d2 fs.db subfolder --group count --sort 'size desc'
      Multi-device re-bin: only consider the most recent 100 files
          library scatter -m /mnt/d1:/mnt/d2 -l 100 -s 'time_modified desc' fs.db /
      Multi-device re-bin: empty out a disk (/mnt/d2) into many other disks (/mnt/d1, /mnt/d3, and /mnt/d4)
          library scatter fs.db -m /mnt/d1:/mnt/d3:/mnt/d4 /mnt/d2
      This tool is intended for local use. If transferring many small files across the network something like
      [fpart](https://github.com/martymac/fpart) or [fpsync](https://www.fpart.org/fpsync/) will be better.
  </details>

  <details><summary>Find specific folders to move to different disks</summary>
      $ library mv-list -h
      usage: library mv-list [--limit LIMIT] [--lower LOWER] [--upper UPPER] MOUNT_POINT DATABASE
      Free up space on a specific disk. Find candidates for moving data to a different mount point
      The program takes a mount point and a xklb database file. If you don't have a database file you can create one like this
          library fsadd --filesystem d.db ~/d/
      But this should definitely also work with xklb audio and video databases
          library mv-list /mnt/d/ video.db
      The program will print a table with a sorted list of folders which are good candidates for moving.
      Candidates are determined by how many files are in the folder (so you don't spend hours waiting for folders with millions of tiny files to copy over).
      The default is 4 to 4000--but it can be adjusted via the --lower and --upper flags.
          ██╗███╗░░██╗░██████╗████████╗██████╗░██╗░░░██╗░█████╗░████████╗██╗░█████╗░███╗░░██╗░██████╗
          ██║████╗░██║██╔════╝╚══██╔══╝██╔══██╗██║░░░██║██╔══██╗╚══██╔══╝██║██╔══██╗████╗░██║██╔════╝
          ██║██╔██╗██║╚█████╗░░░░██║░░░██████╔╝██║░░░██║██║░░╚═╝░░░██║░░░██║██║░░██║██╔██╗██║╚█████╗░
          ██║██║╚████║░╚═══██╗░░░██║░░░██╔══██╗██║░░░██║██║░░██╗░░░██║░░░██║██║░░██║██║╚████║░╚═══██╗
          ██║██║░╚███║██████╔╝░░░██║░░░██║░░██║╚██████╔╝╚█████╔╝░░░██║░░░██║╚█████╔╝██║░╚███║██████╔╝
          ╚═╝╚═╝░░╚══╝╚═════╝░░░░╚═╝░░░╚═╝░░╚═╝░╚═════╝░░╚════╝░░░░╚═╝░░░╚═╝░╚════╝░╚═╝░░╚══╝╚═════╝░
          Type "done" when finished
          Type "more" to see more files
          Paste a folder (and press enter) to toggle selection
          Type "*" to select all files in the most recently printed table
      Then it will give you a prompt
          Paste a path:
      Wherein you can copy and paste paths you want to move from the table and the program will keep track for you.
          Paste a path: /mnt/d/75_MovieQueue/720p/s11/
          26 selected paths: 162.1 GB ; future free space: 486.9 GB
      You can also press the up arrow or paste it again to remove it from the list
          Paste a path: /mnt/d/75_MovieQueue/720p/s11/
          25 selected paths: 159.9 GB ; future free space: 484.7 GB
      After you are done selecting folders you can press ctrl-d and it will save the list to a tmp file
          Paste a path: done
              Folder list saved to /tmp/tmp7x_75l8. You may want to use the following command to move files to an EMPTY folder target:
                  rsync -a --info=progress2 --no-inc-recursive --remove-source-files --files-from=/tmp/tmp7x_75l8 -r --relative -vv --dry-run / jim:/free/real/estate/
  </details>

  <details><summary>Show some relative mount stats</summary>
      $ library mount-stats -h
      usage: library mount-stats MOUNTPOINT ...
      Print relative use and free for multiple mount points
          lb mu (fd -td -d1 'd[0-9]+$' /mnt)
          Relative disk dependence:
          /mnt/d1: ###### 8.1%
          /mnt/d2: ######### 12.2%
          /mnt/d3: ######### 12.2%
          /mnt/d4: ####### 9.5%
          /mnt/d5: ####### 9.5%
          /mnt/d6: ######### 12.2%
          /mnt/d7: ######### 12.2%
          /mnt/d8: ######### 12.2%
          /mnt/d9: ######### 12.2%
          Relative free space:
          /mnt/d1: ##### 6.9%
          /mnt/d2: ########### 13.8%
          /mnt/d3: ######## 10.4%
          /mnt/d4: ######## 10.5%
          /mnt/d5: ###### 8.7%
          /mnt/d6: ######### 11.8%
          /mnt/d7: ######### 11.9%
          /mnt/d8: ######### 12.2%
          /mnt/d9: ########### 13.8%
  </details>

  <details><summary>Show large folders</summary>
      $ library big-dirs -h
      usage: library big-dirs PATH ... [--limit (4000)] [--depth (0)] [--sort-groups-by deleted | played]
      See what folders take up space
          library big-dirs ./video/
      Filter folders by size
          library big-dirs ./video/ -FS+10GB -FS-200GB
      Filter folders by count
          library big-dirs ./video/ -FC+300 -FC-5000
      Filter folders by depth
          library big-dirs ./video/ --depth 5
          library big-dirs ./video/ -D 7
      Load from fs database
          library fs video.db --cols path,duration,size,time_deleted --to-json | library big-dirs --from-json
          Only include files between 1MiB and 5MiB
          library fs video.db -S+1M -S-5M --cols path,duration,size,time_deleted --to-json | library big-dirs --from-json
      You can even sort by auto-MCDA ~LOL~
      library big-dirs ./video/ -u 'mcda median_size,-deleted'
  </details>

  <details><summary>Find similar folders based on folder name, size, and count</summary>
      $ library similar-folders -h
      usage: library similar-folders PATH ...
      Find similar folders based on foldernames, similar size, and similar number of files
          library similar-folders ~/d/

rpm_license:
  BSD 3-Clause License                Copyright (c) 2024, Jacob Chapman                Redistribution and use in source and binary forms, with or without        modification, are permitted provided that the following conditions are met:                1. Redistributions of source code must retain the above copyright notice, this           list of conditions and the following disclaimer.                2. Redistributions in binary form must reproduce the above copyright notice,           this list of conditions and the following disclaimer in the documentation           and/or other materials provided with the distribution.                3. Neither the name of the copyright holder nor the names of its           contributors may be used to endorse or promote products derived from           this software without specific prior written permission.                THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


pkgId: 94157e3be2080c16e9361eafdc1df712bad14864327ba09241efdbfa9341af82
name: python-libreflow-help
arch: noarch
version: 2.9.5.2
epoch: 0
release: 1
summary: Development documents and examples for libreflow
url: https://gitlab.com/lfs.coop/libreflow
rpm_license: LGPLv3+
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libreflow-2.9.5.2-1.src.rpm
location_href: Packages/python-libreflow-help-2.9.5.2-1.noarch.rpm
checksum_type: sha256
description:
  * Define new methods for Gazu wrapper:
    - `get_shots_data(sequence)` : Retrieve all shots data of a sequence
    - `get_sequences_data()` : Retrieve all sequences data of the Kitsu project
    - `get_assets_data(asset_type)` : Retrieve all assets data of a asset type
    - `get_asset_type_data(name)` : Retrieve all data of a asset type
    - `get_asset_types_data()` : Retrieve all asset types data of the Kitsu project
    - `get_users()` : Retrieve all users name associated on the Kitsu project
  * An choice value for choosing output module for After Effects playblast rendering.
  * RenderImageSequence: Can now handle a custom output file name and path.

  Tasks are ordered in the GUI according the position configured in the default tasks of the project.
  When reaching a task in the flow, the user is now provided with three lists of files: the input, working and output files of the task. When a file is selected, its revision history appears in the bottom of the page. General information of each revision is displayed by default. One can access to the revision synchronisation statutes of all the project's sites by pressing the `shift` key.

  * Users list is now injectable.
  * File lock is now disabled by default.
  * `TrackedFile.get_revision()` method now return `None` if the searched revision doesn't exist, rather than raising an exception.

  * Properly set Blender playblast revisions created at rendering (i.e. according to the playblast path format).
  * Name the render folder and movie resulting from AfterEffect playblast rendering with the name of the rendered AfterEffects scene.


  * Make action to create a working copy from a file injectable.


  * Make action to create a working copy from a revision injectable.


  * Revisions are sorted by name in a natural way.


  * A new `utils.flow.values` module to gather custom value types.
  * A `MultiOSValue` whose value is computed from that of an environment variable if defined, or that of a parameter corresponding to the OS currently running (among Linux, Windows and Darwin).
  * Support for .psb files.


  * A property and operators to the manage task class to assign users.
  * Tasks to which the current user is not assigned are grayed out, unless assignation is disabled for the associated default task.
  * A managed task can now contain subtasks:
    - subtasks are defined in the default tasks
    - a managed task provides an option to assign one of the project users to one or more of its subtasks.
    - the managed task has a parameter which specify the current subtask
  * A list of tasks in the Kitsu settings now allows to associate a subtask with a task defined in the Kitsu project.

  * The oid of the last revision is automatically updated when adding a revision with the `TrackedFile.add_revision()` method.
  * File advanced options are no longer listed in a `Advanced` submenu.

  * The status color of the last revision displayed in the file list, when the revision name begins with a `t`.


  * New classes defining the following elements of an asset library:asset types, asset families and assets.


  * Upload of playblasts to Kitsu.



  * Multiple users can use the same Kitsu account.
  * A user now logs in with a login defined in its profile. The password is that of the Kitsu account being used by the user.

  * A map of users in the Kitsu settings allowing to redefine the Kitsu account used by each user of the project.


  * The opening of applications when entering a project from the home page using the search engine. The fix currently assumes that all the required runner types are registered in the `touch()` method of the project.
  * AE playblasts: ensure that the render folder revision is created before submitting (and is thus available to) the marking job.
  * Ensure the playblast's last revision oid is updated when the rendering has finished.
  * The extra environment of a runner isn't updated with the content of the contextual dictionary anymore, in order to prevent an environment update error raising when the contextual dictionary contains numerical values.

  * Tasks are ordered in the GUI according the position configured in the default tasks of the project.
  * Modifying the display name of the default tasks now update the names of the corresponding tasks displayed in the task list.
  * A task stores 3 icon paths/references, one for each of its size (small, medium and large).
  * A `PriorityFiles` map which manages a list of files to be prioritised for batch actions.
  * An action for open a full sequence in Shotgun RV.
    - At every use, the parameter values are reset to those stored in the project's **action value store**.
    - It retrieves shots according to this priority order. Compositing preview (`compositing/compositing_movie.mov` by default) first or if it's not exist, the latest revision of the animatic (`misc/animatic.mp4` by default).
    - If no file has been found in a shot, it is possible to replace it with a filler screen (`Black`, `Magenta`, `SMPTE Bars`).

  * The action to create default tasks in a task collection has been updated to allow to choose the tasks to create among the default ones defined in the task manager. Non-optional tasks are preselected. Tasks which already exist appear greyed out and can't be selected.
  * A user can now create a working copy from that of another user, provided that the *Create working copies* option in his/her preferences is enabled.


  * A new type of task (`libreflow.baseflow.task.ManagedTask`), providing features (e.g., the creation of a list of default files) which use the task manager.
  * A new type of task collection (`libreflow.baseflow.task.ManagedTaskCollection`). This collection uses, for each of its task, the icon and color defined by its associated default task in the task manager. It also provides an action to create a default task among those defined in the task manager.
  * Actions to add and edit a default file of a task.

  * Make the terminal automatically close when RV is closed.


  * An `EntityManager` object which manages the collections of common entities (films, sequences, shots, departments, files, revisions, synchronisation statutes).
  * Revision maps provide the `file_base_name` and `file_mapped_name` entries in their contextual dictionary, which are respectively the real name of the parent file on the file system without its extension, and its mapped name in the flow.
  * As for other entities, the `Task` and `TaskCollection` classes have been defined to allow to manage tasks, in a single Mongo collection for the entire project.
  * A `task_manager` module to manage the creation of tasks based on default tasks.

  * Redefine films, sequences and shots as Mongo entities.
  * Films, sequences, shots, files, revisions and synchronisation statutes are retrieved by default from the global entity collections provided by the project's entity manager, assuming the project provides the latter in the `get_entity_manager()` method.
  * If no default path format is provided to the `FileSystemMap` `add_file()` and `add_folder()` methods, the file/folder is created with the path format in the contextual dictionary by default, if defined.

  * Unused `kitsu_name()` and `kitsu_id()` method of the project class.


  * Use Sentry to monitor jobs flow worker events. The Sentry SDK is initialised before starting a `JobsWorkerSession`, assuming the project Data Source Name (DSN) is provided in the `SENTRY_DSN` environment variable. When the job executed by the worker encounters an error, an exception is raised after the status of the job is updated, ensuring that the error is reported to Sentry.

  * Make the `Reveal In Explorer` option reveal the latest available revision.
  * Gazu wrapper's `get_shots()` method: tasks undefined in Kitsu are skipped in the filtering.
  * An exception is raised whenever the `get_path()` method of a revision is called while its relative path is undefined (i.e., the value of its `path` property is an empty string or `None`).


  * Get around the error raised by Gazu upon the upload of some video files.

  * Mark Sequence:
    - mark current and total time codes if provided in the marking template, as `tc` and `total_tc` respectively
    - update the text font
    - remove gray bands

  * Gazu wrapper: allow to specify multiple statutes for a given task in the `get_shot()` method filter.


  * One can specify the `--force-delete` argument to the jobs cleanup session to force job deletion.
  * Gazu wrapper: add a method to upload a preview on a shot task, given the names of the shot and the sequence it belongs to.

  * Gazu wrapper: allow to get a list of shots filtered by their current statutes on given tasks


  * Render AfterEffects playblast/Publish and Render Playblast: allow to choose the render resolution.
    - Whenever the option dialog opens, the parameter value is reset to the value stored in the project's **action value store**.
  * A module `action_values` which defines classes to be used by actions to manage a set of default values (typically that of their parameters), which can be overriden at the project and site scopes.

  * Utility functions related to context values are located in the `libreflow.utils.flow.context_values` module.

  * Make sure that the last revision oid of each file created during playblast rendering is updated, so that it can show up in the file map.


  * A WAV file template
  * Operators in Kitsu API wrapper to update the status of a shot's task


  * A new module allowing to browse through project entries. It provides for that purpose:
  1. an `Actor` and commands to index and search through projects on the current cluster
  2. `SearchFlowView`s (inherited from Kabaret's base flow views) which embed a search bar at their top.
  In order make this type of view available in the GUI, one must register the `SearchFlowViewPlugin` plugin type in the session plugins.


  * AfterEffects templates used for rendering (render settings, movie and audio output modules) can be configured in the settings of the current site.
  * An option to export a temporary audio track of an AfterEffects scene, which may be used by image sequence marking option to generate a playblast. This option assumes a template named `audio_only` is available in the output module templates of the AfterEffects session used for rendering.

  * File maps appearing empty when touched from other sessions, because properties of some entities are not yet set: these maps now update their cache whenever an accessed file property is not found in it.
  * Render AfterEffects playblasts:
    - Ensure that paths to the revisions created during rendering and marking are generated using the path formats of the files they belong to.
    - Generate the playblast with the scene audio track, if it exists.


  * Tracked file class provides the `add_revision` method to add a revision a generic way.
  * Working site type is now injectable
  * WAV file format


  * File lock can be enabled/disabled in the project settings (with option `Enable File Lock`).
  * Indicate the sync status of the last revision displayed in the file list with colors.


  * The matching between the selected and the displayed values of a param with a preset, which could differ if the preset couldn't be applied: in this case, the param is reverted to its default value.
  * Playblast rendering at sequence level


  * An option in playblast rendering actions to scale the render resolution given a percentage.


  * Hide dependency request option on working copies.
  * A warning dialog shows up when one is about to download a revision already available locally.

  * Icons for revision options

  * File upload to Kitsu
  * Force stored revision paths to contain slashes (`/`) only to ensure they are correctly interpreted by Unix systems when revisions are synced.
  * Waiting download jobs which reference revisions unavailable on the exchange server are not processed.
  * When submitted, a synchronisation job stored the local path of the referenced revision, rooted at the current site's root directory. This ineluctably raised a conflict when the job was processed from another site with a different root path.
    Instead, only the revision relative path is stored, and its local path is computed on the fly, when the job is processed.


  * Added a path format property to file objects, used by default to generate revision paths.
  * A system allowing to configure and create default files.

  * Ensure local paths are valid on Windows, Linux and MacOS systems.
  * Fix tracked file `is_empty` method when used to check if the file is empty on the current site.


  This 2.x version of Libreflow embed many changes, including way more speed for map components, using a MongoDB service. Thus, it requires the setup of a MongoDB for Libreflow to work.

  * Use `kabaret.flow_entities` extension to manage file system objects (files, revisions, synchronisation statutes) and site synchronisation queues in a Mongo database.
  * Encapsulate file transfert operations in a single object hold by the exchange site.
  * Revision paths are stored in the database.
  * Revision paths can be generated and updated based on the content of the revision's contextual settings.
  * Hide file publish option on locked files and when the current user has no working copy on them.

  * Add an action to test the connection to the file exchange server.

  * Warn the user when an unavailable revision is double-clicked.
  * Hide revision request option if the revision is already available on the exchange server.
  * Hide revision upload option if the revision isn't available.
  * Hide user's bookmarks if not registered in the project's users.
  * Hide Kitsu options if the project's Kitsu settings aren't configured.


  * A preset system for each user which pre-fills option parameters (available for *Upload to Kitsu*, publication and playblast rendering options)


  * Temporary forced gazu dependency version, as latest version is making trouble to connect


  * Publish from history: fix window display error
  * Publish from history: ensure that the revision is uploaded (when *Upload After Publish* enabled) and Blender dependencies are saved.


  * Add -autoRetime 0 option to RV launcher, so that sequences with different frame rates are kept in sync.

  * Playblast: add options to reduce texture sizes and set target texture size
  * Publish: hide *Upload After Publish* option for files matching one of the patterns provided in the project settings


  * Improve synchronization job management: show requested revisions in the history, reset erroneous jobs

  * A site option to automatically upload playblasts to the exchange server while they are being uploaded to Kitsu.

  * Don't store parameters of user environment variable creation dialog in the DB, to avoid access conflicts between sessions.


  * Add a missed synchronization icon, preventing the project root page to display entirely.


  * Do not copy in current folder anymore when publishing.

  * Correct the warning message that appears when opening a file edited by other users.
  * So far, site environment variables could only be redefined for a single OS. These variables have now one value for each OS (Linux, Darwin or Windows), active depending on the OS being used.
  * Fix crash when trying to create a tracked folder's empty working copy folder while it already exists.
  * Create a user's profile upon the first login
  * Users can log in using their Kitsu desktop login or email


  * The possibility to select the columns to display in the job list, by right-clicking on the list header.
  * Application versions can be overriden in a department's contextual environment. This can be achieved creating a variable that follows the naming convention `<RUNNER_NAME>_VERSION` in the environment map of a department (option `Show Environment`).
    **NB:** In order for overrides to be effective, one must have defined the executable paths corresponding to the runner overriden versions, either in the system, site or user environment. For instance, setting Blender version used in a given department to `2.93` requires the `BLENDER_2_93_EXEC_PATH` variable to be set up. Otherwise, the application will launch in its default version.


  * A launchable session which deletes jobs emitted before a given date, daily at a given time. Additionally, the cleaning process can stop on some days of the week specified by the user.
  * Allow users to add sequences to their bookmarks.

  * The job view now reacts to job creation and deletion events. This allows two optimisations:
    - Items are added/removed as jobs are created/deleted, without a complete refresh of the list
    - The job list is built once, the first time the view is shown
  * First step toward chaining jobs: When generating the playblast of an AfterEffects scene, ensure the generated image sequence is marked only when the job in charge of the rendering has terminated.


  * Speed up the display time of the waiting job count on the synchronization section, updating a counter at site level as files are requested and synchronized.
  * Allow to upload playblasts to Kitsu in tasks of different types.


  * A parameter to set the MinIO server bucket name, which can be set in the current exchange site.
  * `Upload after publish` option is now enabled by default for all files matching one of the patterns provided in the projet settings.

  * Site names are cached in the order defined in the current site, improving the time for histories to display.
  * Prevent users from synchronizing files if the exchange server is not configured.


  * Download MinIO's intermediate files in a folder at the project's root path, named `.tmp`, to ensure that the drive of intermediate files is the same as that of the final downloaded files.
    - Fixes 1.6.18 synchronisation error occuring at download when the project root drive and the OS temporary folder drive differ.


  * Minimise the risk of exceeding the maximum path length on Windows when using MinIO API to download a file from the exchange server, using a custom intermediate temporary file.


  * A new session to periodically clear synchronisation jobs.
  * An option to compare the playblasts of two tasks of a shot in Shotgun RV. Available tasks: layout, blocking, animation, compositing

  * Remove unused options (locking, open with...) on files.
  * Rework the _Publish and playblast_ option for Blender files, and define it for AfterEffects files. Make this option accessible right under the _Publish_ option.

  * Ensure that image sequence rendering and playblast generation for AfterEffects scenes are **processed the same way: locally or on a jobs node session**. In the latter case, ensure that both steps are **handled in the same pool**.
  * Add `fileseq` to the project's dependencies, needed to render AfterEffects playblasts.
  * Prevent the user from publishing in a non-editable file, and from creating a working copy when the file is double-clicked.


  * An option to upload all playblasts of a sequence to the right tasks in Kitsu.
    - If a task type is provided in the Kitsu data of a task (in the dependency template), it is used in priority for all files belonging to this task.
  * An option to request revisions towards multiple sites, with an automatic source site selection option.

  * Do not pack AfterEffects playblast images after they have been rendered (cf. 1.6.12 folder packing update).
  * Mark playblast images with the name of the original AfterEffects scene (or the containing folder's, if it doesn't exist) instead of the resulting playblast name.

  * One can validate credentials pressing the Enter key.


  * Handle synchronization errors, now reported in the log of jobs.


  * Options to request a single revision and its dependencies.


  * Each site can define a custom list of site names to change their display order in file histories and request option windows (these now include `Request` and `Request as` options available on a single revision).
  * OBJ file format
  * The possibility to define shot elements that are not requestable, which can be achieved adding a `requestable` entry in the data of the element in the shot dependency template.

  * Request actions have been revised.


  * The content of a tracked folder revision is packed/unpacked only when it needs to be uploaded to/downloaded from the exchange server.


  * A set of job and action classes to render playblasts of After Effects scenes. The procedure is made in two steps:
    - The image sequence rendering. This step can be achieved in a subprocess or using a job.
    - The marking of images to generate the playblast. When using the `Render Image Sequence`, this step is handled in a job by default. This step is also available as a standalone option on any tracked folder which contains at least one image; in this case, the generate of the playblast can be achieved in a subprocess or using a job.

  * By default, a file's history displays only the synchronisation statutes of sites considered as active on the project.
  * Display synchronisation statutes and site short names by default in a file's history.
  * Sequence playblast rendering action has been update in order to render playblasts of After Effects scenes existing (depending on the defined shot dependencies).

  * Ensure that the source site and creator of sequence marking jobs are the same as those of the image rendering jobs.


  * Sequence playblast rendering action dialog:
    - Make the first available head revision be the default selected revision
    - Make unavailable revisions unselectable
  * Ensure runner types are registered when the project root is touched. This fixes the case where a runner is not found when launching an application, because the project root has not been accessed at least once.
  * Systematically remove the content of the `current` revision folder when a revision is made current. This prevents the packaging of files already present in the `current` folder, making the archive grow each time a revision is made current.


  * Make runner id accessible to the submitted job when rendering a playblast.


  * The setting of the environment variable holding a runner executable path has been moved, so that every RunAction which aims at opening a file properly updates the current environment before launching its corresponding runner.


  * An action to render playblasts of Blender scenes of a whole sequence.
  **Note:** This early version needs the different tasks of a shot (e.g., layout, animation, etc.) to be explicitly defined in a dependency template named `shot`.

  * An application executable path is searched in the different environments just before launching the application, in the following order of priority: System environment > user environment > site environment.

  * Added status icons with lowercase names to prevent resource lookup error on Linux.


  * When a user logs in, the Libreflow ID (computed from the Kitsu ID) is changed to lowercase before the map of users is looked up. This prevents multiple users from having the same IDs with different character cases, and thus ensures the same behaviour in Windows and Linux when the user creates and access working copies.


  * All files in a tracked folder working copy are properly zipped when a publication is made.
  * Make the revision upload after publication work again.
  * Make *Keep editing* option work again when publishing a working copy from a file history.

  * Brute-force integration of the `kabaret.jobs` module implementation (with subtle corrections) to manage jobs.
  * Based on `kabaret.jobs`, the possibility for studios to handle playblast renderings as jobs.
    - Jobs can be submitted in one of the pools of the current site.
    - The feature can be used choosing the `Submit job` option when rendering a playblast.
  * Adaptations of `kabaret.jobs`:
    - Make view's job filter case-sensitive, and include pool name in filtering attributes
    - Provide a job with a label and definable owner and creator
    - Define a JOBS_DEFAULT_FILTER environment variable, usable by the JobsView as a default filter. If not explicitly provided at session startup, the variable defaults to the current site name.


  * Allow Kitsu admin sites to upload playblasts toward any Kitsu task type available for the project.

  * Users are warned whenever one or more users have a working copy on a file, but are not prevented anymore from publishing in that case.
  * Reference revision name in the dialog to create a working copy is set to the file's last publication name by default (if it exists).


  * Copy of runner command to clipboard is handled by native Qt application clipboard object, instead of TKinter features (not integrated to Python main package on all LInux distributions).
  * A new action to request elements related to a shot (assets, scenes, misc), including their dependencies.


  * Runner implementation provides additional information, such as the command used, the time of the last run, etc.
  * A panel in the `SubprocessView` displays information about the currently selected runner.
  * A new option in the `SubprocessView` menu allows to hide completed runner instances.

  * A runner instance is now identified by a Universal Unique Identifier, which eases its deletion in the subprocess manager.


  * A new flow utility function `get_context_value` can be used to recursively find and concatenate the values of all flow params of a given name declared in the parents of an object, including itself. To improve the flexibility of the context value parameterisation, the function makes use of the contextual dict when param values are specified between braces.


  * A new `kabaret.subprocess_manager` utility module has been created to redefine and extend the core classes of the original Kabaret extension.
    - Core classes have been extended to keep track of runner instances.
    - A bunch of commands has been added to manage the underlying processes of these instances (launch, terminate, kill).
    - A new view, which inherits from the original `SubprocessView`, lists all the runners instanciated from the current session, and allow to display the output of the subprocess launched by the selected runner in the list. For now, the list has to be manually refreshed.
  * A shortcut to the current site's job queue is available in the *Synchronization* section of the project's root page.

  * The base runner class has been adapted as required by the first version of the `SubprocessView`. Notable changes are:
    - The redirection of both *stdout* and *stderr* of the subprocess to the same file.
    - Additional data and operators to manage the subprocess, usable by the actor commands.

  * The SubprocessManager does not add a runner's data in the list of runner infos if it has not run at least once. This is a temporary check which prevents from accessing unavailable data about a subprocess, because currently not provided by some runner types (e.g. `DefaultEditor`).


  * Exchange sites have been removed from the `RequestAs` action's lists of requesting and requested sites.
  * The revision published in a target file is automatically made current. Consequently, the last comment in the file list updates to the published revision's comment.
  * Revision upload after publishing into another file has been fixed.

  * A new action allows to upload a published revision on the exchange server.


  * Playblast upload dialog messages have been reworked.

  * An additional test checks if the current's user data retrieved with Kitsu API provides the user's role. If not, the user is considered as not having the required rights to upload the target playblast while not assigned to the corresponding task.


  * The revision drop-down menu display isn't raising an error anymore when the file reference is not set.

  * The option to use simplified rigs has been made available on the action dialog to publish and render a playblast.
  * JSX file format is available.


  * Kitsu entity data is retrieved only when the preview uploading action shows up or run (not in the constructor). This fixes an issue occuring whenever the action object was instantiated, since it tried to get data from flow object not yet instantiated.


  * Checking if a user is assigned to a Kitsu task is done exclusively by the preview uploading action. This means the internal function used to upload a preview assumes the user has sufficient rights.


  * Kitsu supervisors and studio managers can upload previews regardless of their task assignment.


  * Two choice values have been redefined to select a file's revision:
    - One list all available revisions of the file
    - The other list all available published revisions
  * Revision type (working copy or publication) is no longer checked from the revision creator's name but a name pattern (currently, `v\d\d\d`).


  * A new action allows to upload files with eligible names as Kitsu previews. For now, uploadable files are defined in the project's Kitsu configuration.

  * Change time format in log files, to make it human readable


  * Single files are checked to see if they match a folder in the flow, before checking if they match a file. It prevents folders containing a single file from being considered files.


  * Two new features of the Blender playblast are used by the playblast action:
    - to enable the use of low-definition rigs in the Blender scene, available as a checkbox
    - to print on the sequence the name of the selected revision
  * A new action `GetDependencies` allows to summarise dependency information of a given object and request all those which can be requested.
    - As of now, real dependencies are collected from the Blender Asset Tracer tracing result. The feature is thus truly practical for Blender files, and dependencies related to files of any other format remain theoretical.

  * Open file action displays by default last revision, or user's working copy if it does not exist.
  * A revision is systematically made current when published.

  * Project root path is added to the environment when opening a revision from a file history.
  * File relation to department has been temporarily removed, allowing to define files elsewhere than in a department.
  * Users can publish in files which are not related to a department in the flow.


  * Login page shows up when accessing bookmarks if user is not connected to Kitsu.


  * Publishing into another file creates the necessary intermediate directories when the target file has not been created on the current site.


  * JSON file format has been made available.
  * libreflow.utils.b3d has been created with a wrapper for python-expressions to handle specific launch cases on windows.

  * The python expression wrapper is applied to playblasts so they work when Blender is called through a .bat file.

  * Force Kabaret version to 2.2.0rc2


  * Allow the creation of working copies only on authorised files.

  * A workaround has been added to make GUI display on latest MacOS version ([Kabaret issue #96](https://gitlab.com/kabaretstudio/kabaret/-/issues/96)).
  * Requested and requesting sites are properly taken into account when requesting revisions.

  * An additional parameter on revisions indicates if they are ready for synchronisation. A typical use case motivating this change is to prevent files not entirely created and initialised to be synchronised.
  * An action now allows to request (for both source and target sites) elements of a given sequence.
    - Requestable elements: sets, characters, props, sound files, storyboards and layout scenes
  * An action allows to resize all PNG images in a tracked folder revision into another tracked folder. Resulting tracked folder has the same name of source folder suffixed with *_half*.
  * Revision oid pattern has been updated:
    - to include multiple subpatterns separated by `;`
    - so that each subpattern can include multiple substrings in the form `{substring0, substring1, ...}`
  * A new action now allows to remove jobs emitted for a site before a given date, and of given type and status.


  * Redefinition of TrackedFolder `open` and `history` related types have been removed, as it mistakenly redefined the same relations in the TrackedFile class.
  * Force the indices of `open` and `history` in TrackedFolder relation list to be the same as for TrackedFile in order to bypass submenu display issue.


  * The way the names of new users are computed has been updated to take into account mail IDs.
  * User class is now injectable

  * A warning message appears in home page when the computed name of a new user is already registered in the project's user list.
  * Revisions now hold a dict of dependencies stored at publication. This feature applies exclusively for Blender files using pil library `blender-asset-tracer` (aka BAT) which is now mandatory.

  * Submenus show up again when right clicking on tracked folders.


  * Publish action has been made injectable.
  * Some improvements on advanced action dialogs have been made (message content, reset of file reference).


  * Action for requesting file revisions now displays a list of found oids given a wildcard-based oid pattern (** not supported).
  * Using *[last]* keyword in the pattern allows to get the latest published revision of a file. For instance, according to how the base flow is currently designed, `/project/sequences/*/shots/*/departments/*/files/*/history/revisions/[last]` allows to retrieve the latest publications of all files of the project named `project`.


  * Action for requesting file revisions does not stop anymore when it falls onto a revision already available on requesting site, or not available on requested site.
  * Current user is stored when profile has not already been registered.

  * Actions on tracked files have been refined and reorganised.

  * Two new actions on tracked files allow respectively:
    - to publish changes made in a file into another file
    - to create a working copy on a file from a selected revision of another file
  * Users can now publish their changes made to a file from their working copy in the revision history.


  * project settings are now injectable


  * File maps now display tracked element latest revisions and their availability. These can be requested directly from the file map.

  * Site definitions have been updated to distinguish working and exchange sites.
  * Exchange server configuration is held by the project's exchange site.
  * A working site's job queue can be accessed by right-clicking on its entry in the site map.
  * Default exchange site has been renamed as *default_site*, to be distinguished from default working site.

  * Job emission date is stored as a floating point timestamp (not a formatted date string anymore) to be easily processed.
  * Corrections on file list UI for untracked items.
  * Publication option is not available anymore when rendering a playblast on a Blender file if the user hasn't a working copy on this file. This fixes an error which causes the resulting publication to be empty.


  * Logout from project has been fixed.


  * Subprocess environments are updated with the current site's root path. In particular, this makes root path, required in scene builder, accessible in Blender environment whenever a Blender scene is opened from Libreflow.

  * Subprocess extra environments also include the current user name and contextual settings.


  * Added FBX file format in PyPI package data to make FBX template available.

  * Omitted in 1.2.4: *script* folder made as a valid Python package.


  * An action to batch revisions request as another site (currently not publicly available).

  * A new Blender template file.

  * *script* folder made as a valid Python package.
  * Project object is systematically touched when accessed from a home page widget to ensure user environment update.


  MP4, Illustrator and FBX file formats support

  * Actions to render a Blender file playblast is available in the base flow. Moreover, rendering a revision playblast generate a revision of the same index in a .mov tracked file.
  * Map clearing action relations have been removed to prevent unfortunate deletions.
  * Folder hierarchy in which user settings are stored has been changed to *<user_folder>/.libreflow/<project_name>/<user_name>/<user_settings>.*. This allows:
    - a single user to be part of multiple projects
    - multiple users to authenticate on a project on the same workstation.
  * Revisions display the time elapsed since their publication


  - Change *Request* action allowing context condition


  - User name is now computed from Kitsu ID at first connection
  - Files and folders of any type can be revealed in file explorer


  - Bookmarks have been changed from a local json file to a dedicated map on the project's flow. #12
  - File extensions and icons are now constants
  - Revisions and TrackedFiles are now injectable
  - A site can now request file revisions for other sites, if authorized (*request_files_from_anywhere* BoolParam).

  - The project thumbnail flow can now be saved within the project admin/project settings area. So the thumbnail is available from anywhere no matter the site or OS. The old system is still present. #13

  - The old system for the thumbnail will soon be removed.

  - At publish of a trackedFolder on python 3.7 an error appears because of a 3.8 update of stdlib shutil. Made a dirty fix for that.


  Users can log out from the project, sending them back to the login page.

  User Kitsu id and the one used in the flow are distinguished, in order to ensure users are identified with a unique flow id which matches the pattern of a valid Python attribute, as required by Kabaret features. This currently implies users working on the project to be registered in this map.


  File data formats have been added in *setup.py* to make template files available within PyPI package.
  Unforgivable hard-coded paths of several scripts have been changed for relative ones.


  Fix revision playblast rendering: Get playblast folder path from *Computed* department path.


  Fix revision upload: *Revision.get_relative_path()* gets parent file Computed path, instead of wrongly accessing *get_contextual_dict*.


  Until now, the computation of *File* and *Revision* paths implied implying a costly non-linear look-up of contextual edits, and long wait for maps to display. There is now only one contextual settings look-up to compute a *Department* path, from which department's file paths are computed and cached.


  User environment map items are now *SessionValue*s to make environment variable values stored at session's scope.


  MinIO and timeago added in setuptools requirements.

  *Multisite v1 release*

  - A ComputedParam named `root_dir` is now available in admin and it's cached as requiered by issue #4. A function `get_root()` at the Project level use it and is able to provide the root folder of the project according to the operative system. Call it from anywhere in the flow with `self.root().project().get_root()`.
  - `CHANGELOG.md`, `LICENCE` and `AUTORS` files have been added to the repo
  - **Multi-site** file synchronization features (related to issue #5):
    - Add and configure project's sites (type - studio, user or exchange -, per-OS root directories, exchange server properties)
    - Request tracked file's revisions unavailable on current site for download, based on a job submission feature
    - A `SynchronizeFile` action allow users to process files they requested, and files other sites requested from theirs. This currently uses a MinIO client.
    - Retrieve the current site and exchange site in the flow with `self.root().project().[get_current_site()|get_exchange_site()]`
    - UI improvement: revision history maps can toggle site sync statuses
  - Runners redirect their logs in a file placed in the user folder (bce8aadf)
  - A new `DefaultRunner` is available to let the OS choose the default application for a given file path.
  - Previews and renders of AfterEffects file revisions can be launched at revision and episode level, given AfterEffectsRender render settings and output module templates
  - Playblasts of blender file revisions can be made with an action (*preview* folder created in department's files if not already added)
  - Md5 hash is computed for publishes for later features (cc0478e8)

  - According to the new `get_root()` function added and requiered by issue #4, the default contextual dict doens't provide a `ROOT_DIR` value anymore. Calls to that value have been changed, and you must define `ROOT_DIR_WINDOWS`, `ROOT_DIR_LINUX` and/or `ROOT_DIR_MAC` in the admin panel.
  - Cosmetic changes to get some maps expanded or not (832605d8).
  - There is no need to manually specify the user folder anymore: project's `get_user_folder()` method now returns the path to a `.libreflow` in the user's home directory.
  - For sake of readability, file maps showcase the time elapsed since file last modification, instead of date (59d364a8).


  issue #7 libreflow icons are missing from the distributed package (and also the example packages where not accessible)

  Initial public commit and pypi setup. This version is an early version of libreflow. It includes a baseflow and examples flows overriding the baseflow. We have been working on departments, files, file version history, and stuff like that.

  issue #6 : Pip Package is now ready for use
  [^1]: Except we started libreflow MAJOR version number at 1, as we consider our in-house previous flow being version 0.


pkgId: f0dc0d7687eb1922b4b3da92a8c70f3a8eb5b8d2b35b7c6c00cb92ce4c4a147e
name: python-libreflow-launcher-help
arch: noarch
version: 1.2.2
epoch: 0
release: 1
summary: Development documents and examples for libreflow-launcher
url: https://gitlab.com/lfs.coop/libreflow/libreflow_launcher
rpm_license: LGPLv3+
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libreflow-launcher-1.2.2-1.src.rpm
location_href: Packages/python-libreflow-launcher-help-1.2.2-1.noarch.rpm
checksum_type: sha256
description:
  All notable changes to this project will be documented in this file.

  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)[^1].

  <!---
  Types of changes

  - Added for new features.
  - Changed for changes in existing functionality.
  - Deprecated for soon-to-be removed features.
  - Removed for now removed features.
  - Fixed for any bug fixes.
  - Security in case of vulnerabilities.

  -->







  * Double quote has been added to the python path to handle any whitespace.





  * Context menu for project was broken if `file_manager.synchronisation` libreflow extension is used.





  * A new environment variable `PYTHON_MIN_VERSION` is handled in the project configuration to specify a minimum python version requirement for a project.
  * A request session is created when a project has the `file_manager.synchronisation` libreflow extension installed.
  * A placeholder file with the project name is now created in project folders.
  * A project environment variable `LF_PROJECT_NAME` can now be used in a sync and request session, to specify the project name used in libreflow.



  * `KABARET_FLOW_EXT_INSTALLERS` environment variable is no longer used if there is no extensions assigned to a project.
  * The launcher now uses the direct path for python. Especially for using the correct version selected in the settings.
  * Poetry path is no longer used. Instead, it calls the Python module to ensure that the correct one is used according to the Python version.
  * In the settings, the Python path parameter is now a list and you can add a custom path.
  * Checking the Poetry environment of a project has been improved.
    * It makes sure it uses the correct Python version selected in the settings, and that all dependencies are installed.



  * Python versions are now fetched correctly on Linux distributions.
  * In the wizard, the default port of an Overseer server is now adjusted according to the address type.
    * `80` for a public address or `5500` for a local one.
  * When switching servers, the project list showed only one.



  * The environment variable `LF_LAUNCHER_POETRY_PATH` is no longer used.





  * Typo error for check the extension category about the latest release fix.





  * Using a git version of an extension broke the usage of a libreflow instance.





  * The resolved extensions are now enabled for the jobs session. The generated script provides them in the `KABARET_FLOW_EXT_INSTALLERS` environment variable.





  * Error raising when fetching available python versions while Python 2.7 is installed on the system. The version simply won't appear in the list.
  * Only Python versions having a valid interpreter path are available in the global settings.
  * Missing `shutil` import and undefined method preventing the launcher from starting when the user settings were not created yet.





  * Exception for invalid poetry path. Redirect the user to specify a correct one in the global settings.





  * A new environment variable `KABARET_JOBS_POOL_NAME` is handled in the project configuration to specify which pools the libreflow jobs session should be use.



  * Libreflow jobs session now uses the correct module.





  * Libreflow extension coming from a git repo did not have the correct name format on the poetry config.





  * An advanced mode for power users that can be enabled in the global settings
    * Includes actions for reinstalling or uninstalling a libreflow instance, starting non-gui sessions and shortcuts for debugging.
  * User has a new option in the global settings, to show the process view when starting a libreflow instance.
    * This parameter only works if it's not defined in the project configuration. Overseer remote config remains in priority.
  * Disabled or archived projects will no longer be loaded. The same applies to those where the user or site is not assigned.
  * User can now add a new server from the server list.
  * Sites are handled better during the login process. If there is a problem (e.g. undefined or unassigned), a new warning page will be displayed informing the user of the issue.
    * If other sites are assigned to the user, he can select one and try to use it.
  * When hovering over a server in the list, there is now a refresh button.
  * Project configuration resolve now ensures that all the major dependencies (e.g. kabaret, libreflow) are present.
  * Every project flow of Libreflow now can be used.



  * Poetry path and site name can now be set in the global settings.
    * The environment variable `LF_LAUNCHER_POETRY_PATH` will be used when the user preferences are initialised.
    * The same applies to the `LF_LAUNCHER_SITE_NAME` environment variable. It remains prioritised if the variable is still in use.
  * Logging module is now used to harmonise log messages and set levels.
  * The virtual environement of a libreflow instance is better checked to ensure the installation is valid and can be used.



  * About page
    * Now shows the correct current version.
    * PyPi button redirects to the correct package page.
  * Issue #21
    * Buttons for deleting a server in the settings were hidden when updating a libreflow instance.





  * Support for a read replica of a redis cluster. You need to set `KABARET_READ_REPLICA_HOST` and `KABARET_READ_REPLICA_PORT` in your project environment variables.





  * Issue #19
    * All version specifiers of [PEP 440](https://peps.python.org/pep-0440/#version-specifiers) can be used for extensions.





  * Handle specific version number for extensions from pypi.





  * MacOS support to manage installation and execution of Libreflow instances





  * Support project environment variables
  * Issue #9
    * Indentation on user settings json files
  * Issue #15
    * If the login is an email address, only the username part is kept.





  * Issue #11
    * Added a exception for `HTTPError` and `RequestException` to avoid crashes when connection or authentification error has occured.
    * Handle recent changes of Overseer API error codes for user token.
    * Current user cache is now cleared when user token is invalid or expired.
  * Issue #7
    * Current user is now properly setted when user settings folder do not exist.
  * Issue #14
    * Append libreflow extensions with the correct pattern in the environment variable.

  * Connection status to a server is updated when hovering a server.





  * Shell script to start a Libreflow instance on Linux.





  * Site name is now correctly defined on libreflow starting script (`bat` or `sh` file)
  * Install dir is now correctly used for installing libreflow instance





  * An environment variable `LF_LAUNCHER_POETRY_PATH` can be used to define a specific path for poetry.





  * Host address for a server can now be a domain name instead of a direct IP address.
    * The default port is `5500` if you don't specify it in the wizard.



  Initial public commit and pypi setup. This is an early version of Libreflow Launcher.
  It includes management of Overseer servers, access to projects (instances of Libreflow) that have been assigned to the user, and can be installed locally on the machine by Poetry.

  The user interface is likely to change in the future.


pkgId: 7f980e11ab95f95cd11977782785f6ce9edca297850562c7902bbc5e20014386
name: python-libuuu-help
arch: noarch
version: 1.5.182.post1
epoch: 0
release: 1
summary: Development documents and examples for libuuu
url: https://github.com/nxp-imx/mfgtools/wrapper
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-libuuu-1.5.182.post1-1.src.rpm
location_href: Packages/python-libuuu-help-1.5.182.post1-1.noarch.rpm
checksum_type: sha256
description:
  A python wrapper for `libuuu`.

  Supported Python versions: 3.9 or newer.



  To build the project you first need to build libuuu dynamic libraries for your
  operating system, or download them. In this section, manual build is described.



  We first install `vcpkg` which is a C++ library manager for Windows, Linux, and MacOS. Then we set some necessary environment variables, how you set them depends on your operating system, but it is basically the same.


  > Downloading vcpkg and setting up environment variables
  ```bash
  git clone https://github.com/microsoft/vcpkg.git
  cd vcpkg
  export VCPKG_ROOT=$(pwd)
  export PATH=$VCPKG_ROOT:$PATH
  ./bootstrap-vcpkg.sh
  ```

  > Dependencies on Linux (Ubuntu)
  ```bash
  sudo apt-get install gcc cmake ninja-build autotools-dev automake autoconf libudev-dev
  ```
  > Dependencies on MacOS
  ```bash
  brew install ninja cmake autoconf automake libtool
  ```
  > Build
  ```bash
  cd ../wrapper
  cmake --preset=unix #Needs to have vcpkg in PATH & VCPKG_ROOT set.
  cmake --build build
  ```


  > Downloading vcpkg and setting up environment variables
  ```powershell
  git clone https://github.com/microsoft/vcpkg.git
  cd vcpkg
  $env:VCPKG_ROOT = $PWD.Path
  $env:Path = $env:VCPKG_ROOT + ';' + $env:Path
  ./bootstrap-vcpkg.bat
  ```
  > Dependencies on Windows
  ```powershell
  choco install ninja llvm cmake
  ```
  > Build
  ```powershell
  cmake --preset=windows -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
  cmake --build build
  ```


  We just need to create folder `./wrapper/libuuu/lib` and move the dynamic libraries there.

  ```bash
  mkdir ./libuuu/lib
  cp build/*.dll ./libuuu/lib # *.so for Linux, *.dylib for MacOS
  pip install -e .
  ```


pkgId: 3fc174a32f670883ca734754cfc2e485b7d38b44857215cc46d3a9090cdcfee1
name: python-licaplot-help
arch: noarch
version: 0.2.7
epoch: 0
release: 1
summary: Development documents and examples for licaplot
url: https://github.com/guaix-ucm/licaplot
rpm_license: GPL-3.0 license
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-licaplot-0.2.7-1.src.rpm
location_href: Packages/python-licaplot-help-0.2.7-1.noarch.rpm
checksum_type: sha256
description:
   Collection of processing and plotting commands to analyze sensors and filters using the LICA Optical Test Bench.

   This is a counterpart for sensors of [rawplot](https://guaix.ucm.es/rawplot).

   

  ```bash
  pip install licaplot
  ```



  * `licaplot-filters`. Process filter data from LICA optical test bench.
  * `licaplot-tessw`. Process TESS-W data from LICA optical test bench.
  * `licaplot-photod`. Plot and export LICA photodiodes spectral response curves.
  * `licaplot-hama`. Build LICA's Hamamtsu S2281-04 photodiode spectral response curve in ECSV format to be used for other calibration purposes elsewhere.
  * `licaplot-osi` = Build LICA's OSI PIN-10D photodiode spectral response curve un ECSV format to be used for other calibration purposes elsewhere.
   `licaplot-csv`. Very simple plot utility to plot CSV files.

  Every command listed (and subcommands) con be described with `-h | --help`

  Examples:

  ```bash
  licaplot-filters -h
  licaplot-filters classif -h
  licaplot-filters classif photod -h
  ```







  In the simple case, we hace one filter CSV and one clear photodiode CSV. Setting the wavelength limits is optional.
  Setting the photodiode model is optional unless you are using the Hamamatsu S2281-01.

  ```bash
  licaplot-filters --console one -l Green -p data/filters/photodiode.txt -m PIN-10D -i data/filters/green.txt -wl 350 -wh 800
  ```



  In this case, an RGB filter set was measured with a single clear photodiode reading, thus sharing the same photodiode file. The photodiode model used was the OSI PIN-10D.

  1. First we tag all the clear photodiode readings. The tag is a string (i.e. `X`) we use to match which filters are being paired with this clear photodiode reading.

  If we need to trim the bandwith of the whole set (photodiode + associated filter readings) *this is the time to do it*. The bandwith trimming will be carried over from the photodiode to the associated filters.

  ```bash
  licaplot-filters --console classif photod --tag X -p data/filters/photodiode.txt
  ```

  The output of this command is an ECSV file with the same information plus metadata needed for further processing.

  2. Tag all filter files.

  Tag them with the same tag as chosen by the photodiode file (`X`), as they share the same photodiode file.

  ```bash
  licaplot-filters --console classif filter --tag X -i data/filters/green.txt -l Green
  licaplot-filters --console classif filter --tag X -i data/filters/red.txt -l Red
  licaplot-filters --console classif filter --tag X -i data/filters/blue.txt -l Blue
  ```

  The output of these commands are the ECSV files with the same data but additional metadata for further processing

  3. Review the process

  Just to make sure everything is ok.

  ```bash
  licaplot-filters --console classif review -d data/filters/
  ```

  4. Data reduction.

  The optional `--save` flag allows to control the overriting of the input ECSV files with more columns and metadata.

  ```bash
  licaplot-filters --console process -d data/filters --save
  ```

  After this step both filter ECSV files contains additional columns with the clear photodiode readings, the photodiode model QE and the final transmission curve as the last column.

  5. Plot the result

  Plot generated ECSV files using `licaplot-csv`. The column to be plotted is the fourth column (transmission) against the wavelenght column which happens to be the first one and thus no need to specify it.

  ```bash
  licaplot-csv --console multi -i data/filters/blue.ecsv data/filters/red.ecsv data/filters/green.ecsv --overlap -wc 1 -yc 4  --filters --lines
  ```

  ![RGB Filter Set Tranmsission curves](doc/image/plot_rgb_filters.png)




  Process the input files obtained at LICA for TESS-W measurements. For each device, we need a CSV file with the frequencies at a given wavelength and the corresponsing reference photodiode (OSI PIN-10D) current measurements.

  1. Classify the files and assign the sensor readings to photodiode readings

  ```bash
  licaplot-tessw --console classif photod -p data/tessw/stars1277-photodiode.csv --tag A
  licaplot-tessw --console classif sensor -i data/tessw/stars1277-frequencies.csv -l TSL237 --tag A

  licaplot-tessw --console classif photod -p data/tessw/stars6502-photodiode.csv --tag B
  licaplot-tessw --console classif sensor -i data/tessw/stars6502-frequencies.csv -l OTHER --tag B
  ```

  2. Review the configuration

  ```bash
  licaplot-tessw --console classif review  -d data/tessw/
  ```

  ```bash
  2024-12-08 13:07:23,214 [INFO] [root] ============== licaplot.tessw 0.1.dev100+g51c6aa2.d20241208 ==============
  2024-12-08 13:07:23,214 [INFO] [licaplot.tessw] Reviewing files in directory data/tessw/
  2024-12-08 13:07:23,270 [INFO] [licaplot.utils.processing] Returning stars6502-frequencies
  2024-12-08 13:07:23,270 [INFO] [licaplot.utils.processing] Returning stars1277-frequencies
  2024-12-08 13:07:23,271 [INFO] [licaplot.utils.processing] [tag=B] (PIN-10D) stars6502-photodiode, used by ['stars6502-frequencies']
  2024-12-08 13:07:23,271 [INFO] [licaplot.utils.processing] [tag=A] (PIN-10D) stars1277-photodiode, used by ['stars1277-frequencies']
  2024-12-08 13:07:23,271 [INFO] [licaplot.utils.processing] Review step ok.
  ```

  3. Data reduction

  ```bash
  licaplot-tessw --console process  -d data/tessw/ --save
  ```

  ```bash
  2024-12-08 13:10:08,476 [INFO] [root] ============== licaplot.tessw 0.1.dev100+g51c6aa2.d20241208 ==============
  2024-12-08 13:10:08,476 [INFO] [licaplot.tessw] Classifying files in directory data/tessw/
  2024-12-08 13:10:08,534 [INFO] [licaplot.utils.processing] Returning stars6502-frequencies
  2024-12-08 13:10:08,534 [INFO] [licaplot.utils.processing] Returning stars1277-frequencies
  2024-12-08 13:10:08,534 [INFO] [lica.photodiode] Loading Responsivity & QE data from PIN-10D-Responsivity-Cross-Calibrated@1nm.ecsv
  2024-12-08 13:10:08,546 [INFO] [licaplot.utils.processing] Processing stars6502-frequencies with photodidode PIN-10D
  2024-12-08 13:10:08,546 [INFO] [lica.photodiode] Loading Responsivity & QE data from PIN-10D-Responsivity-Cross-Calibrated@1nm.ecsv
  2024-12-08 13:10:08,557 [INFO] [licaplot.utils.processing] Processing stars1277-frequencies with photodidode PIN-10D
  2024-12-08 13:10:08,558 [INFO] [licaplot.utils.processing] Updating ECSV file data/tessw/stars6502-frequencies.ecsv
  2024-12-08 13:10:08,562 [INFO] [licaplot.utils.processing] Updating ECSV file data/tessw/stars1277-frequencies.ecsv
  ```

  4. Plot the result

  the `-yc 0` denotes the last column

  ```bash
  licaplot-csv --console multi -i data/tessw/stars1277-frequencies.ecsv  data/tessw/stars6502-frequencies.ecsv  --overlap -wc 1 -yc 0  --filters --lines
  ```

  ![Sensor comparison](doc/image/sensor_comparison.png)



  There is a separate Jupyter notebook on this.



  This is a quick reference of commands and procedure. There is a separate LICA report on the process.





  Convert NPL CSV data into a ECSV file with added metadata and plot it.

  ```bash
  licaplot-hama --console stage1 --plot -i data/hamamatsu/S2281-01-Responsivity-NPL.csv
  ```
  It produces a file with the same name as the input file with `.ecsv` extension



  Plot and merge NPL data with S2281-04 (yes, -04!) datasheet points.

  With no alignment

  ```bash
  licaplot-hama --console stage2 --plot --save -i data/hamamatsu/S2281-01-Responsivity-NPL.ecsv -d data/hamamatsu/S2281-04-Responsivity-Datasheet.csv
  ```

  With good alignment (x = 16, y = 0.009)

  ```bash
  licaplot-hama --console stage2 --plot --save -i data/hamamatsu/S2281-01-Responsivity-NPL.ecsv -d data/hamamatsu/S2281-04-Responsivity-Datasheet.csv -x 16 -y 0.009
  ```
  It produces a file whose name is the same as the input file plus "+Datasheet.ecsv" appended, in the same folder.
  (i.e `S2281-01-Responsivity-NPL+Datasheet.ecsv`)



  Interpolates input ECSV file to a 1 nm resolution with cubic interpolator.

  ```bash
  licaplot-hama --console stage3 --plot -i data/hamamatsu/S2281-01-Responsivity-NPL+Datasheet.ecsv -m cubic -r 1
  ```



  The complete pipeline in one command

  ```bash
  licaplot-hama --console pipeline --plot -i data/hamamatsu/S2281-01-Responsivity-NPL.csv -d data/hamamatsu/S2281-04-Responsivity-Datasheet.csv -x 16 -y 0.009 -m cubic -r 1
  ```


  By using the scanned datasheet
  ```bash
  licaplot-osi --console datasheet -i csv/calibration/osi/PIN-10D-Responsivity-Datasheet.csv -m cubic -r 1 --plot --save
  ```
  By using a cross calibration with the Hamamatsu photodiode. The Hamamtsu ECSV file is the one obtained in the section above. It does nota appear in the command line as it is embedded in a Python package that automatically retrieves it.

  ```bash
  licaplot-osi --console cross --osi data/osi/QEdata_PIN-10D.txt --hama data/osi/QEdata_S2201-01.txt --plot --save
  ```

  Compare both methods
  ```bash
  licaplot-osi --console compare -c data/osi/OSI\ PIN-10D+Cross-Calibrated@1nm.ecsv -d data/osi/OSI\ PIN-10D-Responsivity-Datasheet+Interpolated@1nm.ecsv --plot
  ```

  ***NOTE: We recomemnd using the cross-calibrated method.***



  ```bash
  licaplot-photod --console plot -m S2281-01
  licaplot-photod --console plot -m PIN-10D
  ```

  ![Hamamatsu SS2281-01](doc/image/S2281-01.png)
  ![OSI PIN-10D](doc/image/PIN-10D.png)


pkgId: 1475012527912ba1ee6f11e7c95508d524153227a906c3504a6b24ac92245e0c
name: python-license-bb-help
arch: noarch
version: 0.1.0
epoch: 0
release: 1
summary: Development documents and examples for license-bb
url: https://github.com/yourusername/my_package
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-license-bb-0.1.0-1.src.rpm
location_href: Packages/python-license-bb-help-0.1.0-1.noarch.rpm
checksum_type: sha256
description:
  This SDK helps to manage client licenses, generate keys, and interact with a license server.



  You can install My Package using pip:


  ```sh
  pip install ./dist/license_bb-0.1.0-py3-none-any.whl
  ```


  ```sh
  pip install git+https://github.com/Adannak24/python_SDK_licensing
  ```





  Initializes the client's configuration by creating an init file and generating necessary keys.

  - **Args:**
    - `base_url` (str): License server API base URL without the API endpoints.
    - `license_key` (str): License key received by the user on requesting or subscribing.
    - `client_details` (dict): Dictionary containing 'email', 'org_id', 'phone', 'user_name', 'org_name', and 'server_name' (optional).

  - **Returns:**
    - `dict`: Combined information including client and system details.



  Exchanges the client's public key with the license server and retrieves the server's public key.

  - **Args:**
    - `org_id` (str): Unique ID for each organization.
    - `client_details` (dict): Full configuration from the init() function.

  - **Returns:**
    - `dict`: Response from the licensing server.



  Retrieves the available/assigned license for the client from the license server.

  - **Args:**
    - `org_id` (str): Unique ID for each organization.
    - `client_details` (dict): Full configuration from the init() function.

  - **Returns:**
    - `dict`: Response from the licensing server.



  Updates the client's license key and assigns type in the init() configuration.

  - **Args:**
    - `license_key` (str): New license key.
    - `org_id` (str): Unique ID for each organization.
    - `assign_type` (str): Assign type, either 'update' or 'default'.

  - **Returns:**
    - `dict`: Response from the licensing server.



  Retrieves the specified feature details from the license file.

  - **Args:**
    - `org_id` (str): Unique ID for each organization.
    - `feature_name` (str): Specific feature name or 'all' for all features.

  - **Returns:**
    - `dict`: Feature details.



  ```python


  command to make whl: python setup.py sdist bdist_wheel


pkgId: 51159e00e54cc7798578ef44b0b2c9d476c5e001d9d65883dca103e0cd3672ec
name: python-licitpy-help
arch: noarch
version: 0.8.1
epoch: 0
release: 1
summary: Development documents and examples for licitpy
url: https://github.com/nguaman/licitpy
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-licitpy-0.8.1-1.src.rpm
location_href: Packages/python-licitpy-help-0.8.1-1.noarch.rpm
checksum_type: sha256
description:
  LicitPy: A Python toolbox designed for downloading, parsing, and analyzing public tenders from Chile's Mercado Público.



  ```bash
  pip install licitpy
  ```





  - Get tenders from today, with budget tier L1, in region IV, and limit to 10 tenders

  ```python
  from pprint import pprint

  from licitpy import Licitpy
  from licitpy.types import Region, Tier, TimeRange

  licitpy = Licitpy()

  tenders = (
      licitpy.tenders.from_date(time_range=TimeRange.TODAY)
      .by_budget_tier(Tier.L1)
      .in_region(Region.IV)
      .limit(10)
  )

  for tender in tenders:
      pprint(
          {
              "url": tender.url,
              "code": tender.code,
              "title": tender.title,
              "status": tender.status,
              "opening_date": tender.opening_date,
              "region": tender.region,
          }
      )
  ```


pkgId: a49575d3c20baf537356bdaa03f3ec3250b4eab018ab5fb5d102dcf420f65d28
name: python-licofage-debuginfo
arch: aarch64
version: 0.9
epoch: 0
release: 1
summary: Debug information for package python-licofage
url: https://pypi.org/project/licofage/
rpm_license: None
rpm_group: Development/Debug
rpm_buildhost: localhost
rpm_sourcerpm: python-licofage-0.9-1.src.rpm
location_href: Packages/python-licofage-debuginfo-0.9-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-licofage.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: eec70aa76c0f8cee240557c4d81587394a3d392f795727ffb27a7c504c6bbf3d
name: python-licofage-debugsource
arch: aarch64
version: 0.9
epoch: 0
release: 1
summary: Debug sources for package python-licofage
url: https://pypi.org/project/licofage/
rpm_license: None
rpm_group: Development/Debug
rpm_buildhost: localhost
rpm_sourcerpm: python-licofage-0.9-1.src.rpm
location_href: Packages/python-licofage-debugsource-0.9-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-licofage.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 0b38d7f90d48f44816524462d18f82ee529ed24bdb7e2ffee361398be229df1b
name: python-licofage-help
arch: aarch64
version: 0.9
epoch: 0
release: 1
summary: Development documents and examples for licofage
url: https://pypi.org/project/licofage/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-licofage-0.9-1.src.rpm
location_href: Packages/python-licofage-help-0.9-1.aarch64.rpm
checksum_type: sha256
description:
  licofage is a tool designed to enhance the accessiblity of the scientific paper *Addition in Dumont-Thomas Numeration Systems in Theory and Practice*. The authors of the paper are O. Carton, JM. Couvreur, M. Delacourt and N. Ollinger.

  The implentation is a prototype of a method for generating deterministic finite automata associated with linear equations expressed in the numeration system associated with a given substitution.

  Once the installation of the package is complete, the `licofage` command-line tool may be invoked.

  The command `licofage -h` provides comprehensive invocation coverage.


pkgId: ad5335da0365eef6d8a431b74b110f23735d632f114dad0c2a01ab562e8a5372
name: python-life123-help
arch: noarch
version: 1.0rc1
epoch: 0
release: 1
summary: Development documents and examples for life123
url: https://life123.science
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-life123-1.0rc1-1.src.rpm
location_href: Packages/python-life123-help-1.0rc1-1.noarch.rpm
checksum_type: sha256
description:
  Dynamical Modeling of Biological Systems in 1, 2 and 3D (as well as single-compartment reactions)

  Includes diffusion, reactions, diffusion/reaction and (coming soon) membranes and compartments.


  1. Detailed, quantitative biological simulations, including whole prokaryotic cells (bacteria), and later eukaryotic cells
  2. Deeper quantitative insight into human tissue/organ/system physiology, for the advancement of medicine
  3. A very integrative approach that is ultimate conducive to body-wide insights,
     with an eye to Longevity Science
  4. Explore the minimalist essence of life-like dynamical systems
  5. Investigate potential paths for the emergence of life on Earth and on Exoplanets
  6. A community effort bringing together biologists, system biologists, programmers, machine-learning specialists, biochemists, power-computing engineers, doctors, data scientists, graphic designers, members of the public willing to share computing resources, etc.



  [WEBSITE](https://life123.science/)

  [Follow our blog/discussions](https://github.com/BrainAnnex/life123/discussions)


  **TRY IT OUT LIVE** (no registration nor install!)
  Click on
  [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/BrainAnnex/life123/main)

  Then explore the notebooks under the `experiments` folder.

  Note that several notebooks create **HTML log files**, by the same name as the notebook (eg,
  running the notebook called `diffusion_1.ipynb` will create a log file named `diffusion_1.htm`).
  These log files typically contain additional interactive graphics: currently, mostly interactive diagrams of the reaction networks.
  (Most plots will show up inside the notebooks.)

  "Binder", the host of the live demo, is akin to Google's Colab:
  short-term runs on a hosted JupyterLab environment.
  It generally takes less than one minute to launch... and then you'll have your own private copy of all the notebooks,
  to run and/or change and re-run.  (The notebooks are pre-existing; you may view them without
  having to run anything.)

  Please remember that nothing gets saved long term on Binder; so, if you make changes you want to preserve,
  make sure to download the changed notebooks!  For instruction on creating your own private local copy, read on...

  (Note: if you want to simply VIEW the notebooks rather than run them, you may simply follow the
  links in the [Experiments Page](https://life123.science/experiments) )



  *Experiments:*
  See the [Life123 List of Experiments](https://life123.science/experiments)

  *Libraries:*
  See the [Life123 Guide](https://life123.science/guide)

  *Unit Testing (pytest):*
  * "tests" folder (top-level)


  See this [short video](https://www.youtube.com/watch?v=TCvQUKPVimE)


  See the [Life123 Download/Install page](https://life123.science/install)


pkgId: d514f2f2f6f599456a9eb87fa2f238e5e5518206ea2b9f4dded5ff89d7a4e914
name: python-liger-kernel-nightly-help
arch: noarch
version: 0.5.2.dev20241216214323
epoch: 0
release: 1
summary: Development documents and examples for liger-kernel-nightly
url: https://github.com/linkedin/Liger-Kernel
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-liger-kernel-nightly-0.5.2.dev20241216214323-1.src.rpm
location_href: Packages/python-liger-kernel-nightly-help-0.5.2.dev20241216214323-1.noarch.rpm
checksum_type: sha256
description:
  <a name="readme-top"></a>




  <table style="width: 100%; text-align: center; border-collapse: collapse;">
      <tr>
          <th style="padding: 10px;" colspan="2">Stable</th>
          <th style="padding: 10px;" colspan="2">Nightly</th>
          <th style="padding: 10px;">Discord</th>
          <th style="padding: 10px;">Build</th>
      </tr>
      <tr>
          <td style="padding: 10px;">
              <a href="https://pepy.tech/project/liger-kernel">
                  <img src="https://static.pepy.tech/badge/liger-kernel" alt="Downloads (Stable)">
              </a>
          </td>
          <td style="padding: 10px;">
              <a href="https://pypi.org/project/liger-kernel">
                  <img alt="PyPI - Version" src="https://img.shields.io/pypi/v/liger-kernel?color=green">
              </a>
          </td>
          <td style="padding: 10px;">
              <a href="https://pepy.tech/project/liger-kernel-nightly">
                  <img src="https://static.pepy.tech/badge/liger-kernel-nightly" alt="Downloads (Nightly)">
              </a>
          </td>
          <td style="padding: 10px;">
              <a href="https://pypi.org/project/liger-kernel-nightly">
                  <img alt="PyPI - Version" src="https://img.shields.io/pypi/v/liger-kernel-nightly?color=green">
              </a>
          </td>
          <td style="padding: 10px;">
              <a href="https://discord.gg/gpumode">
                  <img src="https://dcbadge.vercel.app/api/server/gpumode?style=flat" alt="Join Our Discord">
              </a>
          </td>
          <td style="padding: 10px;">
              <div style="display: block;">
                  <a href="https://github.com/linkedin/Liger-Kernel/actions/workflows/nvi-ci.yml">
                      <img src="https://github.com/linkedin/Liger-Kernel/actions/workflows/nvi-ci.yml/badge.svg?event=schedule" alt="Build">
                  </a>
              </div>
              <div style="display: block;">
                  <a href="https://github.com/linkedin/Liger-Kernel/actions/workflows/amd-ci.yml">
                      <img src="https://github.com/linkedin/Liger-Kernel/actions/workflows/amd-ci.yml/badge.svg?event=schedule" alt="Build">
                  </a>
              </div>
          </td>
      </tr>
  </table>



  <img src="https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/logo-banner.png">

  [Installation](#installation) | [Getting Started](#getting-started) | [Examples](#examples) | [High-level APIs](#high-level-apis) | [Low-level APIs](#low-level-apis) | [Cite our work](#cite-this-work)

  <details>
    <summary>Latest News 🔥</summary>

    - [2024/12/11] We release [v0.5.0](https://github.com/linkedin/Liger-Kernel/releases/tag/v0.5.0): 80% more memory efficient post training losses (DPO, ORPO, CPO, etc)!
    - [2024/12/5] We release LinkedIn Engineering Blog - [Liger-Kernel: Empowering an open source ecosystem of Triton Kernels for Efficient LLM Training](https://www.linkedin.com/blog/engineering/open-source/liger-kernel-open-source-ecosystem-for-efficient-llm-training)
    - [2024/11/6] We release [v0.4.0](https://github.com/linkedin/Liger-Kernel/releases/tag/v0.4.0): Full AMD support, Tech Report, Modal CI, Llama-3.2-Vision!
    - [2024/10/21] We have released the tech report of Liger Kernel on Arxiv: https://arxiv.org/pdf/2410.10989
    - [2024/9/6] We release v0.2.1 ([X post](https://x.com/liger_kernel/status/1832168197002510649)). 2500+ Stars, 10+ New Contributors, 50+ PRs, 50k Downloads in two weeks!
    - [2024/8/31] CUDA MODE talk, [Liger-Kernel: Real-world Triton kernel for LLM Training](https://youtu.be/gWble4FreV4?si=dxPeIchhkJ36Mbns), [Slides](https://github.com/cuda-mode/lectures?tab=readme-ov-file#lecture-28-liger-kernel)
    - [2024/8/23] Official release: check out our [X post](https://x.com/hsu_byron/status/1827072737673982056)

  </details>


  **Liger Kernel** is a collection of Triton kernels designed specifically for LLM training. It can effectively increase multi-GPU **training throughput by 20%** and reduces **memory usage by 60%**. We have implemented **Hugging Face Compatible** `RMSNorm`, `RoPE`, `SwiGLU`, `CrossEntropy`, `FusedLinearCrossEntropy`, and more to come. The kernel works out of the box with [Flash Attention](https://github.com/Dao-AILab/flash-attention), [PyTorch FSDP](https://pytorch.org/tutorials/intermediate/FSDP_tutorial.html), and [Microsoft DeepSpeed](https://github.com/microsoft/DeepSpeed). We welcome contributions from the community to gather the best kernels for LLM training.

  We've also added optimized Post-Training kernels that deliver **up to 80% memory savings** for alignment and distillation tasks. We support losses like DPO, CPO, ORPO, SimPO, JSD, and many more. Check out [how we optimize the memory](https://x.com/hsu_byron/status/1866577403918917655).



  ![Banner](https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/banner.GIF)

  With one line of code, Liger Kernel can increase throughput by more than 20% and reduce memory usage by 60%, thereby enabling longer context lengths, larger batch sizes, and massive vocabularies.


  | Speed Up                 | Memory Reduction        |
  |--------------------------|-------------------------|
  | ![Speed up](https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/e2e-tps.png) | ![Memory](https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/e2e-memory.png) |

  > **Note:**
  > - Benchmark conditions: LLaMA 3-8B, Batch Size = 8, Data Type = `bf16`, Optimizer = AdamW, Gradient Checkpointing = True, Distributed Strategy = FSDP1 on 8 A100s.
  > - Hugging Face models start to OOM at a 4K context length, whereas Hugging Face + Liger Kernel scales up to 16K.



  <p align="center">
      <img src="https://raw.githubusercontent.com/linkedin/Liger-Kernel/main/docs/images/post-training.png" width="50%" alt="Post Training">
  </p>

  We provide optimized post training kernels like DPO, ORPO, SimPO, and more which can reduce memory usage by up to 80%. You can easily use them as python modules.

  ```python
  from liger_kernel.chunked_loss import LigerFusedLinearDPOLoss
  orpo_loss = LigerFusedLinearORPOLoss()
  y = orpo_loss(lm_head.weight, x, target)
  ```




  | **Use Case**                                    | **Description**                                                                                   |
  |------------------------------------------------|---------------------------------------------------------------------------------------------------|
  | [**Hugging Face Trainer**](https://github.com/linkedin/Liger-Kernel/tree/main/examples/huggingface)      | Train LLaMA 3-8B ~20% faster with over 40% memory reduction on Alpaca dataset using 4 A100s with FSDP |
  | [**Lightning Trainer**](https://github.com/linkedin/Liger-Kernel/tree/main/examples/lightning)         | Increase 15% throughput and reduce memory usage by 40% with LLaMA3-8B on MMLU dataset using 8 A100s with DeepSpeed ZeRO3 |
  | [**Medusa Multi-head LLM (Retraining Phase)**](https://github.com/linkedin/Liger-Kernel/tree/main/examples/medusa)        | Reduce memory usage by 80% with 5 LM heads and improve throughput by 40% using 8 A100s with FSDP |
  | [**Vision-Language Model SFT**](https://github.com/linkedin/Liger-Kernel/tree/main/examples/huggingface/run_qwen2_vl.sh)      | Finetune Qwen2-VL on image-text data using 4 A100s with FSDP |
  | [**Liger ORPO Trainer**](https://github.com/linkedin/Liger-Kernel/blob/main/examples/alignment/run_orpo.py)      | Align Llama 3.2 using Liger ORPO Trainer with FSDP with 50% memory reduction |



  - **Ease of use:** Simply patch your Hugging Face model with one line of code, or compose your own model using our Liger Kernel modules.
  - **Time and memory efficient:** In the same spirit as Flash-Attn, but for layers like **RMSNorm**, **RoPE**, **SwiGLU**, and **CrossEntropy**! Increases multi-GPU training throughput by 20% and reduces memory usage by 60% with **kernel fusion**, **in-place replacement**, and **chunking** techniques.
  - **Exact:** Computation is exact—no approximations! Both forward and backward passes are implemented with rigorous unit tests and undergo convergence testing against training runs without Liger Kernel to ensure accuracy.
  - **Lightweight:** Liger Kernel has minimal dependencies, requiring only Torch and Triton—no extra libraries needed! Say goodbye to dependency headaches!
  - **Multi-GPU supported:** Compatible with multi-GPU setups (PyTorch FSDP, DeepSpeed, DDP, etc.).
  - **Trainer Framework Integration**: [Axolotl](https://github.com/axolotl-ai-cloud/axolotl), [LLaMa-Factory](https://github.com/hiyouga/LLaMA-Factory), [SFTTrainer](https://github.com/huggingface/trl/releases/tag/v0.10.1), [Hugging Face Trainer](https://github.com/huggingface/transformers/pull/32860), [SWIFT](https://github.com/modelscope/ms-swift)







  - `torch >= 2.1.2`
  - `triton >= 2.3.0`



  - `torch >= 2.5.0` Install according to the instruction in Pytorch official webpage.
  - `triton >= 3.0.0` Install from pypi. (e.g. `pip install triton==3.0.0`)



  - `transformers >= 4.x`: Required if you plan to use the transformers models patching APIs. The specific model you are working will dictate the minimum version of transformers.

  > **Note:**
  > Our kernels inherit the full spectrum of hardware compatibility offered by [Triton](https://github.com/triton-lang/triton).

  To install the stable version:

  ```bash
  $ pip install liger-kernel
  ```

  To install the nightly version:

  ```bash
  $ pip install liger-kernel-nightly
  ```

  To install from source:

  ```bash
  git clone https://github.com/linkedin/Liger-Kernel.git
  cd Liger-Kernel



  pip install -e .


  pip install -e ".[dev]"
  ```




  There are a couple of ways to apply Liger kernels, depending on the level of customization required.



  Using the `AutoLigerKernelForCausalLM` is the simplest approach, as you don't have to import a model-specific patching API. If the model type is supported, the modeling code will be automatically patched using the default settings.

  ```python
  from liger_kernel.transformers import AutoLigerKernelForCausalLM



  model = AutoLigerKernelForCausalLM.from_pretrained("path/to/some/model")
  ```



  Using the [patching APIs](#patching), you can swap Hugging Face models with optimized Liger Kernels.

  ```python
  import transformers
  from liger_kernel.transformers import apply_liger_kernel_to_llama


  apply_liger_kernel_to_llama()


  apply_liger_kernel_to_llama(
    rope=True,
    swiglu=True,
    cross_entropy=True,
    fused_linear_cross_entropy=False,
    rms_norm=False
  )


  model = transformers.AutoModelForCausalLM("path/to/llama/model")
  ```



  You can take individual [kernels](#kernels) to compose your models.

  ```python
  from liger_kernel.transformers import LigerFusedLinearCrossEntropyLoss
  import torch.nn as nn
  import torch

  model = nn.Linear(128, 256).cuda()


  loss_fn = LigerFusedLinearCrossEntropyLoss()

  input = torch.randn(4, 128, requires_grad=True, device="cuda")
  target = torch.randint(256, (4, ), device="cuda")

  loss = loss_fn(model.weight, input, target)
  loss.backward()
  ```





  | **AutoModel Variant** | **API** |
  |-----------|---------|
  | AutoModelForCausalLM | `liger_kernel.transformers.AutoLigerKernelForCausalLM` |




  | **Model**   | **API**                                                      | **Supported Operations**                                                |
  |-------------|--------------------------------------------------------------|-------------------------------------------------------------------------|
  | LLaMA 2 & 3 | `liger_kernel.transformers.apply_liger_kernel_to_llama`   | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | LLaMA 3.2-Vision | `liger_kernel.transformers.apply_liger_kernel_to_mllama`   | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | Mistral     | `liger_kernel.transformers.apply_liger_kernel_to_mistral`  | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | Mixtral     | `liger_kernel.transformers.apply_liger_kernel_to_mixtral`  | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | Gemma1      | `liger_kernel.transformers.apply_liger_kernel_to_gemma`    | RoPE, RMSNorm, GeGLU, CrossEntropyLoss, FusedLinearCrossEntropy         |
  | Gemma2      | `liger_kernel.transformers.apply_liger_kernel_to_gemma2`   | RoPE, RMSNorm, GeGLU, CrossEntropyLoss, FusedLinearCrossEntropy         |
  | Qwen2, Qwen2.5, & QwQ      | `liger_kernel.transformers.apply_liger_kernel_to_qwen2`    | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | Qwen2-VL       | `liger_kernel.transformers.apply_liger_kernel_to_qwen2_vl`    | RMSNorm, LayerNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy        |
  | Phi3 & Phi3.5       | `liger_kernel.transformers.apply_liger_kernel_to_phi3`     | RoPE, RMSNorm, SwiGLU, CrossEntropyLoss, FusedLinearCrossEntropy         |




  - `Fused Linear` kernels combine linear layers with losses, reducing memory usage by up to 80% - ideal for HBM-constrained workloads.
  - Other kernels use fusion and in-place techniques for memory and performance optimization.



  | **Kernel**                      | **API**                                                     |
  |---------------------------------|-------------------------------------------------------------|
  | RMSNorm                         | `liger_kernel.transformers.LigerRMSNorm`                    |
  | LayerNorm                       | `liger_kernel.transformers.LigerLayerNorm`                  |
  | RoPE                            | `liger_kernel.transformers.liger_rotary_pos_emb`            |
  | SwiGLU                          | `liger_kernel.transformers.LigerSwiGLUMLP`                  |
  | GeGLU                           | `liger_kernel.transformers.LigerGEGLUMLP`                   |
  | CrossEntropy                    | `liger_kernel.transformers.LigerCrossEntropyLoss`           |
  | Fused Linear CrossEntropy         | `liger_kernel.transformers.LigerFusedLinearCrossEntropyLoss`|




  | **Kernel**                      | **API**                                                     |
  |---------------------------------|-------------------------------------------------------------|
  | Fused Linear CPO Loss           | `liger_kernel.chunked_loss.LigerFusedLinearCPOLoss`       |
  | Fused Linear DPO Loss           | `liger_kernel.chunked_loss.LigerFusedLinearDPOLoss`       |
  | Fused Linear ORPO Loss          | `liger_kernel.chunked_loss.LigerFusedLinearORPOLoss`      |
  | Fused Linear SimPO Loss         | `liger_kernel.chunked_loss.LigerFusedLinearSimPOLoss`     |



  | **Kernel**                      | **API**                                                     |
  |---------------------------------|-------------------------------------------------------------|
  | KLDivergence                    | `liger_kernel.transformers.LigerKLDIVLoss`                  |
  | JSD                             | `liger_kernel.transformers.LigerJSD`                        |
  | Fused Linear JSD                  | `liger_kernel.transformers.LigerFusedLinearJSD`             |



  | **Kernel**                      | **API**                                                     |
  |---------------------------------|-------------------------------------------------------------|
  | Embedding                       | `liger_kernel.transformers.experimental.LigerEmbedding`     |
  | Matmul int2xint8                | `liger_kernel.transformers.experimental.matmul` |




  - [Contributing Guidelines](https://github.com/linkedin/Liger-Kernel/blob/main/docs/CONTRIBUTING.md)
  - [Acknowledgements](https://github.com/linkedin/Liger-Kernel/blob/main/docs/Acknowledgement.md)
  - [License Information](https://github.com/linkedin/Liger-Kernel/blob/main/docs/License.md)



  - [AMD](https://www.amd.com/en.html): Providing AMD GPUs for our AMD CI.
  - [Intel](https://www.intel.com/): Providing Intel GPUs for our Intel CI.
  - [Modal](https://modal.com/): Free 3000 credits from GPU MODE IRL for our NVIDIA CI.
  - [EmbeddedLLM](https://embeddedllm.com/): Making Liger Kernel run fast and stable on AMD.
  - [HuggingFace](https://huggingface.co/): Integrating Liger Kernel into Hugging Face Transformers and TRL.
  - [Lightning AI](https://lightning.ai/): Integrating Liger Kernel into Lightning Thunder.
  - [Axolotl](https://axolotl.ai/): Integrating Liger Kernel into Axolotl.
  - [Llama-Factory](https://github.com/hiyouga/LLaMA-Factory): Integrating Liger Kernel into Llama-Factory.



  - For issues, create a Github ticket in this repository
  - For open discussion, join [our discord channel](https://discord.gg/gpumode)
  - For formal collaboration, send an email to byhsu@linkedin.com



  Biblatex entry:
  ```bib
  @article{hsu2024ligerkernelefficienttriton,
        title={Liger Kernel: Efficient Triton Kernels for LLM Training},
        author={Pin-Lun Hsu and Yun Dai and Vignesh Kothapalli and Qingquan Song and Shao Tang and Siyu Zhu and Steven Shimizu and Shivam Sahni and Haowen Ning and Yanning Chen},
        year={2024},
        eprint={2410.10989},
        archivePrefix={arXiv},
        primaryClass={cs.LG},
        url={https://arxiv.org/abs/2410.10989},
        journal={arXiv preprint arXiv:2410.10989},
  }
  ```


  [![Star History Chart](https://api.star-history.com/svg?repos=linkedin/Liger-Kernel&type=Date)](https://star-history.com/#linkedin/Liger-Kernel&Date)

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
      <a href="#readme-top" style="text-decoration: none; color: #007bff; font-weight: bold;">
          ↑ Back to Top ↑
      </a>
  </p>

rpm_license:
  BSD 2-CLAUSE LICENSE Copyright 2024 LinkedIn Corporation All Rights Reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


