# packages

pkgId: 6e7e248247a6cfc182afdef989b7a1b3724638ebc29d3eb606e06957a25118a8
name: python-flask-squeeze-help
arch: noarch
version: 3.1.0
epoch: 0
release: 1
summary: Development documents and examples for flask-squeeze
url: https://pypi.org/project/flask-squeeze/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flask-squeeze-3.1.0-1.src.rpm
location_href: Packages/python-flask-squeeze-help-3.1.0-1.noarch.rpm
checksum_type: sha256
description:
  ![Logo](https://github.com/mkrd/Flask-Squeeze/blob/master/assets/logo.png?raw=true)

  [![Downloads](https://pepy.tech/badge/flask-squeeze)](https://pepy.tech/project/flask-squeeze)
  ![Tests](https://github.com/mkrd/Flask-Squeeze/actions/workflows/test.yml/badge.svg)
  ![Coverage](https://github.com/mkrd/Flask-Squeeze/blob/master/assets/coverage.svg?raw=1)

  Flask-Squeeze is a Flask extension that automatically:
  - **Minifies** repsonses with the mimetypes javascript and css
  - **Compresses** all responses with brotli if the browser supports it, or gzip if the browser supports it!
  - **Protects** against the BREACH exploit
  - **Caches** static files so that they don't have to be re-compressed. The cache will be cleared each time Flask restarts. Files are considered static if the the substring "/static/" is in their request path.


  - Tested with Python 3.7, 3.8, 3.9, 3.10, 3.11 and 3.12


  ```
  pip install Flask-Squeeze
  ```


  Initialize Flask-Squeeze **BEFORE** all other extensions and after_request handlers! Flask executes after_request handlers in reverse order of declaration, and the compression should be the last step before sending the response.
  ```python
  from flask_squeeze import Squeeze
  squeeze = Squeeze()

  def create_app():
      app = Flask(__name__)

      
      squeeze.init_app(app)

      
      

      return app
  ```

  Thats it! The responses of your Flask app will now get minified and compressed, if the browser supports it.
  To control how Flask-Squeeze behaves, the following options exist:


  You can configure Flask-Squeeze with the following options in your [Flask config](https://flask.palletsprojects.com/en/latest/config/):

  | Option | Default | Description |
  | --- | --- | --- |
  | `SQUEEZE_COMPRESS` | `True` | Enables or disables compression |
  | `SQUEEZE_MIN_SIZE` | `500` | Defines the minimum file size in bytes to activate the compression |
  | `SQUEEZE_VERBOSE_LOGGING` | `False` | Enable or disable verbose logging. If enabled, Flask-Squeeze will print what it does into the terminal in a highlighted color |
  | `SQUEEZE_ADD_DEBUG_HEADERS` | `False` | Add debug infos into the response headers, like call durations and cache hit infos. ONLY USE THIS IN DEVELOPMENT.


  | Option | Default | Description |
  | --- | --- | --- |
  | `SQUEEZE_MINIFY_CSS` | `True` | Enable or disable css minification using rcssmin |
  | `SQUEEZE_MINIFY_JS` | `True` | Enable or disable js minification using rjsmin |


  > Static files are chached, so they only have to be compressed once.
  > Dynamic files like generated HTML files will not be cached, so they will be compressed for each response.

  | Option | Default | Description |
  | --- | --- | --- |
  | `SQUEEZE_LEVEL_BROTLI_STATIC` | `default=11, min=0 , max=11` | Defines the compression level of brotli for static files |
  | `SQUEEZE_LEVEL_BROTLI_DYNAMIC` | `default=1, min=0, max=11` | Defines the compression level of brotli for dynamic files |
  | `SQUEEZE_LEVEL_DEFLATE_STATIC` | `default=9, min=-1 , max=9` | Defines the compression level of deflate for static files |
  | `SQUEEZE_LEVEL_DEFLATE_DYNAMIC` | `default=1, min=-1, max=9` |  Defines the compression level of deflate for dynamic files |
  | `SQUEEZE_LEVEL_GZIP_STATIC` | `default=9, min=0 , max=9` | Defines the compression level of gzip for static files |
  | `SQUEEZE_LEVEL_GZIP_DYNAMIC` | `default=1, min=0, max=9` |  Defines the compression level of gzip for dynamic files |

rpm_license:
  MIT License  Copyright (c) 2019 mkrd  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: c8e9f85fe513b308a502006f2ea0d87bca159f78992532dc00357b9bf80c282a
name: python-flask-tabler-icons-help
arch: noarch
version: 3.24.0
epoch: 0
release: 1
summary: Development documents and examples for flask-tabler-icons
url: https://github.com/lixxu/flask-tabler-icons
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flask-tabler-icons-3.24.0-1.src.rpm
location_href: Packages/python-flask-tabler-icons-help-3.24.0-1.noarch.rpm
checksum_type: sha256
description:
  flask-tabler-icons is a collection of Jinja macros for [tabler-icons](https://tabler-icons.io/) and Flask.



  ```bash
  pip install -U flask-tabler-icons
  ```



  Register the extension:

  ```python
  from flask import Flask
  from flask_tabler_icons import TablerIcons

  app = Flask(__name__)
  tabler_icons = TablerIcons(app)
  ```

  ```html

  {% from "tabler_icons/helper.html" import render_icon %}

  <html>
    <head>
      <!-- css area -->
      <style>
          .custom-css {
            color: red;
          }
      </style>
    </head>
    <body>
      <h2>tabler icon</h2>
      {{ render_icon("helicopter", class="custom-css") }}
      {{ render_icon("helicopter", animation="pulse", color="blue") }}
      {{ render_icon("helicopter", animation="tada", color="blue") }}
      {{ render_icon("helicopter", animation="rotate", color="blue") }}
    </body>
  </html>
  ```

rpm_license:
  Copyright 2023 lix  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: 945bb7ab89e8f5f2e6d32a308058c7e63d55b18847e3cff01336f37a32cb135a
name: python-flatpack-help
arch: noarch
version: 3.11.19
epoch: 0
release: 1
summary: Development documents and examples for flatpack
url: https://github.com/RomlinGroup/Flatpack
rpm_license: Apache Software License (Apache-2.0)
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flatpack-3.11.19-1.src.rpm
location_href: Packages/python-flatpack-help-3.11.19-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <img src="https://romlin.com/wp-content/uploads/2023/05/flatpack_ai_logo.svg" width="100" height="100" alt="Flatpack">
  </p>



  **NOTE:** Flatpack is currently experimental. Please refrain from using it in production environments.

  **注意:** Flatpack 目前仍处于实验阶段。请勿用于生产环境。



  At Flatpack, our mission is clear: we are committed to building trust in AI.

  Flatpack democratises AI and ML through micro language models and model compression. Our platform enables users to train
  custom language models with 100M to 10B parameters. We introduce flatpacks (FPKs) to integrate AI and ML into edge
  computing, electronic components, and robots.

  在 Flatpack，我们的使命十分明确: 致力于建立对 AI 的信任。

  Flatpack 通过微语言模型和模型压缩普及 AI 和 ML。我们的平台使用户能够训练具有 100M 到 10B 个参数的自定义语言模型。我们引入了
  flatpacks (FPK)，将 AI 和 ML 集成到边缘计算、电子元件和机器人中。



  *Aglaonice, an ancient Greek astronomer from the 2nd or 1st century BC, was celebrated for her precise lunar eclipse
  predictions. Her mastery inspired the Greek proverb: "As the moon obeys Aglaonice," signifying unwavering certainty.*

  `3.11.0` (2024-11-24)\
  *Major core architecture refactoring for performance.*

  `3.10.0` (2024-10-21)\
  *Added dark mode support for a better user experience.*

  `3.9.0` (2024-10-04)\
  *Added [Monaco Editor](https://github.com/microsoft/monaco-editor) and custom hooks support.*

  `3.8.0` (2024-09-24)\
  *Improved package setup and deprecated agent spawning.*

  `3.7.0` (2024-09-04)\
  *Added cron and manual scheduling for builds.*

  `3.6.0` (2024-07-28)\
  *Introduced SQLite database support for each flatpack.*

  `3.5.0` (2024-05-27)\
  *Initial support for model compression in GGUF using [llama.cpp](https://github.com/ggerganov/llama.cpp).*

  `3.4.0` (2024-04-30)\
  *Added support for spawning agents with micro APIs.*

  `3.3.0` (2024-04-16)\
  *Added a vector database for storing and querying embeddings.*

  `3.2.0` (2024-03-09)\
  *Added support for unboxing local flatpacks using --local.*

  `3.1.0` (2023-12-11)\
  *Introduced a local web interface for a better user experience.*

  `3.0.0` (2023-10-20)\
  *Moved to a predictable and structured release strategy.*



  Our previous releases were a mix of minor tweaks and significant shifts, making it challenging to anticipate the nature
  of changes. With the introduction of version 3.0.0, we are embracing a predictable and structured release strategy:

  - **Major versions** (`X.0.0`): These signify significant changes or updates.
  - **Minor versions** (`3.X.0`): Introduce new features without breaking compatibility.
  - **Patch versions** (`3.0.X`): Address bug fixes and minor refinements.

  This move is not merely about [semantic versioning](https://semver.org/). It is a pledge for clear communication and
  trust with our users. We invite you to explore our new release strategy and appreciate your patience as we evolve.

  [Explore the Project on GitHub](https://github.com/RomlinGroup/Flatpack)



  This project is released under [Apache-2.0](https://github.com/RomlinGroup/Flatpack/blob/main/LICENSE).



  **DISCLAIMER:** This information is only a technical reference, not an endorsement or legal advice. Before using any
  software for commercial purposes, perform compatibility checks and seek legal advice. You are responsible for ensuring
  compliance with licensing requirements.

  Check out the [JLA - Compatibility Checker](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-compatibility-checker) (European Commission 2024).

  - **[beautifulsoup4](https://pypi.org/project/beautifulsoup4/)**\
    MIT License (MIT License) ([LICENSE](https://pypi.org/project/beautifulsoup4/))

  - **[croniter](https://pypi.org/project/croniter/)**\
    MIT License (MIT License) ([LICENSE](https://github.com/kiorky/croniter/blob/master/LICENSE))

  - **[cryptography](https://pypi.org/project/cryptography/)**\
    Apache Software License, BSD License (Apache-2.0 OR BSD-3-Clause) ([LICENSE](https://github.com/pyca/cryptography/blob/main/LICENSE))

  - **[fastapi](https://pypi.org/project/fastapi/)**\
    MIT License ([LICENSE](https://github.com/tiangolo/fastapi/blob/master/LICENSE))

  - **[hnswlib](https://pypi.org/project/hnswlib/)**\
    Apache-2.0 license ([LICENSE](https://github.com/nmslib/hnswlib/blob/master/LICENSE))

  - **[httpx](https://pypi.org/project/httpx/)**\
    BSD License ([LICENSE](https://github.com/encode/httpx/blob/master/LICENSE.md))

  - **[huggingface-hub](https://pypi.org/project/huggingface-hub/)**\
    Apache Software License (Apache) ([LICENSE](https://github.com/huggingface/huggingface_hub/blob/main/LICENSE))

  - **[itsdangerous](https://pypi.org/project/itsdangerous/)**\
    BSD License ([LICENSE](https://github.com/pallets/itsdangerous/blob/main/LICENSE.txt))

  - **[ngrok](https://pypi.org/project/ngrok/)**\
    MIT License (MIT OR Apache-2.0) ([LICENSE](https://github.com/ngrok/ngrok-python/blob/main/LICENSE-APACHE))

  - **[prettytable](https://pypi.org/project/prettytable/)**\
    BSD License (BSD (3 clause)) ([LICENSE](https://github.com/jazzband/prettytable/blob/main/LICENSE))

  - **[psutil](https://pypi.org/project/psutil/)**\
    BSD License (BSD-3-Clause) ([LICENSE](https://github.com/giampaolo/psutil/blob/master/LICENSE))

  - **[pydantic](https://pypi.org/project/pydantic/)**\
    MIT License ([LICENSE](https://github.com/pydantic/pydantic/blob/main/LICENSE))

  - **[pypdf](https://pypi.org/project/pypdf/)**\
    BSD License ([LICENSE](https://github.com/py-pdf/pypdf/blob/main/LICENSE))

  - **[python-multipart](https://pypi.org/project/python-multipart/)**\
    Apache Software License ([LICENSE](https://github.com/Kludex/python-multipart/blob/master/LICENSE.txt))

  - **[requests](https://pypi.org/project/requests/)**\
    Apache Software License (Apache 2.0) ([LICENSE](https://github.com/psf/requests/blob/main/LICENSE))

  - **[rich](https://pypi.org/project/rich/)**\
    MIT License (MIT) ([LICENSE](https://github.com/Textualize/rich/blob/master/LICENSE))

  - **[sentence-transformers](https://pypi.org/project/sentence-transformers/)**\
    Apache Software License (Apache License 2.0) ([LICENSE](https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE))

  - **[spacy](https://pypi.org/project/spacy/)**\
    MIT License (MIT) ([LICENSE](https://github.com/explosion/spaCy/blob/master/LICENSE))

  - **[toml](https://pypi.org/project/toml/)**\
    MIT License (MIT) ([LICENSE](https://github.com/uiri/toml/blob/master/LICENSE))

  - **[uvicorn](https://pypi.org/project/uvicorn/)**\
    BSD License ([LICENSE](https://github.com/encode/uvicorn/blob/master/LICENSE.md))

  - **[zstandard](https://pypi.org/project/zstandard/)**\
    BSD License (BSD) ([LICENSE](https://github.com/indygreg/python-zstandard/blob/main/LICENSE))

  Last updated: 2024-11-24


pkgId: 064c698f909687e38744145459f49509054b237d61bac25e4492db11f2dc3459
name: python-flatpack-help
arch: noarch
version: 3.11.47
epoch: 0
release: 1
summary: Development documents and examples for flatpack
url: https://github.com/RomlinGroup/Flatpack
rpm_license: Apache Software License (Apache-2.0)
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flatpack-3.11.47-1.src.rpm
location_href: Packages/python-flatpack-help-3.11.47-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <img src="https://romlin.com/wp-content/uploads/2023/05/flatpack_ai_logo.svg" width="100" height="100" alt="Flatpack">
  </p>



  **NOTE:** Flatpack is currently experimental. Please refrain from using it in production environments.

  **注意:** Flatpack 目前仍处于实验阶段。请勿用于生产环境。



  At Flatpack, our mission is clear: we are committed to building trust in AI.

  Flatpack democratises AI and ML through micro language models and model compression. Our platform enables users to train
  custom language models with 100M to 10B parameters. We introduce flatpacks (FPKs) to integrate AI and ML into edge
  computing, electronic components, and robots.

  在 Flatpack，我们的使命十分明确: 致力于建立对 AI 的信任。

  Flatpack 通过微语言模型和模型压缩普及 AI 和 ML。我们的平台使用户能够训练具有 100M 到 10B 个参数的自定义语言模型。我们引入了
  flatpacks (FPK)，将 AI 和 ML 集成到边缘计算、电子元件和机器人中。



  *Aglaonice, an ancient Greek astronomer from the 2nd or 1st century BC, was celebrated for her precise lunar eclipse
  predictions. Her mastery inspired the Greek proverb: "As the moon obeys Aglaonice," signifying unwavering certainty.*

  `3.11.0` (2024-11-24)\
  *Major core architecture refactoring for performance.*

  `3.10.0` (2024-10-21)\
  *Added dark mode support for a better user experience.*

  `3.9.0` (2024-10-04)\
  *Added [Monaco Editor](https://github.com/microsoft/monaco-editor) and custom hooks support.*

  `3.8.0` (2024-09-24)\
  *Improved package setup and deprecated agent spawning.*

  `3.7.0` (2024-09-04)\
  *Added cron and manual scheduling for builds.*

  `3.6.0` (2024-07-28)\
  *Introduced SQLite database support for each flatpack.*

  `3.5.0` (2024-05-27)\
  *Initial support for model compression in GGUF using [llama.cpp](https://github.com/ggerganov/llama.cpp).*

  `3.4.0` (2024-04-30)\
  *Added support for spawning agents with micro APIs.*

  `3.3.0` (2024-04-16)\
  *Added a vector database for storing and querying embeddings.*

  `3.2.0` (2024-03-09)\
  *Added support for unboxing local flatpacks using --local.*

  `3.1.0` (2023-12-11)\
  *Introduced a local web interface for a better user experience.*

  `3.0.0` (2023-10-20)\
  *Moved to a predictable and structured release strategy.*



  Our previous releases were a mix of minor tweaks and significant shifts, making it challenging to anticipate the nature
  of changes. With the introduction of version 3.0.0, we are embracing a predictable and structured release strategy:

  - **Major versions** (`X.0.0`): These signify significant changes or updates.
  - **Minor versions** (`3.X.0`): Introduce new features without breaking compatibility.
  - **Patch versions** (`3.0.X`): Address bug fixes and minor refinements.

  This move is not merely about [semantic versioning](https://semver.org/). It is a pledge for clear communication and
  trust with our users. We invite you to explore our new release strategy and appreciate your patience as we evolve.

  [Explore the Project on GitHub](https://github.com/RomlinGroup/Flatpack)



  This project is released under [Apache-2.0](https://github.com/RomlinGroup/Flatpack/blob/main/LICENSE).



  **DISCLAIMER:** This information is only a technical reference, not an endorsement or legal advice. Before using any
  software for commercial purposes, perform compatibility checks and seek legal advice. You are responsible for ensuring
  compliance with licensing requirements.

  Check out the [JLA - Compatibility Checker](https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-compatibility-checker) (European Commission 2024).

  - **[beautifulsoup4](https://pypi.org/project/beautifulsoup4/)**\
    MIT License (MIT License) ([LICENSE](https://pypi.org/project/beautifulsoup4/))

  - **[croniter](https://pypi.org/project/croniter/)**\
    MIT License (MIT License) ([LICENSE](https://github.com/kiorky/croniter/blob/master/LICENSE))

  - **[fastapi](https://pypi.org/project/fastapi/)**\
    MIT License ([LICENSE](https://github.com/tiangolo/fastapi/blob/master/LICENSE))

  - **[hnswlib](https://pypi.org/project/hnswlib/)**\
    Apache-2.0 license ([LICENSE](https://github.com/nmslib/hnswlib/blob/master/LICENSE))

  - **[httpx](https://pypi.org/project/httpx/)**\
    BSD License ([LICENSE](https://github.com/encode/httpx/blob/master/LICENSE.md))

  - **[huggingface-hub](https://pypi.org/project/huggingface-hub/)**\
    Apache Software License (Apache) ([LICENSE](https://github.com/huggingface/huggingface_hub/blob/main/LICENSE))

  - **[itsdangerous](https://pypi.org/project/itsdangerous/)**\
    BSD License ([LICENSE](https://github.com/pallets/itsdangerous/blob/main/LICENSE.txt))

  - **[ngrok](https://pypi.org/project/ngrok/)**\
    MIT License (MIT OR Apache-2.0) ([LICENSE](https://github.com/ngrok/ngrok-python/blob/main/LICENSE-APACHE))

  - **[prettytable](https://pypi.org/project/prettytable/)**\
    BSD License (BSD (3 clause)) ([LICENSE](https://github.com/jazzband/prettytable/blob/main/LICENSE))

  - **[psutil](https://pypi.org/project/psutil/)**\
    BSD License (BSD-3-Clause) ([LICENSE](https://github.com/giampaolo/psutil/blob/master/LICENSE))

  - **[pydantic](https://pypi.org/project/pydantic/)**\
    MIT License ([LICENSE](https://github.com/pydantic/pydantic/blob/main/LICENSE))

  - **[pypdf](https://pypi.org/project/pypdf/)**\
    BSD License ([LICENSE](https://github.com/py-pdf/pypdf/blob/main/LICENSE))

  - **[python-multipart](https://pypi.org/project/python-multipart/)**\
    Apache Software License ([LICENSE](https://github.com/Kludex/python-multipart/blob/master/LICENSE.txt))

  - **[requests](https://pypi.org/project/requests/)**\
    Apache Software License (Apache 2.0) ([LICENSE](https://github.com/psf/requests/blob/main/LICENSE))

  - **[rich](https://pypi.org/project/rich/)**\
    MIT License (MIT) ([LICENSE](https://github.com/Textualize/rich/blob/master/LICENSE))

  - **[sentence-transformers](https://pypi.org/project/sentence-transformers/)**\
    Apache Software License (Apache License 2.0) ([LICENSE](https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE))

  - **[spacy](https://pypi.org/project/spacy/)**\
    MIT License (MIT) ([LICENSE](https://github.com/explosion/spaCy/blob/master/LICENSE))

  - **[toml](https://pypi.org/project/toml/)**\
    MIT License (MIT) ([LICENSE](https://github.com/uiri/toml/blob/master/LICENSE))

  - **[uvicorn](https://pypi.org/project/uvicorn/)**\
    BSD License ([LICENSE](https://github.com/encode/uvicorn/blob/master/LICENSE.md))

  - **[zstandard](https://pypi.org/project/zstandard/)**\
    BSD License (BSD) ([LICENSE](https://github.com/indygreg/python-zstandard/blob/main/LICENSE))

  Last updated: 2024-12-16


pkgId: b575b3b0f568dfe37f751d91f3e8357f579be3b281c5fcd3410fe7afe7e180fd
name: python-flatten_iterables-help
arch: noarch
version: 1.0.2
epoch: 0
release: 1
summary: Development documents and examples for flatten_iterables
url: https://github.com/faranalytics/flatten_iterables.git
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flatten_iterables-1.0.2-1.src.rpm
location_href: Packages/python-flatten_iterables-help-1.0.2-1.noarch.rpm
checksum_type: sha256
description:
  Flatten It uses iteration (no recursion) to flatten iterables into a dictionary where each key is a reference path and each value is the value at the respective path.



  - Produces valid Python or JS reference paths for string and numeric keys.
  - Raises `ValueError` on circular references.
  - Iterative algorithm; flatten deeply nested structures without causing a call stack overflow.



  - [Installation](#installation)
  - [Usage](#usage)
  - [API](#api)
  - [Test](#test)



  ```bash
  pip install flatten_iterables
  ```



  In this example, an object named `data` will be flattened into a dictionary of reference paths and their respective values. The resulting dictionary will be dumped to a JSON string.

  ```python
  import json
  from flatten_iterables import fi

  fi.key_style = "python"

  data = {
      "dict": {"a": 42},
      "nested_dicts": {"a0": {"b0": 42, "b1": 23}},
      "empty_dict": {},
      "list": [42],
      "nested_lists": [
          [
              42,
          ],
      ],
      "empty_list": [],
      ...: 42,
  }

  print(json.dumps(fi.flatten(data), indent=2))
  ```

  ```bash
  {
    "['dict']['a']": 42,
    "['nested_dicts']['a0']['b0']": 42,
    "['nested_dicts']['a0']['b1']": 23,
    "['empty_dict']": {},
    "['list'][0]": 42,
    "['nested_lists'][0][0]": 42,
    "['empty_list']": [],
    "[Ellipsis]": 42
  }
  ```

  By default Flatten It will flatten structures that contain instances of `list` and `dict`. However, you can flatten structures containing other types of iterables and mappings by adding their respective types to the `iterables` and `mappables` sets.

  In this example, a structure containing the types `set` and `OrderedDict` will be flattened. The type `set` is added to the `iterables` set and the type `OrderedDict` is added to the `mappables` set.

  ```python
  import json
  from flatten_iterables import fi
  from collections import OrderedDict

  fi.iterables.add(set)
  fi.mappables.add(OrderedDict)

  data = {
      "set": {23, 42, 57},
      "ordered_dict": OrderedDict(a=23, b=42, c=57),
  }

  print(json.dumps(fi.flatten(data), indent=2))
  ```

  ```
  {
    "['set'][0]": 57,
    "['set'][1]": 42,
    "['set'][2]": 23,
    "['ordered_dict']['a']": 23,
    "['ordered_dict']['b']": 42,
    "['ordered_dict']['c']": 57
  }
  ```



  **fi.flatten(it)**

  - it `Union[Iterable, Mapping]` The iterable or mapping to be flattened.

  **fi.key_style** `Literal["python", "js"]` Specify a key style. **Default:** `python`

  **fi.iterables** `Set[Iterables]` Add iterable candidates to this set. **Default:** `{list}`

  **fi.mappables** `Set[Mapping]` Add mappable candidates to this set. **Default:** `{dict}`



  Clone the repository.

  ```bash
  git clone https://github.com/faranalytics/flatten_iterables.git
  ```

  Change directory into the root of the repository.

  ```bash
  cd flatten_iterables
  ```

  Install the package in editable mode.

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

  Run the tests.

  ```bash
  python -m unittest -v
  ```


pkgId: 273c36afdb42a38641380ce85973e794efe4a6bca1c048e2ba053db5911dcdc3
name: python-flekspy-help
arch: noarch
version: 0.1.3
epoch: 0
release: 1
summary: Development documents and examples for flekspy
url: https://pypi.org/project/flekspy/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flekspy-0.1.3-1.src.rpm
location_href: Packages/python-flekspy-help-0.1.3-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <a href="https://badge.fury.io/py/flekspy">
      <img src="https://badge.fury.io/py/flekspy.svg" alt="PyPI version" height="18">
    </a>
    <a href="https://github.com/henry2004y/flekspy/actions">
      <img src="https://github.com/henry2004y/flekspy/actions/workflows/CI.yml/badge.svg">
    </a>
    <a href="https://henry2004y.github.io/flekspy/">
      <img src="https://img.shields.io/badge/docs-dev-blue">
    </a>
    <a href="LICENSE">
      <img src="https://img.shields.io/badge/license-MIT-blue">
    </a>
    <a href="https://app.codecov.io/gh/henry2004y/flekspy/">
      <img src="https://img.shields.io/codecov/c/github/henry2004y/flekspy">
    </a>
  </p>

  Python package for processing FLEKS (FLexible Exascale Kinetic Simulator) data.



  ```bash
  python -m pip install flekspy
  ```



  `flekspy` can load files generated from FLEKS.

  ```python
  import flekspy

  ds = flekspy.load("sample_data/3*amrex")
  ```

  Plotting is supported via Matplotlib and YT. For more detailed usage, please refer to the [documentation](https://henry2004y.github.io/flekspy/).



  `flekspy` is licensed under the terms of the MIT license.


pkgId: 3c7794e8ac1d289da3ad823fb28d6ed9fdd330b6c79235fffc60e143dc2adffd
name: python-fletx-help
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Development documents and examples for fletx
url: https://github.com/saurabhwadekar/FletX
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fletx-0.1.1-1.src.rpm
location_href: Packages/python-fletx-help-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  - **Seamless Routing**: Effortless and dynamic navigation management.
  - **State Management**: Manage complex states with ease.
  - **Logic-UI Separation**: Keep your code clean and maintainable.


pkgId: ccb3a2c3edf094d90c6274aec872ac1e935cc1496f0f0701b545fd8feef23429
name: python-flexmeasures-help
arch: noarch
version: 0.23.2
epoch: 0
release: 1
summary: Development documents and examples for flexmeasures
url: https://github.com/seitabv/flexmeasures
rpm_license: Apache2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flexmeasures-0.23.2-1.src.rpm
location_href: Packages/python-flexmeasures-help-0.23.2-1.noarch.rpm
checksum_type: sha256
description:
  The *FlexMeasures Platform* is the intelligent backend to support real-time energy flexibility apps, rapidly and scalable.

  In a world with renewable energy, flexibility is crucial and valuable.
  Planning ahead allows flexible assets to serve the whole system with their flexibility,
  e.g. by shifting or curtailing energy use. This can also be profitable for their owners.

  - Developing energy flexibility apps & services (e.g. to enable demand response) is crucial, but expensive.
  - FlexMeasures reduces development costs with real-time data intelligence & integrations, uncertainty models and API/UI support.

  As possible users, we see energy service companies (ESCOs) who want to build real-time apps & services around energy flexibility for their customers, or medium/large industrials who are looking for support in their internal digital tooling. However, even small companies and hobby projects might find FlexMeasures useful!

  A closer look at FlexMeasures' three core value drivers:

   * Real-time data intelligence & integration ― Support for real-time updates, forecasting for the upcoming hours & schedule optimization.
   * Uncertainty models ― Dealing with uncertain forecasts and outcomes is crucial. FlexMeasures is built on [timely-beliefs](https://github.com/SeitaBV/timely-beliefs), so we model this real-world aspect accurately.
   * Developer support ― Building customer-facing apps & services is where developers make impact. FlexMeasures make their work easy with a well-documented API, data visualisation and multi-tenancy, and it supports plugins to customise and extend the platform to your needs.

  Energy Flexibility is one of the key ingredients to reducing CO2. FlexMeasures is meant
  to facilitate the transition to a carbon-free energy system. By open-sourcing FlexMeasures,
  we hope to speed up this transition world-wide.

  Please visit https://flexmeasures.io to learn more.


pkgId: 0cdd21494348bc6b017cdbfe0f12ec37037148beae3c5b5fe8f23386efb2b0d0
name: python-flickpaysdk-help
arch: noarch
version: 1.1.1
epoch: 0
release: 1
summary: Development documents and examples for flickpaysdk
url: https://merchant.getflick.co/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flickpaysdk-1.1.1-1.src.rpm
location_href: Packages/python-flickpaysdk-help-1.1.1-1.noarch.rpm
checksum_type: sha256
description:
  1. **Register on Flick:**
     Sign up at [Flick](https://merchant.getflick.co/) to obtain your API keys (`secret_key` and `public_key`).
  2. **Installation:**
     Install the package via `pip`:
     ```bash
     pip install flickpaysdk
     pip install dataclasses
     pip install requests
     ```

  1. ### Initialize the SDK with your secret key:
  Create an instance of the flick_payment class using your secret_key.
  Usage
  Initialize the SDK
  ```python
  import requests
  from flickpaysdk.flick import FlickpaySDK, checkOutRequest

  sdk = FlickpaySDK(secret_key="your_secret_key")
  ```
  2. ### For Checkout charge request
  Initiate a checkout process:
  ```python
  checkout_payload = checkOutRequest(
      amount = "1000",
      Phoneno = "1234567890",
      currency_collected = "NGN",
      currency_settled = "USD",
      email = "example@example.com",
      redirectUrl = "https://example.com/redirect",
      webhookUrl = "https://example.com/webhook",
  )
  charge_response = sdk.flickCheckOut(checkout_payload)
  print(charge_response)
  ```
  3. ### Bank List Retrieval
  Retrieve a list of supported banks:
  ```python
  bank_list = sdk.flickBankListSdk()
  print(bank_list)
  ```
  4. ### Bank Name Inquiry
  Perform a bank name inquiry:
  ```python
  bank_name_payload = BankNameRequest(
      account_number = "1234567890",
      bank_code = "001"
  )
  response = sdk.flickBankNameInquiry(bank_name_payload)
  print(response)
  ```
  5. ### Payout Initialization
  Initiate a payout:
  ```python
  payout_payload = PayoutRequest(
      bank_name = "Example Bank",
      bank_code = "012",
      account_number = "1234567890",
      amount = "1000",
      narration = "Payment for services",
      currency = "NGN",
      beneficiary_name = "John Doe",
  )
  response = sdk.flickInitiatePayoutSdk(payout_payload)
  print(response)
  ```
  Payout Verification
  Verify a payout:
  ```python
  transaction_id = "1234567890"
  verify_payout_response = verify_payout_response = sdk.flickVerifyPayoutSdk(transaction_id)
  print(verify_payout_response)
  ```
  Identity Verification
  Perform various identity verifications:
  ```python

  bvn_payload = BvnRequest(
      data_type = "basic",
      data = "012"
  )
  response = sdk.flickIdentityBvnSdk(bvn_payload)
  print(response)
  bvn = "0000222211"
  response = sdk.flickIdentityBvnSdk({"bvn": "12345678901"})
  print(response)

  response = sdk.flickIdentityNinSdk({"nin": "12345678901"})
  print(response)

  response = sdk.flickIdentityCacBasicSdk({"rc_number": "123456"})
  print(response)

  Always handle exceptions raised by API calls.
  Store your secret_key securely to prevent unauthorized access.

  If you need help with flick_paymentSDK or your Flick integration, reach out to support@getflick.app or join our Slack channel.
  License
  This project is licensed under the MIT License.
  ```


pkgId: 27ab728aaf1e7f5fbb73cde98cc930bb2aeeb2b7dd938d8634090cce8c2769f3
name: python-flo-ai-help
arch: noarch
version: 0.0.4
epoch: 0
release: 1
summary: Development documents and examples for flo-ai
url: https://pypi.org/project/flo-ai/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flo-ai-0.0.4-1.src.rpm
location_href: Packages/python-flo-ai-help-0.0.4-1.noarch.rpm
checksum_type: sha256
description:
  <div align="center">
    <strong>Built with ❤️ by the <a href="http://rootflo.ai">rootflo</a> team</strong>
    <br><a href="https://github.com/rootflo/flo-ai/discussions">Community</a> •
    <a href="https://flo-ai.rootflo.ai">Documentation</a>
  </div>


pkgId: 93247db662bd179490a0177f070abe01ffee8abc66d34305e765a64a1671d901
name: python-flodger-help
arch: noarch
version: 1.0.3
epoch: 0
release: 1
summary: Development documents and examples for flodger
url: https://pypi.org/project/flodger/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flodger-1.0.3-1.src.rpm
location_href: Packages/python-flodger-help-1.0.3-1.noarch.rpm
checksum_type: sha256
description:
  A package for function-driven logging.

  The ethos of `flodger` is to have all logging within a project driven by
  function calls and function outputs.

  No explicit log statements need inserting - just the addition of the `log_function_call`
  decorator onto any and all functions that you want to log.


pkgId: 0966c4e492178cb0b484ce47b0465cbae5ed495a19c12653cb7878f39651050d
name: python-flopy-help
arch: noarch
version: 3.9.0
epoch: 0
release: 1
summary: Development documents and examples for flopy
url: https://pypi.org/project/flopy/
rpm_license: CC0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flopy-3.9.0-1.src.rpm
location_href: Packages/python-flopy-help-3.9.0-1.noarch.rpm
checksum_type: sha256
description:
  FloPy includes support for MODFLOW 6, MODFLOW-2005, MODFLOW-NWT, MODFLOW-USG, and MODFLOW-2000. Other supported MODFLOW-based models include MODPATH (version 6 and 7), MT3DMS, MT3D-USGS, and SEAWAT.
  For general modeling issues, please consult a modeling forum, such as the [MODFLOW Users Group](https://groups.google.com/forum/#!forum/modflow).  Other MODFLOW resources are listed in the [MODFLOW Resources](https://github.com/modflowpy/flopy#modflow-resources) section.


pkgId: 71ad4cd657b1ed930dfc4f708c9d548fd35c7407bba26448eb715a5308b1f4dc
name: python-floris-help
arch: noarch
version: 4.2.2
epoch: 0
release: 1
summary: Development documents and examples for floris
url: https://github.com/NREL/floris
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-floris-4.2.2-1.src.rpm
location_href: Packages/python-floris-help-4.2.2-1.noarch.rpm
checksum_type: sha256
description:
  FLORIS is a controls-focused wind farm simulation software incorporating
  steady-state engineering wake models into a performance-focused Python
  framework. It has been in active development at NREL since 2013 and the latest
  release is [FLORIS v4.2.2](https://github.com/NREL/floris/releases/latest).
  Online documentation is available at https://nrel.github.io/floris.

  The software is in active development and engagement with the development team
  is highly encouraged. If you are interested in using FLORIS to conduct studies
  of a wind farm or extending FLORIS to include your own wake model, please join
  the conversation in [GitHub Discussions](https://github.com/NREL/floris/discussions/)!



  **WARNING:**
  Support for python version 3.8 will be dropped in FLORIS v4.3. See [Installation documentation](https://nrel.github.io/floris/installation.html#installation) for details.

  **If upgrading from a previous version, it is recommended to install FLORIS v4 into a new virtual environment**.
  If you intend to use [pyOptSparse](https://mdolab-pyoptsparse.readthedocs-hosted.com/en/latest/) with FLORIS,
  it is recommended to install that package first before installing FLORIS.

  FLORIS can be installed by downloading the source code or via the PyPI
  package manager with `pip`.

  The simplest method is with `pip` by using this command:

  ```bash
  pip install floris
  ```

  Developers and anyone who intends to inspect the source code
  can install FLORIS by downloading the git repository
  from GitHub with ``git`` and use ``pip`` to locally install it.
  It is highly recommended to use a Python virtual environment manager
  such as [conda](https://docs.conda.io/en/latest/miniconda.html)
  in order to maintain a clean and sandboxed environment. The following
  commands in a terminal or shell will download and install FLORIS.

  ```bash
      
      git clone -b main https://github.com/NREL/floris.git

      
      

      
      conda install -c conda-forge pyoptsparse

      
      pip install -e floris
  ```

  With both methods, the installation can be verified by opening a Python interpreter
  and importing FLORIS:

  ```python
  >>> import floris
  >>> help(floris)

  Help on package floris:

  NAME
      floris - # Copyright 2024 NREL

  PACKAGE CONTENTS
      convert_floris_input_v3_to_v4
      convert_turbine_v3_to_v4
      core (package)
      cut_plane
      floris_model
      flow_visualization
      layout_visualization
      logging_manager
      optimization (package)
      parallel_floris_model
      turbine_library (package)
      type_dec
      uncertain_floris_model
      utilities
      version
      wind_data

  VERSION
      4.2.2

  FILE
      ~/floris/floris/__init__.py
  ```

  It is important to regularly check for new updates and releases as new
  features, improvements, and bug fixes will be issued on an ongoing basis.



  FLORIS is a Python package run on the command line typically by providing
  an input file with an initial configuration. It can be installed with
  ```pip install floris``` (see [installation](https://nrel.github.io/floris/installation.html)).
  The typical entry point is
  [FlorisModel](https://nrel.github.io/floris/_autosummary/floris.floris_model.html)
  which accepts the path to the input file as an argument. From there,
  changes can be made to the initial configuration through the
  [FlorisModel.set](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel.set)
  routine, and the simulation is executed with
  [FlorisModel.run](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel.run).

  ```python
  from floris import FlorisModel
  fmodel = FlorisModel("path/to/input.yaml")
  fmodel.set(
      wind_directions=[i for i in range(10)],
      wind_speeds=[8.0]*10,
      turbulence_intensities=[0.06]*10
  )
  fmodel.run()
  ```

  Finally, results can be analyzed via post-processing functions available within
  [FlorisModel](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel)
  such as
  - [FlorisModel.get_turbine_layout](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel.get_turbine_layout)
  - [FlorisModel.get_turbine_powers](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel.get_turbine_powers)
  - [FlorisModel.get_farm_AEP](https://nrel.github.io/floris/_autosummary/floris.floris_model.html#floris.floris_model.FlorisModel.get_farm_AEP)

  and in two visualization packages: [layoutviz](https://nrel.github.io/floris/_autosummary/floris.layout_visualization.html) and [flowviz](https://nrel.github.io/floris/_autosummary/floris.flow_visualization.html).
  A collection of examples describing the creation of simulations as well as
  analysis and post processing are included in the
  [repository](https://github.com/NREL/floris/tree/main/examples). Examples are also listed
  in the [online documentation](https://nrel.github.io/floris/examples/001_opening_floris_computing_power.html).



  FLORIS leverages the following GitHub features to coordinate support and development efforts:

  - [Discussions](https://github.com/NREL/floris/discussions): Collaborate to develop ideas for new use cases, features, and software designs, and get support for usage questions
  - [Issues](https://github.com/NREL/floris/issues): Report potential bugs and well-developed feature requests
  - [Projects](https://github.com/orgs/NREL/projects/96): Include current and future work on a timeline and assign a person to "own" it

  Generally, the first entry point for the community will be within one of the
  categories in Discussions.
  [Ideas](https://github.com/NREL/floris/discussions/categories/ideas) is a great spot to develop the
  details for a feature request. [Q&A](https://github.com/NREL/floris/discussions/categories/q-a)
  is where to get usage support.
  [Show and tell](https://github.com/NREL/floris/discussions/categories/show-and-tell) is a free-form
  space to show off the things you are doing with FLORIS.




  BSD 3-Clause License

  Copyright (c) 2024, Alliance for Sustainable Energy LLC, All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, are permitted
  provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list of conditions
  and the following disclaimer.

  * 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.

  * 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.

rpm_license:
  BSD 3-Clause License  Copyright (c) 2024, Alliance for Sustainable Energy LLC, All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  * 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.  * 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: 2cee366aa6bb90864f2a3d6411f3b3a6111f3a42928d31333a559e92c88fa86d
name: python-flow-matching-help
arch: noarch
version: 1.0.10
epoch: 0
release: 1
summary: Development documents and examples for flow-matching
url: https://github.com/facebookresearch/flow_matching
rpm_license: CC-by-NC
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flow-matching-1.0.10-1.src.rpm
location_href: Packages/python-flow-matching-help-1.0.10-1.noarch.rpm
checksum_type: sha256
description:
  <div align="center">



  [![arXiv](assets/arXiv-2412.06264-red.svg)](https://arxiv.org/abs/2412.06264)
  [![CI](https://github.com/facebookresearch/flow_matching/actions/workflows/ci.yaml/badge.svg)](https://github.com/facebookresearch/flow_matching/actions/workflows/ci.yaml)
  [![Coverage](https://github.com/facebookresearch/flow_matching/raw/refs/heads/gh-pages/coverage/coverage-badge.svg)](https://stunning-potato-4k4z71e.pages.github.io/coverage/)
  [![License: CC BY-NC 4.0](assets/License-CC_BY--NC_4.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc/4.0/)
  [![PyPI](https://img.shields.io/pypi/v/flow-matching)](https://pypi.org/project/flow-matching/)


  </div>

  `flow_matching` is a PyTorch library for Flow Matching algorithms, featuring continuous and discrete implementations. It includes examples for both text and image modalities. This repository is part of [Flow Matching Guide and Codebase](https://arxiv.org/abs/2412.06264).


  ![](./assets/teaser.png)



  This repository requires Python 3.9 and Pytorch 2.1 or greater. To install the latest version run:
  ```
  pip install flow_matching
  ```



  The core and example folders are structured in the following way:
  ```bash
  .
  ├── flow_matching                  # Core library
  │   ├── loss                       # Loss functions
  │   │   └── ...
  │   ├── path                       # Path and schedulers
  │   │   ├── ...
  │   │   └── scheduler              # Schedulers and transformations
  │   │       └── ...
  │   ├── solver                     # Solvers for continuous and discrete flows
  │   │   └── ...
  │   └── utils
  │       └── ...
  └── examples                       # Synthetic, image, and text examples
      ├── ...
      ├── image
      │       └── ...
      └── text
              └── ...
  ```



  To create a conda environment with all required dependencies, run:
  ```
  conda env create -f environment.yml
  conda activate flow_matching
  ```

  Install pre-commit hook. This will ensure that all linting is done on each commit
  ```
  pre-commit install
  ```

  Install the `flow_matching` package in an editable mode:
  ```
  pip install -e .
  ```





  We provide [training examples](examples). Under this folder, you can find synthetic data for [continuous](examples/2d_flow_matching.ipynb), [discrete](examples/2d_discrete_flow_matching.ipynb), and [Riemannian](examples/2d_riemannian_flow_matching_flat_torus.ipynb) Flow Matching. We also provide full training [examples](examples/image) (continuous and discrete) on CIFAR10 and face-blurred ImageNet, and a scalable discrete Flow Matching example for [text modeling](examples/text).



  In this version, we don't release pre-trained models. All models under [examples](examples) can be trained from scratch by a single running command.


  Please follow the [contribution guide](CONTRIBUTING.md).



  The code in this repository is CC BY-NC licensed. See the [LICENSE](LICENSE) for details.



  If you found this repository useful, please cite the following.

  ```
  @misc{lipman2024flowmatchingguidecode,
        title={Flow Matching Guide and Code},
        author={Yaron Lipman and Marton Havasi and Peter Holderrieth and Neta Shaul and Matt Le and Brian Karrer and Ricky T. Q. Chen and David Lopez-Paz and Heli Ben-Hamu and Itai Gat},
        year={2024},
        eprint={2412.06264},
        archivePrefix={arXiv},
        primaryClass={cs.LG},
        url={https://arxiv.org/abs/2412.06264},
  }
  ```


pkgId: eb00b2f835a10f703382c8efa094a0495f1c300ce1312fa528edfe6c004363ff
name: python-flowcept-help
arch: noarch
version: 0.7.1
epoch: 0
release: 1
summary: Development documents and examples for flowcept
url: https://pypi.org/project/flowcept/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowcept-0.7.1-1.src.rpm
location_href: Packages/python-flowcept-help-0.7.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Build](https://github.com/ORNL/flowcept/actions/workflows/create-release-n-publish.yml/badge.svg)](https://github.com/ORNL/flowcept/actions/workflows/create-release-n-publish.yml)
  [![PyPI](https://badge.fury.io/py/flowcept.svg)](https://pypi.org/project/flowcept)
  [![Tests](https://github.com/ORNL/flowcept/actions/workflows/run-tests.yml/badge.svg)](https://github.com/ORNL/flowcept/actions/workflows/run-tests.yml)
  [![Code Formatting](https://github.com/ORNL/flowcept/actions/workflows/run-checks.yml/badge.svg)](https://github.com/ORNL/flowcept/actions/workflows/run-checks.yml)
  [![License: MIT](https://img.shields.io/github/license/ORNL/flowcept)](LICENSE)



  FlowCept is a runtime data integration system that captures and queries workflow provenance with minimal or no code changes. It unifies data across diverse workflows and tools, enabling integrated analysis and insights, especially in federated environments. Designed for scenarios involving critical data from multiple workflows, FlowCept seamlessly integrates data at runtime, providing a unified view for end-to-end monitoring and analysis and enhanced support for Machine Learning (ML) workflows.

  Other capabilities include:

  - Automatic multi-workflow provenance data capture;
  - Data observability, enabling minimal intrusion to user workflows;
  - Explicit user workflow instrumentation, if this is preferred over implicit data observability;
  - ML data capture in various levels of details: workflow, model fitting or evaluation task, epoch iteration, layer forwarding;
  - ML model management;
  - Adapter-based, loosely-coupled system architecture, making it easy to plug and play with different data processing systems and backend database (e.g., MongoDB) or MQ services (e.g., Redis, Kafka);
  - Low-overhead focused system architecture, to avoid adding performance overhead particularly to workloads that run on HPC machines;
  - Telemetry data capture (e.g., CPU, GPU, Memory consumption) linked to the application dataflow;
  - Highly customizable to multiple use cases, enabling easy toggle between settings (e.g., with/without provenance capture; with/without telemetry and which telemetry type to capture; which adapters or backend services to run with);
  - [W3C PROV](https://www.w3.org/TR/prov-overview/) adherence;

  Notes:

  - Currently implemented data observability adapters:
    - MLFlow
    - Dask
    - TensorBoard
  - Python scripts can be easily instrumented via `@decorators` using `@flowcept_task` (for generic Python method) or `@torch_task` (for methods that encapsulate PyTorch model manipulation, such as training or evaluation).
  - Currently supported MQ systems:
    - Kafka
    - Redis
  - Currently supported database systems:
    - MongoDB
    - Lightning Memory-Mapped Database (lightweight file-only database system)

  Explore [Jupyter Notebooks](notebooks) and [Examples](examples) for usage.

  Refer to [Contributing](CONTRIBUTING.md) for adding new adapters. Note: The term "plugin" in the codebase is synonymous with "adapter," and future updates will standardize terminology.



  1. Install FlowCept:

  `pip install .[all]` in this directory (or `pip install flowcept[all]`) if you want to install all dependencies.

  For convenience, this will install all dependencies for all adapters. But it can install dependencies for adapters you will not use. For this reason, you may want to install like this: `pip install .[extra_dep1,extra_dep2]` for the adapters we have implemented, e.g., `pip install .[dask]`.
  Currently, the optional dependencies available are:

  ```
  pip install flowcept[mongo]         # To install FlowCept with MongoDB
  pip install flowcept[mlflow]        # To install mlflow's adapter.
  pip install flowcept[dask]          # To install dask's adapter.
  pip install flowcept[tensorboard]   # To install tensorboaard's adapter.
  pip install flowcept[kafka]         # To utilize Kafka as the MQ, instead of Redis.
  pip install flowcept[nvidia]        # To capture NVIDIA GPU runtime information.
  pip install flowcept[analytics]     # For extra analytics features.
  pip install flowcept[dev]           # To install FlowCept's developer dependencies.
  ```

  You do not need to install any optional dependency to run Flowcept without any adapter, e.g., if you want to use simple instrumentation (see below). In this case, you need to remove the adapter part from the [settings.yaml](resources/settings.yaml) file.

  2. Start the MQ System:

  To use FlowCept, one needs to start a MQ system `$> make services`. This will start up Redis but see other options in the [deployment](deployment) directory and see [Data Persistence](#data-persistence) notes below.

  3. Optionally, define custom settings (e.g., routes and ports) accordingly in a settings.yaml file. There is a sample file [here](resources/sample_settings.yaml), which can be used as basis. Then, set an environment variable `FLOWCEPT_SETTINGS_PATH` with the absolute path to the yaml file. If you do not follow this step, the default values defined [here](resources/sample_settings.yaml) will be used.

  4. See the [Jupyter Notebooks](notebooks) and [Examples directory](examples) for utilization examples.



  To use containers instead of installing FlowCept's dependencies on your host system, we provide a [Dockerfile](deployment/Dockerfile) alongside a [docker-compose.yml](deployment/compose.yml) for dependent services (e.g., Redis, MongoDB).


  - As seen in the steps below, there are [Makefile](Makefile) commands to build and run the image. Please use them instead of running the Docker commands to build and run the image.
  - The Dockerfile builds from a local `miniconda` image, which will be built first using the [build-image.sh](deployment/build-image.sh) script.
  - All dependencies for all adapters are installed, increasing build time. Edit the Dockerfile to customize dependencies based on our [pyproject.toml](pyproject.toml) to reduce build time if needed.



  1. Build the Docker image:
      ```bash
      make build
      ```

  2. Start dependent services:
      ```bash
      make services
      ```

  3. Run the image interactively:
      ```bash
      make run
      ```

  4. Optionally, run Unit tests in the container:
      ```bash
      make tests-in-container
      ```



  In addition to existing adapters to Dask, MLFlow, and others (it's extensible for any system that generates data), FlowCept also offers instrumentation via @decorators.

  ```python
  from flowcept import Flowcept, flowcept_task

  @flowcept_task
  def sum_one(n):
      return n + 1


  @flowcept_task
  def mult_two(n):
      return n * 2


  with Flowcept(workflow_name='test_workflow'):
      n = 3
      o1 = sum_one(n)
      o2 = mult_two(o1)
      print(o2)

  print(Flowcept.db.query(filter={"workflow_id": Flowcept.current_workflow_id}))
  ```



  FlowCept uses an ephemeral message queue (MQ) with a pub/sub system to flush observed data. For optional data persistence, you can choose between:

  - [LMDB](https://lmdb.readthedocs.io/) (default): A lightweight, file-based database requiring no external services (but note it might require `gcc`). Ideal for simple tests or cases needing basic data persistence without query capabilities. Data stored in LMDB can be loaded into tools like Pandas for complex analysis. FlowCept's database API provides methods to export data in LMDB into Pandas DataFrames.
  - [MongoDB](https://www.mongodb.com/): A robust, service-based database with advanced query capabilities. Required to use FlowCept's Query API (i.e., `flowcept.Flowcept.db`) to run more complex queries and other features like ML model management or runtime queries (i.e., query while writing). To use MongoDB, initialize the service with `make services-mongo`.

  You can use both of them, meaning that the data pruducers will write data into both, none of them, or each of them. All is customizable in the settings file.

  If data persistence is disabled, captured data is sent to the MQ without any default consumer subscribing to persist it. In this case, querying the data requires creating a custom consumer to subscribe to the MQ.

  However, for querying, FlowCept Database API uses only one at a time. If both are enabled in the settings file, MongoDB will be used. If none is enable, an error is thrown.

  Data stored in MongoDB and LMDB are interchangeable. You can switch between them by transferring data from one to the other as needed.



  In the settings.yaml file, the following variables might impact interception performance:

  ```yaml
  main_redis:
    buffer_size: 50
    insertion_buffer_time_secs: 5

  plugin:
    enrich_messages: false
  ```

  And other variables depending on the Plugin. For instance, in Dask, timestamp creation by workers add interception overhead. As we evolve the software, other variables that impact overhead appear and we might not stated them in this README file yet. If you are doing extensive performance evaluation experiments using this software, please reach out to us (e.g., create an issue in the repository) for hints on how to reduce the overhead of our software.



  This section is only important if you want to enable GPU runtime data capture and the GPU is from AMD. NVIDIA GPUs don't need this step.

  For AMD GPUs, we rely on the official AMD ROCM library to capture GPU data.

  Unfortunately, this library is not available as a pypi/conda package, so you must manually install it. See instructions in the link: https://rocm.docs.amd.com/projects/amdsmi/en/latest/

  Here is a summary:

  1. Install the AMD drivers on the machine (check if they are available already under `/opt/rocm-*`).
  2. Suppose it is /opt/rocm-6.2.0. Then, make sure it has a share/amd_smi subdirectory and pyproject.toml or setup.py in it.
  3. Copy the amd_smi to your home directory: `cp -r /opt/rocm-6.2.0/share/amd_smi ~`
  4. cd ~/amd_smi
  5. In your python environment, do a pip install .

  Current code is compatible with this version: amdsmi==24.6.2+2b02a07
  Which was installed using Frontier's /opt/rocm-6.2.0/share/amd_smi



  Some unit tests utilize `torch==2.2.2`, `torchtext=0.17.2`, and `torchvision==0.17.2`. They are only really needed to run some tests and will be installed if you run `pip install flowcept[ml_dev]` or `pip install flowcept[all]`. If you want to use FlowCept with Torch, please adapt torch dependencies according to your project's dependencies.



  If you used FlowCept in your research, consider citing our paper.

  ```
  Towards Lightweight Data Integration using Multi-workflow Provenance and Data Observability
  R. Souza, T. Skluzacek, S. Wilkinson, M. Ziatdinov, and R. da Silva
  19th IEEE International Conference on e-Science, 2023.
  ```

  **Bibtex:**

  ```latex
  @inproceedings{souza2023towards,
    author = {Souza, Renan and Skluzacek, Tyler J and Wilkinson, Sean R and Ziatdinov, Maxim and da Silva, Rafael Ferreira},
    booktitle = {IEEE International Conference on e-Science},
    doi = {10.1109/e-Science58273.2023.10254822},
    link = {https://doi.org/10.1109/e-Science58273.2023.10254822},
    pdf = {https://arxiv.org/pdf/2308.09004.pdf},
    title = {Towards Lightweight Data Integration using Multi-workflow Provenance and Data Observability},
    year = {2023}
  }

  ```



  Please note that this a research software. We encourage you to give it a try and use it with your own stack. We are continuously working on improving documentation and adding more examples and notebooks, but we are still far from a good documentation covering the whole system. If you are interested in working with FlowCept in your own scientific project, we can give you a jump start if you reach out to us. Feel free to [create an issue](https://github.com/ORNL/flowcept/issues/new), [create a new discussion thread](https://github.com/ORNL/flowcept/discussions/new/choose) or drop us an email (we trust you'll find a way to reach out to us :wink:).



  This research uses resources of the Oak Ridge Leadership Computing Facility at the Oak Ridge National Laboratory, which is supported by the Office of Science of the U.S. Department of Energy under Contract No. DE-AC05-00OR22725.


pkgId: 4130a43accc3975479b7e43482bb350cb8676324839ee83bf8aa90d7525c7b38
name: python-flowchart-magic-help
arch: noarch
version: 0.1.4
epoch: 0
release: 1
summary: Development documents and examples for flowchart-magic
url: https://github.com/tuusuario/colab-flowchart
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowchart-magic-0.1.4-1.src.rpm
location_href: Packages/python-flowchart-magic-help-0.1.4-1.noarch.rpm
checksum_type: sha256
description:
  A library for "Jupyter Notebook" / "Google Colab" that allows generating flowcharts using the `%flowchart` magic command.



  ```bash
  pip install flowchart_magic
  ```



  Import:

  ```python
  from flowchart_magic import flowchart


  %load_ext flowchart_magic.flowchart_magic
  ```

  Example:

  ```
  %flowchart
  def example():
      x = 10
      if x > 5:
          print("x is greater than 5")
      else:
          print("x is not greater than 5")
  ```



  Install and import:
  ![Example Flowchart](assets/install_import.png)

  Example code:
  ![Example Flowchart](assets/example_jupyter.png)


  This project is inspired by and builds upon the original [pyflowchart](https://pypi.org/project/pyflowchart/) project and [flowchart.js](https://flowchart.js.org/). Many thanks to its contributors for their work!


pkgId: 46cf94817100d44faa28e318146e4a4e6a1a2d53d110cafa467d611316206096
name: python-flowkit-jwt-generator
arch: noarch
version: 1.31.0
epoch: 0
release: 1
summary: Common test JWT generator for FlowKit.
url: https://github.com/Flowminder/FlowKit
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowkit-jwt-generator-1.31.0-1.src.rpm
location_href: Packages/python-flowkit-jwt-generator-1.31.0-1.noarch.rpm
checksum_type: sha256
description:
  Documentation for flowkit-jwt-generator can be found in the main [FlowKit documentation](https://flowkit.xyz).


pkgId: c50e1b329118f2c80ac9c5f2c5b041ac2d7f66a3b1a4e411f6f7c0361bc32898
name: python-flowmetricscsv-help
arch: noarch
version: 1.0.4
epoch: 0
release: 1
summary: Development documents and examples for flowmetricscsv
url: https://letpeople.work
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowmetricscsv-1.0.4-1.src.rpm
location_href: Packages/python-flowmetricscsv-help-1.0.4-1.noarch.rpm
checksum_type: sha256
description:
  ![CI Workflow](https://github.com/letpeoplework/flowmetricscsv/actions/workflows/publish.yml/badge.svg)
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/flowmetricscsv)

  This python package allows you to visualize the four measures of flow based on any csv file. It can be run offline, and all it needs is a csv file with the start and closing dates of the items. Items that are still in progress, have no value for the closed date. Feel free to check out the code, propose improvements and also make it your own by adjusting it to your context and potentially integrating it into some kind of pipeline of yours. The true power of Flow Metrics comes when inspected on a regular base. The point of collecting data is to take action, so use this to make informed decisions about what you want to adjust! You can use this for free, hope it helps.

  This tool is provided for free by [LetPeopleWork](https://letpeople.work). If you are curious about Flow Metrics, Kanban, #NoEstimates etc., feel free to reach out to us and [book a call](https://calendly.com/letpeoplework/)!


  Make sure you have python 3.x installed on your system and it's available via your PATH variable. You can check this by running `python --version` on your terminal. If it works without error, you have python installed and ready. If not, you can download it from the [official Python Website](https://www.python.org/downloads/).

  **Important:** It can be that you have to use `python3 --version`. If this is the case, please use always `python3` instead of `python` in the following commands.

  Once you have made sure python is installed, you can download `flowmetricscsv` via pip:
  `python -m pip install --upgrade flowmetricscsv`


  If your installation was successfull, you can now run `flowmetricscsv` via the commandline. When not supplied with any parameter for a configuration file, it will automatically copy the `ExampleConfig.json` and will auto-generate an `ExampleFile.csv` to your current directory and use those to generate the charts. After you've run `flowmetricscsv` you should have the 2 files in your current directory as well as a folder called `Charts` that includes the generated from the example data.

  You can now start to tweak the configuration and replace the csv file according to your needs.
  **Note**: It's recommended to rename your config file from *ExampleConfig.json* to something more meaningful (like *TeamNameConfig.json*) and to specify this configuration file when running it again: `flowmetricscsv --ConfigFileNames "TeamNameConfig.json"`.

  Read on to see details about how to configure `flowmetricscsv`.


  To create the visulizations with `flowmetricscsv`, you need various inputs. First and foremost, you need to provide a csv file that includes the date when an item was started and closed (unless it's still in progress). The csv can contain other information, but it's not needed nor relevant for any of the visulizations. Using the "history" parameter, you can define which period you want to visualize. Do you want to see the last 30 days or rather the last 90 days? You can specify either a fixed number of days (use the last x days to create a rolling period), or a fixed date (use all items that are newer than the specified date).


  In the [ExampleConfig.json](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/ExampleConfig.json) file you can see the default configuration. There are general settings and configurations per chart. Below you can find a summary of the various options.



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | FileName               | The name of the CSV file you want to use as input. Can be a relative path from the script location (like in the example) or a full path if the files are somewhere else.             | ExampleFile.csv   |
  | Delimiter              | The delimiter used in the CSV file   | ;                  |
  | StartedDateColumn      | The name of the column in the csv file that contains the started date       | Activated Date     |
  | ClosedDateColumn       | The name of the column in the csv file that contains the closed date          | Closed Date        |
  | StartDateFormat        | The format of the start dates in the csv file. Default is "%m/%d/%Y %I:%M:%SOURCE%p".
  | ClosedDateFormat       | The format of the closed dates in the csv file. If not set (default), the same format as specified for the start date is used. Check [Python Dates](https://www.w3schools.com/python/python_datetime.asp) for the options you have (or ask ChatGPT)          | None |
  | estimationColumn       | The name of the column in the csv file that contains the estimations (optional). This is needed if you want to plot a chart where you compare estimates vs. cycle-time.          | Story Points        |
  | itemTitleColumn       | The name of the column in the csv file that contains the title of the items (optional). This can be anything to identify the item, like an ID or some other text. If set, it will display the text next to the bubbles in the charts. Note that the shorter the text, the easier it is to read. Long texts will overlap.          | ID        |
  | ChartsFolder           | Folder path for the folder where the charts should be saved. Can be relative to the script location (like the default) or a full path to a folder. Folder does not need to exist, it will be created as part of the script.               | Charts             |
  | ShowPlots              | If set to true, the script will stop and show you an interactive version of the chart before continuing.                | false              |
  | Today              | Specify to set a different "end date" for your charts than today. Specify dates in the format "YYYY-MM-dd", for example 2024-08-19 for the 19th of August 2024. This setting helps you generate charts for past date intervals, for example if you want to recreate charts for a given month in the past. The history parameter of the different charts uses the "Today" date as reference, and will "go back" from this one.                | null              |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified.        | true               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).      | 30                 |
  | ChartName              | File name of the chart.     | CycleTime.png      |
  | Percentiles            | List of which percentiles should be shown in the chart. Can be any value from 1 to 100.     | [50, 70, 85, 95]    |
  | PercentileColors       | Colors for the percentiles defined. The amount has to match with what you specified above. Colors are associated by sequence. | [red, orange, lightgreen, darkgreen]|
  | Trend Settings         | Describes what trend you want to display. Remove line completely if you don't want a trend. Specifies which percentile you want to display, what is the "rolling window" of the trend you want to see, as well as the color the trend should have. | [70, 10, "purple"] --> Show a purple line for the average 70th percentile over the last 10 days. |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified.         | true               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).      | 30                 |
  | ChartName              | File name of the chart.       | WorkItemAge.png    |
  | XAxisLines             | List of which lines should be shown on the x-axis (in days). This can be useful to track if your items approach their [Service Level Expectation](https://kanbanguides.org/english/).      | [5, 10]            |
  | XAxisLineColors        | Colors for corresponding X-axis lines. The amount has to match with what you specified above. Colors are associated by sequence. | [orange, red]      |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified.         | true               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).     | 90                 |
  | Unit                   | Which grouping is applied. Possible options are 'days', 'weeks', and 'months'    | days               |
  | ChartName              | File name of the chart.               | Throughput.png     |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified.         | true               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).     | 30                 |
  | ChartName              | File name of the chart.                 | WorkInProcess.png  |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified.         | true               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).     | 90                 |
  | ChartName              | File name of the chart.          | StartedVsFinished.png|
  | StartedColor           | Color for started items on the chart  | orange             |
  | ClosedColor            | Color for closed items on the chart   | green              |




  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified. If enabled, `estimationColumn` must be set and available in the CSV.         | false               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).     | 90                 |
  | ChartName              | File name of the chart.          | EstimationVsCycleTime.png|
  | estimationUnit         | Unit of estimation that will be visible on the chart. Examples: Story Points, Hours, Ideal Days etc.          | Story Points |



  | Name                   | Description                          | Default Value      |
  |------------------------|--------------------------------------|--------------------|
  | Generate               | Whether to generate the chart at all. If set to false, no further settings need to be specified. If enabled, process behaviour charts for all 4 measures of flow will be generated.         | true               |
  | BaselineStart          | The start date for your baseline for the PBCs. Follows the format "yyyy-MM-dd". The baseline is what defines the visualized average, as well as the upper and lower natural process limit.        | 2024-01-01               |
  | BaselineEnd            | The end date for your baseline for the PBCs. Follows the format "yyyy-MM-dd". The baseline is what defines the visualized average, as well as the upper and lower natural process limit.      | 2024-01-31               |
  | History                | Defines how much data should be used. It's always calculated from today backwards. The value is in days. The value is in days or as a date in the format "YYYY-MM-dd" (2024-08-19).     | 60                 |
  | ThroughputChartName    | File name of the Throughput PBC chart.          | Throughput_PBC.png|
  | CycleTimeChartName     | File name of the Cycle Time PBC chart.          | CycleTime_PBC.png|
  | WipChartName           | File name of the WIP PBC chart.          | WorkInProgress_PBC.png|
  | ItemAgeChartName       | File name of the Total Work Item Age PBC chart.          | WorkItemAge_PBC.png|


  You can have multiple configurations that you can use to create different charts. For example for different teams or different item types (for example if you want to visualize Epics differently than other work items).
  Each configuration is independent and can work against different input files. If you want to generate many charts at once with different configurations, you can also specify multiple configuration files:
  `flowmetricscsv --ConfigFileNames "TeamA_Config.json" "TeamB_Config.json" "TeamC_Config.json"`

  This will generate you three sets of charts as per the individual configurations specified.
  **Note:** Make sure to specify different folders or chart names in the respective configs, as otherwise they will be overwritten.


  You find more information on this in the [wiki](https://github.com/LetPeopleWork/FlowMetricsCSV/wiki)


  If you want to reuse `flowmetricscsv` in your own python scripts, you can do so in two ways described below.
  This might be useful if you generate a csv in python and want to directly pass it to `flowmetricscsv` to generate charts, or you simply want to reuse dedicated functions to generate specific charts.


  You can simply invoke the whole program and specify which configuration file to use, by using `sys.argv`. You can find an example in the following file in the *Examples* folder: [call_via_sys.py](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/Examples/call_via_sys.py)


  If you don't want to call the full application, but you either want to create only specific charts or not bother creating the config file, you can also call dedicated functions from the `FlowMetricsService`.
  You don't need the config file for this, but you have to supply different parameters to the functions yourself that otherwise are read from the config file. You also must specify all the work items that are of type [WorkItem](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/FlowMetricsCSV/WorkItem.py) as input to the functions. The easiest way is to use the provided [CsvService](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/FlowMetricsCSV/CsvService.py) to parse an existing csv file. But you can also use other ways to generate the `WorkItem` objects.

  In the Example folder, you find one example on how you can use this in the file [use_individual_services.py](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/Examples/use_individual_services.py).


  Following is an overview over the functions the [FlowMetricsService](https://github.com/LetPeopleWork/FlowMetricsCSV/blob/main/FlowMetricsCSV/FlowMetricsService.py) is providing.


  To initialize the service, provide parameters `show_plots` (boolean) and `charts_folder` (string) which represents whether to show plots immediately and the folder to store generated charts respectively.


  | Function | Description |
  |----------|-------------|
  | `plot_cycle_time_scatterplot` | Creates a scatterplot of Cycle Time against Work Item Closed Date with percentiles. |
  | `plot_work_item_age_scatterplot` | Generates a scatterplot of Work Item Age against Work Item Started Date with optional x-axis lines. |
  | `plot_throughput_run_chart` | Plots Throughput Run Chart displaying items completed over time. |
  | `plot_work_in_process_run_chart` | Creates a Work In Process (WIP) Run Chart showing the number of items in process over time. |
  | `plot_work_started_vs_finished_chart` | Generates a chart comparing Work Items started vs. finished over time. |
  | `plot_estimation_vs_cycle_time_scatterplot` | Plots Estimation vs. Cycle Time scatterplot. |
  | `plot_total_age_process_behaviour_chart` | Generates Total Work Item Age Process Behavior Chart. |
  | `plot_cycle_time_process_behaviour_chart` | Creates Cycle Time Process Behavior Chart. |
  | `plot_wip_process_behaviour_chart` | Generates Work In Process (WIP) Process Behavior Chart. |
  | `plot_throughput_process_behaviour_chart` | Plots Throughput Process Behavior Chart. |


pkgId: 27f0de1ff0076a07bd6ce1da48d73d4037b1309c6c62fce83359c2a44847afe2
name: python-flowpulse-help
arch: noarch
version: 1.0.13
epoch: 0
release: 1
summary: Development documents and examples for flowpulse
url: https://letpeople.work
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowpulse-1.0.13-1.src.rpm
location_href: Packages/python-flowpulse-help-1.0.13-1.noarch.rpm
checksum_type: sha256
description:
  ![CI Workflow](https://github.com/letpeoplework/flowpulse/actions/workflows/publish.yml/badge.svg)
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/flowpulse)

  This python package allows you to visualize your measures of flow as well as to run Monte Carlo Simulations based on the data in your Jira or Azure DevOps Backlog. All it needs is a connection to your [Jira](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html) or [Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows) and the queries to your backlog. Feel free to check out the code, propose improvements and also make it your own by adjusting it to your context and potentially integrating it into some kind of pipeline of yours. The true power of Flow Metrics comes when inspected on a regular base. The point of collecting data is to take action, so use this to make informed decisions about what you want to adjust! You can use this for free, hope it helps.

  This tool is provided for free by [LetPeopleWork](https://letpeople.work). If you are curious about Flow Metrics, Kanban, #NoEstimates etc., feel free to reach out to us and [book a call](https://calendly.com/letpeoplework/)!


  Make sure you have python 3.x installed on your system and it's available via your PATH variable. You can check this by running `python --version` on your terminal. If it works without error, you have python installed and ready. If not, you can download it from the [official Python Website](https://www.python.org/downloads/).

  **Important:** It can be that you have to use `python3 --version`. If this is the case, please use always `python3` instead of `python` in the following commands.

  Once you have made sure python is installed, you can download `flowpulse` via pip:
  `python -m pip install --upgrade flowpulse`


  If your installation was successfull, you can now run `flowpulse` via the commandline. When not supplied with any parameter for a configuration file, it will automatically copy the `ExampleConfig.json` to your current directory and run using. This will fail with one of the following errors:
  ```
  Error while executing flowpulse:
  400 Client Error: Bad Request for url: https://yourorg.atlassian.net/rest/api/2/search?jql=issuetype+in+%28%22Story%22%2C+%22Bug%22%29+AND+project+%3D+%22YourProject%22+AND+labels+%3D+%22YourTeamLabel%22+AND+updated+%3E%3D+%222024-03-17%22&fields=id%2Ckey%2Csummary%2Cupdated%2Ccreated%2Ctimetracking.originalEstimate
  ```

  ```
  TF400813: The user 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' is not authorized to access this resource.
  ```
  As you must configure your connection to Jira or Azure DevOps first.

  **Note**: It's recommended to rename your config file from *ExampleConfig.json* to something more meaningful (like *TeamNameConfig.json*) and to specify this configuration file when running it again: `flowpulse --ConfigFileNames "TeamNameConfig.json"`.


  You can have multiple configurations that you can use to create different charts and/or run different forecasts. For example for different teams or different item types (for example if you want to visualize Epics differently than other work items).
  Each configuration is independent and can work against different input files. If you want to generate many charts/forecasts at once with different configurations, you can also specify multiple configuration files:
  `flowpulse --ConfigFileNames "TeamA_Config.json" "TeamB_Config.json" "TeamC_Config.json"`

  This will generate you three sets of charts as per the individual configurations specified.
  **Note:** Make sure to specify different folders or chart names in the respective configs, as otherwise they will be overwritten.

  Read on to see details about how to configure `flowpulse`.


  In the [ExampleConfig.json](https://github.com/LetPeopleWork/flowpulse/tree/main/flowpulse/ExampleConfig.json) file you can see the default configuration.
  There are general settings, Jira and Azure DevOps specific settings, configurations per chart you want to create and specific forecast settings. Below you can find a summary of the various options.


  **Important**: Double Quotes (") as well as backslashes (\\) cannot be written in json like this. You have to "escape" it by prepending a \\. Thus if you want to write a ", you have to type \\". If you want to use a backslash, you must write \\ \\. Please reference the example configurations default values. As your queries will most likely include those, please keep this in mind.



  | Name                   | Description                          | Sample Value      |
  |------------------------|--------------------------------------|--------------------|
  | workTrackingSystem     | Which Work Tracking System to use.                         | Either "Jira" or "Azure DevOps" |
  | ChartsFolder           | Folder path for the folder where the charts should be saved. Can be relative to the script location (like the default) or a full path to a folder. Folder does not need to exist, it will be created as part of the script.               | Charts             |
  | ShowPlots              | If set to true, the script will stop and show you an interactive version of the chart before continuing.                | false              |
  rawDataCSV              | If specified, the work items returned by the query will additionally be stored in a csv file within the charts folder.                | workitems.csv     |
  today              | Specify to set a different "end date" for your charts and forecasts than today. Specify dates in the format "YYYY-MM-dd", for example 2024-08-19 for the 19th of August 2024. This setting helps you generate charts and forecasts for past date intervals, for example if you want to recreate charts for a given month in the past. The history parameter of the different charts uses the "Today" date as reference, and will "go back" from this one.                | null              |


  In order use `flowpulse` with Jira, you must specify against which Jira instance you are working. For this you need a url, as well as a [Personal Access Token](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html) and your username. Furthermore you have to specify a query that gets the items of the team(s) you are interested in as well as how many days into the past you are interested in. Last but not least, you can specify which field you are using for estimates. The queries are written in [JQL](https://www.atlassian.com/blog/jira/jql-the-most-flexible-way-to-search-jira-14).

  | Name                   | Description                          | Sample Value      |
  |------------------------|--------------------------------------|--------------------|
  | url           | The url to your Jira instance. Replace _YourOrg_ with your actual organization name.               | https://YourOrg.atlassian.net             |
  | username           | The user that shall be used for exeucting the queries.               |              |
  | apiToken              | [Personal Access Token](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html) to access the data in your organization             | ""              |
  | itemQuery           | The query to get your teams items. Note that this should contain all items that are relevant for your team, closed, in progress, and not started. Check out the [JQL reference](https://www.atlassian.com/blog/jira/jql-the-most-flexible-way-to-search-jira-14) if you need support.             | issuetype in (\"Story\", \"Bug\") AND project = \"YourProject\" AND labels = \"YourTeamLabel\"             |
  | history           | Number of days you look back for items (e.g. "90" for last 90 days), or date in the format "YYYY-MM-dd" (2024-08-19) to include all items since that date.               | 90             |
  | estimationField           | Which field is holding the estimates. This might be a custom field, depending on your process.            | timetracking.originalEstimate             |
  | anonymizeLabel           | Anonymizes the labels in the charts, by not using the full issue key, but just the numbers.            | true or false             |



  In order use `flowpulse` with Azure DevOps, you must specify against which Azure DevOps organization you are working. For this you need a url, as well as a [Personal Access Token](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows). Furthermore you have to specify a query that gets the items of the team(s) you are interested in as well as how many days into the past you are interested in. Last but not least, you can specify which field you are using for estimates. The queries are written in [WIQL](https://learn.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops).


  | Name                   | Description                          | Sample Value      |
  |------------------------|--------------------------------------|--------------------|
  | organizationUrl           | The url to your Azure DevOps Organization. Replace _YourOrg_ with your actual organization name.               | https://dev.azure.com/YourOrg             |
  | apiToken              | [Personal Access Token](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows) to access the data in your organization             | ""              |
  | itemQuery           | The query to get your teams items. Note that this should contain all items that are relevant for your team, closed, in progress, and not started. Check out the [WIQL reference](https://learn.microsoft.com/en-us/azure/devops/boards/queries/wiql-syntax?view=azure-devops) if you need support.             | ([System.WorkItemType] = \"User Story\" or [System.WorkItemType] = \"Bug\") AND [System.TeamProject] == \"Your Project\" AND [System.AreaPath] UNDER \"Team Project\\\\Team Name\"             |
  | history           | Number of days you look back for items (e.g. "90" for last 90 days), or date in the format "YYYY-MM-dd" (2024-08-19) to include all items since that date.            | 90             |
  | estimationField           | Which field is holding the estimates. You can see the "reference Name" for the fields if you browse to *https://dev.azure.com/%7Borganization%7D/%7Bproject%7D/_apis/wit/fields?api-version=7.1-preview.3* - and insert your organization and project            | Microsoft.VSTS.Scheduling.StoryPoints             |



  You can add one or more forecasts. Forecasts need two inputs: The remaining items you want to forecast (when will they be done?) and a target date (how much can we get done till then). The target date is specified either as a date in the format *YYYY-mm-dd* or as number. If you specify a number, it will use the date that is this amount of days in the future. To get the remaining items, you specify a query that returns all items that are not yet done and you want to forecast. You can use all filters JQL has to offer, for example filtering by area path, tag, iteration path, or anything else.

  If you don't provide a *target date*, no "How Many" simulation will be run. If you don't provide a *remaining Backlog Query*, no "When" simulation will be run. If you provide both, you'll get a on top a likelihood of reaching the target date with the remaining backlog.

  | Name                   | Description                          | Sample Value      |
  |------------------------|--------------------------------------|--------------------|
  | name           | The name of your Forecast.               | "Release 23.44" or "Sprint Goal"             |
  | remainingBacklogQuery           | The query to get the remaining items for your forecast. Note that this should contain all items that are relevant for your forecast, so most likely you want to filter out closed and removed items. This is either a JQL query if you are using Jira or a WIQL query in the case of Azure DevOps.           | issuetype in (\"Story\", \"Bug\") AND project = \"YourProject\" AND status not in (\"Done\") AND fixVersion = \"Release 24.10\" |
  | targetDate           | Either the date in *YYYY-mm-dd* format or the number of days in future               | "2024-10-31" / 14             |


  If you don't want to run any forecasts, just remove all forecasts, so that your config looks like this:
  ```
  "forecasts":[
      ],
  ```


  Every chart can be configured with different settings. You can also switch off the generation of a sepcific chart by setting `generate: false`.
  You can find detailed information to the possible chart configurations in [FlowMetricsCSV](https://github.com/LetPeopleWork/FlowMetricsCSV?tab=readme-ov-file#cycle-time-scatter-plot).


  After you configured `flowpulse` with your queries and with your token, you are ready to go. simply run `flowpulse --ConfigFileNames "YourConfig.json"`. It will generate all the charts according to your configurations and will show you your forecasts in the commandline.


  You find more information on this in the [wiki](https://github.com/LetPeopleWork/FlowMetricsCSV/wiki)


  If you have additional demands, like running the forecasts on a regular base and pushing the results somewhere (like in a database) instead of just displaying it in the commandline, you can build your own python application on top.

  After you installed the package, you can include the following services and then run your own applications on top:
  ```
  from FlowMetricsCSV.FlowMetricsService import FlowMetricsService
  from MonteCarloCSV.MonteCarloService import MonteCarloService
  from flowpulse.JiraWorkItemService import JiraWorkItemService
  from flowpulse.AzureDevOpsWorkItemService import AzureDevOpsWorkItemService
  ```

  You can create the various services and provide the necessary configuration as it best fits you:
  ```
  jira_work_item_service = JiraWorkItemService(jira_url, jira_username, jira_api_token, jira_estimation_field, history_in_days)
  azure_devops_work_item_service = AzureDevOpsWorkItemService(ado_org_url, ado_api_token, ado_estimation_field, history_in_days)
  flow_metrics_service = FlowMetricsService(False, "Charts")
  monte_carlo_service = MonteCarloService(history_in_days, False)
  ```

  Using those services, you can get the data from Jira via JQL, transform it to create your charts, and run forecasts:
  ```
  work_items = jira_work_item_service.get_items_via_query(item_query)
  work_items = azure_devops_work_item_service.get_items_via_query(item_query)
  work_items = [item for item in work_items if item.started_date is not None]

  flow_metrics_service.plot_cycle_time_scatterplot(work_items, 14, percentiles, percentile_colors, "Cycle Time Scatterplot")

  closed_items = [item for item in work_items if item.closed_date is not None]
  throughput_history = monte_carlo_service.create_closed_items_history(closed_items)

  (percentile_50, percentile_70, percentile_85, percentile_95) = monte_carlo_service.how_many(target_date, throughput_history)

  (predicted_date_50, predicted_date_70, predicted_date_85, predicted_date_95, target_date_likelyhood) = monte_carlo_service.when(remaining_items, throughput_history, target_date)
  ```

  See [Github](https://github.com/LetPeopleWork/flowpulse/blob/main/Examples/use_individual_services.py) for a full example of how you can use this.


pkgId: 7a1590701e046789d2e596293dbbd7635d0b50d9ef5f838d73127e1d7995715d
name: python-flowpyter-task-help
arch: noarch
version: 1.2.0
epoch: 0
release: 1
summary: Development documents and examples for flowpyter-task
url: https://github.com/Flowminder/flowpyter-task
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flowpyter-task-1.2.0-1.src.rpm
location_href: Packages/python-flowpyter-task-help-1.2.0-1.noarch.rpm
checksum_type: sha256
description:
  [![CircleCI](https://dl.circleci.com/status-badge/img/gh/Flowminder/flowpyter-task/tree/main.svg?style=shield&circle-token=644326d702a0d2ab491c7309515bf8560e370fed)](https://dl.circleci.com/status-badge/redirect/gh/Flowminder/flowpyter-task/tree/main)  [![License: MPL 2.0](https://img.shields.io/github/license/Flowminder/flowpyter-task.svg?style=flat-square)](https://opensource.org/licenses/MPL-2.0) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat-square)](https://github.com/python/black)

  A minirepo for holding the flowpyter Docker operator for airflow DAGs


pkgId: 36020e27ac334f8b9f5537db4d1fbc023035e587de1caf1468c9ce8e3b907550
name: python-fluidattacks-core-help
arch: noarch
version: 2.2.8
epoch: 0
release: 1
summary: Development documents and examples for fluidattacks-core
url: https://pypi.org/project/fluidattacks-core/
rpm_license: MPL-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fluidattacks-core-2.2.8-1.src.rpm
location_href: Packages/python-fluidattacks-core-help-2.2.8-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <img alt="logo" src="https://res.cloudinary.com/fluid-attacks/image/upload/f_auto,q_auto/v1/airs/menu/Logo?_a=AXAJYUZ0.webp" />
  </p>

  Get more information about this library on the
  [official documentation](https://dev.fluidattacks.com/components/common/core-library/)


pkgId: 715b33bee22a2752f0078fa623d32d21c519cb9468416755da5b80f599448eec
name: python-fluxengine-help
arch: noarch
version: 4.0.9.1
epoch: 0
release: 1
summary: Development documents and examples for fluxengine
url: https://github.com/oceanflux-ghg/FluxEngine
rpm_license: Creative Commons Attribution-Noncommercial-Share Alike license
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fluxengine-4.0.9.1-1.src.rpm
location_href: Packages/python-fluxengine-help-4.0.9.1-1.noarch.rpm
checksum_type: sha256
description:
  Main contacts: Jamie D. Shutler (j.d.shutler@exeter.ac.uk) and Daniel J. Ford (d.ford@exeter.ac.uk)
  The FluxEngine is an open source atmosphere-ocean gas flux data processing toolbox. The toolbox has so far contributed to 23 different journal publications, resulting in 6 press releases, has contributed to 3 completed PhDs, has been used within 7 UK and EU research projects, and 5 European Space Agency research projects, and it has been used in undergraduate and masters level teaching (in the UK and Europe) including ICOS and IOCCP training. This work collectively identifies and quantifies the importance of the oceans in regulating and storing carbon.


pkgId: c332489c4e3d98817ef21caa84e9069be26a34a11db69a5e223df8a7f45e259e
name: python-flwr-nightly-help
arch: noarch
version: 1.14.0.dev20241213
epoch: 0
release: 1
summary: Development documents and examples for flwr-nightly
url: https://flower.ai
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flwr-nightly-1.14.0.dev20241213-1.src.rpm
location_href: Packages/python-flwr-nightly-help-1.14.0.dev20241213-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <a href="https://flower.ai/">
      <img src="https://flower.ai/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fflower_white_border.c2012e70.png&w=640&q=75" width="140px" alt="Flower Website" />
    </a>
  </p>
  <p align="center">
      <a href="https://flower.ai/">Website</a> |
      <a href="https://flower.ai/blog">Blog</a> |
      <a href="https://flower.ai/docs/">Docs</a> |
      <a href="https://flower.ai/conf/flower-summit-2022">Conference</a> |
      <a href="https://flower.ai/join-slack">Slack</a>
      <br /><br />
  </p>

  [![GitHub license](https://img.shields.io/github/license/adap/flower)](https://github.com/adap/flower/blob/main/LICENSE)
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/adap/flower/blob/main/CONTRIBUTING.md)
  ![Build](https://github.com/adap/flower/actions/workflows/framework.yml/badge.svg)
  [![Downloads](https://static.pepy.tech/badge/flwr)](https://pepy.tech/project/flwr)
  [![Docker Hub](https://img.shields.io/badge/Docker%20Hub-flwr-blue)](https://hub.docker.com/u/flwr)
  [![Slack](https://img.shields.io/badge/Chat-Slack-red)](https://flower.ai/join-slack)

  Flower (`flwr`) is a framework for building federated AI systems. The
  design of Flower is based on a few guiding principles:

  - **Customizable**: Federated learning systems vary wildly from one use case to
    another. Flower allows for a wide range of different configurations depending
    on the needs of each individual use case.

  - **Extendable**: Flower originated from a research project at the University of
    Oxford, so it was built with AI research in mind. Many components can be
    extended and overridden to build new state-of-the-art systems.

  - **Framework-agnostic**: Different machine learning frameworks have different
    strengths. Flower can be used with any machine learning framework, for
    example, [PyTorch](https://pytorch.org), [TensorFlow](https://tensorflow.org), [Hugging Face Transformers](https://huggingface.co/), [PyTorch Lightning](https://pytorchlightning.ai/), [scikit-learn](https://scikit-learn.org/), [JAX](https://jax.readthedocs.io/), [TFLite](https://tensorflow.org/lite/), [MONAI](https://docs.monai.io/en/latest/index.html), [fastai](https://www.fast.ai/), [MLX](https://ml-explore.github.io/mlx/build/html/index.html), [XGBoost](https://xgboost.readthedocs.io/en/stable/), [Pandas](https://pandas.pydata.org/) for federated analytics, or even raw [NumPy](https://numpy.org/)
    for users who enjoy computing gradients by hand.

  - **Understandable**: Flower is written with maintainability in mind. The
    community is encouraged to both read and contribute to the codebase.

  Meet the Flower community on [flower.ai](https://flower.ai)!



  Flower's goal is to make federated learning accessible to everyone. This series of tutorials introduces the fundamentals of federated learning and how to implement them in Flower.

  0. **What is Federated Learning?**

     [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))

  1. **An Introduction to Federated Learning**

     [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))

  2. **Using Strategies in Federated Learning**

     [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))

  3. **Building Strategies for Federated Learning**

     [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))

  4. **Custom Clients for Federated Learning**

     [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))

  Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.



  [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/adap/flower/blob/main/examples/flower-in-30-minutes/tutorial.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/examples/flower-in-30-minutes/tutorial.ipynb))



  [Flower Docs](https://flower.ai/docs):

  - [Installation](https://flower.ai/docs/framework/how-to-install-flower.html)
  - [Quickstart (TensorFlow)](https://flower.ai/docs/framework/tutorial-quickstart-tensorflow.html)
  - [Quickstart (PyTorch)](https://flower.ai/docs/framework/tutorial-quickstart-pytorch.html)
  - [Quickstart (Hugging Face)](https://flower.ai/docs/framework/tutorial-quickstart-huggingface.html)
  - [Quickstart (PyTorch Lightning)](https://flower.ai/docs/framework/tutorial-quickstart-pytorch-lightning.html)
  - [Quickstart (Pandas)](https://flower.ai/docs/framework/tutorial-quickstart-pandas.html)
  - [Quickstart (fastai)](https://flower.ai/docs/framework/tutorial-quickstart-fastai.html)
  - [Quickstart (JAX)](https://flower.ai/docs/framework/tutorial-quickstart-jax.html)
  - [Quickstart (scikit-learn)](https://flower.ai/docs/framework/tutorial-quickstart-scikitlearn.html)
  - [Quickstart (Android [TFLite])](https://flower.ai/docs/framework/tutorial-quickstart-android.html)
  - [Quickstart (iOS [CoreML])](https://flower.ai/docs/framework/tutorial-quickstart-ios.html)



  Flower Baselines is a collection of community-contributed projects that reproduce the experiments performed in popular federated learning publications. Researchers can build on Flower Baselines to quickly evaluate new ideas. The Flower community loves contributions! Make your work more visible and enable others to build on it by contributing it as a baseline!

  - [DASHA](https://github.com/adap/flower/tree/main/baselines/dasha)
  - [DepthFL](https://github.com/adap/flower/tree/main/baselines/depthfl)
  - [FedBN](https://github.com/adap/flower/tree/main/baselines/fedbn)
  - [FedMeta](https://github.com/adap/flower/tree/main/baselines/fedmeta)
  - [FedMLB](https://github.com/adap/flower/tree/main/baselines/fedmlb)
  - [FedPer](https://github.com/adap/flower/tree/main/baselines/fedper)
  - [FedProx](https://github.com/adap/flower/tree/main/baselines/fedprox)
  - [FedNova](https://github.com/adap/flower/tree/main/baselines/fednova)
  - [HeteroFL](https://github.com/adap/flower/tree/main/baselines/heterofl)
  - [FedAvgM](https://github.com/adap/flower/tree/main/baselines/fedavgm)
  - [FedRep](https://github.com/adap/flower/tree/main/baselines/fedrep)
  - [FedStar](https://github.com/adap/flower/tree/main/baselines/fedstar)
  - [FedWav2vec2](https://github.com/adap/flower/tree/main/baselines/fedwav2vec2)
  - [FjORD](https://github.com/adap/flower/tree/main/baselines/fjord)
  - [MOON](https://github.com/adap/flower/tree/main/baselines/moon)
  - [niid-Bench](https://github.com/adap/flower/tree/main/baselines/niid_bench)
  - [TAMUNA](https://github.com/adap/flower/tree/main/baselines/tamuna)
  - [FedVSSL](https://github.com/adap/flower/tree/main/baselines/fedvssl)
  - [FedXGBoost](https://github.com/adap/flower/tree/main/baselines/hfedxgboost)
  - [FedPara](https://github.com/adap/flower/tree/main/baselines/fedpara)
  - [FedAvg](https://github.com/adap/flower/tree/main/baselines/flwr_baselines/flwr_baselines/publications/fedavg_mnist)
  - [FedOpt](https://github.com/adap/flower/tree/main/baselines/flwr_baselines/flwr_baselines/publications/adaptive_federated_optimization)

  Please refer to the [Flower Baselines Documentation](https://flower.ai/docs/baselines/) for a detailed categorization of baselines and for additional info including:
  * [How to use Flower Baselines](https://flower.ai/docs/baselines/how-to-use-baselines.html)
  * [How to contribute a new Flower Baseline](https://flower.ai/docs/baselines/how-to-contribute-baselines.html)



  Several code examples show different usage scenarios of Flower (in combination with popular machine learning frameworks such as PyTorch or TensorFlow).

  Quickstart examples:

  - [Quickstart (TensorFlow)](https://github.com/adap/flower/tree/main/examples/quickstart-tensorflow)
  - [Quickstart (PyTorch)](https://github.com/adap/flower/tree/main/examples/quickstart-pytorch)
  - [Quickstart (Hugging Face)](https://github.com/adap/flower/tree/main/examples/quickstart-huggingface)
  - [Quickstart (PyTorch Lightning)](https://github.com/adap/flower/tree/main/examples/quickstart-pytorch-lightning)
  - [Quickstart (fastai)](https://github.com/adap/flower/tree/main/examples/quickstart-fastai)
  - [Quickstart (Pandas)](https://github.com/adap/flower/tree/main/examples/quickstart-pandas)
  - [Quickstart (JAX)](https://github.com/adap/flower/tree/main/examples/quickstart-jax)
  - [Quickstart (MONAI)](https://github.com/adap/flower/tree/main/examples/quickstart-monai)
  - [Quickstart (scikit-learn)](https://github.com/adap/flower/tree/main/examples/sklearn-logreg-mnist)
  - [Quickstart (Android [TFLite])](https://github.com/adap/flower/tree/main/examples/android)
  - [Quickstart (iOS [CoreML])](https://github.com/adap/flower/tree/main/examples/ios)
  - [Quickstart (MLX)](https://github.com/adap/flower/tree/main/examples/quickstart-mlx)
  - [Quickstart (XGBoost)](https://github.com/adap/flower/tree/main/examples/xgboost-quickstart)

  Other [examples](https://github.com/adap/flower/tree/main/examples):

  - [Raspberry Pi & Nvidia Jetson Tutorial](https://github.com/adap/flower/tree/main/examples/embedded-devices)
  - [PyTorch: From Centralized to Federated](https://github.com/adap/flower/tree/main/examples/pytorch-from-centralized-to-federated)
  - [Vertical FL](https://github.com/adap/flower/tree/main/examples/vertical-fl)
  - [Federated Finetuning of OpenAI's Whisper](https://github.com/adap/flower/tree/main/examples/whisper-federated-finetuning)
  - [Federated Finetuning of Large Language Model](https://github.com/adap/flower/tree/main/examples/flowertune-llm)
  - [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/flowertune-vit)
  - [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
  - [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
  - [Comprehensive Flower+XGBoost](https://github.com/adap/flower/tree/main/examples/xgboost-comprehensive)
  - [Flower through Docker Compose and with Grafana dashboard](https://github.com/adap/flower/tree/main/examples/flower-via-docker-compose)
  - [Flower with KaplanMeierFitter from the lifelines library](https://github.com/adap/flower/tree/main/examples/federated-kaplan-meier-fitter)
  - [Sample Level Privacy with Opacus](https://github.com/adap/flower/tree/main/examples/opacus)
  - [Sample Level Privacy with TensorFlow-Privacy](https://github.com/adap/flower/tree/main/examples/tensorflow-privacy)
  - [Flower with a Tabular Dataset](https://github.com/adap/flower/tree/main/examples/fl-tabular)



  Flower is built by a wonderful community of researchers and engineers. [Join Slack](https://flower.ai/join-slack) to meet them, [contributions](#contributing-to-flower) are welcome.

  <a href="https://github.com/adap/flower/graphs/contributors">
    <img src="https://contrib.rocks/image?repo=adap/flower&columns=10" />
  </a>



  If you publish work that uses Flower, please cite Flower as follows:

  ```bibtex
  @article{beutel2020flower,
    title={Flower: A Friendly Federated Learning Research Framework},
    author={Beutel, Daniel J and Topal, Taner and Mathur, Akhil and Qiu, Xinchi and Fernandez-Marques, Javier and Gao, Yan and Sani, Lorenzo and Kwing, Hei Li and Parcollet, Titouan and Gusmão, Pedro PB de and Lane, Nicholas D},
    journal={arXiv preprint arXiv:2007.14390},
    year={2020}
  }
  ```

  Please also consider adding your publication to the list of Flower-based publications in the docs, just open a Pull Request.



  We welcome contributions. Please see [CONTRIBUTING.md](CONTRIBUTING.md) to get started!


pkgId: 3eb2694ad707e5669a41c34b8c5600ac1f75212871446a5022dde4a4ff78c0a0
name: python-flyr-help
arch: noarch
version: 3.4.0
epoch: 0
release: 1
summary: Development documents and examples for flyr
url: https://bitbucket.org/nimmerwoner/flyr/
rpm_license: EUPL v1.2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flyr-3.4.0-1.src.rpm
location_href: Packages/python-flyr-help-3.4.0-1.noarch.rpm
checksum_type: sha256
description:
  ![A picture of a FLIR thermogram, the embedded optical data and a Flyr render concatenated into one](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_intro.jpg)

  Flyr is a library for extracting thermal data from FLIR images written fully in Python.

  Other solutions are wrappers around ExifTool to actually do the hard part of extracting the thermal data. Flyr is a reimplementation of the ExifTool's FLIR parser. Practically, this offers the following benefits:

  * Faster decoding because no new process needs to be started and in-memory data does not need to be communicated to this other process
  * More accurate, because Flyr uses all of the camera metadata to translate the raw values into Kelvin, while other projects have a certain set hardcoded. The differences are often about 0.1°C, but can be as high as 0.6°C.
  * Easier and robust installation and deployment, because Flyr is completely installable from PyPI.
  * Arguably simpler use: no need to create a superfluous extraction object; simply call `thermogram = flyr.unpack(flir_file_path)` and done
  * Extra features (see feature section) such as different units, built-in rendering and adjustable thermal data.



  Flyr is installable from [PyPi](https://pypi.org/project/flyr/):

  ```bash
  pip install flyr
  ```



  These features appeared in 3.4.0. Also see the CHANGELOG.md for feature history.

  - Exposed embedded measurements, such as spot, ellipsis and area, via `FlyrThermogram.measurements`; other are expected to work too, but untested



  These are features already implemented and merged into the master branch, but not released yet. Also see the CHANGELOG.md for feature history.



  Thermal data is available in kelvin, celsius and fahrenheit.

  ```python
  import flyr

  flir_path = "thermograms/flir_c5_1.jpg"
  thermogram = flyr.unpack(flir_path)

  thermal = thermogram.kelvin  # As kelvin
  thermal = thermogram.celsius  # As celsius
  thermal = thermogram.fahrenheit  # As fahrenheit
  ```


  ![The optical photo embedded in the FLIR thermogram](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_optical.jpg)

  To read the embedded photo, access either `optical` or `optical_pil` to respectively get a 3D numpy or Pillow Image object with the photo.

  ```python

  import flyr

  flir_path = "thermograms/flir_e5_2.jpg"
  thermogram = flyr.unpack(flir_path)
  optical_arr = thermogram.optical  # Also works
  thermogram.optical_pil.save("optical.jpg")
  ```


  ![Examples of different RGB renders of the same thermogram](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_render_example.png)

  Flyr has built-in support to render thermal data to RGB images. It is possible to use the embedded palette or one of the provides [palettes](flyr/palettes). Normalization can be done by percentiles or absolute values.

  ```python
  import flyr

  flir_path = "thermograms/flir_e5_2.jpg"
  thermogram = flyr.unpack(flir_path)

  render = thermogram.render_pil()  # Returns Pillow Image object
  render.save(f"render-embedded.png")
  ```

  ```python
  palettes = ["turbo", "cividis", "inferno", "grayscale", "hot"]
  for p in palettes:
      
      
      render = thermogram.render_pil(
          min_v=27.1,
          max_v=35.6,
          unit="celsius",
          palette=p,
      )
      render.save(f"render-{p}.png")
  ```

  To render by percentiles, call as below. This approach is useful when it isn't known what temperature range to render.

  ```python
  thermogram.render_pil(
      min_v=0.0,
      max_v=1.0,
      unit="percentiles",
      palette="copper",
  ).save(f"render-percentiles.png")
  ```

  It's also possible to apply a palette only to a specific part of rendered image, highlighting it and leaving the rest grayscale. Just pass a boolean mask to the `mask` parameter.

  ```python
  mask = thermogram.kelvin > thermogram.kelvin.mean()
  thermogram.render_pil(mask=mask).save("render-masked.png")
  ```


  ![Example of five renders with and without edges emphasized](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_edge_emphasis.png)

  If optical imagery is present, it can be used to detect edges and more sharply delinate them. Used the `edge_emphasis` parameter with a value between 0 and 1 to enable it. When a mask is applied, edges are only emphasized in the masked region.

  ```python
  import flyr

  thermogram = flyr.unpack("flir_e6_1.jpg")
  thermogram.render_pil(edge_emphasis=0.0).save("render-no-edge-emphasis.png")
  thermogram.render_pil(edge_emphasis=0.275).save("render-edge-emphasis.png")

  mask = thermogram.kelvin > thermogram.kelvin.mean()
  thermogram.render_pil(edge_emphasis=0.275, mask=mask).save("render-edge-emphasis-masked.png")
  ```


  ![Example of a render pictured in a photograph (Picture-in-Picture)](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_picture_in_picture_example.png)

  Renders and optical imagery can also be combined according to the Picture-in-Picture mode.

  ```python
  import flyr

  thermogram = flyr.unpack("flir_e40_4.jpg")
  thermogram.picture_in_picture_pil(render_opacity=0.8).save("pip.png")
  ```

  ![Example of a masked render pictured in a photograph (Picture-in-Picture)](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_picture_in_picture_mask_example.png)

  Like the `render_pil` method, a `mask` parameter can be used to highlight a certain region of the image. There are two modes in which this mask can work: `"classical"` and `"alternative"`. In classical mode, the photograph is highlighted using a thermal mask of the region of interest. In the alternative mode, a thermal mask is applied to a grayscale render of the thermogram layered on top of the optical image.

  ```python
  import flyr

  thermogram = flyr.unpack('flir_one_pro_1.jpg')
  mask = thermogram.kelvin > thermogram.kelvin.mean()
  thermogram.picture_in_picture_pil(mask=mask, mask_mode="classical").save("pip_classical.png")
  thermogram.picture_in_picture_pil(mask=mask, mask_mode="alternative").save("pip_alternative.png")
  ```



  Measurements embedded in the thermogram can be accessed via the `measurements` member.

  ```python
  import flyr

  thermogram = flyr.unpack("flir_e50_3.jpg")
  for m in thermogram.measurements:
      print(f"{m.tool} at {m.params} called {m.label}")









  ```


  ![Examples of different RGB renders of the same thermogram](https://bitbucket.org/nimmerwoner/flyr/downloads/readme_render_emissivities.png)

  It is possible to update the camera settings / parameters with which the thermal data is calculated. A typical value to adjust would be `emissivity`, but `object_distance`, `relative_humidity` and others are also configurable. See the parameters of [`FlyrThermogam.__raw_to_kelvin()`](https://bitbucket.org/nimmerwoner/flyr/src/90635d825bba132a99a240c511df892fab1f05bb/flyr/thermogram.py#lines-217) for which.

  ```python
  import flyr

  flir_path = "thermograms/flir_e5_2.jpg"
  thermogram = flyr.unpack(flir_path)

  emissivities = [0.6, 0.7, 0.8, 0.9, 1.0]
  for e in emissivities:
      thermogram = thermogram.adjust_metadata(emissivity=e)
      
      render = thermogram.render_pil(
          min_v=27.1,
          max_v=35.6,
          unit="celsius",
          palette="viridis",
      )
      render.save(f"render-{e}.png")
  ```


  Call `flyr.unpack` on a filepath to receive a numpy array with the thermal data. Alternatively, first open the file in binary mode for reading and and pass the the file handle to `flyr.unpack`.

  ```python
  import flyr


  flir_path = "thermograms/flir_e5_2.jpg"
  thermogram = flyr.unpack(flir_path)  # From file path
  ```

  ```python

  with open(flir_path, "rb") as flir_handle:  # In binary mode!
      thermogram = flyr.unpack(flir_handle)
  ```


  Some common EXIF metadata has been made easily accessible via `thermogram.camera_metadata`:

  ```python
  import flyr


  flir_path = "thermograms/flir_e75_1.jpg"
  thermogram = flyr.unpack(flir_path)
  cm = thermogram.camera_metadata
  print(cm.data)  # Raw EXIF data (dict)
  print(cm.gps_data)  # Raw GPS data (dict)
  print(cm.date_time)  # Parsed datetime object of when picture was taken (datetime)
  print(cm.gps_altitude)  # (float)
  print(cm.gps_image_direction)  # (float)
  print(cm.gps_latitude)  # (float)
  print(cm.gps_longitude)  # (float)
  print(cm.gps_map_datum)  # (str)
  print(cm.make)  # (str)
  print(cm.model)  # (str)
  print(cm.software)  # (str)
  print(cm.x_resolution)  # (float)
  print(cm.y_resolution)  # (float)
  ```

  The `data` and `gps_data` properties may also contain values not accessible via the handy properties mentioned above. The return values are always either the value itself or `None`, in case this EXIF data is not embedded in the file.



  Currently this library has been tested to work with:

  * FLIR C5
  * FLIR E4, E5, E6, E8, E8XT, E30, E30BX, E40, E50, E50BX, E53, E60BX, E75
  * FLIR I5
  * FLIR ONE, ONE Pro, ONE Pro Next Gen
  * FLIR P60 (PAL)
  * FLIR SC660
  * FLIR T630SC, T660
  * FLIR ThermaCAM B400


  Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Most help is currently needed supporting more models and testing against more pictures. Testing and developing for your own camera's images or FLIR Tools' samples is recommended.


  This code would not be possible without [ExifTool](https://exiftool.org/)'s efforts to [document](https://exiftool.org/TagNames/FLIR.html) the FLIR format. [tomas123](https://www.eevblog.com/forum/thermal-imaging/flir-e4-thermal-imaging-camera-teardown/msg342072/#msg342072)'s work is similarly important to mention. [Previous work](https://github.com/Nervengift/read_thermal.py) in Python must also be acknowledged for creating a workable solution.


  Flyr is licensed under The European Union Public License 1.2. The English version is included in the license file. Translations for all EU languages, each fully legally valid, can be found at the [EUPL](https://eupl.eu/) website.


pkgId: 08d81898712619af5d6a9f84f4fb8c83e0d0a008544370c1eb5b0902ed26ac6d
name: python-flytekit-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekit
url: https://github.com/flyteorg/flytekit
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekit-1.14.2-1.src.rpm
location_href: Packages/python-flytekit-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
      <img src="https://raw.githubusercontent.com/flyteorg/static-resources/main/common/flyte_circle_gradient_1_4x4.png" alt="Flyte Logo" width="100">
  </p>
  <h1 align="center">
      Flytekit Python
  </h1>
  <p align="center">
      Flytekit Python is the Python SDK built on top of Flyte
  </p>
  <h3 align="center">
      <a href="plugins/README.md">Plugins</a>
      <span> · </span>
      <a href="https://docs.flyte.org/en/latest/api/flytekit/contributing.html">Contribution Guide</a>
  </h3>

  [![PyPI version fury.io](https://badge.fury.io/py/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![PyPI download day](https://img.shields.io/pypi/dd/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![PyPI download month](https://img.shields.io/pypi/dm/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![PyPI total download](https://static.pepy.tech/badge/flytekit)](https://static.pepy.tech/badge/flytekit)
  [![PyPI format](https://img.shields.io/pypi/format/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![PyPI implementation](https://img.shields.io/pypi/implementation/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![Codecov](https://img.shields.io/codecov/c/github/flyteorg/flytekit?style=plastic)](https://app.codecov.io/gh/flyteorg/flytekit)
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/flytekit.svg)](https://pypi.python.org/pypi/flytekit/)
  [![Docs](https://readthedocs.org/projects/flytekit/badge/?version=latest&style=plastic)](https://flytekit.rtfd.io)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
  [![Slack](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://slack.flyte.org)

  Flytekit Python is the Python Library for easily authoring, testing, deploying, and interacting with Flyte tasks, workflows, and launch plans.

  If you haven't explored Flyte yet, please refer to:
   - [Flyte homepage](https://flyte.org)
   - [Flyte core repository](https://github.com/flyteorg/flyte)



  Flytekit is the core extensible library to author Flyte workflows and tasks and interact with Flyte backend services.



  ```bash
  pip install flytekit
  ```



  ```python
  from flytekit import task, workflow

  @task(cache=True, cache_version="1", retries=3)
  def sum(x: int, y: int) -> int:
      return x + y

  @task(cache=True, cache_version="1", retries=3)
  def square(z: int) -> int:
      return z*z

  @workflow
  def my_workflow(x: int, y: int) -> int:
      return sum(x=square(z=x), y=square(z=y))
  ```


  - [Learn Flytekit by example](https://docs.flyte.org/en/latest/user_guide/quickstart_guide.html)
  - [Flytekit API documentation](https://docs.flyte.org/en/latest/api/flytekit/docs_index.html)



  You can find the detailed contribution guide [here](https://docs.flyte.org/en/latest/api/flytekit/contributing.html). Plugins' contribution guide is included as well.


  Please see the [contributor's guide](https://docs.flyte.org/en/latest/api/flytekit/contributing.html) for a quick summary of how this code is structured.


  Refer to the [issues](https://github.com/flyteorg/flyte/issues) section in the contribution guide if you'd like to file an issue.


  Refer to [plugins/README.md](plugins/README.md) for a list of available plugins.
  There may be plugins outside of this list, but the core maintainers maintain this list.


pkgId: cfc966179c949f5f324f598f7f251b638570263a95fea1530f56536385741e22
name: python-flytekitplugins-dask-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-dask
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-dask
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-dask-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-dask-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  Flyte can execute `dask` jobs natively on a Kubernetes Cluster, which manages the virtual `dask` cluster's lifecycle
  (spin-up and tear down). It leverages the open-source Kubernetes Dask Operator and can be enabled without signing up
  for any service. This is like running a transient (ephemeral) `dask` cluster - a type of cluster spun up for a specific
  task and torn down after completion. This helps in making sure that the Python environment is the same on the job-runner
  (driver), scheduler and the workers.

  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-dask
  ```

  To configure Dask in the Flyte deployment's backed, follow
  [these directions](https://docs.flyte.org/en/latest/deployment/plugins/k8s/index.html)ernetes/k8s_dask/index.html#step-2-environment-setup)

  An [usage example](https://docs.flyte.org/en/latest/flytesnacks/examples/k8s_dask_plugin/index.html)
  can be found in the documentation.


pkgId: bb2332b28aed023375017c1ee97ac9cb007190a67cf8d07a8f8629c38d64b2a4
name: python-flytekitplugins-data-fsspec-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-data-fsspec
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-data-fsspec
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-data-fsspec-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-data-fsspec-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  This plugin provides an implementation of the data persistence layer in Flytekit that uses fsspec. Once this plugin
  is installed, it overrides all default implementations of the data plugins and provides the ones supported by fsspec. This plugin
  will only install the fsspec core. To install all fsspec plugins, please follow the [fsspec documentation](https://filesystem-spec.readthedocs.io/en/latest/).


pkgId: 99412212f67f8465875b837c6f1ae4677afed571170d104d7f31e78753811d01
name: python-flytekitplugins-dbt-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-dbt
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-dbt
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-dbt-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-dbt-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  Flytekit plugin for performing DBT tasks. Currently it supports  `dbt run` , `dbt test`, `dbt source freshness` tasks.

  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-dbt
  ```

  _Example coming soon!_



  - [Gojek](https://www.gojek.io/)


pkgId: cf2f3c35fc55d230e854899278ccb4449ca609eb34eb95c5b3fd4e2c9928fa0f
name: python-flytekitplugins-deck-standard-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-deck-standard
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-data-fsspec
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-deck-standard-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-deck-standard-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  This plugin provides additional renderers to improve task visibility within Flytekit.



  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-deck-standard
  ```



  Each renderer may require additional modules.

  The table below outlines the dependencies for each renderer:

  | Renderer               | Required Module(s)          |
  |------------------------|-----------------------------|
  | SourceCodeRenderer      | `pygments`                  |
  | FrameProfilingRenderer  | `pandas`, `ydata-profiling` |
  | MarkdownRenderer        | `markdown`                  |
  | BoxRenderer             | `pandas`, `plotly`          |
  | ImageRenderer           | `pillow`    |
  | TableRenderer           | `pandas`                    |
  | GanttChartRenderer      | `pandas`, `plotly`  |




  Converts Python source code to HTML using the Pygments library.


  Generates a profiling report based on a pandas DataFrame using `ydata_profiling`.


  Converts markdown strings to HTML.


  Creates a box-and-whisker plot from a column in a pandas DataFrame.


  Displays images from a `FlyteFile` or `PIL.Image.Image` object in HTML.


  Renders a pandas DataFrame as an HTML table with customizable headers and table width.


  Displays a Gantt chart using a pandas DataFrame with "Start", "Finish", and "Name" columns.


pkgId: 1ae4085d7d5047f2635f550678ab71e76ff53896ddf2ab8f6f357333ce522b65
name: python-flytekitplugins-huggingface-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-huggingface
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-huggingface
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-huggingface-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-huggingface-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  [Hugging Face](https://github.com/huggingface) is a community and data science platform that provides: Tools that enable users to build, train and deploy ML models based on open source (OS) code and technologies

  This plugin supports `datasets.Dataset` as a data type with [StructuredDataset](https://docs.flyte.org/en/latest/user_guide/data_types_and_io/structureddataset.html).

  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-huggingface
  ```


pkgId: 9398e0f34dbe67e6e32938f9a3969a5933d423c17ef451ab57e058b95e3fd428
name: python-flytekitplugins-identity-aware-proxy-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-identity-aware-proxy
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-identity-aware-proxy
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-identity-aware-proxy-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-identity-aware-proxy-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
          apiVersion: networking.gke.io/v1beta1
          kind: FrontendConfig
          metadata:
            name: ingress-frontend-config
            namespace: istio-system
          spec:
            redirectToHttps:
              enabled: true
              responseCodeName: MOVED_PERMANENTLY_DEFAULT
          ```
          This ingress routes all traffic to the istio ingress gateway via http2 and TLS.
          For clarity: The GCP load balancer TLS terminates connections coming from the outside world using a GCP managed certificate.
          The self-signed certificate created above is only used between the GCP load balancer and the istio ingress gateway running in the cluster.
          To repeat, because of this it is important for security that the istio ingress gateway uses a `NodePort` type service and not a `LoadBalancer`.
      * In the GCP cloud console under *Kubernetes Engine/Services & Ingress/Ingress* (selecting the respective cluster and the `istio-system` namespace), you can observe the status of the ingress, its managed certificate, and its backends. Only proceed if all statuses are green. The creation of the GCP load balancer configured by the ingress and of the managed certificate can take up to 30 minutes during the first deployment.
  7. Connect flyteadmin and flyteconsole to the istio ingress gateway:
      So far, we created a GCE ingress (which creates a GCP load balancer). The load balancer is configured to forward all requests to the istio ingress gateway at the edge of the service mesh via http2 and TLS.
      Next, we configure the Istio service mesh to route requests from the Istio ingress gateway to flyteadmin and flyteconsole.
      In istio, this is configured using a so-called `VirtualService` object.
      Please fill in your flyte domain in the following manifest and apply it to the cluster:
      ```yaml
      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: flyte-virtualservice
        namespace: flyte
      spec:
        gateways:
        - istio-system/default-gateway
        hosts:
        - <fill in your flyte domain>
        http:
        - match:
          - uri:
              prefix: /console
          name: console-routes
          route:
          - destination:
              host: flyteconsole
              port:
                number: 80
        - match:
          - uri:
              prefix: /api
          - uri:
              prefix: /healthcheck
          - uri:
              prefix: /v1/*
          - uri:
              prefix: /.well-known
          - uri:
              prefix: /login
          - uri:
              prefix: /logout
          - uri:
              prefix: /callback
          - uri:
              prefix: /me
          - uri:
              prefix: /config
          - uri:
              prefix: /oauth2
          name: admin-routes
          route:
          - destination:
              host: flyteadmin
              port:
                number: 80
        - match:
          - uri:
              prefix: /flyteidl.service.SignalService
          - uri:
              prefix: /flyteidl.service.AdminService
          - uri:
              prefix: /flyteidl.service.DataProxyService
          - uri:
              prefix: /flyteidl.service.AuthMetadataService
          - uri:
              prefix: /flyteidl.service.IdentityService
          - uri:
              prefix: /grpc.health.v1.Health
          name: admin-grpc-routes
          route:
          - destination:
              host: flyteadmin
              port:
                number: 81
      ```
      In this `VirtualService`, the routing rules for flyteadmin and flyteconsole are configured which in Flyte's default deployment are configured in the Nginx ingress.
      Note that the virtual service references the `Gateway` object we created above which configures the istio ingress gateway to use TLS for these connections.
  8. Test your Flyte deployment with IAP by e.g. executing this python script:
      ```python
      from flytekit.remote import FlyteRemote
      from flytekit.configuration import Config
      remote = FlyteRemote(
          config=Config.auto(),
          default_project="flytesnacks",
          default_domain="development",
      )
      print(remote.recent_executions())
      ```
      A browser window should open and ask you to login with your Google account. You should then see confirmation that you *"Successfully logged into accounts.google.com"* (this was for the IAP), finally followed by confirmation that you *"Successfully logged into 'your flyte domain'"* (this was for Flyte itself).
  9. At this point your Flyte deployment should be successfully protected by a GCP identity aware proxy using a zero trust model.
      You should check in the GCP cloud console's *IAP* page that IAP is actually activated and configured correctly for the Istio ingress gateway (follow up on any yellow or red status symbols next to the respective backend).
      You could also open the flyte console in an incognito browser window and verify that you are asked to login with your Google account.
      Finally, you could also comment out the `proxyCommand` line in your `~/.flyte/config.yaml` and verify that you are no longer able to access your Flyte deployment behind IAP.
  10. The double login observed above is due to the fact that the Flyte clients send `"proxy-authorization"` headers generated by the CLI provided by this plugin with every request in order to make it past IAP. They still also send the regular `"authorization"` header issued by flyteadmin itself.
        Since the refresh token for Flyte and the one for IAP by default don't have the same lifespan, you likely won't notice this double login  again. However, since your deployment is already protected by IAP, the ID token (issued by flyteadmin) in the `"authorization"` header mostly serves to identify users. Therefore, you can consider to increase the lifespan of the refresh token issued by flyteadmin to e.g. 7 days by setting `configmap.adminServer.auth.appAuth.selfAuthServer.refreshTokenLifespan` to e.g. `168h0m0s` in your Flyte helm values file. This way, your users should barely notice the double login.


pkgId: 93886829a7f1d82119d38568768584ba1ba57e3963be0ee9f5d58962d71841ce
name: python-flytekitplugins-mmcloud-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-mmcloud
url: https://pypi.org/project/flytekitplugins-mmcloud/
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-mmcloud-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-mmcloud-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  Flyte Agent plugin to allow executing Flyte tasks using MemVerge Memory Machine Cloud.

  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-mmcloud
  ```

  To get started with MMCloud, refer to the [MMCloud User Guide](https://docs.memverge.com/mmce/current/userguide/olh/index.html).



  This plugin allows executing `PythonFunctionTask` using MMCloud without changing any function code.

  [Resource](https://docs.flyte.org/en/latest/user_guide/productionizing/customizing_task_resources.html) (cpu and mem) requests and limits, [container](https://docs.flyte.org/en/latest/user_guide/customizing_dependencies/multiple_images_in_a_workflow.html) images, and [environment](https://docs.flyte.org/en/latest/api/flytekit/generated/flytekit.task.html) variable specifications are supported.

  [ImageSpec](https://docs.flyte.org/en/latest/user_guide/customizing_dependencies/imagespec.html) may be used to define images to run tasks.



  The following [secrets](https://docs.flyte.org/en/latest/user_guide/productionizing/secrets.html) are required to be defined for the agent server:
  * `mmc_address`: MMCloud OpCenter address
  * `mmc_username`: MMCloud OpCenter username
  * `mmc_password`: MMCloud OpCenter password



  Compute resources:
  * If only requests are specified, there are no limits.
  * If only limits are specified, the requests are equal to the limits.
  * If neither resource requests nor limits are specified, the default requests used for job submission are `cpu="1"` and `mem="1Gi"`, and there are no limits.



  `example.py` workflow example:
  ```python
  import pandas as pd
  from flytekit import ImageSpec, Resources, task, workflow
  from sklearn.datasets import load_wine
  from sklearn.linear_model import LogisticRegression

  from flytekitplugins.mmcloud import MMCloudConfig

  image_spec = ImageSpec(packages=["scikit-learn"], registry="docker.io/memverge")


  @task
  def get_data() -> pd.DataFrame:
      """Get the wine dataset."""
      return load_wine(as_frame=True).frame


  @task(task_config=MMCloudConfig(), container_image=image_spec)  # Task will be submitted as MMCloud job
  def process_data(data: pd.DataFrame) -> pd.DataFrame:
      """Simplify the task from a 3-class to a binary classification problem."""
      return data.assign(target=lambda x: x["target"].where(x["target"] == 0, 1))


  @task(
      task_config=MMCloudConfig(submit_extra="--migratePolicy [enable=true]"),
      requests=Resources(cpu="1", mem="1Gi"),
      limits=Resources(cpu="2", mem="4Gi"),
      container_image=image_spec,
      environment={"KEY": "value"},
  )
  def train_model(data: pd.DataFrame, hyperparameters: dict) -> LogisticRegression:
      """Train a model on the wine dataset."""
      features = data.drop("target", axis="columns")
      target = data["target"]
      return LogisticRegression(max_iter=3000, **hyperparameters).fit(features, target)


  @workflow
  def training_workflow(hyperparameters: dict) -> LogisticRegression:
      """Put all of the steps together into a single workflow."""
      data = get_data()
      processed_data = process_data(data=data)
      return train_model(
          data=processed_data,
          hyperparameters=hyperparameters,
      )
  ```



  Install `flytekitplugins-mmcloud` in the agent image.

  A `float` binary (obtainable via the OpCenter) is required. Copy it to the agent image `PATH`.

  Sample `Dockerfile` for building an agent image:
  ```dockerfile
  FROM python:3.11-slim-bookworm

  WORKDIR /root
  ENV PYTHONPATH /root


  RUN pip install flytekitplugins-mmcloud
  COPY float /usr/local/bin/float

  CMD pyflyte serve agent --port 8000
  ```


pkgId: efdb9923854ea89facc257c6ec9c461bf64b1e67910ee4c1595fa1eb477018d1
name: python-flytekitplugins-omegaconf-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-omegaconf
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-omegaconf
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-omegaconf-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-omegaconf-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  Flytekit python natively supports serialization of many data types for exchanging information between tasks.
  The Flytekit OmegaConf Plugin extends these by the `DictConfig` type from the
  [OmegaConf package](https://omegaconf.readthedocs.io/) as well as related types
  that are being used by the [hydra package](https://hydra.cc/) for configuration management.


  ```
  from dataclasses import dataclass
  import flytekitplugins.omegaconf  # noqa F401
  from flytekit import task, workflow
  from omegaconf import DictConfig

  @dataclass
  class MySimpleConf:
      _target_: str = "lightning_module.MyEncoderModule"
      learning_rate: float = 0.0001

  @task
  def my_task(cfg: DictConfig) -> None:
      print(f"Doing things with {cfg.learning_rate=}")


  @workflow
  def pipeline(cfg: DictConfig) -> None:
      my_task(cfg=cfg)


  if __name__ == "__main__":
      from omegaconf import OmegaConf

      cfg = OmegaConf.structured(MySimpleConf)
      pipeline(cfg=cfg)
  ```



  The transformer can be set to one of three modes:

  `Dataclass` - This mode should be used with a StructuredConfig and will reconstruct the config from the matching dataclass
  during deserialisation in order to make typing information from the dataclass and continued validation thereof available.
  This requires the dataclass definition to be available via python import in the Flyte execution environment in which
  objects are (de-)serialised.

  `DictConfig` - This mode will deserialize the config into a DictConfig object. In particular, dataclasses are translated
  into DictConfig objects and only primitive types are being checked. The definition of underlying dataclasses for
  structured configs is only required during the initial serialization for this mode.

  `Auto` - This mode will try to deserialize according to the Dataclass mode and fall back to the DictConfig mode if the
  dataclass definition is not available. This is the default mode.

  You can set the transformer mode globally or for the current context only the following ways:
  ```python
  from flytekitplugins.omegaconf import set_transformer_mode, set_local_transformer_mode, OmegaConfTransformerMode


  set_transformer_mode(OmegaConfTransformerMode.DictConfig)


  with set_local_transformer_mode(OmegaConfTransformerMode.Dataclass):
      
      pass
  ```

  ```note
  Since the DictConfig is flattened and keys transformed into dot notation, the keys of the DictConfig must not contain
  dots.
  ```


pkgId: 2befb017d5f81cfacd01903bd82ba72af8976f870c2ac7d95abb2f6ff8b85afd
name: python-flytekitplugins-perian-job-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-perian-job
url: https://pypi.org/project/flytekitplugins-perian-job/
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-perian-job-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-perian-job-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  Flyte Agent plugin for executing Flyte tasks on Perian Job Platform (perian.io).

  See the [official docs page](https://perian.io/docs/flyte-getting-started) for more details.


pkgId: 73d29bf6e6de6ade444b9184985db1a876caab5387c5fff67b1c17466eb39fd6
name: python-flytekitplugins-pydantic-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-pydantic
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-pydantic
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-pydantic-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-pydantic-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  This plugin is deprecated and will be removed in the future.

  Please directly install `pydantic` and use `BaseModel` in your Flyte tasks.


  Pydantic is a data validation and settings management library that uses Python type annotations to enforce type hints at runtime and provide user-friendly errors when data is invalid. Pydantic models are classes that inherit from `pydantic.BaseModel` and are used to define the structure and validation of data using Python type annotations.

  The plugin adds type support for pydantic models.

  To install the plugin, run the following command:

  ```bash
  pip install flytekitplugins-pydantic
  ```



  ```python
  from pydantic.v1 import BaseModel


  class TrainConfig(BaseModel):
      lr: float = 1e-3
      batch_size: int = 32
      files: List[FlyteFile]
      directories: List[FlyteDirectory]

  @task
  def train(cfg: TrainConfig):
      ...
  ```


pkgId: e7cfc9ab6d3663f2bec77e295a20715a862694c59f9dbf6e17e8d0ea6e4fa6df
name: python-flytekitplugins-whylogs-help
arch: noarch
version: 1.14.2
epoch: 0
release: 1
summary: Development documents and examples for flytekitplugins-whylogs
url: https://github.com/flyteorg/flytekit/tree/master/plugins/flytekit-whylogs
rpm_license: apache2
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-flytekitplugins-whylogs-1.14.2-1.src.rpm
location_href: Packages/python-flytekitplugins-whylogs-help-1.14.2-1.noarch.rpm
checksum_type: sha256
description:
  whylogs is an open source library for logging any kind of data. With whylogs,
  you are able to generate summaries of datasets (called whylogs profiles) which
  can be used to:

  - Create data constraints to know whether your data looks the way it should
  - Quickly visualize key summary statistics about a dataset
  - Track changes in a dataset over time

  ```bash
  pip install flytekitplugins-whylogs
  ```

  To generate profiles, you can add a task like the following:

  ```python
  import whylogs as why
  from whylogs.core import DatasetProfileView

  import pandas as pd

  from flytekit import task

  @task
  def profile(df: pd.DataFrame) -> DatasetProfileView:
      result = why.log(df) # Various overloads for different common data types exist
      profile_view = result.view()
      return profile
  ```

  >**NOTE:** You'll be passing around `DatasetProfileView` from tasks, not `DatasetProfile`.



  A common step in data pipelines is data validation. This can be done in
  `whylogs` through the constraint feature. You'll be able to create failure tasks
  if the data in the workflow doesn't conform to some configured constraints, like
  min/max values on features, data types on features, etc.

  ```python
  from whylogs.core.constraints.factories import greater_than_number, mean_between_range

  @task
  def validate_data(profile_view: DatasetProfileView):
      builder = ConstraintsBuilder(dataset_profile_view=profile_view)
      builder.add_constraint(greater_than_number(column_name="my_column", number=0.14))
      builder.add_constraint(mean_between_range(column_name="my_other_column", lower=2, upper=3))
      constraint = builder.build()
      valid = constraint.validate()

      if valid is False:
          print(constraint.report())
          raise Exception("Invalid data found")
  ```

  If you want to learn more about whylogs, check out our [example notebooks](https://github.com/whylabs/whylogs/tree/mainline/python/examples).


pkgId: f374b3c74c189e84654824e81798755820ab0e3bdc9e77e36b4df623af54e9bd
name: python-fmbench-help
arch: noarch
version: 2.0.23
epoch: 0
release: 1
summary: Development documents and examples for fmbench
url: https://github.com/aws-samples/foundation-model-benchmarking-tool
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fmbench-2.0.23-1.src.rpm
location_href: Packages/python-fmbench-help-2.0.23-1.noarch.rpm
checksum_type: sha256
description:
  <h1 align="center">
          <img src="https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/img/fmbt-small.png?raw=true" width="25"></img> FMBench
  </h1>

  <p align="center">
      <p align="center">Benchmark any Foundation Model (FM) on any AWS Generative AI service [Amazon SageMaker, Amazon Bedrock, Amazon EKS, Amazon EC2, or Bring your own endpoint.]
      <br>
  </p>
  <h4 align="center"><a href="" target="_blank">Amazon Bedrock</a> | <a href="" target="_blank">Amazon SageMaker</a> | <a href="" target="_blank">Amazon EKS</a> | <a href="" target="_blank">Amazon EC2</a></h4>
  <h4 align="center">
      <a href="https://pypi.org/project/fmbench/" target="_blank">
          <img src="https://img.shields.io/pypi/v/fmbench.svg" alt="PyPI Version">
      </a>
  </h4>


  🚨 **What's new**: Benchmark the [Amazon Nova](https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html) models, quickstart benchmarking on Amazon EC2 with the new [FMBench orchestrator](#running-fmbench-via-the-fmbench-orchestrator) 🚨

  `FMBench` is a Python package for running performance benchmarks and accuracy for **any Foundation Model (FM)** deployed on **any AWS Generative AI service**, be it **Amazon SageMaker**, **Amazon Bedrock**, **Amazon EKS**, or **Amazon EC2**. The FMs could be deployed on these platforms either directly through `FMbench`, or, if they are already deployed then also they could be benchmarked through the **Bring your own endpoint** mode supported by `FMBench`.

  Here are some salient features of `FMBench`:

  1. **Highly flexible**: in that it allows for using any combinations of instance types (`g5`, `p4d`, `p5`, `Inf2`), inference containers (`DeepSpeed`, `TensorRT`, `HuggingFace TGI` and others) and parameters such as tensor parallelism, rolling batch etc. as long as those are supported by the underlying platform.

  1. **Benchmark any model**: it can be used to be benchmark _open-source models_, _third party models_, and _proprietary models_ trained by enterprises on their own data. Benchmarking includes both performance benchmaking and model evaluations (accuracy measurement given ground truth). 🚨 **NEW**: Model evaluations done by a **Panel of LLM Evaluators** added in release 2.0.0 🚨

  1. **Run anywhere**: it can be run on any AWS platform where we can run Python, such as Amazon EC2, Amazon SageMaker, or even the AWS CloudShell. _It is important to run this tool on an AWS platform so that internet round trip time does not get included in the end-to-end response time latency_.



  [![FMBench Intro](img/fmbench-thumbnail.png)](https://www.youtube.com/watch?v=yvRCyS0J90c)



  Use `FMBench` to benchmark an LLM on any AWS generative AI service for price and performance (inference latency, transactions/minute). Here is one of the plots generated by `FMBench` to help answer the price performance question for the `Llama2-13b` model when hosted on Amazon SageMaker (_the instance types in the legend have been blurred out on purpose, you can find them in the actual plot generated on running `FMBench`_).

  ![business question](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/img/business_summary.png?raw=true)



  Use `FMBench` to determine model accuracy using a panel of LLM evaluators (PoLL [[1]](#1)). Here is one of the plots generated by `FMBench` to help answer the accuracy question for various FMs on Amazon Bedrock (the model ids in the charts have been blurred out on purpose, you can find them in the actual plot generated on running FMBench).

  ![Accuracy trajectory with prompt size](img/accuracy_trajectory_per_payload.png)

  ![Overall accuracy](img/overall_candidate_model_majority_voting_accuracy.png)



  Configuration files are available in the [configs](./src/fmbench/configs) folder for the following models in this repo.



  Llama3 is now available on SageMaker (read [blog post](https://aws.amazon.com/blogs/machine-learning/meta-llama-3-models-are-now-available-in-amazon-sagemaker-jumpstart/)), and you can now benchmark it using `FMBench`. Here are the config files for benchmarking `Llama3-8b-instruct` and `Llama3-70b-instruct` on `ml.p4d.24xlarge`, `ml.inf2.24xlarge` and `ml.g5.12xlarge` instances.

  - [Config file](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/src/fmbench/configs/llama3/8b/config-llama3-8b-instruct-g5-p4d.yml) for `Llama3-8b-instruct` on  `ml.p4d.24xlarge` and `ml.g5.12xlarge`.
  - [Config file](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/src/fmbench/configs/llama3/70b/config-llama3-70b-instruct-g5-p4d.yml) for `Llama3-70b-instruct` on  `ml.p4d.24xlarge` and `ml.g5.48xlarge`.
  - [Config file](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/src/fmbench/configs/llama3/8b/config-llama3-8b-inf2-g5.yml) for `Llama3-8b-instruct` on  `ml.inf2.24xlarge` and `ml.g5.12xlarge`.




  | Model                           | Amazon EC2                     | Amazon SageMaker                           | Amazon Bedrock                     |
  |:--------------------------------|:-------------------------------|:-------------------------------------------|:-----------------------------------|
  | **Amazon Nova**                  |                               |                                           | On-demand                          |
  | **Anthropic Claude-3 Sonnet**    |                               |                                           | On-demand, provisioned             |
  | **Anthropic Claude-3 Haiku**     |                               |                                           | On-demand                          |
  | **Mistral-7b-instruct**          | inf2, trn1                     | g4dn, g5, p3, p4d, p5                       | On-demand                          |
  | **Mistral-7b-AWQ**               |                               | p5                                        |                                    |
  | **Mixtral-8x7b-instruct**        |                               |                                           | On-demand                          |
  | **Llama3.2-1b instruct**         | g5                            |                                           |                                    |
  | **Llama3.2-3b instruct**         | g5                            |                                           |                                    |
  | **Llama3.1-8b instruct**         | g5, p4d, p4de, p5, p5e, g6e, g6, inf2, trn1        | g4dn, g5, p3, inf2, trn1                     | On-demand                          |
  | **Llama3.1-70b instruct**        | p4d, p4de, p5, p5e, g6e, g5, inf2, trn1            | inf2, trn1                                 | On-demand                          |
  | **Llama3-8b instruct**           | g5, g6e, inf2, trn1                 | g4dn, g5, p3, inf2, trn1, p4d, p5e             | On-demand                          |
  | **Llama3-70b instruct**          | g5                            | g4dn, g5, p3, inf2, trn1, p4d                 | On-demand                          |
  | **Llama2-13b chat**              |                               | g4dn, g5, p3, inf2, trn1, p4d                 | On-demand                          |
  | **Llama2-70b chat**              |                               | g4dn, g5, p3, inf2, trn1, p4d                 | On-demand                          |
  | **NousResearch-Hermes-70b**      |                               | g5, inf2, trn1                            | On-demand                          |
  | **Amazon Titan text lite**       |                               |                                           | On-demand                          |
  | **Amazon Titan text express**    |                               |                                           | On-demand                          |
  | **Cohere Command text**          |                               |                                           | On-demand                          |
  | **Cohere Command light text**    |                               |                                           | On-demand                          |
  | **AI21 J2 Mid**                  |                               |                                           | On-demand                          |
  | **AI21 J2 Ultra**                |                               |                                           | On-demand                          |
  | **Gemma-2b**                     |                               | g4dn, g5, p3                                |                                    |
  | **Phi-3-mini-4k-instruct**       |                               | g4dn, g5, p3                                |                                    |
  | **distilbert-base-uncased**      |                               | g4dn, g5, p3                                |                                    |





  1. Bug fixes for Amazon SageMaker BYOE.
  1. Additional config files.


  1. Benchmarks for the [Amazon Nova](https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html) family of models.
  1. Benchmarks for multi-modal models: LLama3.2-11B, Claude 3 Sonnet and Claude 3.5 Sonnet using the [ScienceQA](https://huggingface.co/datasets/derek-thomas/ScienceQA) dataset.



  1. Dynamically get EC2 pricing from Boto3 API.
  1. Update pricing information and model id for Amazon Bedrock models.


  [Release history](./release_history.md)



  `FMBench` is available as a Python package on [PyPi](https://pypi.org/project/fmbench) and is run as a command line tool once it is installed. All data that includes metrics, reports and results are stored in an Amazon S3 bucket.

  > [!IMPORTANT]
  > 💡 [All **documentation** for `FMBench` is available on the `FMBench` website](https://aws-samples.github.io/foundation-model-benchmarking-tool/index.html)

  You can run `FMBench` on either a SageMaker notebook or on an EC2 VM. Both options are described [here](https://aws-samples.github.io/foundation-model-benchmarking-tool/gettingstarted.html) as part of the documentation. You can even run `FMBench` as a [Docker container](https://aws-samples.github.io/foundation-model-benchmarking-tool/run_as_container.html) A Quickstart guide for SageMaker is bring provided below as well.

  👉 The following sections are discussing running `FMBench` the tool, as different from where the FM is actually deployed. For example, we could run `FMBench` on EC2 but the model being deployed is on SageMaker or even Bedrock.



  **_FMBench on a Amazon SageMaker Notebook_**

  1. Each `FMBench` run works with a configuration file that contains the information about the model, the deployment steps, and the tests to run. A typical `FMBench` workflow involves either directly using an already provided config file from the [`configs`](https://github.com/aws-samples/foundation-model-benchmarking-tool/tree/main/src/fmbench/configs) folder in the `FMBench` GitHub repo or editing an already provided config file as per your own requirements (say you want to try benchmarking on a different instance type, or a different inference container etc.).

      👉 A simple config file with key parameters annotated is included in this repo, see [`config-llama2-7b-g5-quick.yml`](https://github.com/aws-samples/foundation-model-benchmarking-tool/tree/main/src/fmbench/configs/llama2/7b/config-llama2-7b-g5-quick.yml). This file benchmarks performance of Llama2-7b on an `ml.g5.xlarge` instance and an `ml.g5.2xlarge` instance. You can use this config file as it is for this Quickstart.

  1. Launch the AWS CloudFormation template included in this repository using one of the buttons from the table below. The CloudFormation template creates the following resources within your AWS account: Amazon S3 buckets, Amazon IAM role and an Amazon SageMaker Notebook with this repository cloned. A read S3 bucket is created which contains all the files (configuration files, datasets) required to run `FMBench` and a write S3 bucket is created which will hold the metrics and reports generated by `FMBench`. The CloudFormation stack takes about 5-minutes to create.

     |AWS Region                |     Link        |
     |:------------------------:|:-----------:|
     |us-east-1 (N. Virginia)    | [<img src="./img/ML-FMBT-cloudformation-launch-stack.png">](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?stackName=fmbench&templateURL=https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/ML-FMBT/template.yml) |
     |us-west-2 (Oregon)    | [<img src="./img/ML-FMBT-cloudformation-launch-stack.png">](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?stackName=fmbench&templateURL=https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/ML-FMBT/template.yml) |
     |us-gov-west-1 (GovCloud West)    | [<img src="./img/ML-FMBT-cloudformation-launch-stack.png">](https://us-gov-west-1.console.amazonaws-us-gov.com/cloudformation/home?region=us-gov-west-1#/stacks/new?stackName=fmbench&templateURL=https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/ML-FMBT/template.yml) |

  1. Once the CloudFormation stack is created, navigate to SageMaker Notebooks and open the `fmbench-notebook`.

  1. On the `fmbench-notebook` open a Terminal and run the following commands.

      ```{.bash}
      conda create --name fmbench_python311 -y python=3.11 ipykernel
      source activate fmbench_python311;
      pip install -U fmbench
      ```

  1. Now you are ready to `fmbench` with the following command line. We will use a sample config file placed in the S3 bucket by the CloudFormation stack for a quick first run.

      1. We benchmark performance for the `Llama2-7b` model on a `ml.g5.xlarge` and a `ml.g5.2xlarge` instance type, using the `huggingface-pytorch-tgi-inference` inference container. This test would take about 30 minutes to complete and cost about $0.20.

      1. It uses a simple relationship of 750 words equals 1000 tokens, to get a more accurate representation of token counts use the `Llama2 tokenizer` (instructions are provided in the next section). ***It is strongly recommended that for more accurate results on token throughput you use a tokenizer specific to the model you are testing rather than the default tokenizer. See instructions provided later in this document on how to use a custom tokenizer***.

          ```{.bash}
          account=`aws sts get-caller-identity | jq .Account | tr -d '"'`
          region=`aws configure get region`
          fmbench --config-file s3://sagemaker-fmbench-read-${region}-${account}/configs/llama2/7b/config-llama2-7b-g5-quick.yml > fmbench.log 2>&1
          ```

      1. Open another terminal window and do a `tail -f` on the `fmbench.log` file to see all the traces being generated at runtime.

          ```{.bash}
          tail -f fmbench.log
          ```

      1. 👉 For streaming support on SageMaker and Bedrock checkout these config files:
          1. [config-llama3-8b-g5-streaming.yml](src/configs/llama3/8b/config-llama3-8b-g5-streaming.yml)
          1. [config-bedrock-llama3-streaming.yml](src/configs/bedrock/config-bedrock-llama3-streaming.yml)

  1. The generated reports and metrics are available in the `sagemaker-fmbench-write-<replace_w_your_aws_region>-<replace_w_your_aws_account_id>` bucket. The metrics and report files are also downloaded locally and in the `results` directory (created by `FMBench`) and the benchmarking report is available as a markdown file called `report.md` in the `results` directory. You can view the rendered Markdown report in the SageMaker notebook itself or download the metrics and report files to your machine for offline analysis.

  _If you would like to understand what is being done under the hood by the CloudFormation template, see [the DIY version with gory details](./misc/the-diy-version-w-gory-details.md)_



  No special steps are required for running `FMBench` on GovCloud. The CloudFormation link for `us-gov-west-1` has been provided in the section above.

  1. Not all models available via Bedrock or other services may be available in GovCloud. The following commands show how to run `FMBench` to benchmark the [Amazon Titan Text Express](https://docs.aws.amazon.com/bedrock/latest/userguide/titan-text-models.html#titantx-express) model in the GovCloud. See the [Amazon Bedrock GovCloud](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/govcloud-bedrock.html) page for more details.

  ```{.bash}
  account=`aws sts get-caller-identity | jq .Account | tr -d '"'`
  region=`aws configure get region`
  fmbench --config-file s3://sagemaker-fmbench-read-${region}-${account}/configs/bedrock/config-bedrock-titan-text-express.yml > fmbench.log 2>&1
  ```



  **_FMBench on Amazon EC2 via the FMBench orchestrator_**

  If you want to benchmark FMs on Amazon EC2 then you can use the [`fmbench-orchestrator`](https://github.com/awslabs/fmbench-orchestrator) as a quick and simple way to get started. The `orchestrator` is a Python program that can be installed on an EC2 machine and it in turn launches other EC2 machines for benchmarking purposes. The orchestrator installs and runs `FMBench` on these EC2 machines, downloads the benchmarking result from these machines and finally terminates these machines once the benchmarking finished.

  As an example, consider a scenario that you want to benchmark say the `Llama3.1-8b` model on a `g5.2xlarge`, `g6.2xlarge`, `p4d.24xlarge`, `p5e.48xlarge` and a `trn1.32xlarge`. Usually this would mean that you have to create these EC2 instances, install the pre-requisites, installed FMBench, run FMBench, download the results and then repeat the process for the next instance. This is tedious work. The orchestrator makes this super convenient by doing all this for you and doing this in parallel. It will spawn all these EC2 VMs and do all the steps mentioned above and at the end of the test you will have results from all the instances downloaded on the orchestrator VM and all the EC2 VMs that were spawned would have automatically been terminated. See the [`orchestrator README`](https://github.com/awslabs/fmbench-orchestrator?tab=readme-ov-file#overview) for more details.




  Depending upon the experiments in the config file, the `FMBench` run may take a few minutes to several hours. Once the run completes, you can find the report and metrics in the local `results-*` folder in the directory from where `FMBench` was run. The rpeort and metrics are also written to the write S3 bucket set in the [config file](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/src/fmbench/configs/config-mistral-7b-tgi-g5.yml#L12).

  Here is a screenshot of the `report.md` file generated by `FMBench`.
  ![Report](https://github.com/aws-samples/foundation-model-benchmarking-tool/blob/main/img/results.gif?raw=true)




  `FMBench` comes packaged with configuration files for benchmarking models on different AWS Generative AI services i.e. Bedrock, SageMaker, EKS and EC2 or bring your own endpoint even.



  View the [ISSUES](https://github.com/aws-samples/foundation-model-benchmarking-tool/issues) on GitHub and add any you might think be an beneficial iteration to this benchmarking harness.



  See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.



  This library is licensed under the MIT-0 License. See the [LICENSE](./LICENSE) file.



  [![Star History Chart](https://api.star-history.com/svg?repos=aws-samples/foundation-model-benchmarking-tool&type=Date)](https://star-history.com/#aws-samples/foundation-model-benchmarking-tool&Date)

  [![Stargazers repo roster for @aws-samples/foundation-model-benchmarking-tool](https://reporoster.com/stars/aws-samples/foundation-model-benchmarking-tool)](https://github.com/aws-samples/foundation-model-benchmarking-tool/stargazers)



  - Schedule Demo 👋 - send us an email 🙂
  - [Community Discord 💭](https://discord.gg/ydXV8mYFtF)
  - Our emails ✉️ aroraai@amazon.com / madhurpt@amazon.com




  <a href="https://github.com/aws-samples/foundation-model-benchmarking-tool/graphs/contributors">
    <img src="https://contrib.rocks/image?repo=aws-samples/foundation-model-benchmarking-tool" />
  </a>


  <a id="1">[1]</a>
  [Pat Verga et al., "Replacing Judges with Juries: Evaluating LLM Generations with a Panel of Diverse Models",    arXiv:2404.18796, 2024.](https://arxiv.org/abs/2404.18796)


pkgId: f16f53dd4c92bd5ab0749325da0e5b145413d15a7534d6fb4ecad6d01d48dff6
name: python-fmdtools-help
arch: noarch
version: 2.0.6
epoch: 0
release: 1
summary: Development documents and examples for fmdtools
url: https://pypi.org/project/fmdtools/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fmdtools-2.0.6-1.src.rpm
location_href: Packages/python-fmdtools-help-2.0.6-1.noarch.rpm
checksum_type: sha256
description:
  [![fmdtools logo - titanic](/docs-source/figures/logo/logo-titanic.png)](https://github.com/nasa/fmdtools)



  ![Python Version](https://img.shields.io/badge/Python-3.11-blue)
  [![PyPI](https://img.shields.io/pypi/v/fmdtools)](https://pypi.org/project/fmdtools/)
  [![Total Downloads](https://static.pepy.tech/badge/fmdtools)](https://pepy.tech/project/fmdtools)
  [![Downloads/Month](https://static.pepy.tech/badge/fmdtools/month)](https://pepy.tech/project/fmdtools)
  [![GitHub release (latest by date)](https://img.shields.io/github/v/release/nasa/fmdtools?label=GitHub%20Release)](https://github.com/nasa/fmdtools/releases)
  [![GitHub Tag](https://img.shields.io/github/v/tag/nasa/fmdtools)](https://github.com/nasa/fmdtools/tags)
  [![CodeFactor](https://www.codefactor.io/repository/github/nasa/fmdtools/badge)](https://www.codefactor.io/repository/github/nasa/fmdtools)
  [![Tests Status](./reports/full-py311/tests-badge.svg)](https://htmlpreview.github.io/?https://github.com/nasa/fmdtools/blob/main/reports/full-py311/junit/report.html)
  [![Tests Coverage](./reports/full-py311/coverage-badge.svg)](https://htmlpreview.github.io/?https://github.com/nasa/fmdtools/blob/main/reports/full-py311/coverage_html/index.html)
  [![GitHub License](https://img.shields.io/badge/License-Apache%202.0-green)](https://github.com/nasa/fmdtools/blob/main/LICENSE)
  [![NASA Software Classification](https://img.shields.io/badge/Software_Class-E-blue)](https://nodis3.gsfc.nasa.gov/displayDir.cfm?Internal_ID=N_PR_7150_002D_&page_name=AppendixD)

  **fmdtools** (Fault Model Design tools) is a Python library for modelling, simulating, and analyzing the resilience of complex systems. With fmdtools, you can (1) represent system structure and behavior in a model, (2) simulate the dynamic effects of hazardous scenarios on the system, and (3) analyze the results of simulations to understand and improve system resilience.

  [Click here to view the the full documentation website.](https://nasa.github.io/fmdtools)




  The fmdtools library provides the computational support needed to perform a simulation-based (rather than document-based) hazard analysis process that [**enables the consideration of systems resilience**](https://nasa.github.io/fmdtools/docs-source/Development%20Guide.html#why-fmdtools). This means that it can be used to extend the scope of hazard analysis from component faults to the dynamic interactions between the system, operators, and the environment. Some key features include:

  <img align="left" width="100" height="100" src="/docs-source/figures/powerpoint/flexible.svg">


  Models in fmdtools use a consistent and composable representation of system structure and behavior. Whether you want to model a simple component, a complex system-of-systems, or both, fmdtools can help.

  <img align="left" width="100" height="100" src="/docs-source/figures/powerpoint/powerful.svg">


  Simulation techniques in fmdtools represent the state-of-the-art in dynamical systems modelling for resilience quantification. With fmdtools, you can simulate the dynamic effects of hazardous scenarios over a wide range of variables to quantify and optimize risk, resilience, and safety metrics.

  <img align="left" width="100" height="100" src="/docs-source/figures/powerpoint/efficient.svg">


  Readily-deployable analysis methods are built in to fmdtools to enable the rapid and iterative statistical analysis of simulation results. With fmdtools, you can write 2-3 lines of code to visualize model behavior instead of spending hours writing it yourself.







  The fmdtools library is developed in Python 3.11 but tested to maintain compatibility over three versions of Python. See current doctest reports below:

  | Python Version    | Doctests |
  | -------- | ------- |
  | 3.10  | [![Python 3.10 Tests](./reports/doctests-py310/tests-badge.svg)](https://htmlpreview.github.io/?https://github.com/nasa/fmdtools/blob/main/reports/doctests-py310/junit/report.html)   |
  | 3.11 | [![Python 3.11 Tests](./reports/doctests-py311/tests-badge.svg)](https://htmlpreview.github.io/?https://github.com/nasa/fmdtools/blob/main/reports/doctests-py311/junit/report.html)    |
  | 3.12    | [![Python 3.12 Tests](./reports/doctests-py312/tests-badge.svg)](https://htmlpreview.github.io/?https://github.com/nasa/fmdtools/blob/main/reports/doctests-py312/junit/report.html)   |

  Further (functional and integration) tests are performed in the Python 3.11 to ensure that examples run as desired. Thus, it is generally reccommended to use Python 3.11 to keep pace with development, especially when running examples.



  The fmdtools library was developed to run in an anaconda python environment. If you do not have an existing python environment, first [download and install anaconda.](https://docs.anaconda.com/free/anaconda/install/index.html).

  After the base installation, set up a new `Python 3.11` environment for fmdtools and install these external external (non-python) packages in it:

  ```
  jupyter notebook



  graphviz



  ```

  Note: On Windows, some versions `fmdtools` dependencies may require a compiler such as that provided with [Microsoft Studio Build tools](https://visualstudio.microsoft.com/downloads/?q=build+tools) to build, so it (while not required) may be helpful to install it also.




  For use of fmdtools as an external library, the toolkit can be installed directly from the [PyPI package repository](https://pypi.org/project/fmdtools/) using ``pip install fmdtools``.



  For development as well as interactive use of tutorials and models, we reccomend creating an editable development install.

  For this installation, fmdtools can be downloaded from the [fmdtools github repository](https://github.com/nasa/fmdtools/) using:

  ```
     git clone https://github.com/nasa/fmdtools.git
  ```

  This may then be installed using:

  ```
     pip install -e "/path/to/fmdtools"
  ```

  Note that this version reflects the latest version on the ``main`` git branch along with any local changes. To use a particular version of ``fmdtools`` you can checkout the tag corresponding to the version you want, e.g.:

  ```
     git checkout v2.0.6
  ```




  fmdtools requires `Python 3.11` (anaconda recommended) and depends directly on the packages below (see requirements.txt). Note that the use of these depencencies is governed by their respective licences, which may be obtained at the provided links.

  ```
  scipy

  tqdm

  networkx

  numpy < 2.0

  matplotlib

  pandas

  ordered-set

  dill

  recordclass == 0.22.1

  pytest

  graphviz

  shapely

  ```

  Since these are direct dependencies, they will be installed automatically along with fmdtools.

  Some additional indirect dependencies (listed below) may be needed for development/testing of the code, or for specific notebooks. Thus, to develop/contribute to fmdtools, it can be helpful to install these up-front using `pip install packagename`. Note that the use of these dependencies is governed by their respective licenses, which may be obtained at the provided links.
  ```
  deap



  pymoo


  scikit-learn


  nbmake


  pytest-html


  coverage


  pytest-cov


  genbadge


  multiprocess


  pathos


  adjustText


  ```

  One `fmdtools` is installed, you should be able to run:
  ```
  import fmdtools
  ```

  To check the version of fmdtools, you can run the following:
  ```
  import importlib.metadata
  importlib.metadata.version("fmdtools")
  ```
  which should return the current version of fmdtools.

  If a development install has been performed, you can further check aspects of your installation by running `run_all_tests.py` and opening the corresponding test report in `/reports/junit/report.html` to see if all tests pass (or, are consistent with the [current test report](https://github.com/nasa/fmdtools/blob/main/reports/junit/report.html)).



  Once fmdtools is installed, use the following to get acquainted with how to use the library:

  - Go through the [Intro to fmdtools workshop](https://nasa.github.io/fmdtools/docs-source/Intro_to_fmdtools.html) to learn about some of the basics of the fmdtools library and work with an existing model.

  - Explore more [examples](https://nasa.github.io/fmdtools/examples/Examples.html) of particular use-cases by going through the [examples folder](https://github.com/nasa/fmdtools/tree/main/examples)

  - Read about contributions and model development best practices by perusing the [Development Guide](https://nasa.github.io/fmdtools/docs-source/Development%20Guide.html#).

  - Explore the searchable [module reference](https://nasa.github.io/fmdtools/docs-source/fmdtools.html) for syntax and usage documentation.


  fmdtools is developed primarily by researchers at NASA Ames Research Center. External contributions are welcome under a Contributor License Agreement:

  - [Individual CLA](https://github.com/nasa/fmdtools/blob/main/fmdtools_Individual_CLA.pdf)

  - [Corporate CLA](https://github.com/nasa/fmdtools/blob/main/fmdtools_Corporate_CLA.pdf)



  <a href="https://github.com/nasa/fmdtools/graphs/contributors">
    <img src="https://contrib.rocks/image?repo=nasa/fmdtools" />
  </a>

  See: [CONTRIBUTORS.md](CONTRIBUTORS.md)



  To cite fmdtools in general, you may cite our explanatory publication:

  ```
  @article{hulse2021fmdtools,
    title={fmdtools: A fault propagation toolkit for resilience assessment in early design},
    author={Hulse, Daniel and Walsh, Hannah and Dong, Andy and Hoyle, Christopher and Tumer, Irem and Kulkarni, Chetan and Goebel, Kai},
    journal={International Journal of Prognostics and Health Management},
    volume={12},
    number={3},
    year={2021}
  }
  ```

  To cite a particular version of the fmdtools, you may use:

  ```
  @software{nasa2024fmdtools,
    author = {{NASA}},
    title = {fmdtools},
    url = {https://github.com/nasa/fmdtools},
    version = {2.0.6},
    date = {2024-11-13},
  }
  ```

  To cite a particular fmdtools example or published research methodology, use the relevant reference provided in the in accompanying README file for the example.



  Copyright © 2024, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.


  The Fault Model Design tools - fmdtools version 2 software is licensed under the Apache License, Version 2.0 (the "License"); you may not use this application 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.

rpm_license:
  fmdtools version 2.0.6 --------------------------- 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 [yyyy] [name of copyright owner]  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.  --------------------------- Contributions from fmdtools version 0.6.2 (and prior releases) require the following notice: MIT License  Copyright (c) 2019 Design Engineering Lab  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: 067cd3cc9ec3de9bcf7a6aeca56163b01dbaeea9c4ea760f01d1608bd9c08ad6
name: python-fme-help
arch: noarch
version: 2024.12.0
epoch: 0
release: 1
summary: Development documents and examples for fme
url: https://github.com/ai2cm/ace
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fme-2024.12.0-1.src.rpm
location_href: Packages/python-fme-help-2024.12.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Docs](https://readthedocs.org/projects/ai2-climate-emulator/badge/?version=latest)](https://ai2-climate-emulator.readthedocs.io/en/latest/)
  [![PyPI](https://img.shields.io/pypi/v/fme.svg)](https://pypi.org/project/fme/)


  This package contains code to train and evaluate weather/climate model emulators as seen in
  "ACE: A fast, skillful learned global atmospheric model for climate prediction" ([arxiv:2310.02074](https://arxiv.org/abs/2310.02074))
  and "Application of the Ai2 Climate Emulator to E3SMv2's global atmosphere model, with a focus on precipitation fidelity"
  ([JGR-ML](https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2024JH000136)).




  The package can be installed via PyPI using:

  ```
  pip install fme
  ```



  A quickstart guide may be found [here](https://ai2-climate-emulator.readthedocs.io/en/latest/quickstart.html).



  See complete documentation [here](https://ai2-climate-emulator.readthedocs.io/en/latest/).

rpm_license:
[cell repeats an earlier one in this file: 10254 characters]


pkgId: 38e7b243c81216787e86b6037de519ebc96adcc4a55587a7ef6990a046745e05
name: python-fmu-dataio-help
arch: noarch
version: 2.8.0
epoch: 0
release: 1
summary: Development documents and examples for fmu-dataio
url: https://github.com/equinor/fmu-dataio
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fmu-dataio-2.8.0-1.src.rpm
location_href: Packages/python-fmu-dataio-help-2.8.0-1.noarch.rpm
checksum_type: sha256
description:
  ![linting](https://github.com/equinor/fmu-dataio/workflows/linting/badge.svg)
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
  [![PyPI version](https://badge.fury.io/py/fmu-dataio.svg)](https://badge.fury.io/py/fmu-dataio)
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fmu-dataio.svg)
  ![PyPI - License](https://img.shields.io/pypi/l/fmu-dataio.svg)
  ![ReadTheDocs](https://readthedocs.org/projects/fmu-dataio/badge/?version=latest&style=flat)

  **fmu-dataio** is a library for handling data flow in and out of Fast Model Update workflows.
  For export, it automates the adherence to the FMU data standard ✅ including both file and folder
  conventions as well as richer metadata 🔖 for use by various data consumers both inside and
  outside the FMU context via Sumo.

  **fmu-dataio** is designed to be used with the same syntax in all parts of an FMU workflow,
  including post- and pre-processing jobs and as part of ERT `FORWARD_MODEL`, both inside and outside RMS.

  👉 [Detailed documentation for fmu-dataio at Read the Docs.](https://fmu-dataio.readthedocs.io/en/latest/) 👀

  **fmu-dataio** is also showcased in Drogon. 💪


  ![Radix](https://api.radix.equinor.com/api/v1/applications/fmu-schemas/environments/dev/buildstatus)

  The metadata standard is defined by a [JSON schema](https://json-schema.org/). Within Equinor,
  the schema is available on a Radix-hosted endpoint ⚡


pkgId: 1126101e4c516e5c5e54fca57776038e8542a6ee54237764f593395c53105960
name: python-fmu-tools-help
arch: noarch
version: 1.18.0
epoch: 0
release: 1
summary: Development documents and examples for fmu-tools
url: https://github.com/equinor/fmu-tools
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fmu-tools-1.18.0-1.src.rpm
location_href: Packages/python-fmu-tools-help-1.18.0-1.noarch.rpm
checksum_type: sha256
description:
  fmu-tools can be installed via pip
  ```sh
  pip install fmu-tools
  ```
  Note that some of utilities may depend upon commercial third-party
  software.

  As a collection of utilities fmu-tools has many different invocations and
  usages. Visit the [documentation](https://equinor.github.io/fmu-tools)
  for a complete overview.

  All contributions are welcome. Please see the
  [Contributing document](https://equinor.github.io/fmu-tools/contributing.html)
  for more details and instructions for getting started.

  The documentation can be found at
  [https://equinor.github.io/fmu-tools](https://equinor.github.io/fmu-tools).

  This software is released under the LGPLv3 license.

rpm_license:
[cell repeats an earlier one in this file: 7357 characters]


pkgId: dc357588a9d21539facb33a717544622e0b64da81aa3af9f4e4c07d398aedfaa
name: python-foamlib-help
arch: noarch
version: 0.8.2
epoch: 0
release: 1
summary: Development documents and examples for foamlib
url: https://github.com/gerlero/foamlib
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foamlib-0.8.2-1.src.rpm
location_href: Packages/python-foamlib-help-0.8.2-1.noarch.rpm
checksum_type: sha256
description:
  [<img alt="foamlib" src="https://github.com/gerlero/foamlib/raw/main/logo.png" height="65">](https://github.com/gerlero/foamlib)

  [![Documentation](https://img.shields.io/readthedocs/foamlib)](https://foamlib.readthedocs.io/)
  [![CI](https://github.com/gerlero/foamlib/actions/workflows/ci.yml/badge.svg)](https://github.com/gerlero/foamlib/actions/workflows/ci.yml)
  [![Codecov](https://codecov.io/gh/gerlero/foamlib/branch/main/graph/badge.svg)](https://codecov.io/gh/gerlero/foamlib)
  [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
  [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)](https://github.com/astral-sh/uv)
  [![Publish](https://github.com/gerlero/foamlib/actions/workflows/pypi-publish.yml/badge.svg)](https://github.com/gerlero/foamlib/actions/workflows/pypi-publish.yml)
  [![PyPI](https://img.shields.io/pypi/v/foamlib)](https://pypi.org/project/foamlib/)
  [![Conda Version](https://img.shields.io/conda/vn/conda-forge/foamlib)](https://anaconda.org/conda-forge/foamlib)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/foamlib)](https://pypi.org/project/foamlib/)
  ![OpenFOAM](https://img.shields.io/badge/openfoam-.com%20|%20.org-informational)
  [![Docker](https://github.com/gerlero/foamlib/actions/workflows/docker.yml/badge.svg)](https://github.com/gerlero/foamlib/actions/workflows/docker.yml)
  [![Docker image](https://img.shields.io/badge/docker%20image-microfluidica%2Ffoamlib-0085a0)](https://hub.docker.com/r/microfluidica/foamlib/)

  **foamlib** provides a simple, modern, ergonomic and fast Python interface for interacting with [OpenFOAM](https://www.openfoam.com).

  <p align="center">
      <img alt="benchmark" src="https://github.com/gerlero/foamlib/raw/main/benchmark.png" height="250">
      <br>
    <i>Parsing a </i>volVectorField<i> with 200k cells.</i>
  </p>



  **foamlib** offers the following Python classes:

  * [`FoamFile`](https://foamlib.readthedocs.io/en/stable/files.html#foamlib.FoamFile) (and [`FoamFieldFile`](https://foamlib.readthedocs.io/en/stable/files.html#foamlib.FoamFieldFile)): read-write access to OpenFOAM configuration and field files as if they were Python `dict`s, using `foamlib`'s own parser and in-place editor. Supports ASCII and binary field formats (with or without compression).
  * [`FoamCase`](https://foamlib.readthedocs.io/en/stable/cases.html#foamlib.FoamCase): a class for configuring, running, and accessing the results of OpenFOAM cases.
  * [`AsyncFoamCase`](https://foamlib.readthedocs.io/en/stable/cases.html#foamlib.AsyncFoamCase): variant of `FoamCase` with asynchronous methods for running multiple cases at once.
  * [`AsyncSlurmFoamCase`](https://foamlib.readthedocs.io/en/stable/cases.html#foamlib.AsyncSlurmFoamCase): subclass of `AsyncFoamCase` used for running cases on a Slurm cluster.





  * With [pip](https://pypi.org/project/pip/):

      ```bash
      pip install foamlib
      ```

  * With [conda](https://docs.conda.io/en/latest/):

      ```bash
      conda install -c conda-forge foamlib
      ```



  ```python
  import os
  from pathlib import Path
  from foamlib import FoamCase

  pitz_tutorial = FoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "incompressible/simpleFoam/pitzDaily")

  my_pitz = pitz_tutorial.clone("myPitz")
  ```



  ```python
  my_pitz.run()
  ```



  ```python
  latest_time = my_pitz[-1]

  p = latest_time["p"]
  U = latest_time["U"]

  print(p.internal_field)
  print(U.internal_field)
  ```



  ```python
  my_pitz.clean()
  ```



  ```python
  my_pitz.control_dict["writeInterval"] = 10
  ```



  ```python
  with my_pitz.fv_schemes as f:
      f["gradSchemes"]["default"] = f["divSchemes"]["default"]
      f["snGradSchemes"]["default"] = "uncorrected"
  ```



  ```python
  import asyncio
  from foamlib import AsyncFoamCase

  async def run_case():
      my_pitz_async = AsyncFoamCase(my_pitz)
      await my_pitz_async.run()

  asyncio.run(run_case())
  ```



  ```python
  from foamlib import FoamFieldFile

  U = FoamFieldFile(Path(my_pitz) / "0/U")

  print(U.internal_field)
  ```



  ```python
  import os
  from pathlib import Path
  from foamlib import AsyncSlurmFoamCase
  from scipy.optimize import differential_evolution

  base = AsyncSlurmFoamCase(Path(os.environ["FOAM_TUTORIALS"]) / "incompressible/simpleFoam/pitzDaily")

  async def cost(x):
      async with base.clone() as clone:
          clone[0]["U"].boundary_field["inlet"].value = [x[0], 0, 0]
          await clone.run(fallback=True) # Run locally if Slurm is not available
          return abs(clone[-1]["U"].internal_field[0][0])

  result = differential_evolution(cost, bounds=[(-1, 1)], workers=AsyncSlurmFoamCase.map, polish=False)
  ```



  ```python

  from pathlib import Path
  from foamlib import FoamCase

  case = FoamCase(Path(__file__).parent)

  case.run()
  ```



  For more information, check out the [documentation](https://foamlib.readthedocs.io/).


pkgId: cde6f4e68024120d5536d99ca2b025f606a0efed570bbe86918abb819d07f5f9
name: python-folio-migration-tools-help
arch: noarch
version: 1.8.18
epoch: 0
release: 1
summary: Development documents and examples for folio-migration-tools
url: https://github.com/FOLIO-FSE/folio_migration_tools
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-folio-migration-tools-1.8.18-1.src.rpm
location_href: Packages/python-folio-migration-tools-help-1.8.18-1.noarch.rpm
checksum_type: sha256
description:
  ![example workflow](https://github.com/FOLIO-FSE/MARC21-To-FOLIO/actions/workflows/python-app.yml/badge.svg)[![codecov](https://codecov.io/gh/FOLIO-FSE/folio_migration_tools/branch/main/graph/badge.svg?token=ZQL5ILWWGT)](https://codecov.io/gh/FOLIO-FSE/folio_migration_tools)   [![readthedocs](https://readthedocs.org/projects/docs/badge/?version=latest)](https://folio-migration-tools.readthedocs.io/)

  A toolkit that enables you to migrate data over from a legacy ILS system into [FOLIO LSP](https://www.folio.org/)


  FOLIO Migration tools enables you to migrate libraries with the most common ILS:s over to FOLIO without data losses or any major data transformation tasks.
  The tools transforms and loads the data providing you and the library with good actionable logs and data cleaning task lists together with the migrated data.


  FOLIO Migration Tools currently covers the following data sets:
  * Catalog (Inventory and SRS in FOLIO terminology)
  * Circulation transactions (Open loans and requests)
  * Users/Patrons (In FOLIO, these share the same app/database)
  * Courses and Reserves (Course reserves)
  * Organizations (Vendor records)
  * Orders (limited support)


  This is the loose roadmap, in order of most likely implementations first
  * ERM-related objects
  * Financial records


  The tools are primarliy maintained for performing initial data migrations. We recommend that you use native FOLIO functionality for ongoing loads where possible.
  In theory, these tools can be used for ongoing patron loads from systems like Banner, Workday, or PeopleSoft. But we recommend you to weigh your options carefully before going down this path.


  Want to contribute? Read the [CONTRIBUTING.MD](https://github.com/FOLIO-FSE/folio_migration_tools/blob/main/CONTRIBUTING.md)


  Report it on the [Github Issue tracker](https://github.com/FOLIO-FSE/folio_migration_tools/issues)

  The scripts requires a FOLIO tenant with reference data properly set up. The script will throw messages telling what reference data is missing.

  Make sure you are running Python 3.9 or above.


  ```
  python -m venv ./.venv     # Creates a virtual env in the current folder
  source .venv/bin/activate  # Activates the venv
  ```

  ```
  python -m pip install folio_migration_tools
  ```

  ```
  python -m folio_migration_tools -h
  ```



  ```
  pipenv install folio-migration-tools
  ```

  ```
  pipenv run python3 -m folio_migration_tools -h
  ```


  This repo plays the main part in a process using a collection of tools. The process itself is documented in more detail, including example configuration files, at [this template repository](https://github.com/FOLIO-FSE/migration_repo_template)
  In order to perform migrations according to this process, you need the following:
  * An Installation of [FOLIO Migration Tools](https://pypi.org/project/folio-migration-tools/). Installation instructions above.
  * A clone, or a separate repo created from [migration_repo_template](https://github.com/FOLIO-FSE/migration_repo_template)
  * Access to the [Data mapping file creator](https://data-mapping-file-creator.folio.ebsco.com/data_mapping_creation) web tool
  * A FOLIO tenant running the latest or the second latest version of FOLIO



  This repo uses [Python-i18n](https://github.com/danhper/python-i18n) to translate reports between languages, and to handle large strings for templates.

  **Any English string which will end up in a report** should be wrapped in the function `i18n.t` from `i18n`:



  ```js
  i18n.t("Reports")+":"
  ```

  Templating is achieved with `%{[key]}` blocks, and keyword arguments in the internationaliation:

  ```js
  i18n.t("Code '%{code}' not found in FOLIO",code=folio_code)
  ```

  Long strings can use a placeholder key:

  ```js
  i18n.t("blurbs.Introduction.description")
  ```

  With the full string in ```translations/en.json```:

  ```json
  "blurbs.Introduction.description": "<br/>Data errors preventing records from being migrated
  ```



  Translation files live in the `translations` directory, with `en.json` as the default.

  Extract template files with the `extract_translations` script:

  ```bash
  python scripts/extract_translations.py
  ```



  Other langauges translations live in `translations/[locale].json`.
  For example, Spanish would be `es.json`.

  The keys must match the English keys, but the Values should be translated.

  You can update a language file's keys with:

  ```bash
  python scripts/update_language.py --target-lang [locale]
  ```

  Translate all new strings, which begin with `TRANSLATE`, then commit.



  * Internationalize entire phrases or paragraphs, not just the constitutent words. Syntax and grammar vary significantly between languages.
  * Name template variables as generically as possible in the circumstance, and check translations for reusable translations.
  * In a block with sentences separately followed by values, such as a table, you only need to translate the sentences.


  For information on syntax, what files are needed and produced by the toolkit, refer to the documentation and example files in the [template repository](https://github.com/FOLIO-FSE/migration_repo_template). We are building out the docs section in this repository as well:[Documentation](https://folio-migration-tools.readthedocs.io/en/latest/)
  ¨


pkgId: 7b8e5690927fee461f70d8352334ef6ebdbe4b34b03b14a18902a3a8fb29afab
name: python-folioclient-help
arch: noarch
version: 0.61.2
epoch: 0
release: 1
summary: Development documents and examples for folioclient
url: https://github.com/FOLIO-FSE/folioclient
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-folioclient-0.61.2-1.src.rpm
location_href: Packages/python-folioclient-help-0.61.2-1.noarch.rpm
checksum_type: sha256
description:
  ![example workflow](https://github.com/fontanka16/FolioClient/actions/workflows/python-package.yml/badge.svg)
  FOLIO Client is a simple python (3) wrapper over the FOLIO LMS system API:s
  Test


  * Convenient FOLIO login and OKAPI Token creation
  * Wrappers for various REST operations
  * Most common reference data for inventory are retrieved as cached properties.
  * Fetches the latest released schemas for instances, holdings and items. Very useful for JSON Schema based validation.


  ```pip install folioclient ```


pkgId: 19271c369a1b97e16cf6c685e43a1698aa03d933b25a936cfcdfe85994f0485c
name: python-folium-help
arch: noarch
version: 0.19.2
epoch: 0
release: 1
summary: Development documents and examples for folium
url: https://github.com/python-visualization/folium
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-folium-0.19.2-1.src.rpm
location_href: Packages/python-folium-help-0.19.2-1.noarch.rpm
checksum_type: sha256
description:
  Python Data, Leaflet.js Maps
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  `folium` builds on the data wrangling strengths of the Python ecosystem and the
  mapping strengths of the Leaflet.js library. Manipulate your data in Python,
  then visualize it in a Leaflet map via `folium`.


pkgId: fe298ae6512a8f51a0a07c026b638cfff3521acc28d4744536ae9ef511d2b9ff
name: python-followthemoney-help
arch: noarch
version: 3.7.12
epoch: 0
release: 1
summary: Development documents and examples for followthemoney
url: https://followthemoney.tech/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-followthemoney-3.7.12-1.src.rpm
location_href: Packages/python-followthemoney-help-3.7.12-1.noarch.rpm
checksum_type: sha256
description:
  [![ftm-build](https://github.com/alephdata/followthemoney/actions/workflows/build.yml/badge.svg)](https://github.com/alephdata/followthemoney/actions/workflows/build.yml)

  This repository contains a pragmatic data model for the entities most
  commonly used in investigative reporting: people, companies, assets,
  payments, court cases, etc.

  The purpose of this is not to model reality in an ideal data model, but
  rather to have a working data structure for researchers.

  `followthemoney` also contains code used to validate and normalize many
  of the elements of data, and to map tabular data into the model.



  For a general introduction to `followthemoney`, check the high-level introduction:

  * https://followthemoney.tech

  Part of this package is a command-line tool that can be used to process and
  transform data in various ways. You can find a tutorial here:

  * https://followthemoney.tech/docs/cli/

  Besides the introductions, there is also a full reference documentation for the
  library and the contained ontology:

  * https://followthemoney.tech/explorer/

  There's also a number of viewers for the RDF schema definitions generated
  from FollowTheMoney, e.g.:

  * [LODE documentation](http://150.146.207.114/lode/extract?url=https%3A%2F%2Falephdata.github.io%2Ffollowthemoney%2Fns%2Fftm.xml&owlapi=true&imported=true&lang=en)
  * [WebVOWL](https://service.tib.eu/webvowl/#iri=https://alephdata.github.io/followthemoney/ns/ftm.xml)
  * RDF/OWL specification in [XML](https://alephdata.github.io/followthemoney/ns/ftm.xml).



  For local development with a virtualenv:

  ```bash
  python3 -mvenv .env
  source .env/bin/activate
  pip install -e ".[dev]"
  ```

  Now you can run the tests with

  ```bash
  make test
  ```



  We release a lot of version of `followthemoney` because even small changes
  to the code base require a pypi release to begin being used in `aleph`. To
  this end, here's the steps for making a release:

  ```bash
  git pull --rebase
  make build
  make test
  git add . && git commit -m "Updating translation files"
  bumpversion patch
  git push --atomic origin main $(git describe --tags --abbrev=0)
  ```

  This will create a new patch release and upload a distribution of it. If
  the changes are more significant, you can run `bumpversion` with the `minor`
  or `major` arguments.

  When the schema is updated, please update the docs, ideally including the
  diagrams. For the RDF namespace and JavaScript version of the model,
  run `make generate`.


pkgId: 8ba581a902bcd293e1e28db9f37db0490cc96f4c22a33baa4e6d3d579455084c
name: python-footing-help
arch: noarch
version: 1.0.1
epoch: 0
release: 1
summary: Development documents and examples for footing
url: https://github.com/AmbitionEng/footing
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-footing-1.0.1-1.src.rpm
location_href: Packages/python-footing-help-1.0.1-1.noarch.rpm
checksum_type: sha256
description:
  Footing provides templated project creation and management.

  The main functionality of footing includes:

  1. Creating new projects from [cookiecutter](https://cookiecutter.readthedocs.io/en/latest/) templates.
  2. Listing all available templates under a git forge such as Github or Gitlab, along with listing all projects created from those templates.
  3. Keeping projects up to date with the template as it changes.

  A quick start is provided below. Be sure to go through the [installation](docs/installation.md) section before starting. It's also useful to read about [cookiecutter](https://cookiecutter.readthedocs.io/en/latest/) templates since they form the foundation of this tool.





  Footing manages projects that are started from templates (specifically, [cookiecutter](https://cookiecutter.readthedocs.io/en/latest/) templates). In order to see what templates are available for use, do:

      footing ls <forge>

  This will list all of the paths of templates that are available under a particular git forge. A git forge can be:

  1. A Github user or organization, such as `github.com/OrganizationName`
  2. A Gitlab group, such as `gitlab.com/Group` or `gitlab.com/Nested/Group`

  Doing:

      footing ls <forge> -l

  will also display the extended description of the template.

  To list all projects created with a template (and the project's descriptions), take the template path from `footing ls` and use it as the second argument like so::

      footing ls <forge> <git@github.com:user/cookiecutter-template-path.git> -l

  **Note** Be sure to provision a `GITHUB_API_TOKEN` or a `GITLAB_API_TOKEN` environment variable in order for this command to work. The environment variable needs to contain a personal access token to the appropriate forge.

  **Note** This command only works with Gitlab when advanced search is enabled. See more [here](https://docs.gitlab.com/ee/user/search/advanced_search.html).



  A new project can be set up from a template with:

      footing setup <template_path>

  What happens next is dependent on how the template is configured. By default, [cookiecutter](https://cookiecutter.readthedocs.io/en/latest/) will prompt the user for template parameters, defined in the `cookiecutter.json` file of the template repository. If any [cookiecutter hooks](http://cookiecutter.readthedocs.io/en/latest/advanced/hooks.html) are defined in the project, additional setup steps will happen that are specific to the type of project being started.



  If a template is ever updated, changes can be pulled into a footing-created project with:

      footing update

  This will git merge the template changes into your repository into a special `_footing_update` branch. You will need to review the changes, resolve conflicts, and then `git add` and `git push` these changes yourself.

  Sometimes it is desired that projects always remain up to date with the latest template - for example, ensuring that each project obtains a security patch to a dependency or doing an organization-wide upgrade to a new version of Python.

  Using `footing update --check` from the repository will succeed if the project is up to date with the latest template or return a non-zero exit code if it isn't. This command can be executed as part of automated testing that happens in continuous integration in order to ensure all projects remain up to date with changes before being deployed.

  **Note** Updating your project with the latest template does not result in [cookiecutter hooks](http://cookiecutter.readthedocs.io/en/latest/advanced/hooks.html) being executed again.

  **Note** If a `_footing_update` branch already exists from a previous update, call `footing clean` to delete the branch.



  Sometimes it is desirable to switch a project to another template, like when open sourcing a private package. Projects can be switched to another template with::

  	footing switch <template_path>

  Similar to `footing update`, you will need to review the changes, resolve conflicts, and then `git add` and `git push` these changes.

  **Note** Switching templates does not trigger any [cookiecutter hooks](http://cookiecutter.readthedocs.io/en/latest/advanced/hooks.html). Users must manually do any project setup and must similarly do any project teardown that might have resulted from the previously template. The authors have intentionally left out this convenience for now since footing currently has no way to spin down projects.



  `footing` is compatible with Python 3.9 - 3.13.



  [Check out the official docs for more examples on creating footing templates](https://footing.readthedocs.io).


pkgId: 6be98f271b5fdb74d2a5b1ce6951f8e78e06e7c839478e99d86c80dbc1e89761
name: python-footprint-facility-help
arch: noarch
version: 1.8
epoch: 0
release: 1
summary: Development documents and examples for footprint-facility
url: https://pypi.org/project/footprint-facility/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-footprint-facility-1.8-1.src.rpm
location_href: Packages/python-footprint-facility-help-1.8-1.noarch.rpm
checksum_type: sha256
description:
  from os import fstat


  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
  ![pipeline](https://gitlab.com/be-prototypes/geofootprint-prototype/badges/main/pipeline.svg)
  ![Coverage](https://gitlab.com/be-prototypes/geofootprint-prototype/badges/main/coverage.svg)


  This set of functions includes a set of facilities to manipulate the footprints to be displayed into leaflet, OpenLayer, MapBox and Cesium.

  It manages:
   - Split polygon to multi-polygon when crossing anti-meridian
   - Manage polar area including polar point inside the polygon boundary.
   - Manage long footprints with overlays
   - Manage thin footprints collapsing polygon in a single lineString


  We recommend the usage of a virtual environment to embed dependencies.
  The dependencies are automatically installed during this module installation:
   - pyproj
   - numpy
   - shapely
   - geojson

  Details can be found in [requirements.txt](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/requirements.txt) file.


  The `shapely` library provides a set of feature that could be a solution to handle the footprints identified in this study. Unfortunately the library is also concerned by the display issue. For example the intersections operation in shapely fails when footprint contains antimeridian. This later library is mainly used to handle geometries types and formats conversions.
  Numpy is used to manipulate the list of coordinates to fix the issues caused by lat/lon limits of the geometry.


  ```python
  pip install footprint-facility
  ```
  The module is retrieved from pypi.org service.


  The ```rework_to_polygon_geometry(geometry: Geometry) -> Geometry``` method reworks the geometry parameter to manage polar and antimeridian singularities. This process implements the **Polar inclusive algorithm**. The objective of this algorithm is to add the North/South Pole into the list of coordinates of the polygon at the antimeridian cross.

  When the geometry contains the pole the single polygon geometry including the pole in its border point list is properly interpreted by displays systems. When the geometry does not contain the pole, the geometry is split among the antimeridian line.

  ```python
  from shapely import wkt
  from footprint_facility import rework_to_polygon_geometry

  wkt_geometry='POLYGON((175.812988 -70.711365,-175.61055 -68.469902,-172.383392 -69.75074,178.803558 -72.136864,175.812988 -70.711365))'

  geometry = wkt.loads(wkt_geometry)
  reworked = rework_to_polygon_geometry(geometry)

  print(reworked)
  ```

  prints
  ```python
  MULTIPOLYGON (((-180 -69.61708714060345, -175.61055 -68.469902, -172.383392 -69.75074, -180 -71.81292858935237, -180 -69.61708714060345)),
                ((175.812988 -70.711365, 180 -69.61708714060345, 180 -71.81292858935237, 178.803558 -72.136864, 175.812988 -70.711365)))
  ```

  This sample footprint is extracted from product `S1A_EW_SL1__1_DH_20240118T082036_20240118T082109_052158_064DFF_6639` not anymore accessible in data hub, but derived products are available such as `S1A_EW_OCN__2SDH_20240118T082040_20240118T082108_052158_064DFF_66CB.SAFE`. This data is accessible in the catalog [following this odata link](https://catalogue.dataspace.copernicus.eu/odata/v1/Products(ba5106b0-f9c4-490b-bc8e-2d7dbb829bf0))

  View the output in Leaflet:
  ![Leaflet](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_5.png)
  View the output in MapBox (https://geojson.io):
  ![MapBox display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img.png)
  View the output in OpenLayer:
  ![OpenLayer Display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_7.png)
  View the output in Cesium
  ![Cesium display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_6.png)




  The same method also manage footprint passing over pole area, for example product called `S3A_SL_1_RBT____20240101T234743_20240101T235043_20240103T092302_0179_107_230_1440_PS1_O_NT_004`
  avaialble in catalog [following this odata link](https://catalogue.dataspace.copernicus.eu/odata/v1/Products(f189f02b-137f-4da4-b0d4-b9da66fcb5c8))

  ![img_8.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_21.png)

  ```python
  from shapely import wkt
  from footprint_facility import rework_to_polygon_geometry

  wkt_geometry='POLYGON((148.66 83.7852,152.864 83.7881,157.085 83.7477,161.246 83.6889,165.27 83.594,169.107 83.4668,172.868 83.3119,176.409 83.1294,179.768 82.9261,-177.09 82.6993,-174.112 82.4387,-171.356 82.1771,-168.826 81.8915,-166.413 81.5862,-164.187 81.2727,-162.124 80.9494,-160.207 80.6132,-158.378 80.271,-156.704 79.911,-155.155 79.5456,-153.715 79.1749,-152.364 78.797,-151.091 78.4225,-149.916 78.0337,-148.797 77.6345,-147.746 77.2423,-146.768 76.845,-145.838 76.4404,-144.979 76.034,-144.147 75.6258,-143.843 75.4683,-133.508 76.4059,-121.888 76.8854,-109.902 76.8263,-98.5116 76.2384,-98.4639 76.2441,-98.2252 76.4066,-97.6125 76.8338,-96.9351 77.2695,-96.2223 77.7014,-95.4704 78.1301,-94.67 78.554,-93.7717 78.9733,-92.7923 79.4003,-91.7963 79.8163,-90.6757 80.2289,-89.4578 80.6379,-88.1285 81.0437,-86.6584 81.4456,-85.117 81.8441,-83.3788 82.2296,-81.4475 82.6096,-79.3161 82.9811,-76.958 83.3328,-74.2774 83.6856,-71.3901 84.0125,-68.1774 84.3328,-64.59 84.6283,-60.5631 84.9038,-55.9807 85.139,-51.1282 85.3472,-45.8032 85.5231,-40.1262 85.6577,-34.1967 85.7497,-28.0603 85.8022,-21.787 85.7844,-21.7786 85.793,-14.5003 88.3719,133.773 88.9159,146.77 86.3469,148.66 83.7852))'
  geometry = wkt.loads(wkt_geometry)
  reworked = rework_to_polygon_geometry(geometry)

  print(reworked)
  ```

  returns

  ```
  POLYGON ((148.66 83.7852, 152.864 83.7881, 157.085 83.7477, 161.246 83.6889, 165.27 83.594, 169.107 83.4668, 172.868 83.3119, 176.409 83.1294, 179.768 82.9261, 180 82.90935346912795, 180 90, -180 90, -180 82.90935346912795, -177.09 82.6993, -174.112 82.4387, -171.356 82.1771, -168.826 81.8915, -166.413 81.5862, -164.187 81.2727, -162.124 80.9494, -160.207 80.6132, -158.378 80.271, -156.704 79.911, -155.155 79.5456, -153.715 79.1749, -152.364 78.797, -151.091 78.4225, -149.916 78.0337, -148.797 77.6345, -147.746 77.2423, -146.768 76.845, -145.838 76.4404, -144.979 76.034, -144.147 75.6258, -143.843 75.4683, -133.508 76.4059, -121.888 76.8854, -109.902 76.8263, -98.5116 76.2384, -98.4639 76.2441, -98.2252 76.4066, -97.6125 76.8338, -96.9351 77.2695, -96.2223 77.7014, -95.4704 78.1301, -94.67 78.554, -93.7717 78.9733, -92.7923 79.4003, -91.7963 79.8163, -90.6757 80.2289, -89.4578 80.6379, -88.1285 81.0437, -86.6584 81.4456, -85.117 81.8441, -83.3788 82.2296, -81.4475 82.6096, -79.3161 82.9811, -76.958 83.3328, -74.2774 83.6856, -71.3901 84.0125, -68.1774 84.3328, -64.59 84.6283, -60.5631 84.9038, -55.9807 85.139, -51.1282 85.3472, -45.8032 85.5231, -40.1262 85.6577, -34.1967 85.7497, -28.0603 85.8022, -21.787 85.7844, -21.7786 85.793, -14.5003 88.3719, 133.773 88.9159, 146.77 86.3469, 148.66 83.7852))
  ```

  View the output in Leaflet:
  ![Leaflet display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_8.png)
  View the output in MapBox (https://geojson.io)
  ![MapBox 2D display](https://gitlab.com/be-prototypes/geofootprint-prototype/-/raw/main/img/img_9.png)
  ![MapBox 3D display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_12.png)
  View the output in OpenLayer:
  ![OpenLayer Display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_10.png)
  View the output int Cesium
  ![Cesium display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_11.png)


  A more complex footprint that includes overlapping can be retrieved from Sentinel-3 SLSTR products with name `S3A_SL_2_WST____20240224T211727_20240224T225826_20240226T033733_6059_109_228______MAR_O_NT_003.SEN3` also available in catalog [following this odata link](https://catalogue.dataspace.copernicus.eu/odata/v1/Products(67a2b237-50dc-4967-98ce-bad0fbc04ad3))
  ![img_10.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_23.png)


  ```python
  from shapely import wkt
  from footprint_facility import rework_to_polygon_geometry

  wkt_geometry='POLYGON ((75.4813 -72.4831, 75.4641 -72.9385, 75.4825 -73.3926, 75.4667 -73.8533, 75.4859 -74.3095, 75.4892 -74.7668, 75.4863 -75.2255, 75.4766 -75.688, 75.5071 -76.138, 75.4855 -76.5976, 75.4994 -77.0502, 75.4912 -77.5039, 75.4804 -77.9674, 75.5255 -78.4229, 75.506 -78.8781, 75.5216 -79.339, 75.5372 -79.7913, 75.5373 -80.2465, 75.5329 -80.7048, 75.5299 -81.1598, 75.5171 -81.623, 75.5639 -82.078, 75.5458 -82.5362, 75.5075 -82.9892, 75.5671 -83.4508, 75.594 -83.9015, 75.5601 -84.3631, 75.5772 -84.8172, 75.5759 -85.2729, 75.6882 -85.7284, 75.6155 -85.8996, 99.0441 -85.5436, 123.827 -83.9119, 136.984 -81.6753, 144.524 -79.2029, 149.351 -76.6243, 152.729 -73.9903, 155.254 -71.3237, 157.243 -68.6363, 158.872 -65.9344, 160.25 -63.2219, 161.447 -60.5012, 162.509 -57.7739, 163.467 -55.0411, 164.345 -52.3034, 165.16 -49.5614, 165.925 -46.8156, 166.65 -44.0663, 167.342 -41.3137, 168.008 -38.558, 168.652 -35.7995, 169.279 -33.0384, 169.893 -30.2748, 170.495 -27.5089, 171.09 -24.741, 171.679 -21.9712, 172.265 -19.1997, 172.849 -16.4268, 173.433 -13.6528, 174.019 -10.8778, 174.61 -8.10221, 175.205 -5.32624, 175.808 -2.55022, 176.42 0.225521, 177.043 3.00064, 177.679 5.77478, 178.33 8.54753, 178.999 11.3185, 179.688 14.0872, -179.6 16.8532, -178.861 19.6159, -178.092 22.3748, -177.288 25.1292, -176.444 27.8785, -175.554 30.6218, -174.611 33.3581, -173.607 36.0865, -172.531 38.8056, -171.373 41.5139, -170.116 44.2097, -168.743 46.8906, -167.231 49.5539, -165.552 52.1959, -163.669 54.8122, -161.536 57.3968, -159.092 59.9417, -156.259 62.4363, -152.931 64.8659, -148.97 67.21, -144.196 69.4397, -138.378 71.514, -131.251 73.3747, -122.56 74.9431, -112.195 76.1196, -100.397 76.7995, -87.8992 76.9054, -75.7446 76.4234, -64.8174 75.4121, -55.5302 73.9711, -47.8722 72.2041, -41.6199 70.1983, -36.5031 68.0184, -32.2759 65.7113, -28.7407 63.3095, -25.7211 60.8146, -23.1527 58.2859, -20.9197 55.7142, -18.956 53.1084, -17.2107 50.4749, -15.6443 47.8187, -14.2259 45.1438, -12.931 42.4532, -11.7401 39.7492, -10.6373 37.0339, -9.60971 34.3089, -8.64659 31.5754, -7.73911 28.8348, -6.87981 26.0878, -6.06243 23.3354, -5.28156 20.5783, -4.53257 17.8171, -3.81149 15.0525, -3.11477 12.285, -2.43933 9.51511, -1.78241 6.74326, -1.14151 3.9699, -0.51437 1.19541, 0.101093 -1.57983, 0.706828 -4.35545, 1.30468 -7.13115, 1.89642 -9.90659, 2.48378 -12.6815, 3.0685 -15.4556, 3.65232 -18.2286, 4.23706 -21.0002, 4.82464 -23.7704, 5.41711 -26.5387, 6.01674 -29.305, 6.62603 -32.0692, 7.24788 -34.831, 7.88562 -37.5902, 8.54317 -40.3466, 9.22526 -43.1001, 9.93764 -45.8504, 10.6874 -48.5973, 11.4837 -51.3405, 12.3381 -54.0796, 13.266 -56.8141, 14.2879 -59.5433, 15.4325 -62.2664, 16.7404 -64.9819, 18.2714 -67.6878, 20.1175 -70.3808, 22.4275 -73.0557, 25.456 -75.7029, 29.6757 -78.3048, 36.0471 -80.8235, 46.7204 -83.1675, 66.5853 -85.0811, 100.702 -85.909, 100.825 -85.9, 100.8 -85.7265, 100.836 -85.2741, 100.835 -84.8184, 100.817 -84.3644, 100.753 -83.9016, 100.799 -83.4425, 100.759 -82.9905, 100.797 -82.5372, 100.743 -82.0785, 100.767 -81.6235, 100.78 -81.16, 100.732 -80.7044, 100.74 -80.2457, 100.733 -79.7918, 100.719 -79.34, 100.758 -78.8787, 100.726 -78.4261, 100.732 -77.9704, 100.741 -77.5078, 100.718 -77.0519, 100.734 -76.5887, 100.728 -76.1405, 100.756 -75.6831, 100.71 -75.2283, 100.717 -74.7686, 100.712 -74.3119, 100.75 -73.8494, 100.706 -73.4005, 100.75 -72.9462, 100.719 -72.4834, 100.689 -72.4834, 91.3873 -72.2634, 82.4869 -71.616, 74.3385 -70.5836, 67.1017 -69.2238, 60.7981 -67.5957, 55.3608 -65.7531, 50.6834 -63.7411, 46.6526 -61.5953, 43.1618 -59.3436, 40.1192 -57.0075, 37.4483 -54.6035, 35.086 -52.1444, 32.9811 -49.64, 31.0922 -47.0982, 29.3854 -44.5249, 27.8333 -41.9253, 26.4133 -39.3032, 25.1067 -36.6619, 23.8983 -34.0041, 22.7752 -31.332, 21.7265 -28.6474, 20.7433 -25.952, 19.8177 -23.2472, 18.9432 -20.5341, 18.1142 -17.8139, 17.3258 -15.0873, 16.5739 -12.3553, 15.8547 -9.61856, 15.165 -6.8778, 14.5022 -4.13359, 13.8636 -1.38652, 13.2472 1.36292, 12.6511 4.11426, 12.0734 6.86705, 11.5129 9.62091, 10.968 12.3755, 10.4375 15.1304, 9.92058 17.8853, 9.41609 20.64, 8.92326 23.3942, 8.44135 26.1477, 7.96971 28.9002, 7.5078 31.6517, 7.05516 34.4018, 6.61142 37.1506, 6.17631 39.8979, 5.74967 42.6435, 5.33147 45.3876, 4.92181 48.1299, 4.521 50.8705, 4.12959 53.6094, 3.74844 56.3466, 3.37891 59.0822, 3.02299 61.8161, 2.68373 64.5486, 2.36316 67.3032, 2.07425 70.0328, 1.82645 72.7612, 1.64156 75.4883, 1.56185 78.2142, 1.68051 80.9387, 2.25149 83.6613, 4.29171 86.3786, 20.3724 89.0493, 166.781 88.1169, 172.888 85.413, 174.157 82.693, 174.516 79.9695, 174.547 77.2444, 174.423 74.518, 174.213 71.7903, 173.948 69.0614, 173.648 66.3312, 173.322 63.5996, 172.977 60.8664, 172.616 58.1317, 172.242 55.3954, 171.857 52.6574, 171.462 49.9177, 171.058 47.1763, 170.646 44.4331, 170.224 41.6883, 169.795 38.9418, 169.357 36.1937, 168.91 33.4442, 168.454 30.6933, 167.989 27.9411, 167.514 25.1879, 167.028 22.4339, 166.531 19.6791, 166.022 16.924, 165.501 14.1687, 164.965 11.4136, 164.415 8.65892, 163.849 5.90507, 163.265 3.15242, 162.661 0.401369, 162.038 -2.34762, 161.391 -5.09407, 160.719 -7.83745, 160.019 -10.5772, 159.289 -13.3126, 158.524 -16.0431, 157.722 -18.7679, 156.878 -21.486, 155.986 -24.1966, 155.041 -26.8985, 154.035 -29.5905, 152.962 -32.2711, 151.81 -34.9387, 150.568 -37.5912, 149.224 -40.2263, 147.759 -42.841, 146.156 -45.4321, 144.388 -47.995, 142.428 -50.5246, 140.237 -53.0142, 137.773 -55.4553, 134.979 -57.8371, 131.788 -60.1457, 128.119 -62.3629, 123.873 -64.4652, 118.942 -66.4222, 113.21 -68.1949, 106.583 -69.7353, 99.0172 -70.9868, 90.5777 -71.8897, 81.482 -72.3907, 75.4813 -72.4831))'
  geometry = wkt.loads(wkt_geometry)
  reworked = rework_to_polygon_geometry(geometry)

  print(reworked)
  ```

  returns

  ```
  POLYGON ((75.58244101140099 -85.29943099459616, 66.5853 -85.0811, 46.7204 -83.1675, 36.0471 -80.8235, 29.6757 -78.3048, 25.456 -75.7029, 22.4275 -73.0557, 20.1175 -70.3808, 18.2714 -67.6878, 16.7404 -64.9819, 15.4325 -62.2664, 14.2879 -59.5433, 13.266 -56.8141, 12.3381 -54.0796, 11.4837 -51.3405, 10.6874 -48.5973, 9.93764 -45.8504, 9.22526 -43.1001, 8.54317 -40.3466, 7.88562 -37.5902, 7.24788 -34.831, 6.62603 -32.0692, 6.01674 -29.305, 5.41711 -26.5387, 4.82464 -23.7704, 4.23706 -21.0002, 3.65232 -18.2286, 3.0685 -15.4556, 2.48378 -12.6815, 1.89642 -9.90659, 1.30468 -7.13115, 0.706828 -4.35545, 0.101093 -1.57983, -0.51437 1.19541, -1.14151 3.9699, -1.78241 6.74326, -2.43933 9.51511, -3.11477 12.285, -3.81149 15.0525, -4.53257 17.8171, -5.28156 20.5783, -6.06243 23.3354, -6.87981 26.0878, -7.73911 28.8348, -8.64659 31.5754, -9.60971 34.3089, -10.6373 37.0339, -11.7401 39.7492, -12.931 42.4532, -14.2259 45.1438, -15.6443 47.8187, -17.2107 50.4749, -18.956 53.1084, -20.9197 55.7142, -23.1527 58.2859, -25.7211 60.8146, -28.7407 63.3095, -32.2759 65.7113, -36.5031 68.0184, -41.6199 70.1983, -47.8722 72.2041, -55.5302 73.9711, -64.8174 75.4121, -75.7446 76.4234, -87.8992 76.9054, -100.397 76.7995, -112.195 76.1196, -122.56 74.9431, -131.251 73.3747, -138.378 71.514, -144.196 69.4397, -148.97 67.21, -152.931 64.8659, -156.259 62.4363, -159.092 59.9417, -161.536 57.3968, -163.669 54.8122, -165.552 52.1959, -167.231 49.5539, -168.743 46.8906, -170.116 44.2097, -171.373 41.5139, -172.531 38.8056, -173.607 36.0865, -174.611 33.3581, -175.554 30.6218, -176.444 27.8785, -177.288 25.1292, -178.092 22.3748, -178.861 19.6159, -179.6 16.8532, -180 15.299267415730355, -180 90, 180 90, 180 15.299267415730355, 179.688 14.0872, 178.999 11.3185, 178.33 8.54753, 177.679 5.77478, 177.043 3.00064, 176.42 0.225521, 175.808 -2.55022, 175.205 -5.32624, 174.61 -8.10221, 174.019 -10.8778, 173.433 -13.6528, 172.849 -16.4268, 172.265 -19.1997, 171.679 -21.9712, 171.09 -24.741, 170.495 -27.5089, 169.893 -30.2748, 169.279 -33.0384, 168.652 -35.7995, 168.008 -38.558, 167.342 -41.3137, 166.65 -44.0663, 165.925 -46.8156, 165.16 -49.5614, 164.345 -52.3034, 163.467 -55.0411, 162.509 -57.7739, 161.447 -60.5012, 160.25 -63.2219, 158.872 -65.9344, 157.243 -68.6363, 155.254 -71.3237, 152.729 -73.9903, 149.351 -76.6243, 144.524 -79.2029, 136.984 -81.6753, 123.827 -83.9119, 100.82387906202558 -85.42641978721186, 100.8 -85.7265, 100.825 -85.9, 100.702 -85.909, 90.8040265674998 -85.66880876800023, 75.6155 -85.8996, 75.6882 -85.7284, 75.58244101140099 -85.29943099459616), (88.11476108761217 -72.02536107007776, 90.5777 -71.8897, 99.0172 -70.9868, 106.583 -69.7353, 113.21 -68.1949, 118.942 -66.4222, 123.873 -64.4652, 128.119 -62.3629, 131.788 -60.1457, 134.979 -57.8371, 137.773 -55.4553, 140.237 -53.0142, 142.428 -50.5246, 144.388 -47.995, 146.156 -45.4321, 147.759 -42.841, 149.224 -40.2263, 150.568 -37.5912, 151.81 -34.9387, 152.962 -32.2711, 154.035 -29.5905, 155.041 -26.8985, 155.986 -24.1966, 156.878 -21.486, 157.722 -18.7679, 158.524 -16.0431, 159.289 -13.3126, 160.019 -10.5772, 160.719 -7.83745, 161.391 -5.09407, 162.038 -2.34762, 162.661 0.401369, 163.265 3.15242, 163.849 5.90507, 164.415 8.65892, 164.965 11.4136, 165.501 14.1687, 166.022 16.924, 166.531 19.6791, 167.028 22.4339, 167.514 25.1879, 167.989 27.9411, 168.454 30.6933, 168.91 33.4442, 169.357 36.1937, 169.795 38.9418, 170.224 41.6883, 170.646 44.4331, 171.058 47.1763, 171.462 49.9177, 171.857 52.6574, 172.242 55.3954, 172.616 58.1317, 172.977 60.8664, 173.322 63.5996, 173.648 66.3312, 173.948 69.0614, 174.213 71.7903, 174.423 74.518, 174.547 77.2444, 174.516 79.9695, 174.157 82.693, 172.888 85.413, 166.781 88.1169, 20.3724 89.0493, 4.29171 86.3786, 2.25149 83.6613, 1.68051 80.9387, 1.56185 78.2142, 1.64156 75.4883, 1.82645 72.7612, 2.07425 70.0328, 2.36316 67.3032, 2.68373 64.5486, 3.02299 61.8161, 3.37891 59.0822, 3.74844 56.3466, 4.12959 53.6094, 4.521 50.8705, 4.92181 48.1299, 5.33147 45.3876, 5.74967 42.6435, 6.17631 39.8979, 6.61142 37.1506, 7.05516 34.4018, 7.5078 31.6517, 7.96971 28.9002, 8.44135 26.1477, 8.92326 23.3942, 9.41609 20.64, 9.92058 17.8853, 10.4375 15.1304, 10.968 12.3755, 11.5129 9.62091, 12.0734 6.86705, 12.6511 4.11426, 13.2472 1.36292, 13.8636 -1.38652, 14.5022 -4.13359, 15.165 -6.8778, 15.8547 -9.61856, 16.5739 -12.3553, 17.3258 -15.0873, 18.1142 -17.8139, 18.9432 -20.5341, 19.8177 -23.2472, 20.7433 -25.952, 21.7265 -28.6474, 22.7752 -31.332, 23.8983 -34.0041, 25.1067 -36.6619, 26.4133 -39.3032, 27.8333 -41.9253, 29.3854 -44.5249, 31.0922 -47.0982, 32.9811 -49.64, 35.086 -52.1444, 37.4483 -54.6035, 40.1192 -57.0075, 43.1618 -59.3436, 46.6526 -61.5953, 50.6834 -63.7411, 55.3608 -65.7531, 60.7981 -67.5957, 67.1017 -69.2238, 74.3385 -70.5836, 82.4869 -71.616, 88.11476108761217 -72.02536107007776))
  ```
  View the output in Leaflet:
  ![Leaflet display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_14.png)

  View the output in MapBox (https://geojson.io):
  ![MapBox 2D display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_4.png)
  ![MapBox 3D display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_13.png)

  View the output in OpenLayer:
  ![OpenLayer Display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_15.png)

  View the output in Cesium
  ![Cesium display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_16.png)



  The ```rework_to_linestring_geometry(geometry: Geometry) -> Geometry``` elaborates more or less complex linestring geometry from thin polygon and manage the antimeridian cross. For example, the product named
  `S3A_SR_2_LAN_LI_20240302T235923_20240303T001845_20240304T182116_1161_109_330______PS1_O_ST_005` is available in catalog and can be accessed [by following this odata link](https://catalogue.dataspace.copernicus.eu/odata/v1/Products(1a50ce1b-f630-46a5-917b-b35d1b265db1))
  ![img_11.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_24.png)

  ```python
  from shapely import wkt
  from footprint_facility import rework_to_linestring_geometry

  wkt_geometry='POLYGON ((-44.6919 59.6012, -45.9328 61.3301, -47.303 63.0483, -48.8281 64.7538, -50.5403 66.4439, -52.4808 68.1153, -54.7026 69.7634, -57.2749 71.3821, -60.2887 72.9632, -63.8633 74.4954, -68.1552 75.9627, -73.3645 77.3427, -79.7337 78.6037, -87.5189 79.7021, -96.9041 80.5808, -107.835 81.1742, -119.831 81.4228, -131.996 81.2971, -143.357 80.8124, -153.278 80.0208, -161.581 78.9883, -168.392 77.7757, -173.958 76.431, -178.529 74.9898, 177.678 73.477, 174.493 71.9106, 171.786 70.3033, 169.456 68.6641, 167.429 66.9998, 165.646 65.3154, 164.063 63.6146, 162.645 61.9002, 161.363 60.1746, 160.197 58.4395, 159.129 56.6962, 158.144 54.946, 157.23 53.1896, 156.378 51.4279, 155.579 49.6615, 155.582 49.661, 156.38 51.4274, 157.233 53.1891, 158.146 54.9454, 159.132 56.6957, 160.201 58.4389, 161.367 60.174, 162.648 61.8996, 164.067 63.6139, 165.65 65.3147, 167.433 66.9991, 169.461 68.6633, 171.79 70.3024, 174.498 71.9097, 177.683 73.4761, -178.524 74.9887, -173.952 76.4299, -168.386 77.7744, -161.575 78.9869, -153.273 80.0193, -143.353 80.8107, -131.994 81.2953, -119.831 81.421, -107.837 81.1725, -96.9086 80.5792, -87.5244 79.7006, -79.7396 78.6023, -73.3705 77.3414, -68.1609 75.9616, -63.8688 74.4944, -60.2939 72.9623, -57.2799 71.3812, -54.7072 69.7626, -52.4851 68.1145, -50.5444 66.4432, -48.832 64.7531, -47.3067 63.0476, -45.9363 61.3295, -44.6952 59.6006, -44.6919 59.6012))'
  geometry = wkt.loads(wkt_geometry)
  reworked = rework_to_linestring_geometry(geometry)

  print(reworked)
  ```

  results the following multilinestring geometry:
  ```
  MULTILINESTRING ((-180 74.40789473684211, -178.5 75, -174 76.4, -168.4 77.8, -161.6 79, -153.3 80, -143.4 80.8, -132 81.3, -119.8 81.4, -107.8 81.2, -96.9 80.6, -87.5 79.7, -79.7 78.6, -73.4 77.3, -68.2 76, -63.9 74.5, -60.3 73, -57.3 71.4, -54.7 69.8, -52.5 68.1, -50.5 66.4, -48.8 64.8, -47.3 63, -45.9 61.3, -44.7 59.6), (155.6 49.7, 156.4 51.4, 157.2 53.2, 158.1 54.9, 159.1 56.7, 160.2 58.4, 161.4 60.2, 162.6 61.9, 164.1 63.6, 165.6 65.3, 167.4 67, 169.5 68.7, 171.8 70.3, 174.5 71.9, 177.7 73.5, 180 74.40789473684211))
  ```
  View the output in Leaflet:
  ![Leaflet display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_3.png)

  View the output in MapBox (https://geojson.io):
  ![MapBox 2D display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_2.png)
  ![MapBox 3D display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_18.png)

  View the output in OpenLayer:
  ![OpenLayer Display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_19.png)

  View the output in Cesium
  ![Cesium display](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_20.png)



  The ```check_cross_antimeridian(geometry: Geometry) -> bool``` method checks if the footprint pass over the antimeridian. The recognition of the antimeridian line is based on array list single comparison and can be considered fast.
  ```python
  from shapely import wkt
  from footprint_facility import check_cross_antimeridian

  wkt_geometry='POLYGON((175.812988 -70.711365,-175.61055 -68.469902,-172.383392 -69.75074,178.803558 -72.136864,175.812988 -70.711365))'

  geometry = wkt.loads(wkt_geometry)
  print(check_cross_antimeridian(geometry))
  ```
  returns

  ```python
  True
  ```

  The ```to_geojson(geometry: Geometry) -> str``` returns a geojson formatted string of the given geometry.
  ```python
  from shapely import wkt
  from footprint_facility import to_geojson, rework_to_polygon_geometry

  wkt_geometry='POLYGON((175.812988 -70.711365,-175.61055 -68.469902,-172.383392 -69.75074,178.803558 -72.136864,175.812988 -70.711365))'

  geometry = wkt.loads(wkt_geometry)
  print(to_geojson(rework_to_polygon_geometry(geometry)))
  ```
  returns

  ```json
  {
    "features": [
      {
        "geometry": {
          "coordinates": [
            [
              [
                [
                  -180,
                  -69.617087
                ],
                [
                  -175.61055,
                  -68.469902
                ],
                [
                  -172.383392,
                  -69.75074
                ],
                [
                  -180,
                  -71.812929
                ],
                [
                  -180,
                  -69.617087
                ]
              ]
            ],
            [
              [
                [
                  175.812988,
                  -70.711365
                ],
                [
                  180,
                  -69.617087
                ],
                [
                  180,
                  -71.812929
                ],
                [
                  178.803558,
                  -72.136864
                ],
                [
                  175.812988,
                  -70.711365
                ]
              ]
            ]
          ],
          "type": "MultiPolygon"
        },
        "id": "15943947-67bd-4515-87c5-454fdc23db2e",
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  }
  ```

  The ```to_wkt(geometry: Geometry) -> str``` returns a WKT formatted string of the given geometry.
  ```python
  from shapely import wkt
  from footprint_facility import to_wkt, rework_to_polygon_geometry

  wkt_geometry='POLYGON((175.812988 -70.711365,-175.61055 -68.469902,-172.383392 -69.75074,178.803558 -72.136864,175.812988 -70.711365))'

  geometry = wkt.loads(wkt_geometry)
  print(to_wkt(rework_to_polygon_geometry(geometry)))
  ```
  returns

  ```python
  MULTIPOLYGON (
     ((-180 -69.61708714060345, -175.61055 -68.469902, -172.383392 -69.75074, -180 -71.81292858935237, -180 -69.61708714060345)),
     ((175.812988 -70.711365, 180 -69.61708714060345, 180 -71.81292858935237, 178.803558 -72.136864, 175.812988 -70.711365)))
  ```

  Products such as "S3 Synergy" contains up to 290 points whereas they footprints are single rectangles. Others huge along track acquisition also contains greate number of coordinates. The footprint containing many points could be simplify improve indexing and display services.
  This facility module decorates 2 identified algorithms to simplify these footprints:
  - Douglas–Peucker algorithm that is implemented into the shapely geometry library wrapped here as `footprint_facility.simplify`.
  - Convex hull algorithm can be used to reduce de number of points assembly footprint with many polygons. The algorithm is also already implemented in the shapely library.


  The Douglas-Peucker algorithm is an algorithm that decimates a curve composed of line segments to a similar curve with fewer points. It was one of the earliest successful algorithms developed for cartographic generalization.
  The purpose of the algorithm is, given a curve composed of line segments, to find a similar curve with fewer points. The algorithm defines 'dissimilar' based on the maximum distance between the original curve and the simplified curve. The simplified curve consists of a subset of the points that defined the original curve.
  The shapely library used in the footprint_facility module implements this algorithm of simplification. The definition of the distance to be used for the simplification shall be carefully defined to minimize the surface change.

  This later distance is also called tolerance. It is expressed in the unit of geometry (degrees for our footprints). As the size of degrees varies according to the latitude of the points, the choice of the tolerance is not trivial to define wrt the footprint is localised closed to the polar areas or the equator. To simplify this inaccuracy, version 1.7 of the library introduces the possibility to specify the tolerance in metres thanks to the `tolerance_in_metre` flag.

  Code simplification snippet
  ```python
  from footprint_facility import rework_to_polygon_geometry, to_geojson, simplify

  geometry = rework_to_polygon_geometry(origin_geometry)
  geojson = to_geojson(simplify(geometry, tolerance=0.4, tolerance_in_meter=False))

  print(geojson)
  ```

  ![img.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_25.png)
  We observe the algorithm is quite efficient and reduced the larger the number of points between tolerance set between 0.005 and 0.5:

  ![img_1.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_26.png)
  The variation of the surface regarding reduction of the number of point is not significant.



  When the footprint crosses antimeridian or pass other the poles, the polygon is not anymore properly supported by the algortihm. it is recommended to systematically manage rework of polygon before performing the simplification.

  Example of Footprints crossing antimeridian and pole. The Douglas-Peucker algorithm properly manages this use case when antimeridian case has been previously handled. The pole area (polar inclusion solution) is also well supported:

  ![img_2.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_27.png)

  The Use case of single footprint crossing antimeridian managed as multi-polygon are also well supported:
  ![img_3.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_28.png)

  Sentinel-3 Synergy Data sets identified in the footprint category can be simplified:
  ![img_4.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_29.png)
  Here, the 295 points are well aligned and a distance 0 properly simplifies the polygon.



  The convex hull is the smallest convex polygon that encloses all points of a geometry. The Sentinel-1 wave-mode images are organized in a list of polygons, and the previously analyzed "Douglas-Peucker" optimization cannot be considered efficient enough to simplify them. The following scheme shows the convex hull (in purple) simplifying the wave-mode images of the set of polygons (in yellow) into a single enclosed polygon.

  ![img_5.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_30.png)
  The curvature of the Earth is visible using an algorithm that considers coordinates in a Euclidean reference frame. The algorithm will be improved to support spherical coordinates, but the 2D convex hull used here reduces the number of points by 90%. The convex hull created an envelope that contains all the points of the wave mode without fitting the entire huge envelope (green shape): This algorithm remains a good solution for reducing the number of points to optimize indexing systems.


  When using the convex hull algorithm with a footprint that crosses the antimeridian, it must be managed before applying the implementation. In the following scheme, the antimeridian is materialized in red and the footprint hull is spread on each side of the red line:

  ![img_6.png](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/img_31.png)

  Code snippet to manage the footprint
  ```python
  import shapely
  from footprint_facility import rework_to_polygon_geometry, to_geojson

  geometry = rework_to_polygon_geometry(origin_geometry)


  west_geometry = geometry.intersection(shapely.box(-180, -90, 0, 90))
  east_geometry = geometry.intersection(shapely.box(0, -90, 180, 90))

  convex_hull = shapely.MultiPolygon([east_geometry.convex_hull, west_geometry.convex_hull])
  print (to_geojson(convex_hull))
  ```

  Starting from version 1.5, the distribution comes with a tool dedicated to help analysing the discrepancies introduced by the optimizations. It loads a footprint in WKT or GeoJSON format, and apply an optimization to make a before/after comparison and identify added and removed section into the footprints.

  ```commandline
  fpstat --help
  usage: fpstat [-h] -f orig_footprint [-ff {wkt,geojson}] [-o output] [-r]
                [-p precision] [-a {simplify,convex_hull}] [-t tolerance] [-m]

  compare footprint optimization results

  options:
    -h, --help            show this help message and exit
    -f orig_footprint     the footprint to be optimized
    -ff {wkt,geojson}     passed footprint format (default=wkt)
    -o output             output file name of the results. The output format is selected
                          according to the file extension, if ".htm." HTML interactive
                          map is generated, otherwise results are returned in GeoJSON
                          format
    -r                    rework the footprint before optimization
    -p precision          defines the optimized/reworked footprint precision (default=0
                          no precision defined).
    -a {simplify,convex_hull}
                          selection of the footprint simplification algorithm
    -t tolerance          the simplify tolerance value
    -m                    the tolerance unit is in meter. Overwise no unit conversion is
                          performed from the geometry input (usually degrees)
  ```

  Usage example with the [polygon crossing antimeridian](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/polygon.wkt)

  ```commandline
  fpstat -o output.html -r -f "$(cat polygon.wkt)" -t 1.0
  ```
  When providing `-o filename`, a GeoJSON file is generated with 4 main features:
   - the original geometry, with area in m<sup>2</sup> and its number of points in properties.
   - the reworked geometry, with its area in m<sup>2</sup>, its reduced number of points, and the selected tolerance in properties.
   - If exists, the geometry of the area added by the optimization and its area in m<sup>2</sup>
   - If exists, the geometry of the area removed by the optimization and its area in m<sup>2</sup>
  ```json
  {
    "type": "FeatureCollection",
    "features":
       [{"type": "Feature",
         "id": "0",
         "geometry":
         {
           "type": "MultiPolygon",
           "coordinates": [[[[106.44, -71.4926], [107.179, -72.1035], [107.92, -72.6785], [108.711, -73.2507], [109.555, -73.8191], [110.46, -74.3847], [111.428, -74.9449], [112.471, -75.5014], [113.595, -76.0528], [114.808, -76.5984], [116.121, -77.1376], [117.547, -77.6698], [119.098, -78.1939], [120.79, -78.7088], [122.641, -79.2133], [124.668, -79.7059], [126.895, -80.1846], [129.344, -80.6474], [132.042, -81.0921], [135.065, -81.5223], [141.004, -80.3652], [146.557, -78.8572], [150.818, -77.2759], [154.178, -75.6455], [156.895, -73.9811], [159.142, -72.2919], [161.038, -70.5835], [162.666, -68.8619], [164.084, -67.1292], [165.336, -65.3872], [166.457, -63.6378], [167.466, -61.8825], [168.387, -60.1222], [169.233, -58.3574], [170.016, -56.5887], [170.746, -54.8167], [171.43, -53.0416], [172.075, -51.2638], [172.686, -49.4835], [173.268, -47.701], [173.825, -45.9162], [174.359, -44.1293], [174.873, -42.3412], [175.37, -40.5512], [175.852, -38.7588], [176.32, -36.9658], [176.777, -35.171], [177.223, -33.3749], [177.66, -31.5775], [178.088, -29.779], [178.51, -27.9793], [178.925, -26.1785], [179.336, -24.3769], [179.741, -22.5742], [180.0, -21.411921], [180.0, 39.74572], [179.927, 39.2897], [179.637, 37.5022], [179.344, 35.714], [179.048, 33.9253], [178.749, 32.136], [178.446, 30.3462], [178.139, 28.5557], [177.829, 26.7649], [177.515, 24.9732], [177.197, 23.1829], [176.874, 21.3902], [176.547, 19.5975], [176.215, 17.8055], [175.878, 16.0132], [175.535, 14.2207], [175.187, 12.428], [174.833, 10.6359], [174.473, 8.84373], [174.107, 7.05198], [173.733, 5.26056], [173.352, 3.46961], [172.963, 1.67973], [172.566, -0.109789], [172.16, -1.89834], [171.745, -3.68586], [171.319, -5.47231], [170.884, -7.25724], [170.437, -9.04089], [169.978, -10.8229], [169.506, -12.603], [169.02, -14.3815], [168.519, -16.1574], [168.003, -17.93], [167.47, -19.7018], [166.918, -21.4703], [166.347, -23.2349], [165.754, -24.9965], [165.138, -26.7543], [164.497, -28.508], [163.829, -30.2574], [163.132, -32.0018], [162.402, -33.7409], [161.637, -35.4739], [160.834, -37.2011], [159.989, -38.9207], [159.097, -40.6325], [158.153, -42.336], [157.154, -44.0299], [156.091, -45.7131], [154.959, -47.3846], [153.749, -49.0427], [152.452, -50.686], [151.058, -52.3129], [149.555, -53.9205], [147.93, -55.5066], [146.165, -57.068], [144.245, -58.6014], [142.146, -60.1027], [139.848, -61.5663], [137.324, -62.9855], [134.544, -64.3539], [131.476, -65.6648], [128.089, -66.9054], [124.351, -68.0648], [120.232, -69.1303], [115.711, -70.0864], [110.785, -70.9165], [106.44, -71.4926]]], [[[-180.0, -21.411921], [-179.857, -20.7702], [-179.458, -18.9665], [-179.062, -17.1616], [-178.668, -15.3557], [-178.275, -13.5496], [-177.883, -11.7429], [-177.492, -9.93579], [-177.1, -8.12844], [-176.707, -6.32075], [-176.313, -4.51289], [-175.917, -2.70497], [-175.519, -0.897023], [-175.118, 0.910718], [-174.714, 2.71852], [-174.306, 4.52588], [-173.893, 6.33294], [-173.476, 8.13948], [-173.052, 9.9454], [-172.623, 11.7509], [-172.185, 13.5553], [-171.741, 15.3589], [-171.287, 17.1613], [-170.824, 18.9629], [-170.351, 20.7634], [-169.865, 22.5615], [-169.367, 24.3589], [-168.855, 26.1542], [-168.328, 27.9478], [-167.783, 29.7392], [-167.22, 31.5282], [-166.637, 33.3148], [-166.031, 35.0986], [-165.4, 36.8793], [-164.741, 38.6567], [-164.052, 40.4305], [-163.328, 42.2001], [-162.565, 43.9653], [-161.76, 45.7255], [-160.907, 47.4802], [-160.0, 49.2286], [-159.03, 50.9696], [-157.991, 52.7036], [-156.872, 54.4279], [-155.661, 56.142], [-154.344, 57.8444], [-152.904, 59.5326], [-151.322, 61.2048], [-149.571, 62.859], [-147.622, 64.4891], [-145.437, 66.0924], [-142.972, 67.6634], [-140.171, 69.1934], [-141.62, 69.545], [-143.114, 69.8836], [-144.657, 70.2092], [-146.248, 70.5213], [-147.888, 70.819], [-149.577, 71.1018], [-151.313, 71.3688], [-153.097, 71.6194], [-154.927, 71.853], [-156.8, 72.0689], [-158.716, 72.2664], [-160.672, 72.445], [-162.665, 72.6038], [-164.69, 72.7427], [-166.745, 72.8609], [-168.826, 72.9582], [-170.927, 73.034], [-173.043, 73.0882], [-175.171, 73.1193], [-175.385, 71.3448], [-175.609, 69.5687], [-175.841, 67.7931], [-176.08, 66.0178], [-176.322, 64.2393], [-176.569, 62.4618], [-176.821, 60.6838], [-177.076, 58.9046], [-177.334, 57.1252], [-177.596, 55.3449], [-177.859, 53.5635], [-178.127, 51.7821], [-178.397, 49.9996], [-178.669, 48.2164], [-178.944, 46.4324], [-179.222, 44.6478], [-179.503, 42.8624], [-179.787, 41.0763], [-180.0, 39.74572], [-180.0, -21.411921]]]]
         },
         "properties":
         {
           "name": "Origin",
           "point no": 216,
           "area_in_m": 23008319024088.113,
           "area": "23008319.02 km<sup>2"
         }
       },{
         "type": "Feature",
         "id": "0",
         "geometry": {
           "type": "MultiPolygon",
           "coordinates": [[[[106.44, -71.4926], [117.547, -77.6698], [135.065, -81.5223], [154.178, -75.6455], [165.336, -65.3872], [172.686, -49.4835], [180.0, -21.411921], [180.0, 39.74572], [169.02, -14.3815], [163.132, -32.0018], [156.091, -45.7131], [147.93, -55.5066], [137.324, -62.9855], [124.351, -68.0648], [106.44, -71.4926]]], [[[-180.0, -21.411921], [-170.351, 20.7634], [-162.565, 43.9653], [-152.904, 59.5326], [-140.171, 69.1934], [-156.8, 72.0689], [-175.171, 73.1193], [-180.0, 39.74572], [-180.0, -21.411921]]]]
         },
         "properties": {
           "name": "Optimized",
           "point no": 24,
           "area_in_m": 23947672064379.215,
           "area": "23947672.06 km<sup>2",
           "tolerance": 1.0
         }
       },
         {
           "type": "Feature",
           "id": "0",
           "geometry": {
             "type": "MultiPolygon",
             "coordinates": [[[[180.0, 39.74572], [179.927, 39.2897], [179.637, 37.5022], [179.344, 35.714], [179.048, 33.9253], [178.749, 32.136], [178.446, 30.3462], [178.139, 28.5557], [177.829, 26.7649], [177.515, 24.9732], [177.197, 23.1829], [176.874, 21.3902], [176.547, 19.5975], [176.215, 17.8055], [175.878, 16.0132], [175.535, 14.2207], [175.187, 12.428], [174.833, 10.6359], [174.473, 8.84373], [174.107, 7.05198], [173.733, 5.26056], [173.352, 3.46961], [172.963, 1.67973], [172.566, -0.109789], [172.16, -1.89834], [171.745, -3.68586], [171.319, -5.47231], [170.884, -7.25724], [170.437, -9.04089], [169.978, -10.8229], [169.506, -12.603], [169.02, -14.3815], [180.0, 39.74572]]], [[[169.02, -14.3815], [168.519, -16.1574], [168.003, -17.93], [167.47, -19.7018], [166.918, -21.4703], [166.347, -23.2349], [165.754, -24.9965], [165.138, -26.7543], [164.497, -28.508], [163.829, -30.2574], [163.132, -32.0018], [169.02, -14.3815]]], [[[163.132, -32.0018], [162.402, -33.7409], [161.637, -35.4739], [160.834, -37.2011], [159.989, -38.9207], [159.097, -40.6325], [158.153, -42.336], [157.154, -44.0299], [156.091, -45.7131], [163.132, -32.0018]]], [[[156.091, -45.7131], [154.959, -47.3846], [153.749, -49.0427], [152.452, -50.686], [151.058, -52.3129], [149.555, -53.9205], [147.93, -55.5066], [156.091, -45.7131]]], [[[147.93, -55.5066], [146.165, -57.068], [144.245, -58.6014], [142.146, -60.1027], [139.848, -61.5663], [137.324, -62.9855], [147.93, -55.5066]]], [[[137.324, -62.9855], [134.544, -64.3539], [131.476, -65.6648], [128.089, -66.9054], [124.351, -68.0648], [137.324, -62.9855]]], [[[124.351, -68.0648], [120.232, -69.1303], [115.711, -70.0864], [110.785, -70.9165], [106.44, -71.4926], [124.351, -68.0648]]], [[[-180.0, -21.411921], [-179.857, -20.7702], [-179.458, -18.9665], [-179.062, -17.1616], [-178.668, -15.3557], [-178.275, -13.5496], [-177.883, -11.7429], [-177.492, -9.93579], [-177.1, -8.12844], [-176.707, -6.32075], [-176.313, -4.51289], [-175.917, -2.70497], [-175.519, -0.897023], [-175.118, 0.910718], [-174.714, 2.71852], [-174.306, 4.52588], [-173.893, 6.33294], [-173.476, 8.13948], [-173.052, 9.9454], [-172.623, 11.7509], [-172.185, 13.5553], [-171.741, 15.3589], [-171.287, 17.1613], [-170.824, 18.9629], [-170.351, 20.7634], [-180.0, -21.411921]]], [[[-170.351, 20.7634], [-169.865, 22.5615], [-169.367, 24.3589], [-168.855, 26.1542], [-168.328, 27.9478], [-167.783, 29.7392], [-167.22, 31.5282], [-166.637, 33.3148], [-166.031, 35.0986], [-165.4, 36.8793], [-164.741, 38.6567], [-164.052, 40.4305], [-163.328, 42.2001], [-162.565, 43.9653], [-170.351, 20.7634]]], [[[-162.565, 43.9653], [-161.76, 45.7255], [-160.907, 47.4802], [-160.0, 49.2286], [-159.03, 50.9696], [-157.991, 52.7036], [-156.872, 54.4279], [-155.661, 56.142], [-154.344, 57.8444], [-152.904, 59.5326], [-162.565, 43.9653]]], [[[-152.904, 59.5326], [-151.322, 61.2048], [-149.571, 62.859], [-147.622, 64.4891], [-145.437, 66.0924], [-142.972, 67.6634], [-140.171, 69.1934], [-152.904, 59.5326]]], [[[-175.171, 73.1193], [-175.385, 71.3448], [-175.609, 69.5687], [-175.841, 67.7931], [-176.08, 66.0178], [-176.322, 64.2393], [-176.569, 62.4618], [-176.821, 60.6838], [-177.076, 58.9046], [-177.334, 57.1252], [-177.596, 55.3449], [-177.859, 53.5635], [-178.127, 51.7821], [-178.397, 49.9996], [-178.669, 48.2164], [-178.944, 46.4324], [-179.222, 44.6478], [-179.503, 42.8624], [-179.787, 41.0763], [-180.0, 39.74572], [-175.171, 73.1193]]]]},
           "properties": {
             "name": "Added Part",
             "area_in_m": 864096294971.3123,
             "area": "864096.29 km<sup>2"
           }
         },
         {
           "type": "Feature",
           "id": "0",
           "geometry": {
             "type": "MultiPolygon",
             "coordinates": [[[[116.121, -77.1376], [114.808, -76.5984], [113.595, -76.0528], [112.471, -75.5014], [111.428, -74.9449], [110.46, -74.3847], [109.555, -73.8191], [108.711, -73.2507], [107.92, -72.6785], [107.179, -72.1035], [106.44, -71.4926], [117.547, -77.6698], [116.121, -77.1376]]], [[[132.042, -81.0921], [129.344, -80.6474], [126.895, -80.1846], [124.668, -79.7059], [122.641, -79.2133], [120.79, -78.7088], [119.098, -78.1939], [117.547, -77.6698], [135.065, -81.5223], [132.042, -81.0921]]], [[[150.818, -77.2759], [146.557, -78.8572], [141.004, -80.3652], [135.065, -81.5223], [154.178, -75.6455], [150.818, -77.2759]]], [[[164.084, -67.1292], [162.666, -68.8619], [161.038, -70.5835], [159.142, -72.2919], [156.895, -73.9811], [154.178, -75.6455], [165.336, -65.3872], [164.084, -67.1292]]], [[[172.075, -51.2638], [171.43, -53.0416], [170.746, -54.8167], [170.016, -56.5887], [169.233, -58.3574], [168.387, -60.1222], [167.466, -61.8825], [166.457, -63.6378], [165.336, -65.3872], [172.686, -49.4835], [172.075, -51.2638]]], [[[179.741, -22.5742], [179.336, -24.3769], [178.925, -26.1785], [178.51, -27.9793], [178.088, -29.779], [177.66, -31.5775], [177.223, -33.3749], [176.777, -35.171], [176.32, -36.9658], [175.852, -38.7588], [175.37, -40.5512], [174.873, -42.3412], [174.359, -44.1293], [173.825, -45.9162], [173.268, -47.701], [172.686, -49.4835], [180.0, -21.411921], [179.741, -22.5742]]], [[[-154.927, 71.853], [-153.097, 71.6194], [-151.313, 71.3688], [-149.577, 71.1018], [-147.888, 70.819], [-146.248, 70.5213], [-144.657, 70.2092], [-143.114, 69.8836], [-141.62, 69.545], [-140.171, 69.1934], [-156.8, 72.0689], [-154.927, 71.853]]], [[[-173.043, 73.0882], [-170.927, 73.034], [-168.826, 72.9582], [-166.745, 72.8609], [-164.69, 72.7427], [-162.665, 72.6038], [-160.672, 72.445], [-158.716, 72.2664], [-156.8, 72.0689], [-175.171, 73.1193], [-173.043, 73.0882]]]]},
           "properties": {
             "name": "Removed Part",
             "area_in_m": 75256745319.78705,
             "area": "75256.75 km<sup>2"
           }
         }
       ]
  }
  ```

  When the output file ends with `.html` extension (with `-o` option), the command line generates an interactive map to navigate inside the results. The layer displays both sources and optimized footprints, and when difference exists, it includes dedicated layers to show them. More layers are present to view added and removed area.
  Each trace on map raises a tooltip to see the area of each trace and tne number of points:

  ![sample output](https://gitlab.com/be-prototypes/geofootprint-prototype/raw/main/img/fpstats_sample.png)

  Starting from version 1.7, the tolerance can be provided into meter activating the `-m` parameter flag. The library expects geometries in geographic projection and coordinates are expressed in degrees. When setting the tolerance in meter, the footprint is internally converted in metric projection (Plate Carée global pojection also called Equidistant Cylindrical) to manage the Douglas-Pucker  algorithm in meter based distances. Then, once processed, the geometry is back to latlon to be returned as result.

  Usage [sample](img/polygon.wkt) using 150Km tolerance
  ```commandline
  fpstat -r -o output.json -f "$(cat polygon.wkt)" -t 150000 -m
  ```

  result (coordinates removed):
  ```json
  {
    "type": "FeatureCollection",
    "features": [
      {
        "type": "Feature",
        "id": "0",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
              ...
          ]
        },
        "properties": {
          "name": "Origin",
          "point no": 216,
          "area_in_m": 23008319024088.113,
          "area": "23008319.02 km<sup>2"
        }
      },
      {
        "type": "Feature",
        "id": "0",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
              ...
          ]
        },
        "properties": {
          "name": "Optimized",
          "point no": 22,
          "area_in_m": 23987084887986.29,
          "area": "23987084.89 km<sup>2",
          "tolerance": 150000
        }
      },
      {
        "type": "Feature",
        "id": "0",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
              ...
          ]
        },
        "properties": {
          "name": "Added Part",
          "area_in_m": 903525190763.8513,
          "area": "903525.19 km<sup>2"
        }
      },
      {
        "type": "Feature",
        "id": "0",
        "geometry": {
          "type": "MultiPolygon",
          "coordinates": [
              ...
          ]
        },
        "properties": {
          "name": "Removed Part",
          "area_in_m": 75240673134.3222,
          "area": "75240.67 km<sup>2"
        }
      }
    ]
  }


  ```


  Reducing the number of points in the EO data footprint can have a positive effect by optimizing the display and faster indexing systems. However, it may introduce inaccuracies in these footprints. For example, using the convex hull algorithm on a Sentinel-1 wave mode can reduce the number of points to 90%, the counterpart is the footprint will cover a larger area than the data. The `fpstat` tool provided within the later distributions help to identify these differences.
  The use of the Douglas-Peucker algorithm is also very efficient and according to the tolerance parameter, the simplified result footprint surface may not shift more than 1%. For example, we demonstrate that S3 SYNERGY products can be completely simplified with 0 tolerance without any surface modification. Other products, in particular long footprints with many points along tracks, can also be simplified by controlling the deviations with the tolerance.



  The library can handle footprint precision, reducing the number of decimals composing the geometries.
  By default, not precision is defined, and the geometry decimal number is managed thanks to the input geometries.
  To define the precisions the method `footprint_facility.set_raise_exception(precision: float)`. The precision value shall be greater or equals to 0. 0 means not precision shall be set, then the precision value is the precision grid size.

  example of precision for &#x3C0;= 3.1415926535897...

  | precision | value   |
  |-----------|---------|
  | 0         | &#x3C0; |
  | 1         | 3       |
  | 0.1       | 3.1     |
  | 0.01      | 3.14    |
  | 0.001     | 3.142   |
  | 0.0001    | 3.1416  |
  | 0.00001   | 3.14159 |

  Usage example:
  ```python
  from shapely import wkt
  import footprint_facility
  _wkt = """
      POLYGON((1.1337565834818406  47.53419913245443,
               0.48102854059970923 43.46590619424384,
               5.684268403836398 45.25814101702673,
               7.629303288477502  48.23334218606277,
              1.1337565834818406 47.53419913245443))
      """

  geometry = wkt.loads(_wkt)
  footprint_facility.set_precision(1)
  reworked = footprint_facility.rework_to_polygon_geometry(geometry)

  ```
  The current configured precision can be retrieved with function `footprint_facility.get_raise_exception()`


  The version 1.4 comes with the possibility to not raise errors when
  performing footprint rework. Default exception are active, but thy can easily be deactivated with `footprint_facility.set_raise_exception(False)` method:

  ```python
  corrupted_wkt = ("POLYGON ((34.8393 42, 180 43, 180 90, -180 90, "
                   "-180 43, -178.089 41, 34.8393 42))")

  footprint_facility.set_raise_exception(False)
  rwrk = footprint_facility.rework_to_polygon_geometry(
      wkt.loads(corrupted_wkt))
  ```
  In this case a warning message is logged onto the standard output and the footprint provided in input will be returned without any modification.
  ```
  WARNING:footprint_facility:rework_to_polygon_geometry Cannot manage footprint (Points are aligned onto the antimeridian)
  ```
  The message can be modified with reconfiguring the standard python logger named 'footprint_facility'.

  The methods are completed with embedded performances metrics capabilities. To activate them, use the following `check_time` method:

  ```python
  import footprint_facility
  footprint_facility.check_time(enable=True,
                                incremental=False,
                                summary_time=True)
  ```
  `enable` parameter to `False` fully deactivate the time management.
  `incremental` parameter to `True` displays metrics during the execution.
  `summary_time` parameter to `True` stores metrics for future display with `footprint_facility.show_summary()`

  Sample Output:
   ```
  check_cross_antimeridian:	    0.69 μs/point
  rework_to_polygon_geometry:	    6.94 μs/point
  simplify:	                    1.00 μs/point
  rework_to_linestring_geometry:      2.99 μs/point
   ```

  The output is logged onto the standard output using the python logger. If the output is not visible, the logger could be quickly configured as followed:
  ```python
  import logging
  logging.basicConfig(level=logging.INFO)
  ```

  The footprint library uses a named logger `footprint_facility` that could be configured by clients.


  Very long footprint crossing both the North and the South poles, crossing the antimeridian 3 times (Use-case Number 10) fails to be rendered.

  Detection of the polar point inside the footprint is based on projection transformation within polar stereoscopic projection. Such a transformation cannot be performed on raw footprint that shall manage antimeridian discontinuity.

  When eastern distance between consecutive coordinates is longer than 180 and coordinates longitude sign is reverted (e.g. longitudes sequentially -175 then +175), the algorithm uses the smallest area and consider the polygon crossing the antimeridian.
  To fix this issue, the algorithm shall be upgraded to take into account the clockwise orientation of the coordinates.


  This software is under Apache 2.0 License.
  It includes dynamic dependencies to the following libraries:

  | Library name | License       | URL |
  |--------------|---------------| -- |
  | pyproj       | MIT           | https://github.com/pyproj4/pyproj/blob/3.6.1/LICENSE |
  | numpy        | modified BSD  | https://numpy.org/doc/stable/license.html |
  | shapely      | BSD-3-Clause | https://github.com/shapely/shapely/blob/2.0.3/LICENSE.txt |
  | geojson      | BSD-3-Clause | https://github.com/jazzband/geojson/blob/3.1.0/LICENSE.rst |


pkgId: 7b78060233b14894732b00c7d9c07b4cc80e233ed572e9bc08b631e4495ab3b0
name: python-forecasting-tools-help
arch: noarch
version: 0.2.0
epoch: 0
release: 1
summary: Development documents and examples for forecasting-tools
url: https://pypi.org/project/forecasting-tools/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-forecasting-tools-0.2.0-1.src.rpm
location_href: Packages/python-forecasting-tools-help-0.2.0-1.noarch.rpm
checksum_type: sha256
description:
  ![PyPI version](https://badge.fury.io/py/forecasting-tools.svg)
  ![Python Versions](https://img.shields.io/pypi/pyversions/forecasting-tools.svg)
  ![License](https://img.shields.io/badge/License-MIT-blue.svg)
  [![Discord](https://img.shields.io/badge/Discord-Join-blue)](https://discord.gg/Dtq4JNdXnw)

  Last Update: Dec 17 2024



  Install this package with `pip install forecasting-tools`


  Demo website: https://mokoresearch.streamlit.app/

  This repository contains forecasting and research tools built with Python and Streamlit. The project aims to assist users in making predictions, conducting research, and analyzing data related to hard to answer questions (especially those from Metaculus).

  Here are the tools most likely to be useful to you:
  - 🎯 **Forecasting Bot:** General Forecaster that integrates with the Metaculus AI benchmarking competition. You can forecast with a pre-existing bot or override the class to customize your own (without redoing all the API code, etc)
  - 🔍 **Perplexity++ Smart Searcher:** An AI-powered internet-informed llm powered by Exa.ai. Its a better (but more expensive) alternative to Perplexity.ai that is configurable, more accurate, able to decide on filters, able to link to exact paragraphs, etc.
  - 🔑 **Key Factor Analysis:** Key Factors Analysis for scoring, ranking, and prioritizing important variables in forecasting questions


  Here are some other cool components and features of the project:
  - **Base Rate Researcher:** for calculating event probabilities (still experimental)
  - **Niche List Researcher:** for analyzing very specific lists of past events or items (still experimental)
  - **Fermi Estimator:** for breaking down numerical estimates (still experimental)
  - **Metaculus API Wrapper:** for interacting with questions and tournaments
  - **Monetary Cost Manager:** for tracking AI and API expenses

  Join the [discord](https://discord.gg/Dtq4JNdXnw) for updates and to give feedback (btw feedback is very appreciated, even just a quick 'I did/didn't decide to use the tool for reason X' is helpful to know)

  Note: This package is still in a experimental phase. The goal is to keep the API fairly stable, though no guarantees are given at this phase. There will be special effort to keep the ForecastBot and TemplateBot APIs consistent.





  The package comes with two major pre-built bots:
  - **MainBot**: The more sophisticated bot that uses multiple research strategies and carefully structured prompts
  - **TemplateBot**: A simpler bot that models the Metaculus templates that's cheaper, easier to start with, and faster to run.

  They both have roughly the same parameters. See below on how to use the TemplateBot to make forecasts.



  ```python
  from forecasting_tools import TemplateBot, MetaculusApi


  bot = TemplateBot(
      research_reports_per_question=3,  # Number of separate research attempts per question
      predictions_per_research_report=5,  # Number of predictions to make per research report
      publish_reports_to_metaculus=True,  # Whether to post the forecasts to Metaculus
      folder_to_save_reports_to="logs/forecasts/",  # Where to save detailed reports
      skip_previously_forecasted_questions=True
  )


  TOURNAMENT_ID = MetaculusApi.AI_COMPETITION_ID_Q4
  reports = await bot.forecast_on_tournament(TOURNAMENT_ID)


  for report in reports:
      print(f"\nQuestion: {report.question.question_text}")
      print(f"Prediction: {report.prediction}")
  ```



  ```python
  from forecasting_tools import TemplateBot, BinaryQuestion, QuestionState


  bot = TemplateBot(
      research_reports_per_question=3,
      predictions_per_research_report=5,
      publish_reports_to_metaculus=False,
  )


  question1 = MetaculusApi.get_question_by_url(
      "https://www.metaculus.com/questions/578/human-extinction-by-2100/"
  )
  question2 = BinaryQuestion(
      question_text="Will YouTube be blocked in Russia?",
      background_info="...", # Or 'None'
      resolution_criteria="...", # Or 'None'
      fine_print="...", # Or 'None'
      id_of_question=0, # The ID and state only matters if using Metaculus API calls
      question_state=QuestionState.OPEN
  )

  reports = await bot.forecast_questions([question1, question2])


  for report in reports:
      print(f"Question: {report.question.question_text}")
      print(f"Prediction: {report.prediction}")
      print("\nReasoning:")
      print(report.explanation)
  ```

  The bot will:
  1. Research the question
  2. Generate multiple independent predictions
  3. Combine these predictions into a final forecast
  4. Save detailed research and reasoning to the specified folder
  5. Optionally post the forecast to Metaculus (if `publish_reports_to_metaculus=True`)

  Note: You'll need to have your environment variables set up (see the section below)





  The quickest way to join the Metaculus Benchmarking Tournament (or any other tournament) is to fork this repo, enable Github workflow/actions, and then set repository secrets. Ideally this takes less than 15min, and then you have a bot in the tournament! Later you can develop locally and then merge in changes to your fork.

  There is a prewritten workflow that will run the bot every 15min, pick up new questions, and forecast on them. Automation is handled in the `.github/workflows/` folder. The `hourly-run.yaml` file runs the bot every 15 min and will skip questions it has already forecasted on.

  1) **Fork the repository**: Click 'fork' in the right hand corner of the repo.
  2) **Set secrets**: Go to `Settings -> Secrets and variables -> Actions -> New repository secret` and set API keys/Tokens as secrets. You will want to set your METACULUS_TOKEN. This will be used to post questions to Metaculus, and access the Metaculus OpenAI proxy (you should automatically be given some credits if you have a bot account). For additional environment variables you might want, see the section below.
  3) **Enable Actions**: Go to 'Actions' then click 'Enable'. Then go to the 'Hourly Run' workflow, and click 'Enable'. To test if the workflow is working, click 'Run workflow', choose the main branch, then click the green 'Run workflow' button. This will check for new questions and forecast only on ones it has not yet successfully forecast on.

  The bot should just work as is at this point. You can disable the workflow by clicking `Actions > Hourly Run > Triple dots > disable workflow`


  See the 'Local Development' section later in this README.


  Generally all you have to do to make your own bot is inherit from the TemplateBot and override any combination of the 3 forecasting methods and the 1 research method. This saves you the headache of parsing the outputs, interacting with the Metaculus API, etc. Here is an example. It may also be helpful to look at the TemplateBot code (forecasting_tools/forecasting/forecast_bots/template_bot.py) for a more complete example.

  ```python
  from forecasting_tools import (
      TemplateBot,
      MetaculusQuestion,
      BinaryQuestion,
      MultipleChoiceQuestion,
      NumericQuestion,
      ReasonedPrediction,
      PredictedOptionList,
      NumericDistribution,
      SmartSearcher,
      Gpt4oMetaculusProxy
  )
  from forecasting_tools.ai_models.ai_utils.ai_misc import clean_indents

  class MyCustomBot(TemplateBot):
      async def run_research(self, question: MetaculusQuestion) -> str:
          """Custom research method that focuses on recent events and expert opinions"""
          searcher = SmartSearcher(
              num_searches_to_run=3,
              num_sites_per_search=5
          )

          prompt = clean_indents(
              f"""
              Analyze this forecasting question:
              1. Filter for recent events in the past 6 months
              2. Don't include domains from youtube.com
              3. Look for current trends and data
              4. Find historical analogies and base rates

              Question: {question.question_text}

              Background Info: {question.background_info}
              Resolution Criteria: {question.resolution_criteria}
              """
          )

          report = await searcher.invoke(prompt)
          return report

      async def _run_forecast_on_binary(
          self, question: BinaryQuestion, research: str
      ) -> ReasonedPrediction[float]:
          prompt = f"Please make a prediction on the following question: {question.question_text}. The last thing you write is your final answer as: 'Probability: ZZ%', 0-100"
          reasoning = await Gpt4oMetaculusProxy.invoke(prompt)
          prediction = self._extract_forecast_from_binary_rationale(
              reasoning, max_prediction=1, min_prediction=0
          )
          return ReasonedPrediction(
              prediction_value=prediction, reasoning=reasoning
          )

      async def _run_forecast_on_multiple_choice(
          self, question: MultipleChoiceQuestion, research: str
      ) -> ReasonedPrediction[PredictedOptionList]:
          ...

      async def _run_forecast_on_numeric(
          self, question: NumericQuestion, research: str
      ) -> ReasonedPrediction[NumericDistribution]:
          ...
  ```



  Whether running locally or through Github actions, you will need to set environment variables. All environment variables you might want are in `.env.template`. Generally you only need the METACULUS_TOKEN if running the Template. Having an EXA_API_KEY (see www.exa.ai) or PERPLEXITY_API_KEY (see www.perplexity.ai) is needed for searching the web. Make sure to put these variables in your `.env` file if running locally and in the Github actions secrets if running on Github actions.





  The Smart Searcher acts like an LLM with internet access. It works a lot like Perplexity.ai API, except:
  - It has clickable citations that highlights and links directly to the paragraph cited using text fragments
  - You can ask the AI to use filters for domain, date, and keywords
  - There are options for structured output (Pydantic objects, lists, dict, list\[dict\], etc.)
  - Concurrent search execution for faster results
  - Optional detailed works cited list

  ```python
  from forecasting_tools import SmartSearcher

  searcher = SmartSearcher(
      temperature=0,
      num_searches_to_run=2,
      num_sites_per_search=10,  # Results returned per search
      include_works_cited_list=False  # Add detailed citations at the end
  )

  response = await searcher.invoke(
      "What is the recent news for Apple?"
  )

  print(response)
  ```

  Example output:
  > Recent news about Apple includes several significant developments:
  >
  > 1. **Expansion in India**: Apple is planning to open four more stores in India, with two in Delhi and Mumbai, and two in Bengaluru and Pune. This decision follows record revenues in India for the September 2024 quarter, driven by strong iPhone sales. Tim Cook, Apple's CEO, highlighted the enthusiasm and growth in the Indian market during the company's earnings call \[[1](https://telecomtalk.info/tim-cook-makes-major-announcement-for-apple-in-india/984260/#:~:text=This%20is%20not%20a%20new,first%20time%20Apple%20confirmed%20it.)\]\[[4](https://telecomtalk.info/tim-cook-makes-major-announcement-for-apple-in-india/984260/#:~:text=This%20is%20not%20a%20new,set%20an%20all%2Dtime%20revenue%20record.)\]\[[5](https://telecomtalk.info/tim-cook-makes-major-announcement-for-apple-in-india/984260/#:~:text=Previously%2C%20Diedre%20O%27Brien%2C%20Apple%27s%20senior,East%2C%20India%20and%20South%20Asia.)\]\[[8](https://telecomtalk.info/tim-cook-makes-major-announcement-for-apple-in-india/984260/#:~:text=At%20the%20company%27s%20earnings%20call,four%20new%20stores%20in%20India.)\].
  >
  > 2. **Product Launches**: Apple is set to launch new iMac, Mac mini, and MacBook Pro models with M4 series chips on November 8, 2024. Additionally, the Vision Pro headset will be available in South Korea and the United Arab Emirates starting November 15, 2024. The second season of the Apple TV+ sci-fi series "Silo" will also premiere on November 15, 2024 \[[2](https://www.macrumors.com/2024/11/01/what-to-expect-from-apple-this-november/#:~:text=And%20the%20Vision%20Pro%20launches,the%20App%20Store%2C%20and%20more.)\]\[[12](https://www.macrumors.com/2024/11/01/what-to-expect-from-apple-this-november/#:~:text=As%20for%20hardware%2C%20the%20new,announcements%20in%20store%20this%20November.)\].
  >
  > ... etc ...

  You can also use structured outputs by providing a Pydantic model (or any other simpler type hint) and using the schema formatting helper:

  ```python
  from pydantic import BaseModel, Field
  from forecasting_tools import SmartSearcher

  class Company(BaseModel):
      name: str = Field(description="Full company name")
      market_cap: float = Field(description="Market capitalization in billions USD")
      key_products: list[str] = Field(description="Main products or services")
      relevance: str = Field(description="Why this company is relevant to the search")

  searcher = SmartSearcher(temperature=0, num_searches_to_run=4, num_sites_per_search=10)

  schema_instructions = searcher.get_schema_format_instructions_for_pydantic_type(Company)
  prompt = f"""Find companies that are leading the development of autonomous vehicles.
  Return as a list of companies with their details. Remember to give me a list of the schema provided.

  {schema_instructions}"""

  companies = await searcher.invoke_and_return_verified_type(prompt, list[Company])

  for company in companies:
      print(f"\n{company.name} (${company.market_cap}B)")
      print(f"Relevance: {company.relevance}")
      print("Key Products:")
      for product in company.key_products:
          print(f"- {product}")
  ```

  The schema instructions will format the Pydantic model into clear instructions for the AI about the expected output format and field descriptions.



  The Key Factors Researcher helps identify and analyze key factors that should be considered for a forecasting question. As of last update, this is the most reliable of the tools, and gives something useful and accurate almost every time. It asks a lot of questions, turns search results into a long list of bullet points, rates each bullet point on ~8 criteria, and returns the top results.

  ```python
  from forecasting_tools import KeyFactorsResearcher, BinaryQuestion, QuestionState


  question = BinaryQuestion(
      question_text="Will YouTube be blocked in Russia?",
      background_info="...", # Or 'None'
      resolution_criteria="...", # Or 'None'
      fine_print="...", # Or 'None'
      id_of_question=0, # The ID and state only matters if using Metaculus API calls
      question_state=QuestionState.OPEN
  )


  key_factors = await KeyFactorsResearcher.find_key_factors(
      metaculus_question=question,
      num_key_factors_to_return=5,  # Number of final factors to return
      num_questions_to_research_with=26  # Number of research questions to generate
  )

  print(ScoredKeyFactor.turn_key_factors_into_markdown_list(key_factors))
  ```

  Example output:
  > - The Russian authorities have slowed YouTube speeds to near unusable levels, indicating a potential groundwork for a future ban. [Source Published on 2024-09-12](https://meduza.io/en/feature/2024/09/12/the-russian-authorities-slowed-youtube-speeds-to-near-unusable-levels-so-why-are-kremlin-critics-getting-more-views#:~:text=Kolezev%20attributed%20this%20to%20the,suddenly%20stopped%20working%20in%20Russia.)
  > - Russian lawmaker Alexander Khinshtein stated that YouTube speeds would be deliberately slowed by up to 70% due to Google's non-compliance with Russian demands, indicating escalating measures against YouTube. [Source Published on 2024-07-25](https://www.yahoo.com/news/russia-slow-youtube-speeds-google-180512830.html#:~:text=Russia%20will%20deliberately%20slow%20YouTube,forces%20and%20promoting%20extremist%20content.)
  > - The press secretary of President Vladimir Putin, Dmitry Peskov, denied that the authorities intended to block YouTube, attributing access issues to outdated equipment due to sanctions. [Source Published on 2024-08-17](https://www.wsws.org/en/articles/2024/08/17/pbyj-a17.html#:~:text=%5BAP%20Photo%2FAP%20Photo%5D%20On%20July,two%20years%20due%20to%20sanctions.)
  > - YouTube is currently the last Western social media platform still operational in Russia, with over 93 million users in the country. [Source Published on 2024-07-26](https://www.techradar.com/pro/vpn/youtube-is-getting-throttled-in-russia-heres-how-to-unblock-it#:~:text=If%20you%27re%20in%20Russia%20and,platform%20to%20work%20in%20Russia.)
  > - Russian users reported mass YouTube outages amid growing official criticism, with reports of thousands of glitches in August 2024. [Source Published on 2024-08-09](https://www.aljazeera.com/news/2024/8/9/russian-users-report-mass-youtube-outage-amid-growing-official-criticism?traffic_source=rss#:~:text=Responding%20to%20this%2C%20a%20YouTube,reported%20about%20YouTube%20in%20Russia.)


  The simplified pydantic structure of the scored key factors is:
  ```python
  class ScoredKeyFactor():
      text: str
      factor_type: KeyFactorType (Pro, Con, or Base_Rate)
      citation: str
      source_publish_date: datetime | None
      url: str
      score_card: ScoreCard
      score: int
      display_text: str
  ```


  The Base Rate Researcher helps calculate historical base rates for events. As of last update, it gives decent results around 50% of the time. It orchestrates the Niche List Researcher and the Fermi Estimator to find base rate.

  ```python
  from forecasting_tools import BaseRateResearcher


  researcher = BaseRateResearcher(
      "How often has Apple been successfully sued for patent violations?"
  )


  report = await researcher.make_base_rate_report()

  print(f"Historical rate: {report.historical_rate:.2%}")
  print(report.markdown_report)
  ```


  The Niche List Researcher helps analyze specific lists of events or items. The researcher will:
  1. Generate a comprehensive list of potential matches
  2. Remove duplicates
  3. Fact check each item against multiple criteria
  4. Return only validated items (unless include_incorrect_items=True)

  ```python
  from forecasting_tools import NicheListResearcher

  researcher = NicheListResearcher(
      type_of_thing_to_generate="Times Apple was successfully sued for patent violations between 2000-2024"
  )

  fact_checked_items = await researcher.research_niche_reference_class(
      return_invalid_items=False
  )

  for item in fact_checked_items:
      print(item)
  ```

  The simplified pydantic structure of the fact checked items is:
  ```python
  class FactCheckedItem():
      item_name: str
      description: str
      is_uncertain: bool | None = None
      initial_citations: list[str] | None = None
      fact_check: FactCheck
      type_description: str
      is_valid: bool
      supporting_urls: list[str]
      one_line_fact_check_summary: str

  class FactCheck(BaseModel):
      criteria_assessments: list[CriteriaAssessment]
      is_valid: bool

  class CriteriaAssessment():
      short_name: str
      description: str
      validity_assessment: str
      is_valid_or_unknown: bool | None
      citation_proving_assessment: str | None
      url_proving_assessment: str | None:
  ```


  The Fermi Estimator helps break down numerical estimates using Fermi estimation techniques.

  ```python
  from forecasting_tools import Estimator

  estimator = Estimator(
      type_of_thing_to_estimate="books published worldwide each year",
      previous_research=None  # Optional: Pass in existing research
  )

  size, explanation = await estimator.estimate_size()

  print(f"Estimate: {size:,}")
  print(explanation)
  ```

  Example output (Fake data with links not added):
  > I estimate that there are 2,750,000 'books published worldwide each year'.
  >
  > **Facts**:
  > - Traditional publishers release approximately 500,000 new titles annually in English-speaking countries [1]
  > - China publishes around 450,000 new books annually [2]
  > - The global book market was valued at $92.68 billion in 2023 [3]
  > - Self-published titles have grown by 264% in the last 5 years [4]
  > - Non-English language markets account for about 50% of global publishing [5]
  >
  > **Estimation Steps and Assumptions**:
  > 1. Start with traditional English publishing: 500,000 titles
  > 2. Add Chinese market: 500,000 + 450,000 = 950,000
  > 3. Account for other major languages (50% of market): 950,000 * 2 = 1,900,000
  > 4. Add self-published titles (estimated 45% of total): 1,900,000 * 1.45 = 2,755,000
  >
  > **Background Research**: [Additional research details...]


  The Metaculus API wrapper helps interact with Metaculus questions and tournaments. Grabbing questions returns a pydantic object, and supports important information for Binary, Multiple Choice, Numeric,and Date questions.

  ```python
  from forecasting_tools import MetaculusApi

  question = MetaculusApi.get_question_by_id(11245)  # US 2024 Election
  question = MetaculusApi.get_question_by_url("https://www.metaculus.com/questions/11245/...")
  questions = MetaculusApi.get_all_open_questions_from_tournament(
      tournament_id=3672,  # Q4 2024 Quarterly Cup
  )
  MetaculusApi.post_binary_question_prediction(
      question_id=11245,
      prediction_in_decimal=0.75  # Must be between 0.01 and 0.99
  )
  MetaculusApi.post_question_comment(
      question_id=11245,
      comment_text="Here's my reasoning..."
  )
  benchmark_questions = MetaculusApi.get_benchmark_questions(
      num_of_questions_to_return=20
  )
  ```


  The Monetary Cost Manager helps to track AI and API costs. It tracks expenses and errors if it goes over the limit. Leave the limit empty to disable the limit. It shouldn't be trusted as an exact expense, but a good estimate of costs. See `forecasting_tools/ai_models/README.md` for more details, and some flaws it has.

  ```python
  from forecasting_tools import MonetaryCostManager

  max_cost = 5.00

  with MonetaryCostManager(max_cost) as cost_manager:
      results = await any_tool_that_uses_ai()
      current_cost = cost_manager.current_usage
      print(f"Current cost: ${current_cost:.2f}")
  ```




  The environment variables you need can be found in ```.env.template```. Copy this template as ```.env``` and fill it in. As of last update, you only strictly need OPENAI_API_KEY and EXA_API_KEY.


  Dev containers are reliable ways to make sure environments work on everyone's machine the first try and so you don't have to spend hours setting up your environment (especially if you have Docker already installed). If you would rather just use poetry, without the dev container, you can skip to "Alternatives to Docker". Otherwise, to get your development environment up and running, you need to have Docker Engine installed and running. Once you do, you can use the VSCode dev container pop-up to automatically set up everything for you.


  For Windows and Mac, you will download Docker Desktop. For Linux, you will download Docker Engine. (NOTE: These instructions might be outdated).

  First download and setup Docker Engine using the instructions at the link below for your OS:
   * Windows: [windows-install](https://docs.docker.com/desktop/install/windows-install/)
   * Mac: [mac-install](https://docs.docker.com/desktop/install/mac-install/)
   * Linux: [install](https://docs.docker.com/engine/install/)
      * Do not install Docker Desktop for Linux, rather, select your Linux distribution on the left sidebar and follow the distribution specific instructions for Docker engine. Docker Desktop runs with a different environment in Linux.
      * Remember to follow the post-installation steps for Linux: [linux-postinstall](https://docs.docker.com/engine/install/linux-postinstall/)



  Once Docker is installed, when you open up the project folder in VSCode, you will see a pop up noting that you have a setup for a dev container, and asking if you would like to open the folder in a container. You will want to click "open in container". This will automatically set up everything you need and bring you into the container. If the Docker process times out in the middle of installing python packages you can run the `.devcontiner/postinstall.sh` manually. You may need to have the VSCode Docker extension and/or devcontainer extension downloaded in order for the pop up to appear.

  Once you are in the container, poetry should have already installed a virtual environment. For VSCode features to use this environment, you will need to select the correct python interpreter. You can do this by pressing `Ctrl + Shift + P` and then typing `Python: Select Interpreter`. Then select the interpreter that starts with `.venv`.

  A number of vscode extensions are installed automatically (e.g. linting). You may need to wait a little while and then reload the window after all of these extensions are installed. You can install personal vscode extensions in the dev environment.



  There are many ways to manager Docker containers, but generally if you download the vscode Docker extension, you will be able to stop/start/remove all containers and images.



  If you choose not to run Docker, you can use poetry to set up a local virtual environment. If you are on Ubuntu, you should be able to just read through and then run `.devcontainer/postinstall.sh`. If you aren't on Ubuntu, check out the links in the postinstall file for where install instructions for dependencies were originally found. You may also want to take a look at VSCode extensions that would be installed (see the list in the `.devcontainer/devcontainer.json` file) so that some VSCode workplace settings work out of the box (e.g. automatic Black Formatting).


  You can run any front end folder in the front_end directory by executing `streamlit run front_end/Home.py`. This will start a development server for you that you can run.


  This repository uses pytest and pytest-xdist. xdist spreads out all the tests between multiple threads that are each run on a separate CPU in order to speed up execution. Currently its setup to create a thread per CPU. Configuration for this is in `pytest.ini`. The tests are gathered afresh from each thread, so any initialization done in imports, globals, or class variables are done for each thread.

  Tests are subdivided into folders based on cost and reliability, so do not run `pytest` without specifying which folder you want  or else you will incur some large expenses from OpenAI. The more expensive tests run the tools all the way through, and on many example cases, and are not expected to get 100% success rates.


pkgId: 6ab06b31ec4cbd767fd22c9bd9a191c5a95c1d14cad82b8a606a37721f7c141b
name: python-formulaic-contrasts-help
arch: noarch
version: 1.0.0
epoch: 0
release: 1
summary: Development documents and examples for formulaic-contrasts
url: https://github.com/scverse/formulaic-contrasts
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-formulaic-contrasts-1.0.0-1.src.rpm
location_href: Packages/python-formulaic-contrasts-help-1.0.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Tests][badge-tests]][tests]
  [![Documentation][badge-docs]][documentation]
  [![codecov.io][badge-codecov]][link-codecov]

  [badge-tests]: https://img.shields.io/github/actions/workflow/status/scverse/formulaic-contrasts/test.yaml?branch=main
  [badge-docs]: https://img.shields.io/readthedocs/formulaic-contrasts
  [badge-codecov]: https://codecov.io/github/scverse/formulaic-contrasts/coverage.svg?branch=main
  [link-codecov]: https://codecov.io/gh/scverse/formulaic-contrasts/branch/main

  Build arbitrary contrasts for models defined with formulaic.



  Please refer to the [documentation][]. As a developer seeking to use `formulaic-contrasts` with your model, you'll find
  the [API documentation][] and the tutorial [Usage in custom model][] useful. If you are a user who wants to understand
  how to build contrasts for a model, the [building contrasts][] tutorial is for you!



  Typically, you don't install `formulaic-contrasts` directly, but obtain it as a dependency of
  another model. As a developer, you can obtain it from PyPI or GitHub:

  There are several alternative options to install formulaic-contrasts:

  1. Install the latest release of `formulaic-contrasts` from [PyPI][]:

  ```bash
  pip install formulaic-contrasts
  ```

  2. Install the latest development version:

  ```bash
  pip install git+https://github.com/scverse/formulaic-contrasts.git@main
  ```

  `Formulaic-contrasts` depends on Python 3.10 or later.



  See the [changelog][].



  For questions and help requests, you can reach out in the [scverse discourse][].
  If you found a bug, please use the [issue tracker][].



  The `cond()` function for building contrasts has been devised by [@const-ae](https://github.com/const-ae) for his R package [glmGamPoi](https://bioconductor.org/packages/release/bioc/html/glmGamPoi.html). A [prototype](https://github.com/scverse/multi-condition-comparisions) of the Python implementation has been built at the [scverse hackathon in Cambridge, UK in Nov 2023](https://scverse.org/events/2023_11_hackathon/) by [@grst](https://github.com/grst), [@const-ae](https://github.com/const-ae) and [@BorisMuzellec](https://github.com/BorisMuzellec). The production version in this package has been implemented by [@grst](https://github.com/grst).

  [mambaforge]: https://github.com/conda-forge/miniforge#mambaforge
  [scverse discourse]: https://discourse.scverse.org/
  [issue tracker]: https://github.com/scverse/formulaic-contrasts/issues
  [tests]: https://github.com/scverse/formulaic-contrasts/actions/workflows/test.yml
  [documentation]: https://formulaic-contrasts.readthedocs.io
  [changelog]: https://formulaic-contrasts.readthedocs.io/en/latest/changelog.html
  [api documentation]: https://formulaic-contrasts.readthedocs.io/en/latest/api.html
  [usage in custom model]: https://formulaic-contrasts.readthedocs.io/en/latest/model_usage.html
  [building contrasts]: https://formulaic-contrasts.readthedocs.io/en/latest/contrasts.html
  [pypi]: https://pypi.org/project/formulaic-contrasts

rpm_license:
  BSD 3-Clause License  Copyright (c) 2024, Gregor Sturm 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.  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: a949b01beac3a90ea1b578be8cf062d64f92f18e9c53b39b4ccadbba49d806c6
name: python-formulaic-help
arch: noarch
version: 1.1.0
epoch: 0
release: 1
summary: Development documents and examples for formulaic
url: https://pypi.org/project/formulaic/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-formulaic-1.1.0-1.src.rpm
location_href: Packages/python-formulaic-help-1.1.0-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI - Version](https://img.shields.io/pypi/v/formulaic.svg)](https://pypi.org/project/formulaic/)
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/formulaic.svg)
  ![PyPI - Status](https://img.shields.io/pypi/status/formulaic.svg)
  [![build](https://img.shields.io/github/actions/workflow/status/matthewwardrop/formulaic/tests.yml?branch=main)](https://github.com/matthewwardrop/formulaic/actions?query=workflow%3A%22Run+Tox+Tests%22)
  [![docs](https://img.shields.io/github/actions/workflow/status/matthewwardrop/formulaic/publish_docs.yml?label=docs)](https://matthewwardrop.github.io/formulaic/)
  [![codecov](https://codecov.io/gh/matthewwardrop/formulaic/branch/main/graph/badge.svg)](https://codecov.io/gh/matthewwardrop/formulaic)
  [![Code Style](https://img.shields.io/badge/code%20style-black-black)](https://github.com/psf/black)

  Formulaic is a high-performance implementation of Wilkinson formulas for Python.

  - **Documentation**: https://matthewwardrop.github.io/formulaic
  - **Source Code**: https://github.com/matthewwardrop/formulaic
  - **Issue tracker**: https://github.com/matthewwardrop/formulaic/issues


  It provides:

  - high-performance dataframe to model-matrix conversions.
  - support for reusing the encoding choices made during conversion of one data-set on other datasets.
  - extensible formula parsing.
  - extensible data input/output plugins, with implementations for:
    - input:
      - `pandas.DataFrame`
      - `pyarrow.Table`
    - output:
      - `pandas.DataFrame`
      - `numpy.ndarray`
      - `scipy.sparse.CSCMatrix`
  - support for symbolic differentiation of formulas (and hence model matrices).
  - and much more.



  ```
  import pandas
  from formulaic import Formula

  df = pandas.DataFrame({
      'y': [0, 1, 2],
      'x': ['A', 'B', 'C'],
      'z': [0.3, 0.1, 0.2],
  })

  y, X = Formula('y ~ x + z').get_model_matrix(df)
  ```

  `y = `
  <table border="1" class="dataframe">
    <thead>
      <tr style="text-align: right;">
        <th></th>
        <th>y</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <th>0</th>
        <td>0</td>
      </tr>
      <tr>
        <th>1</th>
        <td>1</td>
      </tr>
      <tr>
        <th>2</th>
        <td>2</td>
      </tr>
    </tbody>
  </table>

  `X = `
  <table border="1" class="dataframe">
    <thead>
      <tr style="text-align: right;">
        <th></th>
        <th>Intercept</th>
        <th>x[T.B]</th>
        <th>x[T.C]</th>
        <th>z</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <th>0</th>
        <td>1.0</td>
        <td>0</td>
        <td>0</td>
        <td>0.3</td>
      </tr>
      <tr>
        <th>1</th>
        <td>1.0</td>
        <td>1</td>
        <td>0</td>
        <td>0.1</td>
      </tr>
      <tr>
        <th>2</th>
        <td>1.0</td>
        <td>0</td>
        <td>1</td>
        <td>0.2</td>
      </tr>
    </tbody>
  </table>

  Note that the above can be short-handed to:

  ```
  from formulaic import model_matrix
  model_matrix('y ~ x + z', df)
  ```



  Formulaic typically outperforms R for both dense and sparse model matrices, and vastly outperforms `patsy` (the existing implementation for Python) for dense matrices (`patsy` does not support sparse model matrix output).

  ![Benchmarks](https://github.com/matthewwardrop/formulaic/raw/main/benchmarks/benchmarks.png)

  For more details, see [here](benchmarks/README.md).



  - [Patsy](https://github.com/pydata/patsy): a prior implementation of Wilkinson formulas for Python, which is widely used (e.g. in statsmodels). It has fantastic documentation (which helped bootstrap this project), and a rich array of features.
  - [StatsModels.jl `@formula`](https://juliastats.org/StatsModels.jl/stable/formula/): The implementation of Wilkinson formulas for Julia.
  - [R Formulas](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/formula): The implementation of Wilkinson formulas for R, which is thoroughly introduced [here](https://cran.r-project.org/web/packages/Formula/vignettes/Formula.pdf). [R itself is an implementation of [S](https://en.wikipedia.org/wiki/S_%28programming_language%29), in which formulas were first made popular].
  - The work that started it all: Wilkinson, G. N., and C. E. Rogers. Symbolic description of factorial models for analysis of variance. J. Royal Statistics Society 22, pp. 392–399, 1973.



  Below are some of the projects that use Formulaic:

  - [Glum](https://github.com/Quantco/glum): High performance Python GLM's with all the features.
  - [Lifelines](https://github.com/camDavidsonPilon/lifelines): Survival analysis in Python.
  - [Linearmodels](https://github.com/bashtage/linearmodels): Additional linear models including instrumental variable and panel data models that are missing from statsmodels.
  - [Pyfixest](https://github.com/s3alfisc/pyfixest): Fast High-Dimensional Fixed Effects Regression in Python following fixest-syntax.
  - [Tabmat](https://github.com/Quantco/tabmat): Efficient matrix representations for working with tabular data.
  - Add your project here!


pkgId: 48928e50b30c1e33afbb0f30b99d873eb32554555ffab92301c130f3c35c3ab8
name: python-fortify-getorcreateapp-help
arch: noarch
version: 0.2.15
epoch: 0
release: 1
summary: Development documents and examples for fortify-getorcreateapp
url: https://.trendmicro.com/cloudone-common/fortify-getorcreateapp
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fortify-getorcreateapp-0.2.15-1.src.rpm
location_href: Packages/python-fortify-getorcreateapp-help-0.2.15-1.noarch.rpm
checksum_type: sha256
description:
  ![](https://img.shields.io/badge/Standard%20Security%20Action-gold?style=for-the-badge&logo=trendmicro&logoColor=red&link=https%3A%2F%2Ftrendmicro.atlassian.net%2Fwiki%2Fspaces%2Frdsecpub%2Fpages%2F616997839%2FStandard%2BSecurity%2BGitHub%2BActions)



  Support Library for creating and querying fortify versions and applications.



  ```pip install fortify-getorcreateapp```



  As a python library with a cli entry point, the functionality can be easily accessed through CLI:

  ```
  $fortify-getorcreateapp --h

  usage: fortify-getorcreateapp [-h] [--jid JID] app_name version_name

  Print Fortify application and version ids of given fortify application name and version names. Create version and application if they don't exist. Requires
  environment variables 'FORTIFY_TOKEN' and 'FORTIFY_URL' to be set. FORTIFY_TOKEN must be an automation token for a (service) account capable of creating a
  version and assign users to versions. FORTIFY_URL is the base url for the fortify service (e.g. https://codescan-ssc.mycompany.com/ssc) . It does not include the
  path to the api endpoing e.g. 'api/v1'.

  positional arguments:
    app_name      application name
    version_name  version name

  options:
    -h, --help    show this help message and exit
    --jid JID     PDG_XXXXXX - identifier added to version description, used to synchronized with dashboard. Please set manually if not set upon creation. Consult
                  
  ```



  ```make```



  This is part of the Standard github actions and as such it is subject to the same process (no direct writes, PRs reviewed by GRC). If you have a contribution please fork and submit a PR.




  A: "Why is this not simply part of the github action that uses it?"

  B: Because the functionality is used across other projects and scripts, it's right encapsulation is a library.


pkgId: c4d899bbf5ec9d51fcd4eb119b770144180293b26f48e5611ba0811f2e3c3182
name: python-fortnite-api-help
arch: noarch
version: 3.2.1
epoch: 0
release: 1
summary: Development documents and examples for fortnite-api
url: https://pypi.org/project/fortnite-api/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fortnite-api-3.2.1-1.src.rpm
location_href: Packages/python-fortnite-api-help-3.2.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Support](https://discordapp.com/api/guilds/621452110558527502/widget.png?style=shield)](https://discord.gg/T4tyYDK)
  ![GitHub issues](https://img.shields.io/github/issues/Fortnite-API/py-wrapper?logo=github)
  [![PyPI](https://img.shields.io/pypi/v/fortnite-api)](https://pypi.org/project/fortnite-api)
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fortnite-api?label=python%20version&logo=python&logoColor=yellow)
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/fortnite-api)](https://pypi.org/project/fortnite-api)
  [![Documentation](https://img.shields.io/readthedocs/fortnite-api)](https://fortnite-api.readthedocs.io/)

  Welcome to the Fortnite API Python wrapper! This library offers a complete **async** and **sync** wrapper around the endpoints of [Fortnite-API.com](https://fortnite-api.com)

  The library's focus is to provide a simple and easy-to-use interface to interact with the API. The library is designed to be as user-friendly as possible, and it is easy to get started with. If you have any questions or need help, feel free to join the [official Discord server](https://discord.gg/T4tyYDK).



  Note that **Python 3.9 or higher is required.**

  ```sh

  python3 -m pip install fortnite-api


  py -3 -m pip install fortnite-api
  ```

  To install the developer version, you can use the following command:

  ```sh
  git clone https://github.com/Fortnite-API/py-wrapper
  cd py-wrapper
  python3 -m pip install .
  ```



  - `speed`: An optional dependency that installs [`orjson`](https://github.com/ijl/orjson) for faster JSON serialization and deserialization.

  ```sh

  python3 -m pip install fortnite-api[speed]


  py -3 -m pip install fortnite-api[speed]
  ```



  For most endpoints, you do not need an API key. However, some endpoints, such as fetching statistics, require an API key. To use these endpoints, you need to set the `api_key` parameter in the constructor.

  ```python
  import asyncio
  import fortnite_api

  async def main():
      async with fortnite_api.Client(api_key="your_api_key") as client:
          stats = await client.fetch_br_stats(name='some_username')
          print(stats)

  if __name__ == "__main__":
      asyncio.run(main())
  ```



  You can generate an API key on <https://dash.fortnite-api.com/account> by logging in with your Discord account.





  ```python
  import asyncio
  import fortnite_api

  async def main() -> None:
      async with fortnite_api.Client() as client:
          all_cosmetics: fortnite_api.CosmeticsAll = await client.fetch_cosmetics_all()

          for br_cosmetic in all_cosmetics.br:
              print(br_cosmetic.name)

  if __name__ == "__main__":
      asyncio.run(main())
  ```



  ```python
  import fortnite_api

  def main() -> None:
      client = fortnite_api.SyncClient()
      all_cosmetics: fortnite_api.CosmeticsAll = client.fetch_cosmetics_all()

      for br_cosmetic in all_cosmetics.br:
          print(br_cosmetic.name)

  if __name__ == "__main__":
      main()
  ```

  More examples can be found in the `examples/` directory of the repository.



  - [Python Wrapper Documentation](https://fortnite-api.readthedocs.io/en/rewrite/)
  - [FortniteAPI API Documentation](https://fortnite-api.com)
  - [Official Discord Server](https://discord.gg/T4tyYDK)



  Every type of contribution is appreciated.



  - Fortnite-API Wrapper (MIT) [License](https://github.com/Fortnite-API/py-wrapper/blob/master/LICENSE)
  - requests (Apache) [License](https://github.com/psf/requests/blob/master/LICENSE)
  - aiohttp (Apache) [License](https://github.com/aio-libs/aiohttp/blob/6a5ab96bd9cb404b4abfd5160fe8f34a29d941e5/LICENSE.txt)

rpm_license:
  MIT License  Copyright (c) 2019-present Luc1412  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: 9a8fed5764cf8bd121c69572598ba5a71f9cfc36750fd20d318d446e9348ef38
name: python-foscat-help
arch: noarch
version: 3.3.0
epoch: 0
release: 1
summary: Development documents and examples for foscat
url: https://pypi.org/project/foscat/
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foscat-3.3.0-1.src.rpm
location_href: Packages/python-foscat-help-3.3.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Read the Docs](https://readthedocs.org/projects/foscat-documentation/badge/?version=latest)](https://foscat-documentation.readthedocs.io/en/latest)

  A python package dedicated to image component separation based on scattering transform analysis designed for high performance computing.



  The foscat genesis has been built to synthesise data (2D or Healpix) using Cross Scattering Transform. For a detailed method description please refer to https://arxiv.org/abs/2207.12527. This algorithm could be effectively usable for component separation (e.g. denoising).

  A demo package for this process can be found at https://github.com/jmdelouis/FOSCAT_DEMO.





  https://github.com/IAOCEA/demo-foscat-pangeo-eosc/blob/main/Demo_Synthesis.ipynb



  The python scripts _demo.py_ included in this package demonstrate how to use the foscat library to generate synthetic fields that have patterns with the same statistical properties as a specified image.



  Before installing, make sure you have python installed in your enviroment.
  The last version of the foscat library can be installed using PyPi:

  ```
  pip install foscat
  ```

  Load the FOSCAT_DEMO package from github.

  ```
  git clone https://github.com/jmdelouis/FOSCAT_DEMO.git
  ```



  It is recomended to use python=3.9\*.

  ```
  micromamba create -n FOSCAT
  micromamba install -n FOSCAT ‘python==3.9*’
  micromamba activate FOSCAT
  pip install foscat
  git clone https://github.com/jmdelouis/FOSCAT_DEMO.git

  ```



  It is recomended to install tensorflow in advance. For [DATARMOR](https://pcdm.ifremer.fr/Equipement) for using GPU ;

  ```
  micromamba create -n FOSCAT
  micromamba install -n FOSCAT ‘python==3.9*’
  micromamba install -n FOSCAT ‘tensorflow==2.11.0’
  micromamba activate FOSCAT
  pip install foscat
  git clone https://github.com/jmdelouis/FOSCAT_DEMO.git

  ```





  ```
  python demo.py -n=32 -k -c -s=100
  ```

  The _demo.py_ script serves as a demonstration of the capabilities of the foscat library. It utilizes the Cross Wavelet Scattering Transform to generate a Healpix map that possesses the same characteristics as a specified input map.

  - `-n=32` computes map with nside=32.
  - `-k` uses 5x5 kernel.
  - `-c` uses Scattering Covariance.
  - `-l` uses LBFGS minimizer.
  - `-s=100` computes 100 steps.

  ```
  python demo.py -n=8 [-c|--cov][-s|--steps=3000][-S=1234|--seed=1234][-k|--k5x5][-d|--data][-o|--out][-r|--orient] [-p|--path][-a|--adam]

  ```

  - The "-n" option specifies the nside of the input map. The maximum nside value is 256 with the default map.
  - The "--cov" option (optional) uses scat_cov instead of scat.
  - The "--steps" option (optional) specifies the number of iterations. If not specified, the default value is 1000.
  - The "--seed" option (optional) specifies the seed of the random generator.
  - The "--path" option (optional) allows you to define the path where the output files will be written. The default path is "data".
  - The "--k5x5" option (optional) uses a 5x5 kernel instead of a 3x3.
  - The "--data" option (optional) specifies the input data file to be used. If not specified, the default file "LSS_map_nside128.npy" will be used.
  - The "--out" option (optional) specifies the output file name. If not specified, the output file will be saved in "demo".
  - The "--orient" option (optional) specifies the number of orientations. If not specified, the default value is 4.
  - The "--adam" option (optional) makes the synthesis using the ADAM optimizer instead of the L_BFGS.



  The following script generates a series of plots that showcase different aspects of the synthesis process using the _demo.py_ script.

  > python test2D.py

  ```
  python plotdemo.py -n=32 -c
  ```



  > python test2Dplot.py



  The python scripts _demo2D.py_ included in this package demonstrate how to use the foscat library to generate a 2D synthetic fields that have patterns with the same statistical properties as a specified 2D image. In this particular case, the input field is a sea surface temperature extracted from a north atlantic ocean simulation.

  > python testHealpix.py

  ```
  python demo2d.py -n=32 -k -c
  ```

  > python testHplot.py

  The following script generates a series of plots that showcase different aspects of the synthesis process using the _demo2D.py_ script.

  ```
  python plotdemo2d.py -n=32 -c
  ```

  For more information, see the [documentation](https://foscat-documentation.readthedocs.io/en/latest/index.html).

  > mpirun -np 3 testHealpix_mpi.py



  Authors: J.-M. Delouis, P. Campeti, T. Foulquier, J. Mangin, L. Mousset, T. Odaka, F. Paul, E. Allys

  This work is part of the R & T Deepsee project supported by CNES. The authors acknowledge the heritage of the Planck-HFI consortium regarding data, software, knowledge. This work has been supported by the Programme National de Télédétection Spatiale (PNTS, http://programmes.insu.cnrs.fr/pnts/), grant n◦ PNTS-2020-08



  BSD 3-Clause License

  Copyright (c) 2022, the Foscat developers All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  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.

  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.



  It is a scientific driven development. We are open to any contributing development.


pkgId: 00b5ea786d118bae8b5317ab92b1038b1f010e0d0eb29a403aee9594f2c075c4
name: python-foss-flame-help
arch: noarch
version: 0.20.10
epoch: 0
release: 1
summary: Development documents and examples for foss-flame
url: https://github.com/hesa/foss-licenses
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foss-flame-0.20.10-1.src.rpm
location_href: Packages/python-foss-flame-help-0.20.10-1.noarch.rpm
checksum_type: sha256
description:
  <!--
  SPDX-FileCopyrightText: 2024 Henrik Sandklef <hesa@sandklef.com>

  SPDX-License-Identifier: GPL-3.0-or-later

  README.md is generated from templates/README.tmpl

  -->



  FOSS Licenses consists of:

  * license meta data for FOSS licenses adding useful information to
    existing licenses aiming at simplifying compliance work.

  * [flame](https://github.com/hesa/foss-licenses/blob/main/FLAME.md) - command line program

  * [Python API](https://github.com/hesa/foss-licenses/blob/main/PYTHON_API.md)




  The meta data can be found in the [var directory](https://github.com/hesa/foss-licenses/tree/main/var). Each license has a JSON file with meta information and a LICENSE file with the license text. The meta data consists of:

  * other names or aliases for licenses (e.g. "GNU GPL v. 2" is replaced by "GPL-2.0-only")

  * fixes for compound license written as one single license or using faulty syntax (e.g. "GPL-2.0-with-classpath-exception" -> "GPL-2.0-only WITH Classpath-exception-2.0")

  * other names for operators (e.g. "||" is replaced by "OR")

  * translation of license with dual license features to a compound license expression (e.g. "GPL-2.0-or-later" -> "GPL-2.0-only OR GPL-3.0-only")

  * compatibility as another license (e.g. "X11-Style (Keith Packard)" is compatibility wise the same as "HPND")

  * ambiguous license name (e.g. "GNU General Public License", which misses the version number)

  * license text



  There are lots of software licenses out there (e.g. see [ScanCode LicenseDB](https://scancode-licensedb.aboutcode.org/)), some of them are FOSS and some not. In this project we primarily focus on FOSS licenses.



  When you're working with compliance you are used to licenses called differently in source code or by tools (e.g. `GPLv2`, `GPL (v2)` and `GNU General Public License Version 2`) when all you really want too see is the [SPDX identifier](https://spdx.org/licenses/) `GPL-2.0-only`. A seasoned compliance engineer or lawyer knows this already, but we need this information to be machine readable.



  Another problem you face when working with compliance is the need to check whether the licenses in a combined work are compatible. One example is the [`X11-Style (Keith Packard)`](https://scancode-licensedb.aboutcode.org/x11-keith-packard.html) license, which really is the same license as the [Historical Permission Notice and Disclaimer - sell variant](https://spdx.org/licenses/HPND-sell-variant.html). `X11-Style (Keith Packard)` is not supported for example in the OSADL matrix, but `HPND-sell-variant` is. Again, a seasoned license engineer or lawyer knows which licenses are compatible and which are not, but we need to make it possible for a machine to assist us.



  Current support:


  |Type            | Number |
  |----------------|--------|
  |Licenses        | 184    |
  |Aliases         | 2550     |
  |Compatibilities | 23     |
  |Operators       | 14   |
  |Ambiguities     | 149 |
  |Compounds       | 35   |



  This project aims at providing a database with:

  * "all" different names for a license in a database

  * mappings from one license to another license which is supported by the OSADL matrix

  and, to make the database easier to use:

  * a Python API

  * command line tool




  You are more than welcome to contribute.



  It would be great if you could check the licenses and feedback us (see HOW below).



  If you find a bug and have a fix or have written a new feature you want addded. Create a PR and we'll have a look..



  We need input from you on how you use or would like to use foss-licenses.



  Do you miss a license that you want support for. Create an issue with the following information:

  * SPDX identifier (if any)

  * Scancode identifier (if any)

  * License text (or a URL)

  * Aliases you would like to add (if any)

  * Same compatibility as another license (if any)



  * create an [issue](https://github.com/hesa/foss-licenses/issues)

  * create PR for code or license contributions



  We do not have a CLA or similar, but we assume your contributions are
  made under our license (for the code and data).



  * [flict](https://github.com/vinland-technology/flict) - FOSS License Compatibility Tool

  * [License Compatibility Matrix](https://www.osadl.org/Access-to-raw-data.oss-compliance-raw-data-access.0.html) - a matrix with license compatibilities

  * [scancode](https://github.com/nexB/scancode-toolkit) - ScanCode toolkit

  * [ScanCode LicenseDB](https://scancode-licensedb.aboutcode.org/) - a database with licenses



  * [Nexb](https://www.nexb.com/) for their FOSS compliance tools, especially [scancode](https://github.com/nexB/scancode-toolkit) and [ScanCode LicenseDB](https://scancode-licensedb.aboutcode.org/).

  * [Max Huber](https://github.com/maxhbr) for [LDBcollector](https://github.com/maxhbr/LDBcollector)

  * [OSADL](https://www.osadl.org) for their [License Compatibility Matrix](https://www.osadl.org/Access-to-raw-data.oss-compliance-raw-data-access.0.html)





  We fix your license expressions with the following methods (listed in order)



  With our database we can replace a license like "GPLv2+" to the SPDX
  identifier "GPL-2.0-or-later". We do this by searching for needles and
  replace them. To search for needles, in our case license expressions,
  (e.g. "BSD 0-Clause") to replace (with e.g. "0BSD") we use the
  following strategy:

  * list all needles in order of length, longest first

  * for each needle find and replace

  This is a naive approach but given the limited data at hand it should work.



  Some compound licenses (e.g. "GPL-2.0-only WITH
  Classpath-exception-2.0") are stated incorrectly (e.g. "GPL-2.0-only
  AND Classpath-exception-2.0") or as a singe license
  (""GPL-2.0-with-classpath-exception). The license expression is
  scanned for licenses as listed in `var/compounds.json` and replaced
  accordingly.



  The license expression is scanned for operators as listed in
  `var/operators.json` and replaced accordingly (e.g. "||" is replaced
  by "OR").



  Some licenses have a built in dual license feature
  (e.g. "GPL-2.0-or-later"). We replace such licenses with the
  corresponding dual licenses.

  As an example: "GPL-2.0-or-later" is replacde by "(GPL-2.0-only OR GPL-3.0-only")



  Some licenses are not supported by the OSADL license matrix (e.g.
  "X11-Style (Keith Packard)") but the license is very similar and has
  the same compatibility towards other licenses as another license
  (e.g. "HPND").

  To allow for tools (e.g. flict) to check compatibility of an inbound
  license expression against an outbound license expression we replace
  the unknown license with the known and with same compatibility.






  See [Python API](https://github.com/hesa/foss-licenses/blob/main/PYTHON_API.md)



  You can extend [flame](https://github.com/hesa/foss-licenses/blob/main/FLAME.md), the command line program, in two different ways:

  * using the option `additional-license-dir`

  * using the environment variable `FLAME_USER_CONFIG`



  Assuming you want to extend flame with the licenses located in the directory `more-licenses` and then list the licenses (using the command `licenses`):

  ```
  flame --additional-license-dir more-licenses licenses
  ```



  You have a config file, called `flame-config.json`, with the variable `additional-license-dir`set to `more-licenses`, like this:

  ```
  {
      "additional-license-dir": "./more-licenses/"
  }
  ```

  then you can start `flame` to read the config file like this:

  ```
  FLAME_USER_CONFIG=flame-config.json flame licenses
  ```


pkgId: 07d6b2609bf974a662297447ec52d99d79fd2af6add9083537bb15ec1aa3ab1a
name: python-fotolab-help
arch: noarch
version: 0.22.1
epoch: 0
release: 1
summary: Development documents and examples for fotolab
url: https://pypi.org/project/fotolab/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fotolab-0.22.1-1.src.rpm
location_href: Packages/python-fotolab-help-0.22.1-1.noarch.rpm
checksum_type: sha256
description:
  A console program to manipulate photos.



  Stable version From PyPI using `pipx`:

  ```console
  pipx install fotolab
  ```

  Stable version From PyPI using `pip`:

  ```console
  python -m pip install fotolab
  ```

  Upgrade to latest stable version:

  ```console
  python3 -m pip install fotolab --upgrade
  ```

  Latest development version from GitHub:

  ```console
  python -m pip install -e git+https://github.com/kianmeng/fotolab.git
  ```



  ```console
  fotolab -h
  ```

  <!--help !-->

  ```console
  usage: fotolab [-h] [-o] [-op] [-od OUTPUT_DIR] [-q] [-v] [-d] [-V]
                 {animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env} ...

  A console program to manipulate photos.

  website: https://github.com/kianmeng/fotolab
  changelog: https://github.com/kianmeng/fotolab/blob/master/CHANGELOG.md
  issues: https://github.com/kianmeng/fotolab/issues

  positional arguments:
    {animate,auto,border,contrast,info,resize,rotate,montage,sharpen,watermark,env}
                      sub-command help
      animate         animate an image
      auto            auto adjust (resize, contrast, and watermark) a photo
      border          add border to image
      contrast        contrast an image
      info            info an image
      resize          resize an image
      rotate          rotate an image
      montage         montage a list of image
      sharpen         sharpen an image
      watermark       watermark an image
      env             print environment information for bug reporting

  options:
    -h, --help        show this help message and exit
    -o, --overwrite   overwrite existing image
    -op, --open       open the image using default program (default: 'False')
    -od, --output-dir OUTPUT_DIR
                      set default output folder (default: 'output')
    -q, --quiet       suppress all logging
    -v, --verbose     show verbosity of debugging log, use -vv, -vvv for more details
    -d, --debug       show debugging log and stacktrace
    -V, --version     show program's version number and exit
  ```

  <!--help !-->



  ```console
  fotolab animate -h
  ```

  <!--help-animate !-->

  ```console
  usage: fotolab animate [-h] [-f FORMAT] [-d DURATION] [-l LOOP]
                         IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES       set the image filenames

  options:
    -h, --help            show this help message and exit
    -f, --format FORMAT   set the image format (default: 'gif')
    -d, --duration DURATION
                          set the duration in milliseconds (default: '2500')
    -l, --loop LOOP       set the loop cycle (default: '0')
  ```

  <!--help-animate !-->



  ```console
  fotolab auto -h
  ```

  <!--help-auto !-->

  ```console
  usage: fotolab auto [-h] IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES  set the image filename

  options:
    -h, --help       show this help message and exit
  ```

  <!--help-auto !-->



  ```console
  fotolab border -h
  ```

  <!--help-border !-->

  ```console
  usage: fotolab border [-h] [-c COLOR] [-w WIDTH] [-wt WIDTH] [-wr WIDTH]
                        [-wb WIDTH] [-wl WIDTH]
                        IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES       set the image filenames

  options:
    -h, --help            show this help message and exit
    -c, --color COLOR     set the color of border (default: 'black')
    -w, --width WIDTH     set the width of border (default: '10')
    -wt, --width-top WIDTH
                          set the width of top border (default: '0')
    -wr, --width-right WIDTH
                          set the width of right border (default: '0')
    -wb, --width-bottom WIDTH
                          set the width of bottom border (default: '0')
    -wl, --width-left WIDTH
                          set the width of left border (default: '0')
  ```

  <!--help-border !-->



  ```console
  fotolab contrast -h
  ```

  <!--help-contrast !-->

  ```console
  usage: fotolab contrast [-h] [-c CUTOFF] IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES      set the image filename

  options:
    -h, --help           show this help message and exit
    -c, --cutoff CUTOFF  set the percentage of lightest or darkest pixels to
                         discard from histogram (default: '1')
  ```

  <!--help-contrast !-->



  ```console
  fotolab info -h
  ```

  <!--help-info !-->

  ```console
  usage: fotolab info [-h] [-s] [--camera] IMAGE_FILENAME

  positional arguments:
    IMAGE_FILENAME  set the image filename

  options:
    -h, --help      show this help message and exit
    -s, --sort      show image info by sorted field name
    --camera        show the camera maker details
  ```

  <!--help-info !-->



  ```console
  fotolab rotate -h
  ```

  <!--help-rotate !-->

  ```console
  usage: fotolab rotate [-h] IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES  set the image filenames

  options:
    -h, --help       show this help message and exit
  ```

  <!--help-rotate !-->



  ```console
  fotolab montage -h
  ```

  <!--help-montage !-->

  ```console
  usage: fotolab montage [-h] IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES  set the image filenames

  options:
    -h, --help       show this help message and exit
  ```

  <!--help-montage !-->



  ```console
  fotolab resize -h
  ```

  <!--help-resize !-->

  ```console
  usage: fotolab resize [-h] [-c] [-l CANVAS_COLOR] [-W WIDTH | -H HEIGHT]
                        IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES       set the image filename

  options:
    -h, --help            show this help message and exit
    -c, --canvas          paste image onto a larger canvas
    -l, --canvas-color CANVAS_COLOR
                          the color of the extended larger canvas(default:
                          'black')
    -W, --width WIDTH     set the width of the image (default: '600')
    -H, --height HEIGHT   set the height of the image (default: '277')
  ```

  <!--help-resize !-->



  ```console
  fotolab sharpen -h
  ```

  <!--help-sharpen !-->

  ```console
  usage: fotolab sharpen [-h] [-r RADIUS] [-p PERCENT] [-t THRESHOLD]
                         IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES       set the image filenames

  options:
    -h, --help            show this help message and exit
    -r, --radius RADIUS   set the radius or size of edges (default: '1')
    -p, --percent PERCENT
                          set the amount of overall strength of sharpening
                          effect (default: '100')
    -t, --threshold THRESHOLD
                          set the minimum brightness changed to be sharpened
                          (default: '3')
  ```

  <!--help-sharpen !-->



  ```console
  fotolab watermark -h
  ```

  <!--help-watermark !-->

  ```console
  usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
                           [-p {top-left,top-right,bottom-left,bottom-right}]
                           [-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
                           [-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
                           [-l | --lowercase | --no-lowercase]
                           IMAGE_FILENAMES [IMAGE_FILENAMES ...]

  positional arguments:
    IMAGE_FILENAMES       set the image filenames

  options:
    -h, --help            show this help message and exit
    -t, --text WATERMARK_TEXT
                          set the watermark text (default: 'kianmeng.org')
    -p, --position {top-left,top-right,bottom-left,bottom-right}
                          set position of the watermark text (default: 'bottom-
                          left')
    -pd, --padding PADDING
                          set the padding of the watermark text relative to the
                          image (default: '15')
    -fs, --font-size FONT_SIZE
                          set the font size of watermark text (default: '12')
    -fc, --font-color FONT_COLOR
                          set the font color of watermark text (default:
                          'white')
    -ow, --outline-width OUTLINE_WIDTH
                          set the outline width of the watermark text (default:
                          '2')
    -oc, --outline-color OUTLINE_COLOR
                          set the outline color of the watermark text (default:
                          'black')
    --camera              use camera metadata as watermark
    -l, --lowercase, --no-lowercase
                          lowercase the watermark text
  ```

  <!--help-watermark !-->



  ```console
  fotolab env -h
  ```

  <!--help-env !-->

  ```console
  usage: fotolab env [-h]

  options:
    -h, --help  show this help message and exit
  ```

  <!--help-env !-->



  Copyright (C) 2024 Kian-Meng Ang

  This program is free software: you can redistribute it and/or modify it under
  the terms of the GNU Affero General Public License as published by the Free
  Software Foundation, either version 3 of the License, or (at your option) any
  later version.

  This program is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

  You should have received a copy of the GNU Affero General Public License along
  with this program. If not, see <https://www.gnu.org/licenses/>.

  The fish logo used in the documentation generated by Sphinx is a public domain
  drawing of male freshwater phase [Sockeye (red) salmon (Oncorhynchus nerka)]
  (https://en.wikipedia.org/w/index.php?oldid=1186575702) from
  <https://commons.wikimedia.org/entity/M2787002>.


pkgId: 8f433464c1c1802f9110606c886c63932faaa5a360937b8cc4a30d8e070345ca
name: python-foundationallm-help
arch: noarch
version: 0.8.1
epoch: 0
release: 1
summary: Development documents and examples for foundationallm
url: https://foundationallm.ai
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foundationallm-0.8.1-1.src.rpm
location_href: Packages/python-foundationallm-help-0.8.1-1.noarch.rpm
checksum_type: sha256
description:
  This package enables integration with the FoundationaLLM platform.

  To package and publish the package run the following commands (in the folder where `pyproject.toml` is located):

  ```cmd
  python -m pip install --upgrade build
  python -m pip install --upgrade twine

  python -m build
  python -m twine upload dist/*
  ```


pkgId: 17cfc5475844ae1a9e92af2b101226f40689b283efaad7d29311d5ea7521102b
name: python-foundry-platform-sdk-help
arch: noarch
version: 0.55.0
epoch: 0
release: 1
summary: Development documents and examples for foundry-platform-sdk
url: https://github.com/palantir/foundry-platform-python
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foundry-platform-sdk-0.55.0-1.src.rpm
location_href: Packages/python-foundry-platform-sdk-help-0.55.0-1.noarch.rpm
checksum_type: sha256
description:
  **Admin** | Group | [**create**](docs/v2/Admin/Group.md#create) | **POST** /v2/admin/groups |
  **Admin** | Group | [**delete**](docs/v2/Admin/Group.md#delete) | **DELETE** /v2/admin/groups/{groupId} |
  **Admin** | Group | [**get**](docs/v2/Admin/Group.md#get) | **GET** /v2/admin/groups/{groupId} |
  **Admin** | Group | [**get_batch**](docs/v2/Admin/Group.md#get_batch) | **POST** /v2/admin/groups/getBatch |
  **Admin** | Group | [**list**](docs/v2/Admin/Group.md#list) | **GET** /v2/admin/groups |
  **Admin** | Group | [**page**](docs/v2/Admin/Group.md#page) | **GET** /v2/admin/groups |
  **Admin** | Group | [**search**](docs/v2/Admin/Group.md#search) | **POST** /v2/admin/groups/search |
  **Admin** | GroupMember | [**add**](docs/v2/Admin/GroupMember.md#add) | **POST** /v2/admin/groups/{groupId}/groupMembers/add |
  **Admin** | GroupMember | [**list**](docs/v2/Admin/GroupMember.md#list) | **GET** /v2/admin/groups/{groupId}/groupMembers |
  **Admin** | GroupMember | [**page**](docs/v2/Admin/GroupMember.md#page) | **GET** /v2/admin/groups/{groupId}/groupMembers |
  **Admin** | GroupMember | [**remove**](docs/v2/Admin/GroupMember.md#remove) | **POST** /v2/admin/groups/{groupId}/groupMembers/remove |
  **Admin** | GroupMembership | [**list**](docs/v2/Admin/GroupMembership.md#list) | **GET** /v2/admin/users/{userId}/groupMemberships |
  **Admin** | GroupMembership | [**page**](docs/v2/Admin/GroupMembership.md#page) | **GET** /v2/admin/users/{userId}/groupMemberships |
  **Admin** | MarkingMember | [**add**](docs/v2/Admin/MarkingMember.md#add) | **POST** /v2/admin/markings/{markingId}/markingMembers/add |
  **Admin** | MarkingMember | [**list**](docs/v2/Admin/MarkingMember.md#list) | **GET** /v2/admin/markings/{markingId}/markingMembers |
  **Admin** | MarkingMember | [**page**](docs/v2/Admin/MarkingMember.md#page) | **GET** /v2/admin/markings/{markingId}/markingMembers |
  **Admin** | MarkingMember | [**remove**](docs/v2/Admin/MarkingMember.md#remove) | **POST** /v2/admin/markings/{markingId}/markingMembers/remove |
  **Admin** | User | [**delete**](docs/v2/Admin/User.md#delete) | **DELETE** /v2/admin/users/{userId} |
  **Admin** | User | [**get**](docs/v2/Admin/User.md#get) | **GET** /v2/admin/users/{userId} |
  **Admin** | User | [**get_batch**](docs/v2/Admin/User.md#get_batch) | **POST** /v2/admin/users/getBatch |
  **Admin** | User | [**get_current**](docs/v2/Admin/User.md#get_current) | **GET** /v2/admin/users/getCurrent |
  **Admin** | User | [**list**](docs/v2/Admin/User.md#list) | **GET** /v2/admin/users |
  **Admin** | User | [**page**](docs/v2/Admin/User.md#page) | **GET** /v2/admin/users |
  **Admin** | User | [**profile_picture**](docs/v2/Admin/User.md#profile_picture) | **GET** /v2/admin/users/{userId}/profilePicture |
  **Admin** | User | [**search**](docs/v2/Admin/User.md#search) | **POST** /v2/admin/users/search |
  **AipAgents** | Agent | [**all_sessions**](docs/v2/AipAgents/Agent.md#all_sessions) | **GET** /v2/aipAgents/agents/allSessions |
  **AipAgents** | Agent | [**all_sessions_page**](docs/v2/AipAgents/Agent.md#all_sessions_page) | **GET** /v2/aipAgents/agents/allSessions |
  **AipAgents** | Agent | [**get**](docs/v2/AipAgents/Agent.md#get) | **GET** /v2/aipAgents/agents/{agentRid} |
  **AipAgents** | AgentVersion | [**get**](docs/v2/AipAgents/AgentVersion.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions/{agentVersionString} |
  **AipAgents** | AgentVersion | [**list**](docs/v2/AipAgents/AgentVersion.md#list) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions |
  **AipAgents** | AgentVersion | [**page**](docs/v2/AipAgents/AgentVersion.md#page) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions |
  **AipAgents** | Content | [**get**](docs/v2/AipAgents/Content.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/content |
  **AipAgents** | Session | [**blocking_continue**](docs/v2/AipAgents/Session.md#blocking_continue) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/blockingContinue |
  **AipAgents** | Session | [**cancel**](docs/v2/AipAgents/Session.md#cancel) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/cancel |
  **AipAgents** | Session | [**create**](docs/v2/AipAgents/Session.md#create) | **POST** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**get**](docs/v2/AipAgents/Session.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid} |
  **AipAgents** | Session | [**list**](docs/v2/AipAgents/Session.md#list) | **GET** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**page**](docs/v2/AipAgents/Session.md#page) | **GET** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**rag_context**](docs/v2/AipAgents/Session.md#rag_context) | **PUT** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/ragContext |
  **AipAgents** | Session | [**streaming_continue**](docs/v2/AipAgents/Session.md#streaming_continue) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/streamingContinue |
  **Connectivity** | Connection | [**update_secrets**](docs/v2/Connectivity/Connection.md#update_secrets) | **POST** /v2/connectivity/connections/{connectionRid}/updateSecrets |
  **Connectivity** | FileImport | [**create**](docs/v2/Connectivity/FileImport.md#create) | **POST** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Connectivity** | FileImport | [**delete**](docs/v2/Connectivity/FileImport.md#delete) | **DELETE** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid} |
  **Connectivity** | FileImport | [**execute**](docs/v2/Connectivity/FileImport.md#execute) | **POST** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid}/execute |
  **Connectivity** | FileImport | [**get**](docs/v2/Connectivity/FileImport.md#get) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid} |
  **Connectivity** | FileImport | [**list**](docs/v2/Connectivity/FileImport.md#list) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Connectivity** | FileImport | [**page**](docs/v2/Connectivity/FileImport.md#page) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Datasets** | Branch | [**create**](docs/v2/Datasets/Branch.md#create) | **POST** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Branch | [**delete**](docs/v2/Datasets/Branch.md#delete) | **DELETE** /v2/datasets/{datasetRid}/branches/{branchName} |
  **Datasets** | Branch | [**get**](docs/v2/Datasets/Branch.md#get) | **GET** /v2/datasets/{datasetRid}/branches/{branchName} |
  **Datasets** | Branch | [**list**](docs/v2/Datasets/Branch.md#list) | **GET** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Branch | [**page**](docs/v2/Datasets/Branch.md#page) | **GET** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Dataset | [**create**](docs/v2/Datasets/Dataset.md#create) | **POST** /v2/datasets |
  **Datasets** | Dataset | [**get**](docs/v2/Datasets/Dataset.md#get) | **GET** /v2/datasets/{datasetRid} |
  **Datasets** | Dataset | [**read_table**](docs/v2/Datasets/Dataset.md#read_table) | **GET** /v2/datasets/{datasetRid}/readTable |
  **Datasets** | File | [**content**](docs/v2/Datasets/File.md#content) | **GET** /v2/datasets/{datasetRid}/files/{filePath}/content |
  **Datasets** | File | [**delete**](docs/v2/Datasets/File.md#delete) | **DELETE** /v2/datasets/{datasetRid}/files/{filePath} |
  **Datasets** | File | [**get**](docs/v2/Datasets/File.md#get) | **GET** /v2/datasets/{datasetRid}/files/{filePath} |
  **Datasets** | File | [**list**](docs/v2/Datasets/File.md#list) | **GET** /v2/datasets/{datasetRid}/files |
  **Datasets** | File | [**page**](docs/v2/Datasets/File.md#page) | **GET** /v2/datasets/{datasetRid}/files |
  **Datasets** | File | [**upload**](docs/v2/Datasets/File.md#upload) | **POST** /v2/datasets/{datasetRid}/files/{filePath}/upload |
  **Datasets** | Transaction | [**abort**](docs/v2/Datasets/Transaction.md#abort) | **POST** /v2/datasets/{datasetRid}/transactions/{transactionRid}/abort |
  **Datasets** | Transaction | [**commit**](docs/v2/Datasets/Transaction.md#commit) | **POST** /v2/datasets/{datasetRid}/transactions/{transactionRid}/commit |
  **Datasets** | Transaction | [**create**](docs/v2/Datasets/Transaction.md#create) | **POST** /v2/datasets/{datasetRid}/transactions |
  **Datasets** | Transaction | [**get**](docs/v2/Datasets/Transaction.md#get) | **GET** /v2/datasets/{datasetRid}/transactions/{transactionRid} |
  **Filesystem** | Folder | [**children**](docs/v2/Filesystem/Folder.md#children) | **GET** /v2/filesystem/folders/{folderRid}/children |
  **Filesystem** | Folder | [**children_page**](docs/v2/Filesystem/Folder.md#children_page) | **GET** /v2/filesystem/folders/{folderRid}/children |
  **Filesystem** | Folder | [**create**](docs/v2/Filesystem/Folder.md#create) | **POST** /v2/filesystem/folders |
  **Filesystem** | Folder | [**get**](docs/v2/Filesystem/Folder.md#get) | **GET** /v2/filesystem/folders/{folderRid} |
  **OntologiesV2** | Action | [**apply**](docs/v2/OntologiesV2/Action.md#apply) | **POST** /v2/ontologies/{ontology}/actions/{action}/apply |
  **OntologiesV2** | Action | [**apply_batch**](docs/v2/OntologiesV2/Action.md#apply_batch) | **POST** /v2/ontologies/{ontology}/actions/{action}/applyBatch |
  **OntologiesV2** | ActionTypeV2 | [**get**](docs/v2/OntologiesV2/ActionTypeV2.md#get) | **GET** /v2/ontologies/{ontology}/actionTypes/{actionType} |
  **OntologiesV2** | ActionTypeV2 | [**list**](docs/v2/OntologiesV2/ActionTypeV2.md#list) | **GET** /v2/ontologies/{ontology}/actionTypes |
  **OntologiesV2** | ActionTypeV2 | [**page**](docs/v2/OntologiesV2/ActionTypeV2.md#page) | **GET** /v2/ontologies/{ontology}/actionTypes |
  **OntologiesV2** | Attachment | [**get**](docs/v2/OntologiesV2/Attachment.md#get) | **GET** /v2/ontologies/attachments/{attachmentRid} |
  **OntologiesV2** | Attachment | [**read**](docs/v2/OntologiesV2/Attachment.md#read) | **GET** /v2/ontologies/attachments/{attachmentRid}/content |
  **OntologiesV2** | Attachment | [**upload**](docs/v2/OntologiesV2/Attachment.md#upload) | **POST** /v2/ontologies/attachments/upload |
  **OntologiesV2** | AttachmentPropertyV2 | [**get_attachment**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#get_attachment) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property} |
  **OntologiesV2** | AttachmentPropertyV2 | [**get_attachment_by_rid**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#get_attachment_by_rid) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/{attachmentRid} |
  **OntologiesV2** | AttachmentPropertyV2 | [**read_attachment**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#read_attachment) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/content |
  **OntologiesV2** | AttachmentPropertyV2 | [**read_attachment_by_rid**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#read_attachment_by_rid) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/{attachmentRid}/content |
  **OntologiesV2** | LinkedObjectV2 | [**get_linked_object**](docs/v2/OntologiesV2/LinkedObjectV2.md#get_linked_object) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType}/{linkedObjectPrimaryKey} |
  **OntologiesV2** | LinkedObjectV2 | [**list_linked_objects**](docs/v2/OntologiesV2/LinkedObjectV2.md#list_linked_objects) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType} |
  **OntologiesV2** | LinkedObjectV2 | [**page_linked_objects**](docs/v2/OntologiesV2/LinkedObjectV2.md#page_linked_objects) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType} |
  **OntologiesV2** | ObjectTypeV2 | [**get**](docs/v2/OntologiesV2/ObjectTypeV2.md#get) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType} |
  **OntologiesV2** | ObjectTypeV2 | [**get_outgoing_link_type**](docs/v2/OntologiesV2/ObjectTypeV2.md#get_outgoing_link_type) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes/{linkType} |
  **OntologiesV2** | ObjectTypeV2 | [**list**](docs/v2/OntologiesV2/ObjectTypeV2.md#list) | **GET** /v2/ontologies/{ontology}/objectTypes |
  **OntologiesV2** | ObjectTypeV2 | [**list_outgoing_link_types**](docs/v2/OntologiesV2/ObjectTypeV2.md#list_outgoing_link_types) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes |
  **OntologiesV2** | ObjectTypeV2 | [**page**](docs/v2/OntologiesV2/ObjectTypeV2.md#page) | **GET** /v2/ontologies/{ontology}/objectTypes |
  **OntologiesV2** | ObjectTypeV2 | [**page_outgoing_link_types**](docs/v2/OntologiesV2/ObjectTypeV2.md#page_outgoing_link_types) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes |
  **OntologiesV2** | OntologyObjectSet | [**aggregate**](docs/v2/OntologiesV2/OntologyObjectSet.md#aggregate) | **POST** /v2/ontologies/{ontology}/objectSets/aggregate |
  **OntologiesV2** | OntologyObjectSet | [**load**](docs/v2/OntologiesV2/OntologyObjectSet.md#load) | **POST** /v2/ontologies/{ontology}/objectSets/loadObjects |
  **OntologiesV2** | OntologyObjectV2 | [**aggregate**](docs/v2/OntologiesV2/OntologyObjectV2.md#aggregate) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/aggregate |
  **OntologiesV2** | OntologyObjectV2 | [**get**](docs/v2/OntologiesV2/OntologyObjectV2.md#get) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey} |
  **OntologiesV2** | OntologyObjectV2 | [**list**](docs/v2/OntologiesV2/OntologyObjectV2.md#list) | **GET** /v2/ontologies/{ontology}/objects/{objectType} |
  **OntologiesV2** | OntologyObjectV2 | [**page**](docs/v2/OntologiesV2/OntologyObjectV2.md#page) | **GET** /v2/ontologies/{ontology}/objects/{objectType} |
  **OntologiesV2** | OntologyObjectV2 | [**search**](docs/v2/OntologiesV2/OntologyObjectV2.md#search) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/search |
  **OntologiesV2** | OntologyV2 | [**get**](docs/v2/OntologiesV2/OntologyV2.md#get) | **GET** /v2/ontologies/{ontology} |
  **OntologiesV2** | Query | [**execute**](docs/v2/OntologiesV2/Query.md#execute) | **POST** /v2/ontologies/{ontology}/queries/{queryApiName}/execute |
  **OntologiesV2** | QueryType | [**get**](docs/v2/OntologiesV2/QueryType.md#get) | **GET** /v2/ontologies/{ontology}/queryTypes/{queryApiName} |
  **OntologiesV2** | QueryType | [**list**](docs/v2/OntologiesV2/QueryType.md#list) | **GET** /v2/ontologies/{ontology}/queryTypes |
  **OntologiesV2** | QueryType | [**page**](docs/v2/OntologiesV2/QueryType.md#page) | **GET** /v2/ontologies/{ontology}/queryTypes |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**get_first_point**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#get_first_point) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/firstPoint |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**get_last_point**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#get_last_point) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/lastPoint |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**stream_points**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#stream_points) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/streamPoints |
  **Orchestration** | Build | [**cancel**](docs/v2/Orchestration/Build.md#cancel) | **POST** /v2/orchestration/builds/{buildRid}/cancel |
  **Orchestration** | Build | [**create**](docs/v2/Orchestration/Build.md#create) | **POST** /v2/orchestration/builds/create |
  **Orchestration** | Build | [**get**](docs/v2/Orchestration/Build.md#get) | **GET** /v2/orchestration/builds/{buildRid} |
  **Orchestration** | Schedule | [**create**](docs/v2/Orchestration/Schedule.md#create) | **POST** /v2/orchestration/schedules |
  **Orchestration** | Schedule | [**delete**](docs/v2/Orchestration/Schedule.md#delete) | **DELETE** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**get**](docs/v2/Orchestration/Schedule.md#get) | **GET** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**pause**](docs/v2/Orchestration/Schedule.md#pause) | **POST** /v2/orchestration/schedules/{scheduleRid}/pause |
  **Orchestration** | Schedule | [**replace**](docs/v2/Orchestration/Schedule.md#replace) | **PUT** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**run**](docs/v2/Orchestration/Schedule.md#run) | **POST** /v2/orchestration/schedules/{scheduleRid}/run |
  **Orchestration** | Schedule | [**runs**](docs/v2/Orchestration/Schedule.md#runs) | **GET** /v2/orchestration/schedules/{scheduleRid}/runs |
  **Orchestration** | Schedule | [**runs_page**](docs/v2/Orchestration/Schedule.md#runs_page) | **GET** /v2/orchestration/schedules/{scheduleRid}/runs |
  **Orchestration** | Schedule | [**unpause**](docs/v2/Orchestration/Schedule.md#unpause) | **POST** /v2/orchestration/schedules/{scheduleRid}/unpause |
  **Orchestration** | ScheduleVersion | [**get**](docs/v2/Orchestration/ScheduleVersion.md#get) | **GET** /v2/orchestration/scheduleVersions/{scheduleVersionRid} |
  **Orchestration** | ScheduleVersion | [**schedule**](docs/v2/Orchestration/ScheduleVersion.md#schedule) | **GET** /v2/orchestration/scheduleVersions/{scheduleVersionRid}/schedule |
  **Streams** | Dataset | [**create**](docs/v2/Streams/Dataset.md#create) | **POST** /v2/streams/datasets/create |
  **Streams** | Stream | [**create**](docs/v2/Streams/Stream.md#create) | **POST** /v2/streams/datasets/{datasetRid}/streams |
  **Streams** | Stream | [**get**](docs/v2/Streams/Stream.md#get) | **GET** /v2/streams/datasets/{datasetRid}/streams/{streamBranchName} |
  **Streams** | Stream | [**publish_binary_record**](docs/v2/Streams/Stream.md#publish_binary_record) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishBinaryRecord |
  **Streams** | Stream | [**publish_record**](docs/v2/Streams/Stream.md#publish_record) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishRecord |
  **Streams** | Stream | [**publish_records**](docs/v2/Streams/Stream.md#publish_records) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishRecords |
  **Streams** | Stream | [**reset**](docs/v2/Streams/Stream.md#reset) | **POST** /v2/streams/datasets/{datasetRid}/streams/{streamBranchName}/reset |
  **ThirdPartyApplications** | Version | [**delete**](docs/v2/ThirdPartyApplications/Version.md#delete) | **DELETE** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/{versionVersion} |
  **ThirdPartyApplications** | Version | [**get**](docs/v2/ThirdPartyApplications/Version.md#get) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/{versionVersion} |
  **ThirdPartyApplications** | Version | [**list**](docs/v2/ThirdPartyApplications/Version.md#list) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions |
  **ThirdPartyApplications** | Version | [**page**](docs/v2/ThirdPartyApplications/Version.md#page) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions |
  **ThirdPartyApplications** | Version | [**upload**](docs/v2/ThirdPartyApplications/Version.md#upload) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/upload |
  **ThirdPartyApplications** | Website | [**deploy**](docs/v2/ThirdPartyApplications/Website.md#deploy) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/deploy |
  **ThirdPartyApplications** | Website | [**get**](docs/v2/ThirdPartyApplications/Website.md#get) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website |
  **ThirdPartyApplications** | Website | [**undeploy**](docs/v2/ThirdPartyApplications/Website.md#undeploy) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/undeploy |
  <a id="apis-v1-link"></a>


pkgId: 4d1be8ba4795054011f1b473724b91957f2a1a2d7aff2ccd9e4cf46c387fdc9d
name: python-foundry-platform-sdk-help
arch: noarch
version: 0.59.0
epoch: 0
release: 1
summary: Development documents and examples for foundry-platform-sdk
url: https://github.com/palantir/foundry-platform-python
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foundry-platform-sdk-0.59.0-1.src.rpm
location_href: Packages/python-foundry-platform-sdk-help-0.59.0-1.noarch.rpm
checksum_type: sha256
description:
  **Admin** | Group | [**create**](docs/v2/Admin/Group.md#create) | **POST** /v2/admin/groups |
  **Admin** | Group | [**delete**](docs/v2/Admin/Group.md#delete) | **DELETE** /v2/admin/groups/{groupId} |
  **Admin** | Group | [**get**](docs/v2/Admin/Group.md#get) | **GET** /v2/admin/groups/{groupId} |
  **Admin** | Group | [**get_batch**](docs/v2/Admin/Group.md#get_batch) | **POST** /v2/admin/groups/getBatch |
  **Admin** | Group | [**list**](docs/v2/Admin/Group.md#list) | **GET** /v2/admin/groups |
  **Admin** | Group | [**page**](docs/v2/Admin/Group.md#page) | **GET** /v2/admin/groups |
  **Admin** | Group | [**search**](docs/v2/Admin/Group.md#search) | **POST** /v2/admin/groups/search |
  **Admin** | GroupMember | [**add**](docs/v2/Admin/GroupMember.md#add) | **POST** /v2/admin/groups/{groupId}/groupMembers/add |
  **Admin** | GroupMember | [**list**](docs/v2/Admin/GroupMember.md#list) | **GET** /v2/admin/groups/{groupId}/groupMembers |
  **Admin** | GroupMember | [**page**](docs/v2/Admin/GroupMember.md#page) | **GET** /v2/admin/groups/{groupId}/groupMembers |
  **Admin** | GroupMember | [**remove**](docs/v2/Admin/GroupMember.md#remove) | **POST** /v2/admin/groups/{groupId}/groupMembers/remove |
  **Admin** | GroupMembership | [**list**](docs/v2/Admin/GroupMembership.md#list) | **GET** /v2/admin/users/{userId}/groupMemberships |
  **Admin** | GroupMembership | [**page**](docs/v2/Admin/GroupMembership.md#page) | **GET** /v2/admin/users/{userId}/groupMemberships |
  **Admin** | MarkingMember | [**add**](docs/v2/Admin/MarkingMember.md#add) | **POST** /v2/admin/markings/{markingId}/markingMembers/add |
  **Admin** | MarkingMember | [**list**](docs/v2/Admin/MarkingMember.md#list) | **GET** /v2/admin/markings/{markingId}/markingMembers |
  **Admin** | MarkingMember | [**page**](docs/v2/Admin/MarkingMember.md#page) | **GET** /v2/admin/markings/{markingId}/markingMembers |
  **Admin** | MarkingMember | [**remove**](docs/v2/Admin/MarkingMember.md#remove) | **POST** /v2/admin/markings/{markingId}/markingMembers/remove |
  **Admin** | User | [**delete**](docs/v2/Admin/User.md#delete) | **DELETE** /v2/admin/users/{userId} |
  **Admin** | User | [**get**](docs/v2/Admin/User.md#get) | **GET** /v2/admin/users/{userId} |
  **Admin** | User | [**get_batch**](docs/v2/Admin/User.md#get_batch) | **POST** /v2/admin/users/getBatch |
  **Admin** | User | [**get_current**](docs/v2/Admin/User.md#get_current) | **GET** /v2/admin/users/getCurrent |
  **Admin** | User | [**list**](docs/v2/Admin/User.md#list) | **GET** /v2/admin/users |
  **Admin** | User | [**page**](docs/v2/Admin/User.md#page) | **GET** /v2/admin/users |
  **Admin** | User | [**profile_picture**](docs/v2/Admin/User.md#profile_picture) | **GET** /v2/admin/users/{userId}/profilePicture |
  **Admin** | User | [**search**](docs/v2/Admin/User.md#search) | **POST** /v2/admin/users/search |
  **AipAgents** | Agent | [**all_sessions**](docs/v2/AipAgents/Agent.md#all_sessions) | **GET** /v2/aipAgents/agents/allSessions |
  **AipAgents** | Agent | [**all_sessions_page**](docs/v2/AipAgents/Agent.md#all_sessions_page) | **GET** /v2/aipAgents/agents/allSessions |
  **AipAgents** | Agent | [**get**](docs/v2/AipAgents/Agent.md#get) | **GET** /v2/aipAgents/agents/{agentRid} |
  **AipAgents** | AgentVersion | [**get**](docs/v2/AipAgents/AgentVersion.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions/{agentVersionString} |
  **AipAgents** | AgentVersion | [**list**](docs/v2/AipAgents/AgentVersion.md#list) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions |
  **AipAgents** | AgentVersion | [**page**](docs/v2/AipAgents/AgentVersion.md#page) | **GET** /v2/aipAgents/agents/{agentRid}/agentVersions |
  **AipAgents** | Content | [**get**](docs/v2/AipAgents/Content.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/content |
  **AipAgents** | Session | [**blocking_continue**](docs/v2/AipAgents/Session.md#blocking_continue) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/blockingContinue |
  **AipAgents** | Session | [**cancel**](docs/v2/AipAgents/Session.md#cancel) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/cancel |
  **AipAgents** | Session | [**create**](docs/v2/AipAgents/Session.md#create) | **POST** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**get**](docs/v2/AipAgents/Session.md#get) | **GET** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid} |
  **AipAgents** | Session | [**list**](docs/v2/AipAgents/Session.md#list) | **GET** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**page**](docs/v2/AipAgents/Session.md#page) | **GET** /v2/aipAgents/agents/{agentRid}/sessions |
  **AipAgents** | Session | [**rag_context**](docs/v2/AipAgents/Session.md#rag_context) | **PUT** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/ragContext |
  **AipAgents** | Session | [**streaming_continue**](docs/v2/AipAgents/Session.md#streaming_continue) | **POST** /v2/aipAgents/agents/{agentRid}/sessions/{sessionRid}/streamingContinue |
  **Connectivity** | Connection | [**update_secrets**](docs/v2/Connectivity/Connection.md#update_secrets) | **POST** /v2/connectivity/connections/{connectionRid}/updateSecrets |
  **Connectivity** | FileImport | [**create**](docs/v2/Connectivity/FileImport.md#create) | **POST** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Connectivity** | FileImport | [**delete**](docs/v2/Connectivity/FileImport.md#delete) | **DELETE** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid} |
  **Connectivity** | FileImport | [**execute**](docs/v2/Connectivity/FileImport.md#execute) | **POST** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid}/execute |
  **Connectivity** | FileImport | [**get**](docs/v2/Connectivity/FileImport.md#get) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid} |
  **Connectivity** | FileImport | [**list**](docs/v2/Connectivity/FileImport.md#list) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Connectivity** | FileImport | [**page**](docs/v2/Connectivity/FileImport.md#page) | **GET** /v2/connectivity/connections/{connectionRid}/fileImports |
  **Datasets** | Branch | [**create**](docs/v2/Datasets/Branch.md#create) | **POST** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Branch | [**delete**](docs/v2/Datasets/Branch.md#delete) | **DELETE** /v2/datasets/{datasetRid}/branches/{branchName} |
  **Datasets** | Branch | [**get**](docs/v2/Datasets/Branch.md#get) | **GET** /v2/datasets/{datasetRid}/branches/{branchName} |
  **Datasets** | Branch | [**list**](docs/v2/Datasets/Branch.md#list) | **GET** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Branch | [**page**](docs/v2/Datasets/Branch.md#page) | **GET** /v2/datasets/{datasetRid}/branches |
  **Datasets** | Dataset | [**create**](docs/v2/Datasets/Dataset.md#create) | **POST** /v2/datasets |
  **Datasets** | Dataset | [**get**](docs/v2/Datasets/Dataset.md#get) | **GET** /v2/datasets/{datasetRid} |
  **Datasets** | Dataset | [**read_table**](docs/v2/Datasets/Dataset.md#read_table) | **GET** /v2/datasets/{datasetRid}/readTable |
  **Datasets** | File | [**content**](docs/v2/Datasets/File.md#content) | **GET** /v2/datasets/{datasetRid}/files/{filePath}/content |
  **Datasets** | File | [**delete**](docs/v2/Datasets/File.md#delete) | **DELETE** /v2/datasets/{datasetRid}/files/{filePath} |
  **Datasets** | File | [**get**](docs/v2/Datasets/File.md#get) | **GET** /v2/datasets/{datasetRid}/files/{filePath} |
  **Datasets** | File | [**list**](docs/v2/Datasets/File.md#list) | **GET** /v2/datasets/{datasetRid}/files |
  **Datasets** | File | [**page**](docs/v2/Datasets/File.md#page) | **GET** /v2/datasets/{datasetRid}/files |
  **Datasets** | File | [**upload**](docs/v2/Datasets/File.md#upload) | **POST** /v2/datasets/{datasetRid}/files/{filePath}/upload |
  **Datasets** | Transaction | [**abort**](docs/v2/Datasets/Transaction.md#abort) | **POST** /v2/datasets/{datasetRid}/transactions/{transactionRid}/abort |
  **Datasets** | Transaction | [**commit**](docs/v2/Datasets/Transaction.md#commit) | **POST** /v2/datasets/{datasetRid}/transactions/{transactionRid}/commit |
  **Datasets** | Transaction | [**create**](docs/v2/Datasets/Transaction.md#create) | **POST** /v2/datasets/{datasetRid}/transactions |
  **Datasets** | Transaction | [**get**](docs/v2/Datasets/Transaction.md#get) | **GET** /v2/datasets/{datasetRid}/transactions/{transactionRid} |
  **Filesystem** | Folder | [**children**](docs/v2/Filesystem/Folder.md#children) | **GET** /v2/filesystem/folders/{folderRid}/children |
  **Filesystem** | Folder | [**children_page**](docs/v2/Filesystem/Folder.md#children_page) | **GET** /v2/filesystem/folders/{folderRid}/children |
  **Filesystem** | Folder | [**create**](docs/v2/Filesystem/Folder.md#create) | **POST** /v2/filesystem/folders |
  **Filesystem** | Folder | [**get**](docs/v2/Filesystem/Folder.md#get) | **GET** /v2/filesystem/folders/{folderRid} |
  **OntologiesV2** | Action | [**apply**](docs/v2/OntologiesV2/Action.md#apply) | **POST** /v2/ontologies/{ontology}/actions/{action}/apply |
  **OntologiesV2** | Action | [**apply_batch**](docs/v2/OntologiesV2/Action.md#apply_batch) | **POST** /v2/ontologies/{ontology}/actions/{action}/applyBatch |
  **OntologiesV2** | ActionTypeV2 | [**get**](docs/v2/OntologiesV2/ActionTypeV2.md#get) | **GET** /v2/ontologies/{ontology}/actionTypes/{actionType} |
  **OntologiesV2** | ActionTypeV2 | [**list**](docs/v2/OntologiesV2/ActionTypeV2.md#list) | **GET** /v2/ontologies/{ontology}/actionTypes |
  **OntologiesV2** | ActionTypeV2 | [**page**](docs/v2/OntologiesV2/ActionTypeV2.md#page) | **GET** /v2/ontologies/{ontology}/actionTypes |
  **OntologiesV2** | Attachment | [**get**](docs/v2/OntologiesV2/Attachment.md#get) | **GET** /v2/ontologies/attachments/{attachmentRid} |
  **OntologiesV2** | Attachment | [**read**](docs/v2/OntologiesV2/Attachment.md#read) | **GET** /v2/ontologies/attachments/{attachmentRid}/content |
  **OntologiesV2** | Attachment | [**upload**](docs/v2/OntologiesV2/Attachment.md#upload) | **POST** /v2/ontologies/attachments/upload |
  **OntologiesV2** | AttachmentPropertyV2 | [**get_attachment**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#get_attachment) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property} |
  **OntologiesV2** | AttachmentPropertyV2 | [**get_attachment_by_rid**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#get_attachment_by_rid) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/{attachmentRid} |
  **OntologiesV2** | AttachmentPropertyV2 | [**read_attachment**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#read_attachment) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/content |
  **OntologiesV2** | AttachmentPropertyV2 | [**read_attachment_by_rid**](docs/v2/OntologiesV2/AttachmentPropertyV2.md#read_attachment_by_rid) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/attachments/{property}/{attachmentRid}/content |
  **OntologiesV2** | LinkedObjectV2 | [**get_linked_object**](docs/v2/OntologiesV2/LinkedObjectV2.md#get_linked_object) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType}/{linkedObjectPrimaryKey} |
  **OntologiesV2** | LinkedObjectV2 | [**list_linked_objects**](docs/v2/OntologiesV2/LinkedObjectV2.md#list_linked_objects) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType} |
  **OntologiesV2** | LinkedObjectV2 | [**page_linked_objects**](docs/v2/OntologiesV2/LinkedObjectV2.md#page_linked_objects) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/links/{linkType} |
  **OntologiesV2** | ObjectTypeV2 | [**get**](docs/v2/OntologiesV2/ObjectTypeV2.md#get) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType} |
  **OntologiesV2** | ObjectTypeV2 | [**get_outgoing_link_type**](docs/v2/OntologiesV2/ObjectTypeV2.md#get_outgoing_link_type) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes/{linkType} |
  **OntologiesV2** | ObjectTypeV2 | [**list**](docs/v2/OntologiesV2/ObjectTypeV2.md#list) | **GET** /v2/ontologies/{ontology}/objectTypes |
  **OntologiesV2** | ObjectTypeV2 | [**list_outgoing_link_types**](docs/v2/OntologiesV2/ObjectTypeV2.md#list_outgoing_link_types) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes |
  **OntologiesV2** | ObjectTypeV2 | [**page**](docs/v2/OntologiesV2/ObjectTypeV2.md#page) | **GET** /v2/ontologies/{ontology}/objectTypes |
  **OntologiesV2** | ObjectTypeV2 | [**page_outgoing_link_types**](docs/v2/OntologiesV2/ObjectTypeV2.md#page_outgoing_link_types) | **GET** /v2/ontologies/{ontology}/objectTypes/{objectType}/outgoingLinkTypes |
  **OntologiesV2** | OntologyObjectSet | [**aggregate**](docs/v2/OntologiesV2/OntologyObjectSet.md#aggregate) | **POST** /v2/ontologies/{ontology}/objectSets/aggregate |
  **OntologiesV2** | OntologyObjectSet | [**load**](docs/v2/OntologiesV2/OntologyObjectSet.md#load) | **POST** /v2/ontologies/{ontology}/objectSets/loadObjects |
  **OntologiesV2** | OntologyObjectV2 | [**aggregate**](docs/v2/OntologiesV2/OntologyObjectV2.md#aggregate) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/aggregate |
  **OntologiesV2** | OntologyObjectV2 | [**get**](docs/v2/OntologiesV2/OntologyObjectV2.md#get) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey} |
  **OntologiesV2** | OntologyObjectV2 | [**list**](docs/v2/OntologiesV2/OntologyObjectV2.md#list) | **GET** /v2/ontologies/{ontology}/objects/{objectType} |
  **OntologiesV2** | OntologyObjectV2 | [**page**](docs/v2/OntologiesV2/OntologyObjectV2.md#page) | **GET** /v2/ontologies/{ontology}/objects/{objectType} |
  **OntologiesV2** | OntologyObjectV2 | [**search**](docs/v2/OntologiesV2/OntologyObjectV2.md#search) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/search |
  **OntologiesV2** | OntologyV2 | [**get**](docs/v2/OntologiesV2/OntologyV2.md#get) | **GET** /v2/ontologies/{ontology} |
  **OntologiesV2** | Query | [**execute**](docs/v2/OntologiesV2/Query.md#execute) | **POST** /v2/ontologies/{ontology}/queries/{queryApiName}/execute |
  **OntologiesV2** | QueryType | [**get**](docs/v2/OntologiesV2/QueryType.md#get) | **GET** /v2/ontologies/{ontology}/queryTypes/{queryApiName} |
  **OntologiesV2** | QueryType | [**list**](docs/v2/OntologiesV2/QueryType.md#list) | **GET** /v2/ontologies/{ontology}/queryTypes |
  **OntologiesV2** | QueryType | [**page**](docs/v2/OntologiesV2/QueryType.md#page) | **GET** /v2/ontologies/{ontology}/queryTypes |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**get_first_point**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#get_first_point) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/firstPoint |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**get_last_point**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#get_last_point) | **GET** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/lastPoint |
  **OntologiesV2** | TimeSeriesPropertyV2 | [**stream_points**](docs/v2/OntologiesV2/TimeSeriesPropertyV2.md#stream_points) | **POST** /v2/ontologies/{ontology}/objects/{objectType}/{primaryKey}/timeseries/{property}/streamPoints |
  **Orchestration** | Build | [**cancel**](docs/v2/Orchestration/Build.md#cancel) | **POST** /v2/orchestration/builds/{buildRid}/cancel |
  **Orchestration** | Build | [**create**](docs/v2/Orchestration/Build.md#create) | **POST** /v2/orchestration/builds/create |
  **Orchestration** | Build | [**get**](docs/v2/Orchestration/Build.md#get) | **GET** /v2/orchestration/builds/{buildRid} |
  **Orchestration** | Build | [**get_batch**](docs/v2/Orchestration/Build.md#get_batch) | **POST** /v2/orchestration/builds/getBatch |
  **Orchestration** | Schedule | [**create**](docs/v2/Orchestration/Schedule.md#create) | **POST** /v2/orchestration/schedules |
  **Orchestration** | Schedule | [**delete**](docs/v2/Orchestration/Schedule.md#delete) | **DELETE** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**get**](docs/v2/Orchestration/Schedule.md#get) | **GET** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**pause**](docs/v2/Orchestration/Schedule.md#pause) | **POST** /v2/orchestration/schedules/{scheduleRid}/pause |
  **Orchestration** | Schedule | [**replace**](docs/v2/Orchestration/Schedule.md#replace) | **PUT** /v2/orchestration/schedules/{scheduleRid} |
  **Orchestration** | Schedule | [**run**](docs/v2/Orchestration/Schedule.md#run) | **POST** /v2/orchestration/schedules/{scheduleRid}/run |
  **Orchestration** | Schedule | [**runs**](docs/v2/Orchestration/Schedule.md#runs) | **GET** /v2/orchestration/schedules/{scheduleRid}/runs |
  **Orchestration** | Schedule | [**runs_page**](docs/v2/Orchestration/Schedule.md#runs_page) | **GET** /v2/orchestration/schedules/{scheduleRid}/runs |
  **Orchestration** | Schedule | [**unpause**](docs/v2/Orchestration/Schedule.md#unpause) | **POST** /v2/orchestration/schedules/{scheduleRid}/unpause |
  **Orchestration** | ScheduleVersion | [**get**](docs/v2/Orchestration/ScheduleVersion.md#get) | **GET** /v2/orchestration/scheduleVersions/{scheduleVersionRid} |
  **Orchestration** | ScheduleVersion | [**schedule**](docs/v2/Orchestration/ScheduleVersion.md#schedule) | **GET** /v2/orchestration/scheduleVersions/{scheduleVersionRid}/schedule |
  **Streams** | Dataset | [**create**](docs/v2/Streams/Dataset.md#create) | **POST** /v2/streams/datasets/create |
  **Streams** | Stream | [**create**](docs/v2/Streams/Stream.md#create) | **POST** /v2/streams/datasets/{datasetRid}/streams |
  **Streams** | Stream | [**get**](docs/v2/Streams/Stream.md#get) | **GET** /v2/streams/datasets/{datasetRid}/streams/{streamBranchName} |
  **Streams** | Stream | [**publish_binary_record**](docs/v2/Streams/Stream.md#publish_binary_record) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishBinaryRecord |
  **Streams** | Stream | [**publish_record**](docs/v2/Streams/Stream.md#publish_record) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishRecord |
  **Streams** | Stream | [**publish_records**](docs/v2/Streams/Stream.md#publish_records) | **POST** /v2/highScale/streams/datasets/{datasetRid}/streams/{streamBranchName}/publishRecords |
  **Streams** | Stream | [**reset**](docs/v2/Streams/Stream.md#reset) | **POST** /v2/streams/datasets/{datasetRid}/streams/{streamBranchName}/reset |
  **ThirdPartyApplications** | Version | [**delete**](docs/v2/ThirdPartyApplications/Version.md#delete) | **DELETE** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/{versionVersion} |
  **ThirdPartyApplications** | Version | [**get**](docs/v2/ThirdPartyApplications/Version.md#get) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/{versionVersion} |
  **ThirdPartyApplications** | Version | [**list**](docs/v2/ThirdPartyApplications/Version.md#list) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions |
  **ThirdPartyApplications** | Version | [**page**](docs/v2/ThirdPartyApplications/Version.md#page) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions |
  **ThirdPartyApplications** | Version | [**upload**](docs/v2/ThirdPartyApplications/Version.md#upload) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/versions/upload |
  **ThirdPartyApplications** | Website | [**deploy**](docs/v2/ThirdPartyApplications/Website.md#deploy) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/deploy |
  **ThirdPartyApplications** | Website | [**get**](docs/v2/ThirdPartyApplications/Website.md#get) | **GET** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website |
  **ThirdPartyApplications** | Website | [**undeploy**](docs/v2/ThirdPartyApplications/Website.md#undeploy) | **POST** /v2/thirdPartyApplications/{thirdPartyApplicationRid}/website/undeploy |
  <a id="apis-v1-link"></a>


pkgId: b57c56ba2a0cc6cfbb91d08bf380e9a12fcbf03872d12eba856d589aa7a9adeb
name: python-fourdigits-cli-help
arch: noarch
version: 1.18.0
epoch: 0
release: 1
summary: Development documents and examples for fourdigits-cli
url: https://pypi.org/project/fourdigits-cli/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fourdigits-cli-1.18.0-1.src.rpm
location_href: Packages/python-fourdigits-cli-help-1.18.0-1.noarch.rpm
checksum_type: sha256
description:
  A command line tool to make development and deployment easier within Four Digits.

  It has the following commands:

  1. "docker"
      - "build": Build docker images in our Gitlab CI pipelines
      - "tag": Create new Docker tag for existing Docker tag on registry
  2. "gitlab"
      - "fix-coverage-paths": Change the generated coverage.xml so Gitlab can show coverage visualization in merge requests
  3. "exonet"
     - "deploy": Deploy a project to Exonet
     - "db:download": Download a database from Exonet and import it locally
     - "db:copy": Copy a database from one environment to another
  4. "docker-compose"
     - "sync": Sync files from a service to local folder
     - "sync:env": Shortcut for django:home/userapp/env -> env-docker



  With [pipx](https://github.com/pypa/pipx):

      pipx install fourdigits-cli

  With [pip](https://github.com/pypa/pip):

      sudo pip install --break-system-packages fourdigits-cli



  With pipx:

      pipx upgrade fourdigits-cli

  With pip:

      sudo pip install --upgrade fourdigits-cli





  Add this to `~/.bashrc`:

  ```shell
  eval "$(_4D_COMPLETE=bash_source 4d)"
  eval "$(_FOURDIGITS_COMPLETE=bash_source fourdigits)"
  ```



  Add this to `~/.zshrc`:

  ```shell
  eval "$(_4D_COMPLETE=zsh_source 4d)"
  eval "$(_FOURDIGITS_COMPLETE=zsh_source fourdigits)"
  ```



  After installation the cli tool is available under `fourdigits` and `4d`.
  For more information use:

      fourdigits --help



  Build an image for the `tst` environment and upload it to our registry:

  ```
  $ fourdigits docker build tst --push
  Docker build image <docker_tag>
   - file=Dockerfile
   - context=.
   - target=None
  Docker create tag <tmp_tag> -> docker-registry.fourdigits.nl/fourdigits/<project>:tst
  Docker push tag docker-registry.fourdigits.nl/fourdigits/<project>:tst
  Docker create tag <tmp_tag> -> docker-registry.fourdigits.nl/fourdigits/<project>:<docker_tag>
  Docker push tag docker-registry.fourdigits.nl/fourdigits/wijsproductportals:<docker_tag>
  ```

  To deploy this to the `tst` environment, use the `docker_tag` (not the `tmp_tag`) from the previous step:

  ```bash
  $ fourdigits exonet deploy tst <docker_tag>
  {"id":...,"number":<number>,...}
  ```

  You can see the progress of the deployment pipeline on https://drone.exonet.nl/exonet/containers-fourdigits/<number>.





  If you get:
  ```
  unauthorized: unauthorized to access repository: fourdigits/<project>, action: push: unauthorized to access repository: fourdigits/<project>, action: push
  ```

  You need to login to the registry:

  ```bash
  docker login
  docker login docker-registry.fourdigits.nl
  ```



  The project is configured in the `pyproject.toml` file, available options and their defaults:

  ```toml
  [project]
  name = "default-project"

  [tool.fourdigits]
  exonet_project_name="<default is project name>"
  docker_repo="<default is project name>"
  slack_channel="<default is project name>"
  docker_image_user="fourdigits"

  [tool.fourdigits.envs.<environment anem>]
  exonet_environment="<default is environment name>"

  slack_channel="custom-channel"
  ```



  ```toml
  [project]
  name = "django-project"

  [tool.fourdigits]


  [tool.fourdigits.envs.tst]

  [tool.fourdigits.envs.acc]

  [tool.fourdigits.envs.prd]

  [tool.fourdigits.envs.nextjs_tst]
  exonet_project_name = "nextjs"
  exonet_environment = "tst"
  docker_repo = "nextjs"

  [tool.fourdigits.envs.nextjs_acc]
  exonet_project_name = "nextjs"
  exonet_environment = "acc"
  docker_repo = "nextjs"

  [tool.fourdigits.envs.nextjs_prd]
  exonet_project_name = "nextjs"
  exonet_environment = "prd"
  docker_repo = "nextjs"
  ```



      make develop



  To make a new release available on pypi, follow these steps:

  1. Update version by edit `fourdigits_cli/__init__.py` and commit.
  2. Run: `make push-version`
  3. Update the installation of fourdigits-cli in https://gitlab.com/fourdigits/utils/docker-pipeline-image/-/blob/main/Dockerfile
  to the newest version.


pkgId: 12097e94ffaa98eda2d0076c2df9a284601813342a64d20b4ad284ff1367e27b
name: python-fowl-help
arch: noarch
version: 24.12.0
epoch: 0
release: 1
summary: Development documents and examples for fowl
url: https://pypi.org/project/fowl/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-fowl-24.12.0-1.src.rpm
location_href: Packages/python-fowl-help-24.12.0-1.noarch.rpm
checksum_type: sha256
description:
  Get TCP streams from one computer to another, safely.
  (The base protocol below `Magic Wormhole <https://github.com/magic-wormhole/magic-wormhole>`_ provides a powerful account-less, peer-to-peer networking solution -- ``fowl`` helps you use this power immediately with existing programs)

rpm_license:
  The MIT License (MIT)  Copyright (c) 2023 meejah  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: c7c2fe836fd977d0ea21d065e042f0f65b562f90ce30aafe319b221ffa795508
name: python-foxes-help
arch: noarch
version: 1.2.4
epoch: 0
release: 1
summary: Development documents and examples for foxes
url: https://github.com/FraunhoferIWES/foxes
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-foxes-1.2.4-1.src.rpm
location_href: Packages/python-foxes-help-1.2.4-1.noarch.rpm
checksum_type: sha256
description:
  ![FOXES Logo](Logo_FOXES.svg)



  The software `foxes` is a modular wind farm simulation and wake modelling toolbox which is based on engineering wake models. It has many applications, for example

  - Wind farm optimization, e.g. layout optimization or wake steering,
  - Wind farm post-construction analysis,
  - Wake model studies, comparison and validation,
  - Wind farm simulations invoking complex model chains.

  The fast performance of `foxes` is owed to vectorization and parallelization,
  and it is intended to be used for large wind farms and large timeseries inflow data.
  The parallelization on local or remote clusters is supported, based on
  [mpi4py](https://mpi4py.readthedocs.io/en/stable/) or
  [dask.distributed](https://distributed.dask.org/en/stable/).
  The wind farm
  optimization capabilities invoke the [foxes-opt](https://github.com/FraunhoferIWES/foxes-opt) package which
  as well supports vectorization and parallelization.

  `foxes` is build upon many years of experience with wake model code development at IWES, starting with the C++ based in-house code _flapFOAM_ (2011-2019) and the Python based direct predecessor _flappy_ (2019-2022).

  Documentation: [https://fraunhoferiwes.github.io/foxes.docs/index.html](https://fraunhoferiwes.github.io/foxes.docs/index.html)

  Source code: [https://github.com/FraunhoferIWES/foxes](https://github.com/FraunhoferIWES/foxes)

  PyPi reference: [https://pypi.org/project/foxes/](https://pypi.org/project/foxes/)

  Anaconda reference: [https://anaconda.org/conda-forge/foxes](https://anaconda.org/conda-forge/foxes)



  Please cite the JOSS paper `"FOXES: Farm Optimization and eXtended yield
  Evaluation Software"`

   [![DOI](https://joss.theoj.org/papers/10.21105/joss.05464/status.svg)](https://doi.org/10.21105/joss.05464)

   Bibtex:
   ```
  @article{
      Schmidt2023,
      author = {Jonas Schmidt and Lukas Vollmer and Martin Dörenkämper and Bernhard Stoevesandt},
      title = {FOXES: Farm Optimization and eXtended yield Evaluation Software},
      doi = {10.21105/joss.05464},
      url = {https://doi.org/10.21105/joss.05464},
      year = {2023},
      publisher = {The Open Journal},
      volume = {8},
      number = {86},
      pages = {5464},
      journal = {Journal of Open Source Software}
  }
   ```



  The supported Python versions are:

  - `Python 3.8`
  - `Python 3.9`
  - `Python 3.10`
  - `Python 3.11`
  - `Python 3.12`
  - `Python 3.13`



  Either install via pip:

  ```console
  pip install foxes
  ```

  Alternatively, install via conda:

  ```console
  conda install foxes -c conda-forge
  ```



  For detailed examples of how to run _foxes_, check the `examples` and `notebooks` folders in this repository. A minimal running example is the following, based on provided static `csv` data files:

  ```python
  import foxes

  states = foxes.input.states.Timeseries("timeseries_3000.csv.gz", ["WS", "WD","TI","RHO"])

  farm = foxes.WindFarm()
  foxes.input.farm_layout.add_from_file(farm, "test_farm_67.csv", turbine_models=["NREL5MW"])

  algo = foxes.algorithms.Downwind(farm, states, ["Jensen_linear_k007"])
  farm_results = algo.calc_farm()

  print(farm_results)
  ```



  For testing, please clone the repository and install the required dependencies:
  ```console
  git clone https://github.com/FraunhoferIWES/foxes.git
  cd foxes
  pip install -e .[test]
  ```

  The tests are then run by
  ```console
  pytest tests
  ```



  1. Fork _foxes_ on _github_.
  2. Create a branch (`git checkout -b new_branch`)
  3. Commit your changes (`git commit -am "your awesome message"`)
  4. Push to the branch (`git push origin new_branch`)
  5. Create a pull request [here](https://github.com/FraunhoferIWES/foxes/pulls)



  The development of _foxes_ and its predecessors _flapFOAM_ and _flappy_ (internal - non public) has been supported through multiple publicly funded research projects. We acknowledge in particular the funding by the Federal Ministry of Economic Affairs and Climate Action (BMWK) through the projects _Smart Wind Farms_ (grant no. 0325851B), _GW-Wakes_ (0325397B) and _X-Wakes_ (03EE3008A), as well as the funding by the Federal Ministry of Education and Research (BMBF) in the framework of the project _H2Digital_ (03SF0635). We furthermore acknowledge funding by the Horizon Europe project FLOW (Atmospheric Flow, Loads and pOwer
  for Wind energy - grant id 101084205).

rpm_license:
  MIT License  Copyright (c) 2022 FraunhoferIWES  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.


