# packages

pkgId: 1ed77107358189a3a11af3a2438c3e036227aa9655c22945b49052c4a5758e52
name: python-pyrigi-help
arch: noarch
version: 0.4.0
epoch: 0
release: 1
summary: Development documents and examples for pyrigi
url: https://pyrigi.github.io/PyRigi/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyrigi-0.4.0-1.src.rpm
location_href: Packages/python-pyrigi-help-0.4.0-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
  <img src="https://raw.githubusercontent.com/PyRigi/PyRigi/refs/heads/main/assets/icon.jpg" alt="Pyrigi Logo" width="260">
  </p>

  [![PyRigi documentation](https://img.shields.io/badge/PyRigi-Documentation-blue?style=plastic&link=pyrigi.github.io%2FPyRigi%2F%20)](https://pyrigi.github.io/PyRigi/)
  [![MIT license](https://img.shields.io/badge/license-MIT-yellow?style=plastic)](LICENSE)
  [![Black code style](https://img.shields.io/badge/code%20style-black-black?style=plastic)](https://github.com/psf/black)


  <!-- start-input -->

  PyRigi is a Python package for research in rigidity and flexibility of bar-and-joint frameworks.
  We aim at providing a tool for investigating combinatorial and geometric questions
  such as infinitesimal, global, minimal, or generic rigidity.


  We use [NetworkX](https://networkx.org/) for graph theory and [SymPy](https://www.sympy.org/) for symbolic and numerical computations.
  We acknowledge these and all the other open-source projects upon which PyRigi is based.



  We have not reached a stable version yet,
  but the latest version requiring at least Python 3.10
  can be installed by
  ```
  pip install pyrigi
  ```
  Then it can be used by
  ```python
  from pyrigi import Graph, Framework
  ```

  Alternatively, one can clone/download the package
  from [this GitHub repository](https://github.com/pyRigi/PyRigi).



  The documentation of the `main` branch is available [online](https://pyrigi.github.io/PyRigi/).
  For compiling it locally,
  see the [development guide](https://pyrigi.github.io/PyRigi/development/howto).

  An important part of the documentation is the mathematical background.
  We specify the outputs of the methods in the package
  by providing rigorous mathematical definitions.



  We have a [Zulip chat](https://pyrigi.zulipchat.com),
  where you can ask questions or propose new functionality.
  If you want to get access to it, please send an email to
  [this address](mailto:external.dc4f45edef70cb7e0c621ad50377d9f1.show-sender.include-footer@streams.zulipchat.com).
  You can also use the [GitHub Discussions](https://github.com/PyRigi/PyRigi/discussions).

  To report bugs or ask for new features, please create an [issue](https://github.com/PyRigi/PyRigi/issues/new/choose).



  We appreciate contributions!
  Do you have a research result
  about rigidity or flexibility of bar-joint frameworks
  that could be implemented?
  [Let us know](https://github.com/PyRigi/PyRigi/issues/new/choose)!
  Or even better, implement it and contribute to the package!

  Besides coding, you can also help for instance
  by extending the mathematical documentation or
  creating tutorials.

  If you want to contribute, please,
  read the [development guide](https://pyrigi.github.io/PyRigi/development/howto)
  and [contact us](mailto:external.dc4f45edef70cb7e0c621ad50377d9f1.show-sender.include-footer@streams.zulipchat.com).


  The package is licensed under the [MIT license](https://github.com/PyRigi/PyRigi/blob/main/LICENSE).



  The current maintainers of the project are:

  [Matteo Gallet](mailto:matteo.gallet@units.it) \
  Georg Grasegger \
  [Matthias Himmelmann](https://matthiashimmelmann.github.io/) \
  [Jan Legerský](https://jan.legersky.cz/)

  The decision to create PyRigi was made by the participants of the workshop
  [Code of Rigidity](https://www.ricam.oeaw.ac.at/specsem/specsem2024/workshop2/)
  (March 11–15, 2024), which was part of the
  Special Semester on Rigidity and Flexibility at [RICAM](https://www.oeaw.ac.at/ricam/), Linz, Austria.


pkgId: d45f5c9bc889867ca7a11ecb37c7175a9305e5c06c2479d7b651bb7daec13b01
name: python-pyroSAR-help
arch: noarch
version: 0.27.0
epoch: 0
release: 1
summary: Development documents and examples for pyroSAR
url: https://pypi.org/project/pyroSAR/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyroSAR-0.27.0-1.src.rpm
location_href: Packages/python-pyroSAR-help-0.27.0-1.noarch.rpm
checksum_type: sha256
description:
  <h1 align="center">
    <br>
    <a>pyroSAR</a>
  </h1>
  <h3 align="center">A Python Framework for Large-Scale SAR Satellite Data Processing</h3>

  <p align="center">
    <a href='https://github.com/johntruckenbrodt/pyroSAR/actions/workflows/python-package-conda.yml'>
      <img src='https://github.com/johntruckenbrodt/pyroSAR/actions/workflows/python-package-conda.yml/badge.svg' alt='Travis Status'></a>
    <a href='https://coveralls.io/github/johntruckenbrodt/pyroSAR?branch=main'>
      <img src='https://coveralls.io/repos/github/johntruckenbrodt/pyroSAR/badge.svg?branch=main' alt='Coveralls Status' /></a>
    <a href='https://pyrosar.readthedocs.io/en/latest/?badge=latest'>
      <img src='https://readthedocs.org/projects/pyrosar/badge/?version=latest' alt='Documentation Status' /></a>
    <a href='https://badge.fury.io/py/pyroSAR'>
      <img src='https://badge.fury.io/py/pyroSAR.svg' alt='PIP Status' /></a>
    <a href='https://anaconda.org/conda-forge/pyrosar'>
      <img src='https://img.shields.io/conda/vn/conda-forge/pyrosar.svg' alt='Conda Status' /></a>
  </p>

  The pyroSAR package aims at providing a complete solution for the scalable organization and processing of SAR satellite data:
  * Reading of data from various past and present satellite missions
  * Handling of acquisition metadata
  * User-friendly access to processing utilities in [SNAP](https://step.esa.int/main/toolboxes/snap/)
  and [GAMMA Remote Sensing](https://www.gamma-rs.ch/) software
  * Formatting of the preprocessed data for further analysis
  * Export to Data Cube solutions

  Head on over to [readthedocs](https://pyrosar.readthedocs.io/en/latest/?badge=latest) for installation instructions,
  examples and API reference.

rpm_license:
  # Copyright (c) 2014-2024, the pyroSAR Developers.  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: f1eb105beadf259b9bfc377b6fa06b19e6471d34c947c0ca9cd6f10a80b60346
name: python-pysafecrypto-help
arch: noarch
version: 0.1
epoch: 0
release: 1
summary: Development documents and examples for pysafecrypto
url: https://github.com/ScreedVA/pysafecrypto?tab=readme-ov-file
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysafecrypto-0.1-1.src.rpm
location_href: Packages/python-pysafecrypto-help-0.1-1.noarch.rpm
checksum_type: sha256
description:
  <img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZGh0OXg2Ym53d25oMWNlM2Mxamt6bDN3ZmwxMDcwOWJpdHdrdXd0OCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/6OrCT1jVbonHG/giphy.gif" alt="Hacking GIF" width="300">



  - Introduction
  - Features
  - Installation
  - Usage
  - Contact Info
  - Dependencies
  - References



  I was writing my first semester university research report on the implications of quantum computing towards binary algorithms, when I first encountered the facinating concepts found within encryption. This package (currently) supports a mini RSA Key Generator, entirely unsuitable for official encryption over any network transfer protocols, however perfect for anyone wishing to learn and practice encryption and decryption with various algorithms.



  - Methods for directly generating mini(6-10) digit RSA Keys
  - Methods to find the multiplicative inverse modulo of a given integer(e) and modulo (n)
  - Methods to easily find the greatest common divisor between two integers
  - Methods to check if two integers are co-prime
  - Methods to generate a co-prime integer given an input integer(n)



  > Coming Soon...



  > Coming Soon...



  [Linkedin Profile](https://www.linkedin.com/in/christian-damete-yeboa-bb79442a3/)


pkgId: f62512cd2f556aaae799cdd5b033144ad490a604c7f9738cba8e2d16cdeae0d3
name: python-pyscnomics-help
arch: noarch
version: 1.2.2
epoch: 0
release: 1
summary: Development documents and examples for pyscnomics
url: https://github.com/fajril/pyscnomics
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyscnomics-1.2.2-1.src.rpm
location_href: Packages/python-pyscnomics-help-1.2.2-1.noarch.rpm
checksum_type: sha256
description:
  PySCnomics is a package contains tailored functionalities for assessing economic feasibility of oil and gas projects following the state-of-the-art Production Sharing Contract (PSC) schemes in Indonesia.

  Developed through a collaborative research between Indonesia's Special Task Force for Upstream Oil and Gas Business Activities (SKK Migas) and the Department of Petroleum Engineering at Institut Teknologi Bandung (ITB), PySCnomics stands as a reliable solution for industry professionals.



  To install PySCnomics, simply run:

  `pip install pyscnomics`



  PySCnomics offers comprehensive capabilities to evaluate the feasibility of various Indonesian PSC contracts, including a wide range of regime variations of each contract:
  - Base Project
  - Cost Recovery
  - Gross Split
  - Transition Cost Recovery - Cost Recovery
  - Transition Cost Recovery - Gross Split
  - Transition Gross Split - Gross Split
  - Transition Gross Split - Cost Recovery

  Beyond feasibility assessment, PySCnomics provides advanced tools for:
  - PSC Contract Optimization
  - PSC Contract Sensitivity
  - PSC Contract Uncertainty Analysis

  To further streamline the assessment process, PySCnomics includes specialized modules for:
  - Depreciation
  - Inflation
  - Cost Taxing
  - Production Profile Generation
  - API service
  - And much more...


  Create a new file, in this case named `sample.py` with the following code:

  ```python
  from pyscnomics.dataset.object_sample import generate_contract_sample
  from pyscnomics.econ.selection import ContractSample
  from pyscnomics.tools.table import get_table


  psc = generate_contract_sample(case=ContractSample.CASE_1)


  tables = get_table(contract=psc)
  print(tables)
  ```




  PySCnomics also supports running as an API service, making it easy to integrate into your applications or workflows. With just a single command, you can set up and start an API server to interact with PySCnomics programmatically.



  To run the PySCnomics API service, use the following command:

  ```bash
  pyscnomics --api 1 --port 9999
  ```
  Replace 9999 with the desired port number if needed. By default, the API will be accessible at:
  http://localhost:9999


  Once the API server is running, you can view the interactive API documentation by navigating to: http://localhost:9999/docs








  This project is licensed under the terms of the Apache Software license. See the [License](https://github.com/fajril/pyscnomics/blob/main/LICENSE) file for details.

  An economic engine for calculating PSC Scheme in Indonesia.


pkgId: 66cf2e52ff24f59e52fb44bb8e72ea2b9b0d371c6555aa33ac648cc7b1c50794
name: python-pyscript-ltk-help
arch: noarch
version: 0.2.16
epoch: 0
release: 1
summary: Development documents and examples for pyscript-ltk
url: https://github.com/laffra/ltk
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyscript-ltk-0.2.16-1.src.rpm
location_href: Packages/python-pyscript-ltk-help-0.2.16-1.noarch.rpm
checksum_type: sha256
description:
  LTK is a little toolkit for writing web UIs in PyScript. For an explanation of PyScript and LTK, see [YouTube](https://www.youtube.com/watch?v=5nseG-iU62g&list=PLGVZCDnMOq0qkbJjIfppGO44yhDV2i4gR&index=6).

  For examples, see:

   - The [LTK kitchensink](https://pyscript.github.io/ltk/) for a live demo of all the widgets.
   - A [Todo App](https://github.com/laffra/todo) that showcase declarative UIs using Reactive LTK.
   - A [Slides Player](https://github.com/laffra/slides) that downloads a Google Slides presentation and shows it with LTK.
   - Why use LTK? See the [pitch](https://pyscript.github.io/ltk/?tab=9), written with LTK.
   - A personal website, [chrislaffra.com](https://chrislaffra.com), that uses several animations, SVG, styling, and timers to render a visual resume.
   - An animated [Holiday card](https://laffra.pyscriptapps.com/merry-christmas/latest/) where PyScript logo tree ornaments are animated using Python code in the browser using LTK.
   - [PySheets](https://pysheets.app), a spreadsheet written in Python, using LTK.

  LTK is implemented as a declarative Python library and leverages `jQuery` for DOM operations.



  Install LTK from pypi:
  ```
  python3 -m pip install pyscript-ltk
  ```


  ```python
  import ltk

  ltk.Text("Hello World").appendTo(ltk.body)
  ```



  To get started with LTK, we recommend you try it out on pyscript.com:
   -  [Minimal LTK with MicroPython](https://pyscript.com/@laffra/ltk-on-micropython/latest)
   -  [Minimal LTK with PyOdide](https://pyscript.com/@laffra/ltk-on-pyodide/latest)



  New widget types are created by subclassing `ltk.Widget`:

  ```python
  class HBox(Widget):
      classes = [ "ltk-hbox" ]
  ```

  By default, widgets are created as `div` DOM elements. You can choose a different tag:

  ```python
  class Preformatted(Widget):
      classes = [ "ltk-pre" ]
      tag = "pre"
  ```



  To create a UI, elements are constructed declaratively:

  ```python
  ltk.Table(
      ltk.TableRow(
          ltk.TableHeader("header1")
          ltk.TableHeader("header2")
      ),
      [
          ltk.TableRow(
              ltk.TableData(value1),
              ltk.TableData(value2),
          )
          for value1, value2 in data
      ],
  )
  ```

  Widgets are added to others by using `jQuery`'s `append` and `appendTo` calls:
  ```python
  ltk.body.append(
      ltk.Table(...).element
  )

  container = ltk.VBox(...)
  ltk.H1("This is a header").appendTo(container)
  ```

  When an LTK widget is created, a corresponding jQuery element is attached to it in
  the `ltk.Widget.__init__` constructor. It uses the `tag` value defined by the
  declaring class and the constructed element is referred to as `element`.
  As the `append` call is a JavaScript function, implemented by jQuery, we do not
  pass the LTK widget directly, but pass its `element` to append to the DOM.



  Widgets can be styled using using three different approaches:

  1. Styling with element styles using `jQuery`'s `css` function:
  ```python
  ltk.Text("Error: Flux capacitor low!")
      .css("background-color", "red")
      .css("color", "white")
      .css("padding", 8)
  ```

  2. Styling using a `dict` to make it easier to share styles:
  ```python
  error = {
      "background-color": "red",
      "color": "white",
      "padding": 8,
  }
  ltk.Text("Error: Flux capacitor low!", error)
  ```

  3. Styling using CSS classes and an external stylesheet, using `jQuery`'s `addClass` function:
  ```python
  ltk.Text("Some text").addClass("my-special-text)
  ```
  The external style sheet should have these rules:
  ```css
  .ltk-text {
      font-family: Arial;
  }

  .my-special-text {
      font-family: Courier;
      background-color: red;
      color: white;
      padding: 8px;
  }
  ```

  External stylesheets can be included in the original `index.html` or injected at runtime from Python using:
  ```python
  ltk.inject_style("https://example.org/awesome_styles.css")
  ```



  Event handlers are attached using `jQuery` mechanisms.
  ```python
  def buy(event):
      purchase(...)

  ltk.Card("Buy Now").on("click", ltk.proxy(buy))
  ```

  You can also use the more declarative decorator:
  ```python
  @ltk.callback
  def buy(event):
      purchase(...)

  ltk.Card("Buy Now").on("click", buy)
  ```



  See the [LTK kitchensink](https://pyscript.github.io/ltk/) or explore the `examples` folder



  - [PySheets](https://pysheets.app)



  LTK is covered under the Apache License:

   - The Apache license is a permissive open source software license.

   - It allows users to freely use, modify, and distribute the software (including for commercial purposes).

   - Modified versions can be distributed without having to release the source code. Though source code changes should be documented.

   - The license requires modified versions to retain the Apache license and copyright notice.

   - The software is provided by the authors "as is" with no warranties.

   - Users are not granted patent rights by contributors, but contributors cannot revoke patent grants for previous contributions.

   - The license does not require derived works to adopt the Apache license. Though this is encouraged for consistency.





  If you never ran setuptools, twine, etc, on your machine do this:
  ```console
  python3 -m pip install --user --upgrade setuptools wheel twine build
  ```

  To make a build, first increment the version in `pyproject.toml`:
  ```python
  [project]
  name = "pyscript-ltk"
  version = "0.1.22"
  ```

  Then build the package into a source distribution and a Python wheel:
  ```console
  python3 -m build
  ```

  Then verify whether the build works for pypi:
  ```console
  twine check dist/*
  ```

  Then upload to the pypi test environment:
  ```console
  twine upload --repository pypitest dist/*
  ```

  Finally, if the pypi test upload appears to work fine, run:
  ```console
  twine upload dist/*
  ```

  If you get an error that a certain version already exists, check the contents of the `dist` folder.

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


pkgId: ed33345b7a32809aef8b8699eeee43a80cad2fda3eac2fa6badd79ebae0ba1c8
name: python-pysdmx-help
arch: noarch
version: 1.0.0rc6
epoch: 0
release: 1
summary: Development documents and examples for pysdmx
url: https://github.com/bis-med-it/pysdmx
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysdmx-1.0.0rc6-1.src.rpm
location_href: Packages/python-pysdmx-help-1.0.0rc6-1.noarch.rpm
checksum_type: sha256
description:
  ``pysdmx`` is a pragmatic and **opinionated** library written in Python. It
  focuses on simplicity, providing a subset of SDMX functionalities without
  requiring advanced knowledge of SDMX.
  Key features:
  - **SDMX information model in Python**: ``pysdmx`` offers Python classes
    representing a **simplified subset of the SDMX information model**,
    enabling a domain-driven development of SDMX processes with Python. These
    classes are serializable.
  - **Metadata in action**: ``pysdmx`` supports retrieving metadata from an SDMX
    Registry or any service compliant with the SDMX-REST 2.0.0 API. Use these
    metadata to power statistical processes.
  - **Data discovery and retrieval**: This functionality is under development.
    ``pysdmx`` will enable listing public SDMX services, discovering available
    data available, and retrieving data from these services.
  ``pysdmx`` is available on `PyPI <https://pypi.org/>`_ and can be
  installed using options such as pip, pipx, poetry, etc.
  For more details, check the `project documentation
  <https://py.sdmx.io>`_.


pkgId: 0a2815ca755c4700e58f35866b99853ef9ac53d44b3c9ea893276238e9397e3b
name: python-pysecs-help
arch: noarch
version: 0.3.0
epoch: 0
release: 1
summary: Development documents and examples for pysecs
url: https://pypi.org/project/pysecs/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysecs-0.3.0-1.src.rpm
location_href: Packages/python-pysecs-help-0.3.0-1.noarch.rpm
checksum_type: sha256
description:
  pysecs is an open source library for calculating Spherical Elementary Current Systems (SECS).



  - Based upon the [scikit-learn](http://scikit-learn.org/) framework with `fit()` and `predict()` methods.
  - The only dependency is [NumPy](http://www.numpy.org/). It is built using fast broadcasting techniques to provide highly scalable calculations.



  Examples can be found in [examples/](./examples/)



  The easiest method to install pysecs is with pip.

  ```bash
  > pip install pysecs
  ```

  For a source install you can follow these instructions:

  1. Clone the git repository

      ```bash
      > git clone https://github.com/greglucas/pysecs
      ```

  2. Build and install the package

      ```bash
      > python setup.py install
      ```

  3. Testing
  The package has a test suite that can be run with pytest

      ```python
      > pytest
      ```



  The code is released under an MIT license
  [License described in LICENSE.md](./LICENSE.md)



  This package has been developed from different publications. Please consider citing the papers
  that are relevant to the work you are doing if you are utilizing this code.



  ```bibtex
  Amm, O. "Ionospheric Elementary Current Systems in Spherical Coordinates and Their Application."
  Journal of geomagnestism and geoelectricity 49.7 (1997): 947-955. doi:10.5636/jgg.49.947
  ```



  ```bibtex
  Amm, O., and A. Viljanen. "Ionospheric disturbance magnetic field continuation
  from the ground to the ionosphere using spherical elementary current systems."
  Earth, Planets and Space 51.6 (1999): 431-440. doi:10.1186/BF03352247
  ```



  - [Report an issue using the GitHub issue tracker](http://github.com/greglucas/pysecs/issues)

rpm_license:
  Copyright (c) 2018 Greg Lucas  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: 4ae7988a2ac51cbbb7713c8ab31bedc11198b5c2e5b323920d8641bb33349c9d
name: python-pyshacl-help
arch: noarch
version: 0.29.1
epoch: 0
release: 1
summary: Development documents and examples for pyshacl
url: https://github.com/RDFLib/pySHACL
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyshacl-0.29.1-1.src.rpm
location_href: Packages/python-pyshacl-help-0.29.1-1.noarch.rpm
checksum_type: sha256
description:
  ![](pySHACL-250.png)


  A Python validator for SHACL.

  [![Build Status](https://drone.rdflib.ashs.dev/api/badges/RDFLib/pySHACL/status.svg)](https://drone.rdflib.ashs.dev/RDFLib/pySHACL)

  [![DOI](https://zenodo.org/badge/147505799.svg)](https://zenodo.org/badge/latestdoi/147505799) [![Downloads](https://pepy.tech/badge/pyshacl)](https://pepy.tech/project/pyshacl) [![Downloads](https://pepy.tech/badge/pyshacl/month)](https://pepy.tech/project/pyshacl/month) [![Downloads](https://pepy.tech/badge/pyshacl/week)](https://pepy.tech/project/pyshacl/week)

  This is a pure Python module which allows for the validation of [RDF](https://www.w3.org/2001/sw/wiki/RDF) graphs against Shapes Constraint Language ([SHACL](https://www.w3.org/TR/shacl/)) graphs. This module uses the [rdflib](https://github.com/RDFLib/rdflib) Python library for working with RDF and is dependent on the [OWL-RL](https://github.com/RDFLib/OWL-RL) Python module for [OWL2 RL Profile](https://www.w3.org/TR/owl2-overview/#ref-owl-2-profiles) based expansion of data graphs.

  This module is developed to adhere to the SHACL Recommendation:
  > Holger Knublauch; Dimitris Kontokostas. *Shapes Constraint Language (SHACL)*. 20 July 2017. W3C Recommendation. URL: <https://www.w3.org/TR/shacl/> ED: <https://w3c.github.io/data-shapes/shacl/>


  The SHACL community has a discord server for discussion of topics around SHACL and the SHACL specification.

  [Use this invitation link: https://discord.gg/RTbGfJqdKB to join the server](https://discord.gg/RTbGfJqdKB)

  There is a \#pyshacl channel for discussion of this python library, and you can ask for general SHACL help too.


  Install with PIP (Using the Python3 pip installer `pip3`)
  ```bash
  $ pip3 install pyshacl
  ```

  Or in a python virtualenv _(these example commandline instructions are for a Linux/Unix based OS)_
  ```bash
  $ python3 -m virtualenv --python=python3 --no-site-packages .venv
  $ source ./.venv/bin/activate
  $ pip3 install pyshacl
  ```

  To exit the virtual enviornment:
  ```bash
  $ deactivate
  ```


  For command line use:
  _(these example commandline instructions are for a Linux/Unix based OS)_
  ```bash
  $ pyshacl -s /path/to/shapesGraph.ttl -m -i rdfs -a -j -f human /path/to/dataGraph.ttl
  ```
  Where
   - `-s` is an (optional) path to the shapes graph to use
   - `-e` is an (optional) path to an extra ontology graph to import
   - `-i` is the pre-inferencing option
   - `-f` is the ValidationReport output format (`human` = human-readable validation report)
   - `-m` enable the meta-shacl feature
   - `-a` enable SHACL Advanced Features
   - `-j` enable SHACL-JS Features (if `pyshacl[js]` is installed)

  System exit codes are:
  `0` = DataGraph is Conformant
  `1` = DataGraph is Non-Conformant
  `2` = The validator encountered a RuntimeError (check stderr output for details)
  `3` = Not-Implemented; The validator encountered a SHACL feature that is not yet implemented.

  Full CLI Usage options:
  ```bash
  $ pyshacl -h
  $ python3 -m pyshacl -h
  usage: pyshacl [-h] [-s [SHACL]] [-e [ONT]] [-i {none,rdfs,owlrl,both}] [-m]
                 [-im] [-a] [-j] [-it] [--abort] [--allow-info] [-w]
                 [--max-depth [MAX_DEPTH]] [-d]
                 [-f {human,table,turtle,xml,json-ld,nt,n3}]
                 [-df {auto,turtle,xml,json-ld,nt,n3}]
                 [-sf {auto,turtle,xml,json-ld,nt,n3}]
                 [-ef {auto,turtle,xml,json-ld,nt,n3}] [-V] [-o [OUTPUT]]
                 [--server]
                 DataGraph

  PySHACL 0.27.0 command line tool.

  positional arguments:
    DataGraph             The file containing the Target Data Graph.

  optional arguments:
    --server              Ignore all the rest of the options, start the HTTP Server.
    -h, --help            show this help message and exit
    -s [SHACL], --shacl [SHACL]
                          A file containing the SHACL Shapes Graph.
    -e [ONT], --ont-graph [ONT]
                          A file path or URL to a document containing extra
                          ontological information. RDFS and OWL definitions from this
                          are used to inoculate the DataGraph.
    -i {none,rdfs,owlrl,both}, --inference {none,rdfs,owlrl,both}
                          Choose a type of inferencing to run against the Data
                          Graph before validating.
    -m, --metashacl       Validate the SHACL Shapes graph against the shacl-
                          shacl Shapes Graph before validating the Data Graph.
    -im, --imports        Allow import of sub-graphs defined in statements with
                          owl:imports.
    -a, --advanced        Enable features from the SHACL Advanced Features
                          specification.
    -j, --js              Enable features from the SHACL-JS Specification.
    -it, --iterate-rules  Run Shape's SHACL Rules iteratively until the
                          data_graph reaches a steady state.
    --abort               Abort on first invalid data.
    --allow-info, --allow-infos
                          Shapes marked with severity of Info will not cause
                          result to be invalid.
    -w, --allow-warning, --allow-warnings
                          Shapes marked with severity of Warning or Info will
                          not cause result to be invalid.
    --max-depth [MAX_DEPTH]
                          The maximum number of SHACL shapes "deep" that the
                          validator can go before reaching an "endpoint"
                          constraint.
    -d, --debug           Output additional verbose runtime messages.
    --focus [FOCUS]       Optional IRIs of focus nodes from the DataGraph, the shapes will
                          validate only these node. Comma-separated list.
    --shape [SHAPE]       Optional IRIs of a NodeShape or PropertyShape from the SHACL
                          ShapesGraph, only these shapes will be used to validate the
                          DataGraph. Comma-separated list.
    -f {human,table,turtle,xml,json-ld,nt,n3}, --format {human,table,turtle,xml,json-ld,nt,n3}
                          Choose an output format. Default is "human".
    -df {auto,turtle,xml,json-ld,nt,n3}, --data-file-format {auto,turtle,xml,json-ld,nt,n3}
                          Explicitly state the RDF File format of the input
                          DataGraph file. Default="auto".
    -sf {auto,turtle,xml,json-ld,nt,n3}, --shacl-file-format {auto,turtle,xml,json-ld,nt,n3}
                          Explicitly state the RDF File format of the input
                          SHACL file. Default="auto".
    -ef {auto,turtle,xml,json-ld,nt,n3}, --ont-file-format {auto,turtle,xml,json-ld,nt,n3}
                          Explicitly state the RDF File format of the extra
                          ontology file. Default="auto".
    -V, --version         Show PySHACL version and exit.
    -o [OUTPUT], --output [OUTPUT]
                          Send output to a file (defaults to stdout).
    --server              Ignore all the rest of the options, start the HTTP
                          Server. Same as `pyshacl_server`.
  ```


  For basic use of this module, you can just call the `validate` function of the `pyshacl` module like this:

  ```python
  from pyshacl import validate
  r = validate(data_graph,
        shacl_graph=sg,
        ont_graph=og,
        inference='rdfs',
        abort_on_first=False,
        allow_infos=False,
        allow_warnings=False,
        meta_shacl=False,
        advanced=False,
        js=False,
        debug=False)
  conforms, results_graph, results_text = r
  ```

  Where:
  * `data_graph` is an rdflib `Graph` object or file path of the graph to be validated
  * `shacl_graph` is an rdflib `Graph` object or file path or Web URL of the graph containing the SHACL shapes to validate with, or None if the SHACL shapes are included in the data_graph.
  * `ont_graph` is an rdflib `Graph` object or file path or Web URL a graph containing extra ontological information, or None if not required. RDFS and OWL definitions from this are used to inoculate the DataGraph.
  * `inference` is a Python string value to indicate whether or not to perform OWL inferencing expansion of the `data_graph` before validation.
  Options are 'rdfs', 'owlrl', 'both', or 'none'. The default is 'none'.
  * `abort_on_first` (optional) `bool` value to indicate whether or not the program should abort after encountering the first validation failure or to continue. Default is to continue.
  * `allow_infos` (optional) `bool` value, Shapes marked with severity of Info will not cause result to be invalid.
  * `allow_warnings` (optional) `bool` value, Shapes marked with severity of Warning or Info will not cause result to be invalid.
  * `meta_shacl` (optional) `bool` value to indicate whether or not the program should enable the Meta-SHACL feature. Default is False.
  * `advanced`: (optional) `bool` value to enable SHACL Advanced Features
  * `js`: (optional) `bool` value to enable SHACL-JS Features (if `pyshacl[js]` is installed)
  * `debug` (optional) `bool` value to indicate whether or not the program should emit debugging output text, including violations that didn't lead to non-conformance overall. So when debug is True don't judge conformance by absense of violation messages. Default is False.

  Some other optional keyword variables available on the `validate` function:
  * `data_graph_format`: Override the format detection for the given data graph source file.
  * `shacl_graph_format`: Override the format detection for the given shacl graph source file.
  * `ont_graph_format`: Override the format detection for the given extra ontology graph source file.
  * `iterate_rules`: Iterate SHACL Rules until steady state is found (only works with advanced mode).
  * `do_owl_imports`: Enable the feature to allow the import of subgraphs using `owl:imports` for the shapes graph and the ontology graph. Note, you explicitly cannot use this on the target data graph.
  * `serialize_report_graph`: Convert the report results_graph into a serialised representation (for example, 'turtle')
  * `check_dash_result`: Check the validation result against the given expected DASH test suite result.

  Return value:
  * a three-component `tuple` containing:
    * `conforms`: a `bool`, indicating whether the `data_graph` conforms to the `shacl_graph`
    * `results_graph`: a `Graph` object built according to the SHACL specification's [Validation Report](https://www.w3.org/TR/shacl/#validation-report) scheme
    * `results_text`: python string representing a verbose textual representation of the [Validation Report](https://www.w3.org/TR/shacl/#validation-report)




  You can get an equivalent of the Command Line Tool using the Python3 executable by doing:

  ```bash
  $ python3 -m pyshacl
  ```


  Under certain circumstances pySHACL can produce a [`Validation Failure`](https://www.w3.org/TR/shacl/#failures). This is a formal error [defined by the SHACL specification](https://www.w3.org/TR/shacl/#failures) and is required to be produced as a result of specific conditions within the SHACL graph that leads to the inability to complete the validation.
  If the validator produces a [`Validation Failure`](https://www.w3.org/TR/shacl/#failures), the `results_graph` variable returned by the `validate()` function will be an instance of `ValidationFailure`.
  See the `message` attribute on that instance to get more information about the validation failure.

  Other errors the validator can generate:
  - `ShapeLoadError`: This error is thrown when a SHACL Shape in the SHACL graph is in an invalid state and cannot be loaded into the validation engine.
  - `ConstraintLoadError`: This error is thrown when a SHACL Constraint Component is in an invalid state and cannot be loaded into the validation engine.
  - `ReportableRuntimeError`: An error occurred for a different reason, and the reason should be communicated back to the user of the validator.
  - `RuntimeError`: The validator encountered a situation that caused it to throw an error, but the reason does not concern the user.

  Unlike `ValidationFailure`, these errors are not passed back as a result by the `validate()` function, but thrown as exceptions by the validation engine and must be
  caught in a `try ... except` block.
  In the case of `ShapeLoadError` and `ConstraintLoadError`, see the `str()` string representation of the exception instance for the error message along with a link to the relevant section in the SHACL spec document.



  PySHACL v0.27.0 and above has two powerful new features:
  - Focus Node Filtering
    - You can pass in a list of focus nodes to the validator, and it will only validate those focus nodes.
    - _Note_, you still need to use a SHACL ShapesGraph, and the Shapes _still need to target_ the focus nodes.
    - This feature will filter the Shapes' targeted focus nodes to include only those that are in the list of specified focus nodes.
  - SHACL Shape selection
    - You can pass in a list of SHACL Shapes to the validator, and it will use only those Shapes for validation.
    - This is useful for testing new shapes in your shapes graph, or for many other procedure-driven use cases.
  - Combined Shape Selection with Focus Node filtering
    - The combination of the above two new features is especially powerful.
    - If you give the validator a list of Shapes to use, and a list of focus nodes, the validator will operate in
      a highly-targeted mode, it feeds those focus nodes directly into those given Shapes for validation.
    - In this mode, the selected SHACL Shape does not need to specify any focus-targeting mechanisms of its own.




  _**PySHACL now has a built-in SPARQL Remote Graph Mode, which allows you to validate a data graph that is stored on a remote server.**_

  - In this mode, PySHAL operates strictly in read-only mode, and does not modify the remote data graph.
  - Some features are disabled when using the SPARQL Remote Graph Mode:
      - "rdfs" and "owl" inferencing is not allowed (because the remote graph is read-only, it cannot be expanded)
      - Extra Ontology file (Inoculation or Mix-In mode) is disabled (because the remote graph is read-only)
      - SHACL Rules (Advanced mode SPARQL-Rules) are not allowed (because the remote graph is read-only)
      - All SHACL-JS features are disabled (this is not safe when operating on a remote graph)
      - "inplace" mode is disabled (actually all operations on the remote data graph are inherently performed in-place)



  PySHACL now has a built-in validation service, exposed via an OpenAPI3.0-compatible REST API.

  Due to the additional dependencies required to run, this feature is an optional extra.

  You must first install PySHACL with the `http` extra option enabled:

  ```bash
  $ pip3 install -U pyshacl[http]
  ```

  When that is installed, you can start the service using the by executing the CLI entrypoint:

  ```bash
  $ pyshacl --server

  $ pyshacl_server

  $ python3 -m pyshacl server

  $ docker run --rm -e PYSHACL_SERVER=TRUE -i -t docker.io/ashleysommer/pyshacl:latest
  ```

  By default, this will run the service on localhost address `127.0.0.1` on port `8099`.

  To view the SwaggerUI documentation for the service, navigate to `http://127.0.0.1:8099/docs/swagger` and for the ReDoc version, go to `http://127.0.0.1:8099/docs/redoc`.

  To view the OpenAPI3 schema see `http://127.0.0.1:8099/docs/openapi.json`



  - You can force PySHACL CLI to start up in HTTP Server mode by passing environment variable `PYSHACL_SERVER=TRUE`. This is useful in a containerised service, where you will _only_ be running PySHACL in this mode.
  - `PYSHACL_SERVER_LISTEN=1.2.3.4` listen on a different IP Address or hostname
  - `PYSHACL_SERVER_PORT=8080` listen on given different TCP PORT
  - `PYSHACL_SERVER_HOSTNAME=example.org` when you are hosting the server behind a reverse-proxy or in a containerised environment, use this so PySHACL server knows what your externally facing hostname is




  [Pyinstaller](https://www.pyinstaller.org/) can be
  [used](https://pyinstaller.readthedocs.io/en/stable/usage.html) to create an
  executable for Windows that has the same characteristics as the Linux/Mac
  CLI program.
  The necessary ``.spec`` file is already included in ``pyshacl/pyshacl-cli.spec``.
  The ``pyshacl-cli.spec`` PyInstaller spec file creates a ``.exe`` for the
  pySHACL Command Line utility. See above for the pySHACL command line util usage instructions.

  See [the PyInstaller installation guide](https://pyinstaller.readthedocs.io/en/stable/installation.html#installing-in-windows) for info on how to install PyInstaller for Windows.

  Once you have pyinstaller, use pyinstaller to generate the ``pyshacl.exe`` CLI file like so:
  ```bash powershell
  $ cd src/pyshacl
  $ pyinstaller pyshacl-cli.spec
  ```
  This will output ``pyshacl.exe`` in the ``dist`` directory in ``src/pyshacl``.

  You can now run the pySHACL Command Line utility via ``pyshacl.exe``.
  See above for the pySHACL command line util usage instructions.


  Pull the official docker image from Dockerhub:
  `docker pull docker.io/ashleysommer/pyshacl:latest`

  Or build the image yourself, from the PySHACL repository with `docker build . -t pyshacl`.

  You can now run PySHACL inside a container; but you need to mount the data you want to validate.
  For example, to validate `graph.ttl` against `shacl.ttl`, run :
  ```bash
  docker run --rm -i -t --mount type=bind,src=`pwd`,dst=/data pyshacl -s /data/shacl.ttl /data/graph.ttl
  ```


  PySHACL is a Python3 library. For best compatibility use Python v3.8 or greater. Python3 v3.7 or below is _**not supported**_ and this library _**does not work**_ on Python v2.7.x or below.

  PySHACL is a PEP518 & PEP517 project, it uses `pyproject.toml` and `poetry` to manage dependencies, build and install.

  For best compatibility when installing from PyPI with `pip`, upgrade to pip v20.0.2 or above.
    - If you're on Ubuntu 18.04 or older, you will need to run `sudo pip3 install --upgrade pip` to get the newer version.



  A features matrix is kept in the [FEATURES file](https://github.com/RDFLib/pySHACL/blob/master/FEATURES.md).



  A comprehensive changelog is kept in the [CHANGELOG file](https://github.com/RDFLib/pySHACL/blob/master/CHANGELOG.md).



  This project includes a script to measure the difference in performance of validating the same source graph that has been inferenced using each of the four different inferencing options. Run it on your computer to see how fast the validator operates for you.



  This repository is licensed under Apache License, Version 2.0. See the [LICENSE deed](https://github.com/RDFLib/pySHACL/blob/master/LICENSE.txt) for details.



  See the [CONTRIBUTORS file](https://github.com/RDFLib/pySHACL/blob/master/CONTRIBUTORS.md).



  DOI: [10.5281/zenodo.4750840](https://doi.org/10.5281/zenodo.4750840) (For all versions/latest version)


  Project Lead:
  **Nicholas Car**
  *Senior Experimental Scientist*
  CSIRO Land & Water, Environmental Informatics Group
  Brisbane, Qld, Australia
  <nicholas.car@csiro.au>
  <http://orcid.org/0000-0002-8742-7730>

  Lead Developer:
  **Ashley Sommer**
  *Informatics Software Engineer*
  CSIRO Land & Water, Environmental Informatics Group
  Brisbane, Qld, Australia
  <Ashley.Sommer@csiro.au>
  <https://orcid.org/0000-0003-0590-0131>


pkgId: 4f5c457737bbb99e137e1521e508f9f7584020bf538527a02da66e8c21bfe5b4
name: python-pyshiftsla-help
arch: noarch
version: 0.5.0
epoch: 0
release: 1
summary: Development documents and examples for pyshiftsla
url: https://pypi.org/project/pyshiftsla/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyshiftsla-0.5.0-1.src.rpm
location_href: Packages/python-pyshiftsla-help-0.5.0-1.noarch.rpm
checksum_type: sha256
description:
      pip install pyshiftsla

  - Let's calculate **SLA** and **generate work shifts** for an **American** female employee, Working in **Vietnam**, about to take maternity leave.
  - Law references: [(1)][1]; [(2)][2]

  - **4-month** of **maternity leave**.
  - Holidays leave:
      - All **Vietnamese holidays**.
      - **1 day** from home country's **New Year**'s days (2024-01-01) (same as Solar New Year in Vietnam) (+0 holiday leave)
      - **1 day** from home country's Independence Days (2024-07-04) (+1 holiday leave)
  - **Overtime shift** in the **Solar New Year**: from 13:30 to 14:30
  - Plus random **3 days off**

  ```python
  from pyshiftsla.shifts_builder import ShiftsBuilder, DateRange, DailyShift, ShiftRange
  from pyshiftsla.shift import Shift
  from datetime import time, date
  US_WOMAN_LIVING_IN_VIETNAM_MATERNITY_LEAVE_4MONTHS_2024 = ShiftsBuilder(
      workdays_weekly=[0,1,2,3,4], # weekday indexes: Monday to Friday
      daily_shifts=DailyShift([
          
          
          Shift.fromstr("08301145"),
          
          
          Shift(start=time(13,30), end=time(18))
      ]),
      days_off_ranges=[ # you can parse `date` or `DateRange`
          date(2024, 1, 1), # SOLAR_NEW_YEAR
          date(2024, 7, 4), # US_INDEPENDENCE_DAY
          DateRange.fromstr("20240430-20240501"), #VIETNAM_VICTORY_DAY
          DateRange.fromstr("20240902-20240903"), #VIETNAM_INDEPENDENCE_DAY
          
          
          DateRange.fromstr("20240101-20240105", calendar_type="lunar"),
          
          DateRange.fromstr("20240310", calendar_type="lunar"),
          
          DateRange.fromstr("20240801-20241201"),
          date(2024, 2, 9),  # custom days off
          date(2024, 6, 3),  # custom days off
          date(2024, 12, 10),  # custom days off
      ],
      special_shifts=ShiftRange(
          {
              
              
              date(2024, 1, 1): DailyShift([Shift.fromstr("13301430")]),
          }
      ),
  )
  ```
  - To generate `Shift`s, here is `ShiftsBuilder` priority:
  > special_shift > days_off_ranges > daily_shifts + workday_weekly

  - `ShiftRange` works like a dictionary, and can check the generated `Shift` at a specific `date`.
  ```python
  generated_shiftrange = ( # ShiftRange for 2024
      US_WOMAN_LIVING_IN_VIETNAM_MATERNITY_LEAVE_4MONTHS_2024
      .build_shifts_from_daterange(
          from_date=date(2024, 1, 1),
          to_date=date(2024, 12, 30))
      )

  generated_shiftrange[date(2024,1,1)]


  generated_shiftrange[date(2024,2,8)]





  generated_shiftrange[date(2024,7,4)] # KeyError: date(2024, 7, 4)
  generated_shiftrange.get(date(2024,7,4)) # None
  ```

  - The result will be in `Milliseconds`:
  ```python
  sla_millis = (
      US_WOMAN_LIVING_IN_VIETNAM_MATERNITY_LEAVE_4MONTHS_2024
      .calculate_sla(
          start_deal=datetime(2024, 1, 1, 14),
          end_deal=datetime(2024, 1, 2, 9, 30),
          use_generated_shifts=True, # for faster execution,
          
          
      )
  )
  sla_hours = sla_millis/(1000*60*60) # 1.5 hours
  ```

  ```python
  from pyshiftsla.shifts_builder import ShiftsBuilder, Shift
  from datetime import time
  COMPANY_SHIFTS_BUILDER = ShiftsBuilder(
      daily_shifts=DailyShift([
          Shift.fromstr("08301145"), # morning shift, created using a string, easier to read but slower
          Shift(start=time(13,30), end=time(18)) # afternoon shift, parsed the timestamps straight to parameters, faster
      ]),
      workdays_weekly=[0,1,2,3,4] # Monday to Friday
  )
  ```
  - Copy config to a specific `employee`.
  ```python
  employee_takes_4_days_off = (
      COMPANY_SHIFTS_BUILDER
      .add_days_off_range(
          [
              DateRange.fromstr("20241204-20241205"), # 2days off
              DateRange.fromstr("20240930-20241001") # 2days off
          ],
          inplace=False # if `False` will return a copied `ShiftsBuilder`,
          
      ))
  ```
  [1]:https://english.luatvietnam.vn/legal-news/public-holiday-leaves-of-foreign-employees-in-vietnam-4729-91710-article.html
  [2]: https://vietnamlawmagazine.vn/maternity-leave-for-foreign-female-employees-6115.html


pkgId: 50def15c14cbad7c03cace65419cdf3f5f17850daba9ff872d6ce086eb2763da
name: python-pysigma-backend-splunk-help
arch: noarch
version: 1.1.2
epoch: 0
release: 1
summary: Development documents and examples for pysigma-backend-splunk
url: https://github.com/SigmaHQ/pySigma-backend-splunk
rpm_license: LGPL-2.1-only
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysigma-backend-splunk-1.1.2-1.src.rpm
location_href: Packages/python-pysigma-backend-splunk-help-1.1.2-1.noarch.rpm
checksum_type: sha256
description:
  ![Tests](https://github.com/SigmaHQ/pySigma-backend-splunk/actions/workflows/test.yml/badge.svg)
  ![Coverage Badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/thomaspatzke/47c292239759399a6e3c73b0e9656b33/raw/SigmaHQ-pySigma-backend-splunk.json)
  ![Status](https://img.shields.io/badge/Status-pre--release-orange)



  This is the Splunk backend for pySigma. It provides the package `sigma.backends.splunk` with the `SplunkBackend` class.
  Further, it contains the following processing pipelines in `sigma.pipelines.splunk`:

  * splunk_windows_pipeline: Splunk Windows log support
  * splunk_windows_sysmon_acceleration_keywords: Adds fiels name keyword search terms to generated query to accelerate search.

  It supports the following output formats:

  * default: plain Splunk queries
  * savedsearches: Splunk savedsearches.conf format.

  This backend is currently maintained by:

  * [Thomas Patzke](https://github.com/thomaspatzke/)


pkgId: a6335a74373dfbc03272c2f22d8cceec2bdb066ee36af729873431370a759976
name: python-pysimmods-help
arch: noarch
version: 0.11.2
epoch: 0
release: 1
summary: Development documents and examples for pysimmods
url: https://midas-mosaik.gitlab.io/pysimmods
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysimmods-0.11.2-1.src.rpm
location_href: Packages/python-pysimmods-help-0.11.2-1.noarch.rpm
checksum_type: sha256
description:
  This projects contains a collection of (python) simulation models for a variety of energy generation and consumption units. Most of the models were originally developed in the context of the research project iHEM (intelligent Home Energy Management) or other projects at OFFIS. Other models were developed during a student project group at the University of Oldenburg. The models are intended to be used with the co-simulation framework mosaik (https://mosaik.offis.de), but are also usable without mosaik.

  Version: 0.11

  License: LGPL



  Pysimmods requires Python >= 3.8 and is available on https://pypi.org.
  It can be installed, preferably into a virtualenv,  with

      >>> pip install pysimmods

  Alternatively, you can clone this repository with

      >>> git clone https://gitlab.com/midas-mosaik/pysimmods.git

  then switch into the pysimmods folder and type

      >>> pip install -e .



  You will find a still growing documentation at https://midas-mosaik.gitlab.io/pysimmods.
  Please create an issue if you find any errors or if you think that something should be explained more explicitly.


pkgId: 0fee59b023328a3891e33b72a3b30dcecd5875baa677b524503faf28bd6f18fe
name: python-pysimular-help
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Development documents and examples for pysimular
url: https://github.com/simular-ai/pysimular
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysimular-0.1.1-1.src.rpm
location_href: Packages/python-pysimular-help-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  Python API client for Simular agents. This package provides a simple and intuitive interface to interact with Simular's agents in different platforms.

  Currently supports SimularBrowser as backend.



  ```bash
  pip install pysimular
  ```



  ```python
  from pysimular import SimularBrowser

  browser = SimularBrowser("your-simular-browser-app-path")
  browser.run("your-message")
  ```



  This project is licensed under the Apache License - see the LICENSE file for details.


pkgId: 99abac73b63f05735dc05c94edd13d23932aa6403467f298bdd36373f57b3888
name: python-pysj-help
arch: noarch
version: 1.1.1
epoch: 0
release: 1
summary: Development documents and examples for pysj
url: https://pypi.org/project/pysj/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysj-1.1.1-1.src.rpm
location_href: Packages/python-pysj-help-1.1.1-1.noarch.rpm
checksum_type: sha256
description:
  This package contains utils, classes and helper functions I find myself reimplementing in several projects. As of now all functions are importable from the top level module.

  The name is a commonly used shortened version of the Norwegian word "pysjamas" (in english: pajamas/pyjamas).
  Coding in your pysjamas/pajamas/pyjamas is comfortable. This package is an attempt to make Python development a bit more comfortable as well.

  This is an ongoing project and so far just a few functions are implemented. Most time  have been spent on project structure, tests and packaging.



  ```bash
  pip install pysj
  ```




  ```python

  from pysj import (
      md5,
      sha256,
      ExtendedJSONDecoder,
      ExtendedJSONEncoder,
      Timer,
      chunk,
      first,
      flatten,
      isotime,
      moving_average,
      n_wise,
      paginate,
      seconds,
      take,
      transpose
  )
  ```



  ```python

  json.dumps(
      {
          "timestamp": datetime.datetime.fromisoformat("2021-12-01T04:50:00.123456")
      },
      cls=ExtendedJSONEncoder,
  )


  json.loads('{"timestamp": "2021-12-01T04:50:00"}',
      cls=ExtendedJSONDecoder,
  )
  ```



  Flattens an iterable, depth first.
  ```python
  >>> flatten([range(10), (1,2,3), "HELLO", [[["42"]], []], ["y0l0"]])
  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 'HELLO', '42', 'y0l0']
  ```


  Get first element of an iterable
  ```python
  >>> first([1, 2, 3])
  1
  ```


  Get first *n* elements from an iterable
  ```python
  data = range(100)
  >>> list(take(4, ))
  [0, 1, 2, 3]
  ```


  Chunks an iterable into an iterable yield a list with *n* items at a time.

  Takes an optional *fillvalue*, defaults to **None**,
  ```python
  data = range(10)
  >>> list(chunk(take(4, data, fillvalue=":D")))
  [
      [0, 1, 2, 3],
      [4, 5, 6, 7],
      [9, 10, ":D", ":D"],
  ]
  ```



  ```python
  >>> transpose(
      [
          [1,2,3],
          [1,2,3],
          [1,2,3],
      ]
  )
  [
      [1, 1, 1],
      [2, 2, 2],
      [3, 3, 3]
  ]
  ```


  Yields *n* items from data like a gliding window, as long as there is enough elements in data to yield the full window.

  Like itertools.pairwise, but generalized to *n* items. (New in Python 3.10)
  ```python
  >>> list(n_wise(3, [1,2,3,4,5]))
  [(1,2,3), (2,3,4), (3,4,5)]
  ```



  ```python
  >>> list(moving_average(3, (1,2,3,4,5)))
  [2.0, 3.0, 4.0]
  ```




  Returns an isoformated string of the current time (or supplied datetime *dt*) to the given *precision*, defaults to 'd' (day).

  ```python
  >>>isotime()
  '2023-01-01'

  >>>isotime('s')
  '2023-01-01T00:00:00'

  >>>isotime('m', datetime(2022, 2, 2, 2, 2))
  '2022-02-02T02:02'


  >>>isotime('minutes', datetime(2022, 2, 2, 2, 2))
  '2022-02-02T02:02'
  ```


  ```python
  >>> with Timer():
  >>>     # Do stuff
  >>>     sleep(1)
  Starting timer
  Elapsed time 1.0007134879997466 s.
  ```


  ```python
  >>> print(sha256("test"))
  9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
  >>> print(md5("test"))
  098f6bcd4621d373cade4e832627b4f6
  ```


pkgId: 29c999604a4dbbbe1db027b0b2fc59220f95e27a3b4caf37622a1b7c36ccaf80
name: python-pysmatch-help
arch: noarch
version: 0.9
epoch: 0
release: 1
summary: Development documents and examples for pysmatch
url: https://github.com/mhcone/pysmatch
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysmatch-0.9-1.src.rpm
location_href: Packages/python-pysmatch-help-0.9-1.noarch.rpm
checksum_type: sha256
description:
  First, we import the necessary libraries and suppress any warnings for cleaner output.
  ```python
  import warnings
  warnings.filterwarnings('ignore')
  import pandas as pd
  import numpy as np
  from pysmatch.Matcher import Matcher
  %matplotlib inline
  ```
  Next, we load the dataset and select a subset of columns relevant for our analysis.
  Load the dataset (`loan.csv`) and select a subset of columns.
  ```python

  path = "loan.csv"
  fields = [
      "loan_amnt",
      "funded_amnt",
      "funded_amnt_inv",
      "term",
      "int_rate",
      "installment",
      "grade",
      "sub_grade",
      "loan_status"
  ]

  data = pd.read_csv(path, usecols=fields)
  ```

  ​	•	**loan_amnt**: The listed amount of the loan applied for by the borrower.
  ​	•	**funded_amnt**: The total amount committed to that loan at that point in time.
  ​	•	**funded_amnt_inv**: The total amount funded by investors for that loan.
  ​	•	**term**: The number of payments on the loan in months.
  ​	•	**int_rate**: The interest rate on the loan.
  ​	•	**installment**: The monthly payment owed by the borrower.
  ​	•	**grade**: Lending Club assigned loan grade.
  ​	•	**sub_grade**: Lending Club assigned loan subgrade.
  ​	•	**loan_status**: Current status of the loan.
  **Creating Test and Control Groups**
  We create two groups:
  ​	•	**Test Group**: Users who defaulted on their loans.
  ​	•	**Control Group**: Users who fully paid off their loans.
  We then encode the loan_status as a binary treatment indicator.
  ```python

  test = data[data.loan_status == "Default"].copy()
  test['loan_status'] = 1  # Treatment group indicator

  control = data[data.loan_status == "Fully Paid"].copy()
  control['loan_status'] = 0  # Control group indicator


pkgId: 9ebc83ad7890e1e827e6fd7d0e40c312fc420221d6c53d826020f61864f23f0d
name: python-pysorteddict-debuginfo
arch: aarch64
version: 0.2.0
epoch: 0
release: 1
summary: Debug information for package python-pysorteddict
url: https://pypi.org/project/pysorteddict/
rpm_license: None
rpm_group: Development/Debug
rpm_buildhost: localhost
rpm_sourcerpm: python-pysorteddict-0.2.0-1.src.rpm
location_href: Packages/python-pysorteddict-debuginfo-0.2.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug information for package python-pysorteddict.
  Debug information is useful when developing applications that use this
  package or when debugging this package.


pkgId: d68ae626c919ca8f94a696b2d71e43b3899a078986097437f36b21880f424da3
name: python-pysorteddict-debugsource
arch: aarch64
version: 0.2.0
epoch: 0
release: 1
summary: Debug sources for package python-pysorteddict
url: https://pypi.org/project/pysorteddict/
rpm_license: None
rpm_group: Development/Debug
rpm_buildhost: localhost
rpm_sourcerpm: python-pysorteddict-0.2.0-1.src.rpm
location_href: Packages/python-pysorteddict-debugsource-0.2.0-1.aarch64.rpm
checksum_type: sha256
description:
  This package provides debug sources for package python-pysorteddict.
  Debug sources are useful when developing applications that use this
  package or when debugging this package.


pkgId: 50d31548a859cbb389c4a07e8e5ea09cf2099668ee1bc88be2f4ccd1de8535d1
name: python-pysorteddict-help
arch: aarch64
version: 0.2.0
epoch: 0
release: 1
summary: Development documents and examples for pysorteddict
url: https://pypi.org/project/pysorteddict/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysorteddict-0.2.0-1.src.rpm
location_href: Packages/python-pysorteddict-help-0.2.0-1.aarch64.rpm
checksum_type: sha256
description:
  Provides `SortedDict`, which is a Python sorted dictionary: a Python dictionary in which the keys are always in
  ascending order.

  [![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)

  [![style](https://github.com/tfpf/pysorteddict/actions/workflows/style.yml/badge.svg)](https://github.com/tfpf/pysorteddict/actions/workflows/style.yml)
  [![package](https://github.com/tfpf/pysorteddict/actions/workflows/package.yml/badge.svg)](https://github.com/tfpf/pysorteddict/actions/workflows/package.yml)

  <p align="center">
   <img src="https://github.com/user-attachments/assets/e9d1e78e-c0fd-4d87-93f6-e293ddef31ba" />
  </p>



  [pysorteddict is available on PyPI.](https://pypi.org/project/pysorteddict/) It requires Python 3.10 or newer. Built
  distributions (binary wheels) are provided for Linux, macOS and Windows, so installing is straightforward.

  ```shell
  pip install pysorteddict
  ```

  If you are on any other platform, install the Python development headers and libraries before running the above
  command.



  All keys in a sorted dictionary must be of the same type, which must be passed to the constructor. The values, though,
  can be of any type.

  ```python
  from pysorteddict import SortedDict

  sorted_dict = SortedDict(int)
  sorted_dict[5659] = "gaining weight is"
  sorted_dict[1992] = 31.692
  sorted_dict[24274] = "times easier than"
  sorted_dict[9765] = ["losing", "weight"]
  print(sorted_dict)
  ```

  This program should output
  `{1992: 31.692, 5659: 'gaining weight is', 9765: ['losing', 'weight'], 24274: 'times easier than'}`. Note that the keys
  are in ascending order.



  pysorteddict is implemented entirely in C++. `SortedDict` provides a Python interface to
  `std::map<PyObject*, PyObject*, _>`.







  Create a new sorted dictionary in which the keys are of type `key_type`. As of the current version, `key_type` must be
  `int`. Support for some more types will be added in due course.





  Return whether `key` is present in the sorted dictionary `d`.



  Return the number of key-value pairs in the sorted dictionary `d`.



  Return the value mapped to `key` in the sorted dictionary `d`.

  * If `type(key)` is not the same as `key_type` passed to the constructor, raise `TypeError`.
  * If `key` is not present in `d`, raise `KeyError`.



  Map `value` to `key` in the sorted dictionary `d`, replacing the previously-mapped value (if any).

  * If `type(key)` is not the same as `key_type` passed to the constructor, raise `TypeError`.



  Remove `key` and the value mapped to it from the sorted dictionary `d`.

  * If `type(key)` is not the same as `key_type` passed to the constructor, raise `TypeError`.
  * If `key` is not present in `d`, raise `KeyError`.



  Return a human-readable representation of the sorted dictionary `d`.





  Remove all key-value pairs in the sorted dictionary `d`.



  Create and return a new list containing the key-value pairs in the sorted dictionary ``d``. This list will be sorted.



  Create and return a new list containing the keys in the sorted dictionary ``d``. This list will be sorted.



  Create and return a new list containing the values in the sorted dictionary ``d``. This list will be sorted by the keys
  which the values are mapped to.


pkgId: 9f11fb0ddc475ad67609c063f21def3c51b6f71d7a63c1c97b3e803e85713d9e
name: python-pyspark-dataquality-help
arch: noarch
version: 0.1.0
epoch: 0
release: 1
summary: Development documents and examples for pyspark-dataquality
url: https://pypi.org/project/pyspark-dataquality/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyspark-dataquality-0.1.0-1.src.rpm
location_href: Packages/python-pyspark-dataquality-help-0.1.0-1.noarch.rpm
checksum_type: sha256
description:
  A simple Python library for doing data quality on your pyspark pipelines.



  You can install the library using pip:

  ```bash
  pip install pyspark_dataquality


pkgId: 054ee05893d019a2c8dfc5ccbd76a576ce54b731f8ef843654e591e8e2b75a19
name: python-pyspark-testframework-help
arch: noarch
version: 2.5.0
epoch: 0
release: 1
summary: Development documents and examples for pyspark-testframework
url: https://github.com/woonstadrotterdam/pyspark-testframework
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyspark-testframework-2.5.0-1.src.rpm
location_href: Packages/python-pyspark-testframework-help-2.5.0-1.noarch.rpm
checksum_type: sha256
description:
  ![](https://img.shields.io/pypi/pyversions/pyspark-testframework)
  ![Build Status](https://github.com/woonstadrotterdam/pyspark-testframework/actions/workflows/cicd.yml/badge.svg)
  [![Version](https://img.shields.io/pypi/v/pyspark-testframework)](https://pypi.org/project/pyspark-testframework/)
  ![](https://img.shields.io/github/license/woonstadrotterdam/pyspark-testframework)
  [![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)



  The goal of the `pyspark-testframework` is to provide a simple way to create tests for PySpark DataFrames. The test results are returned in DataFrame format as well.



  **Let's first create an example pyspark DataFrame**

  The data will contain the primary keys, street names and house numbers of some addresses.

  ```python
  from pyspark.sql import SparkSession
  from pyspark.sql.types import StructType, StructField, IntegerType, StringType
  from pyspark.sql import functions as F
  ```

  ```python

  spark = SparkSession.builder.appName("PySparkTestFrameworkTutorial").getOrCreate()


  schema = StructType(
      [
          StructField("id", IntegerType(), True),
          StructField("street", StringType(), True),
          StructField("house_number", IntegerType(), True),
      ]
  )


  data = [
      (1, "Rochussenstraat", 27),
      (2, "Coolsingel", 31),
      (3, "%Witte de Withstraat", 27),
      (4, "Lijnbaan", -3),
      (5, None, 13),
  ]

  df = spark.createDataFrame(data, schema)

  df.show(truncate=False)
  ```

      +---+--------------------+------------+
      |id |street              |house_number|
      +---+--------------------+------------+
      |1  |Rochussenstraat     |27          |
      |2  |Coolsingel          |31          |
      |3  |%Witte de Withstraat|27          |
      |4  |Lijnbaan            |-3          |
      |5  |null                |13          |
      +---+--------------------+------------+

  **Import and initialize the `DataFrameTester`**

  ```python
  from testframework.dataquality import DataFrameTester
  ```

  ```python
  df_tester = DataFrameTester(
      df=df,
      primary_key="id",
      spark=spark,
  )
  ```

  **Import configurable tests**

  ```python
  from testframework.dataquality.tests import ValidNumericRange, RegexTest
  ```

  **Initialize the `RegexTest` to test for valid street names**

  ```python
  valid_street_format = RegexTest(
      name="ValidStreetFormat",
      pattern=r"^[A-Z][a-zéèáàëï]*([ -][A-Z]?[a-zéèáàëï]*)*$",
  )
  ```

  **Run `valid_street_format` on the _street_ column using the `.test()` method of `DataFrameTester`.**

  ```python
  df_tester.test(
      col="street",
      test=valid_street_format,
      nullable=False,  # nullable is False, hence null values are converted to False
      description="Street is in valid Dutch street format.",
  ).show(truncate=False)
  ```

      +---+--------------------+-------------------------+
      |id |street              |street__ValidStreetFormat|
      +---+--------------------+-------------------------+
      |1  |Rochussenstraat     |true                     |
      |2  |Coolsingel          |true                     |
      |3  |%Witte de Withstraat|false                    |
      |4  |Lijnbaan            |true                     |
      |5  |null                |false                    |
      +---+--------------------+-------------------------+

  **Run the `IntegerString` test on the _number_ column**

  By setting the `return_failed_rows` parameter to `True`, we can get only the rows that failed the test.

  ```python
  df_tester.test(
      col="house_number",
      test=ValidNumericRange(
          min_value=1,
      ),
      nullable=False,
      
      return_failed_rows=True,  # only return the failed rows
  ).show()
  ```

      +---+------------+-------------------------------+
      | id|house_number|house_number__ValidNumericRange|
      +---+------------+-------------------------------+
      |  4|          -3|                          false|
      +---+------------+-------------------------------+

  **Let's take a look at the test results of the DataFrame using the `.results` attribute.**

  ```python
  df_tester.results.show(truncate=False)
  ```

      +---+-------------------------+-------------------------------+
      |id |street__ValidStreetFormat|house_number__ValidNumericRange|
      +---+-------------------------+-------------------------------+
      |1  |true                     |true                           |
      |2  |true                     |true                           |
      |3  |false                    |true                           |
      |4  |true                     |false                          |
      |5  |false                    |true                           |
      +---+-------------------------+-------------------------------+

  **We can use `.descriptions` or `.descriptions_df` to get the descriptions of the tests.**

  <br>
  This can be useful for reporting purposes.
  For example to create reports for the business with more detailed information than just the column name and the test name.

  ```python
  df_tester.descriptions
  ```

      {'street__ValidStreetFormat': 'Street is in valid Dutch street format.',
       'house_number__ValidNumericRange': 'house_number__ValidNumericRange(min_value=1.0, max_value=inf)'}

  ```python
  df_tester.description_df.show(truncate=False)
  ```

      +-------------------------------+-------------------------------------------------------------+
      |test                           |description                                                  |
      +-------------------------------+-------------------------------------------------------------+
      |street__ValidStreetFormat      |Street is in valid Dutch street format.                      |
      |house_number__ValidNumericRange|house_number__ValidNumericRange(min_value=1.0, max_value=inf)|
      +-------------------------------+-------------------------------------------------------------+



  Sometimes tests are too specific or complex to be covered by the configurable tests. That's why we can create custom tests and add them to the `DataFrameTester` object.

  Let's do this using a custom test which should tests that every house has a bath room. We'll start by creating a new DataFrame with rooms rather than houses.

  ```python
  rooms = [
      (1,1, "living room"),
      (2,1, "bathroom"),
      (3,1, "kitchen"),
      (4,1, "bed room"),
      (5,2, "living room"),
      (6,2, "bed room"),
      (7,2, "kitchen"),
  ]

  schema_rooms = StructType(
      [   StructField("id", IntegerType(), True),
          StructField("house_id", IntegerType(), True),
          StructField("room", StringType(), True),
      ]
  )

  room_df = spark.createDataFrame(rooms, schema=schema_rooms)

  room_df.show(truncate=False)
  ```

      +---+--------+-----------+
      |id |house_id|room       |
      +---+--------+-----------+
      |1  |1       |living room|
      |2  |1       |bathroom   |
      |3  |1       |kitchen    |
      |4  |1       |bed room   |
      |5  |2       |living room|
      |6  |2       |bed room   |
      |7  |2       |kitchen    |
      +---+--------+-----------+

  To create a custom test, we should create a pyspark DataFrame which contains the same primary_key column as the DataFrame to be tested using the `DataFrameTester`.

  Let's create a boolean column that indicates whether the house has a bath room or not.

  ```python
  house_has_bathroom = room_df.groupBy("house_id").agg(
      F.max(F.when(F.col("room") == "bathroom", True).otherwise(False)).alias(
          "has_bathroom"
      )
  )

  house_has_bathroom.show(truncate=False)
  ```

      +--------+------------+
      |house_id|has_bathroom|
      +--------+------------+
      |1       |true        |
      |2       |false       |
      +--------+------------+

  **We can add this 'custom test' to the `DataFrameTester` using `add_custom_test_result`.**

  In the background, all kinds of data validation checks are done by `DataFrameTester` to make sure that it fits the requirements to be added to the other test results.

  ```python
  df_tester.add_custom_test_result(
      result=house_has_bathroom.withColumnRenamed("house_id", "id"),
      name="has_bathroom",
      description="House has a bathroom",
      
  ).show(truncate=False)
  ```

      +---+------------+
      |id |has_bathroom|
      +---+------------+
      |1  |true        |
      |2  |false       |
      |3  |null        |
      |4  |null        |
      |5  |null        |
      +---+------------+

  **Despite that the data whether a house has a bath room is not available in the house DataFrame; we can still add the custom test to the `DataFrameTester` object.**

  ```python
  df_tester.results.show(truncate=False)
  ```

      +---+-------------------------+-------------------------------+------------+
      |id |street__ValidStreetFormat|house_number__ValidNumericRange|has_bathroom|
      +---+-------------------------+-------------------------------+------------+
      |1  |true                     |true                           |true        |
      |2  |true                     |true                           |false       |
      |3  |false                    |true                           |null        |
      |4  |true                     |false                          |null        |
      |5  |false                    |true                           |null        |
      +---+-------------------------+-------------------------------+------------+

  ```python
  df_tester.descriptions
  ```

      {'street__ValidStreetFormat': 'Street is in valid Dutch street format.',
       'house_number__ValidNumericRange': 'house_number__ValidNumericRange(min_value=1.0, max_value=inf)',
       'has_bathroom': 'House has a bathroom'}

  **We can also get a summary of the test results using the `.summary` attribute.**

  ```python
  df_tester.summary.show(truncate=False)
  ```

      +-------------------------------+-------------------------------------------------------------+-------+--------+-----------------+--------+-----------------+
      |test                           |description                                                  |n_tests|n_passed|percentage_passed|n_failed|percentage_failed|
      +-------------------------------+-------------------------------------------------------------+-------+--------+-----------------+--------+-----------------+
      |street__ValidStreetFormat      |Street is in valid Dutch street format.                      |5      |3       |60.0             |2       |40.0             |
      |house_number__ValidNumericRange|house_number__ValidNumericRange(min_value=1.0, max_value=inf)|5      |4       |80.0             |1       |20.0             |
      |has_bathroom                   |House has a bathroom                                         |2      |1       |50.0             |1       |50.0             |
      +-------------------------------+-------------------------------------------------------------+-------+--------+-----------------+--------+-----------------+

  **If you want to see all rows that failed any of the tests, you can use the `.failed_tests` attribute.**

  ```python
  df_tester.failed_tests.show(truncate=False)
  ```

      +---+-------------------------+-------------------------------+------------+
      |id |street__ValidStreetFormat|house_number__ValidNumericRange|has_bathroom|
      +---+-------------------------+-------------------------------+------------+
      |2  |true                     |true                           |false       |
      |3  |false                    |true                           |null        |
      |4  |true                     |false                          |null        |
      |5  |false                    |true                           |null        |
      +---+-------------------------+-------------------------------+------------+

  **Of course, you can also see all rows that passed all tests using the `.passed_tests` attribute.**

  ```python
  df_tester.passed_tests.show(truncate=False)
  ```

      +---+-------------------------+-------------------------------+------------+
      |id |street__ValidStreetFormat|house_number__ValidNumericRange|has_bathroom|
      +---+-------------------------+-------------------------------+------------+
      |1  |true                     |true                           |true        |
      +---+-------------------------+-------------------------------+------------+

rpm_license:
  MIT License  Copyright (c) 2024 Woonstad Rotterdam  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: af1513506639442ac19861b8c84bfd99446902d9b51c1c6739dec58794064914
name: python-pysparkdt-help
arch: noarch
version: 1.0.1
epoch: 0
release: 1
summary: Development documents and examples for pysparkdt
url: https://github.com/datamole-ai/pysparkdt
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysparkdt-1.0.1-1.src.rpm
location_href: Packages/python-pysparkdt-help-1.0.1-1.noarch.rpm
checksum_type: sha256
description:
  **An open-source Python library for simplifying local testing of Databricks
  workflows using PySpark and Delta tables.**

  This library enables seamless testing of PySpark processing logic outside
  Databricks by **emulating Unity Catalog** behavior. It dynamically generates a
  local metastore to mimic Unity Catalog and supports simplified handling of
  Delta tables for both batch and streaming workloads.





  - [Overview](#overview)
    - [Scope](#scope)
    - [Prerequisites](#prerequisites)
  - [Setup](#setup)
    1. [Installation](#1-installation)
    2. [Testable Code](#2-testable-code)
    3. [File Structure](#3-file-structure)
    4. [Tests](#4-tests)
  - [Advanced](#advanced)
    - [Testing Stream Processing](#testing-stream-processing)
    - [Mocking Inside RDD and UDF Operations](#mocking-inside-rdd-and-udf-operations)
  - [Limitations](#limitations)
    - [Map Key Type Must Be String](#map-key-type-must-be-string)




  This guideline helps you test Databricks Python pipelines with a
  focus on PySpark code. While basic unit testing knowledge with pytest is
  helpful, it's not the central focus.


  - **Standalone Testing:** The setup allows you to test code without Databricks
  access, enabling easy CI integration.

  - **Local Metastore:** Mimic the Databricks Unity Catalog using a dynamically
  generated local metastore with local Delta tables.

  - **Code Testability:** Move core processing logic from notebooks to Python
  modules. Notebooks then serve as entrypoints.


  In the following section we will assume that you are creating tests for a
  job which has one delta table on input and produces one delta table on output.
  It utilizes PySpark for its processing.


  **Install pysparkdt**
  - Get this package from the pypi. It's only needed in your test environment.

  ```bash
  pip install pysparkdt
  ```


  - **Modularization:** Move processing logic from notebooks to modules.

  - **Notebook Role:** Notebooks primarily handle initialization and triggering
  processing. They should contain all the code specific to Databricks
  (e.g. `dbutils` usage)

  <div align="center">
  <strong>entrypoint.py (Databricks Notebook)</strong>
  </div>

  ```python

  import sys
  from pathlib import Path

  MODULE_DIR = Path.cwd().parent
  sys.path.append(MODULE_DIR.as_posix())



  from myjobpackage.processing import process_data



  input_table = dbutils.widgets.get('input_table')
  output_table = dbutils.widgets.get('output_table')



  process_data(
      session=spark,
      input_table=input_table,
      output_table=output_table,
  )
  ```
  **myjobpackage.processing**
  - Contains the core logic to test
  - Our test focuses on the core function `myjobpackage.processing.process_data`



  ```
  myjobpackage
  ├── __init__.py
  ├── entrypoint.py  # Databricks Notebook
  ├── processing.py
  └── tests
      ├── __init__.py
      ├── test_processing.py
      └── data
          ├── tables
              ├── example_input.ndjson
              └── expected_output.ndjson
              └── schema
                  ├── example_input.json
                  └── expected_output.json
  ```

  **Data Format**

  - **Test Data:** Newline-delimited JSON (`.ndjson`)
  - **Optional Schema:** JSON
    - If present, full schema must be provided (all columns included).
    - The format of the schema file is defined by [PySpark StructType JSON
    representation](https://spark.apache.org/docs/latest/api/python/_modules/pyspark/sql/types.html#StructType.fromJson).

  <div align="center">
  <strong>example_input.ndjson</strong>
  </div>

  ```json lines
  {"id": 0, "time_utc": "2024-01-08T11:00:00", "name": "Jorge", "feature": 0.5876}
  {"id": 1, "time_utc": "2024-01-11T14:28:00", "name": "Ricardo", "feature": 0.42}
  ```

  <div align="center">
  <strong>example_input.json</strong>
  </div>

  ```json
  {
      "type": "struct",
      "fields":
      [
          {
              "name": "id",
              "type": "long",
              "nullable": false,
              "metadata": {}
          },
          {
              "name": "time_utc",
              "type": "timestamp",
              "nullable": false,
              "metadata": {}
          },
          {
              "name": "name",
              "type": "string",
              "nullable": true,
              "metadata": {}
          },
          {
              "name": "feature",
              "type": "double",
              "nullable": true,
              "metadata": {}
          }
      ]
  }
  ```

  **Tip:** A schema file for a loaded PySpark DataFrame df can be created using:

  ```python
  with(open('example_input.json', 'w')) as file:
    file.write(json.dumps(df.schema.jsonValue(), indent=4))
  ```

  Thus, you can first load a table without a schema, then create schema file
  from it and modify the types to the desired one.



  **Constants:** Define paths for test data and the temporary metastore.

  ```python
  DATA_DIR = f'{os.path.dirname(__file__)}/data'
  JSON_TABLES_DIR = f'{DATA_DIR}/tables'
  TMP_DIR = f'{DATA_DIR}/tmp'
  METASTORE_DIR = f'{TMP_DIR}/metastore'
  ```

  **Spark Fixture:** Define fixture for the local spark session using
  `spark_base` function from the testing package. Specify the temporal metastore
  location.

  ```python
  from pytest import fixture
  from pysparkdt import spark_base

  @fixture(scope='module')
  def spark():
      yield from spark_base(METASTORE_DIR)
  ```

  **Metastore Initialization:** Use `reinit_local_metastore`

  At the beginning of your test method call `reinit_local_metastore` function
  from the testing package to initialize the metastore with the tables from
  your json folder (`JSON_TABLES_DIR`). If the method is called while the
  metastore  already exists, it will delete all the existing tables before
  initializing the new ones.

  *Alternatively, you can call this method only once per testing module,
  but then individual testing methods might affect each other by modifying
  metastore tables.*

  ```python
  from myjobpackage.processing import process_data
  from pysparkdt import reinit_local_metastore
  from pyspark.testing import assertDataFrameEqual

  def test_process_data(
      spark: SparkSession,
  ):
      reinit_local_metastore(spark, JSON_TABLES_DIR)

      process_data(
          session=spark,
          input_table='example_input',
          output_table='output',
      )

      output = spark.read.format('delta').table('output')
      expected = spark.read.format('delta').table('expected_output')

      assertDataFrameEqual(
          actual=output.select(sorted(output.columns)),
          expected=expected.select(sorted(expected.columns)),
      )
  ```

   In the example above, we use `assertDataFrameEqual` to compare PySpark
   DataFrames. We ensure the columns are ordered so that the order of result
   columns does not matter. By default, the order of rows does not matter in
   `assertDataFrameEqual` (this can be adjusted using the `checkRowOrder`
   parameter).

  **⚠️ Note on running tests in parallel**

  With the setup above, the metastore is shared on the module scope.
  Therefore, if tests defined in the same module are run in parallel,
  race conditions can occur if multiple test functions use the same tables.

  To mitigate this, make sure each test in the module uses its own set of tables.





  Let's now focus on a case where a job is reading input delta table using
  PySpark streaming, performing some computation on the data and saving it to
  the output delta table.

  In order to be able to test the processing we need to explicitly wait for
  its completion. The best way to do it is to **await the streaming function
  performing the processing**.

  To be able to await the streaming function, the **test function needs to have
  access to it**. Thus, we need to make sure the streaming function (query in
  Databricks terms) is accessible - for example by returning it by
  the processing function.

  <div align="center">
  <strong>myjobpackage/processing.py</strong>
  </div>

  ```python
  def process_data(
      input_table: str,
      output_table: str,
      checkpoint_location: str,
  ) -> StreamingQuery
    load_query = session.readStream.format('delta').table(input_table)

    def process_batch(df: pyspark.sql.DataFrame, _) -> None:
        ... process df ...
        df.write.mode('append').format('delta').saveAsTable(output_table)

    return (
        load_query.writeStream.format('delta')
        .foreachBatch(process_batch)
        .trigger(availableNow=True)
        .option('checkpointLocation', checkpoint_location)
        .start()
    )
  ```

  <div align="center">
  <strong>myjobpackage/tests/test_processing.py</strong>
  </div>

  ```python
  def test_process_data(spark: SparkSession):
      ...
      spark_processing = process_data(
          session=spark,
          input_table_name='example_input',
          output_table='output',
          checkpoint_location=f'{TMP_DIR}/_checkpoint/output',
      )
      spark_processing.awaitTermination(60)

      output = spark.read.format('delta').table('output')
      expected = spark.read.format('delta').table('expected_output')
      ...
  ```



  If we are testing whole job’s processing code and inside it we have functions
  executed through `rdd.mapPartitions`, `rdd.map`, or UDFs, we need to add
  special  handling for mocking as regular patching does not propagate to worker
  nodes.

  <div align="center">
  <strong>myjobpackage/processing.py</strong>
  </div>

  ```python
  myjobpackage/processing.py

  def call_api(
      data_df: pyspark.sql.DataFrame,
  ) -> pyspark.sql.DataFrame:
      
      result = data_df.rdd.mapPartitions(_partition_run).toDF()
      return result

  def _partition_run(
      iterable: Iterable[Row],
  ) -> Iterable[dict[str, Any]]:
    with ApiSessionClient() as client:
        for row in iterable:
            ...
            output = client.post(prepared_data)
            ...
            yield output

  def process_data(
      data_df: pyspark.sql.DataFrame,
  ) -> pyspark.sql.DataFrame:
      ...
      ... = call_api(...)
      ...
  ```

   In this example we have a code that calls external API in `_partition_run`,
   we do not want to call the actual API in our test, thus we want to mock
   `ApiSessionClient`.

  ```python
  from pytest import fixture

  def _mocked_session_post(json_data: dict):
      ...
      return output


  @fixture
  def api_session_client(mocker):
      api_session_client_mock = mocker.patch.object(
          myjobpackage.processing,
          'ApiSessionClient',
      )
      api_session_client_mock.return_value = session_client = mocker.Mock()
      session_client.__enter__ = mocker.Mock()
      session_client.__enter__.return_value = session_client_ctx = mocker.Mock()
      session_client.__exit__ = mocker.Mock()
      session_client_ctx.post = mocker.Mock(side_effect=_mocked_session_post)
      return session_client
  ```

  As `ApiSessionClient` is created inside `rdd.mapPartitions` we need to also
  mock `call_api`.

  ```python
  def _mocked_call_api(
      data_df: pyspark.sql.DataFrame,
  ) -> pyspark.sql.DataFrame:
      results = list(_partition_run(data_df.collect()))
      spark = SparkSession.builder.getOrCreate()
      pandas_df = pd.DataFrame(results)
      return spark.createDataFrame(pandas_df)


  @fixture
  def call_api_mock(mocker, api_session_client):
      mocker.patch.object(
          myjobpackage.processing, 'call_api', _mocked_call_api
      )
  ```

  Then we can run the test with the mocked API.

  ```python
  def test_process_data(
      spark: SparkSession,
      call_api_mock,
  ):
    ...
  ```





  Although Spark supports non-string key types in map fields, the JSON format
  itself does not support non-string keys. In JSON, all keys are inherently
  interpreted as strings, regardless of their declared type in the schema.
  This discrepancy becomes problematic when testing with `.ndjson` files.

  Specifically, if the schema defines a map key type as anything other than
  `string` (such as `long` or `integer`), the reinitialization of the metastore
  will  result in `None` values for all fields in the Delta table when the data
  is loaded. This happens because the keys in the JSON data are read as strings,
  but the schema expects another type, leading to a silent failure where no
  exception or warning is raised. This makes the issue difficult to detect
  and debug.



  pysparkdt is licensed under the [MIT
  license](https://opensource.org/license/mit/). See the
  [LICENSE file](https://github.com/datamole-ai/pysparkdt/blob/main/LICENSE) for more details.



  See [CONTRIBUTING.md](https://github.com/datamole-ai/pysparkdt/blob/main/CONTRIBUTING.md).


pkgId: b6c869b4940a5d032b85fcbb7fcfa5cb266b8486550bf6c66a513dedaac739dc
name: python-pysparkformat-help
arch: noarch
version: 0.0.9
epoch: 0
release: 1
summary: Development documents and examples for pysparkformat
url: https://github.com/aig/pysparkformat
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysparkformat-0.0.9-1.src.rpm
location_href: Packages/python-pysparkformat-help-0.0.9-1.noarch.rpm
checksum_type: sha256
description:
  <p>
      <a href="https://pypi.org/project/pysparkformat/">
          <img src="https://img.shields.io/pypi/v/pysparkformat?color=green&amp;style=for-the-badge" alt="Latest Python Release"/>
      </a>


pkgId: 4d1f78515c45dbd11e775dde20549674c30dd9cf9a92426ca0c4321a2f7e8c5d
name: python-pyspellchecker-help
arch: noarch
version: 0.8.2
epoch: 0
release: 1
summary: Development documents and examples for pyspellchecker
url: https://pypi.org/project/pyspellchecker/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyspellchecker-0.8.2-1.src.rpm
location_href: Packages/python-pyspellchecker-help-0.8.2-1.noarch.rpm
checksum_type: sha256
description:
  Pure Python Spell Checking based on `Peter
  Norvig's <https://norvig.com/spell-correct.html>`__ blog post on setting
  up a simple spell checking algorithm.
  It uses a `Levenshtein Distance <https://en.wikipedia.org/wiki/Levenshtein_distance>`__
  algorithm to find permutations within an edit distance of 2 from the
  original word. It then compares all permutations (insertions, deletions,
  replacements, and transpositions) to known words in a word frequency
  list. Those words that are found more often in the frequency list are
  **more likely** the correct results.
  ``pyspellchecker`` supports multiple languages including English, Spanish,
  German, French, Portuguese, Arabic and Basque. For information on how the dictionaries were
  created and how they can be updated and improved, please see the
  **Dictionary Creation and Updating** section of the readme!
  ``pyspellchecker`` supports **Python 3**
  ``pyspellchecker`` allows for the setting of the Levenshtein Distance (up to two) to check.
  For longer words, it is highly recommended to use a distance of 1 and not the
  default 2. See the quickstart to find how one can change the distance parameter.


pkgId: 6a1a88dc9a1da35ec78f661879f4a3769f983aacb7d1440ff2cfee3ee8aa4c53
name: python-pysr-help
arch: noarch
version: 1.2.0
epoch: 0
release: 1
summary: Development documents and examples for pysr
url: https://pypi.org/project/pysr/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysr-1.2.0-1.src.rpm
location_href: Packages/python-pysr-help-1.2.0-1.noarch.rpm
checksum_type: sha256
description:
  [//]: # (Logo:)

  <div align="center">

  PySR searches for symbolic expressions which optimize a particular objective.

  https://github.com/MilesCranmer/PySR/assets/7593028/c8511a49-b408-488f-8f18-b1749078268f




  | **Docs** | **Forums** | **Paper** | **colab demo** |
  |:---:|:---:|:---:|:---:|
  |[![Documentation](https://github.com/MilesCranmer/PySR/actions/workflows/docs.yml/badge.svg)](https://ai.damtp.cam.ac.uk/pysr/)|[![Discussions](https://img.shields.io/badge/discussions-github-informational)](https://github.com/MilesCranmer/PySR/discussions)|[![Paper](https://img.shields.io/badge/arXiv-2305.01582-b31b1b)](https://arxiv.org/abs/2305.01582)|[![Colab](https://img.shields.io/badge/colab-notebook-yellow)](https://colab.research.google.com/github/MilesCranmer/PySR/blob/master/examples/pysr_demo.ipynb)|

  | **pip** | **conda** | **Stats** |
  | :---: | :---: | :---: |
  |[![PyPI version](https://badge.fury.io/py/pysr.svg)](https://badge.fury.io/py/pysr)|[![Conda Version](https://img.shields.io/conda/vn/conda-forge/pysr.svg)](https://anaconda.org/conda-forge/pysr)|<div align="center">pip: [![Downloads](https://static.pepy.tech/badge/pysr)](https://pypi.org/project/pysr/)<br>conda: [![Anaconda-Server Badge](https://anaconda.org/conda-forge/pysr/badges/downloads.svg)](https://anaconda.org/conda-forge/pysr)</div>|

  </div>

  If you find PySR useful, please cite the paper [arXiv:2305.01582](https://arxiv.org/abs/2305.01582).
  If you've finished a project with PySR, please submit a PR to showcase your work on the [research showcase page](https://ai.damtp.cam.ac.uk/pysr/papers)!

  **Contents**:

  - [Why PySR?](#why-pysr)
  - [Installation](#installation)
  - [Quickstart](#quickstart)
  - [→ Documentation](https://ai.damtp.cam.ac.uk/PySR)
  - [Contributors](#contributors-)

  <div align="center">



  | **Linux** | **Windows** | **macOS** |
  |---|---|---|
  |[![Linux](https://github.com/MilesCranmer/PySR/actions/workflows/CI.yml/badge.svg)](https://github.com/MilesCranmer/PySR/actions/workflows/CI.yml)|[![Windows](https://github.com/MilesCranmer/PySR/actions/workflows/CI_Windows.yml/badge.svg)](https://github.com/MilesCranmer/PySR/actions/workflows/CI_Windows.yml)|[![macOS](https://github.com/MilesCranmer/PySR/actions/workflows/CI_mac.yml/badge.svg)](https://github.com/MilesCranmer/PySR/actions/workflows/CI_mac.yml)|
  | **Docker** | **Conda** | **Coverage** |
  |[![Docker](https://github.com/MilesCranmer/PySR/actions/workflows/CI_docker.yml/badge.svg)](https://github.com/MilesCranmer/PySR/actions/workflows/CI_docker.yml)|[![conda-forge](https://github.com/MilesCranmer/PySR/actions/workflows/CI_conda_forge.yml/badge.svg)](https://github.com/MilesCranmer/PySR/actions/workflows/CI_conda_forge.yml)|[![Coverage Status](https://coveralls.io/repos/github/MilesCranmer/PySR/badge.svg?branch=master&service=github)](https://coveralls.io/github/MilesCranmer/PySR)|

  </div>



  PySR is an open-source tool for *Symbolic Regression*: a machine learning
  task where the goal is to find an interpretable symbolic expression that optimizes some objective.

  Over a period of several years, PySR has been engineered from the ground up
  to be (1) as high-performance as possible,
  (2) as configurable as possible, and (3) easy to use.
  PySR is developed alongside the Julia library [SymbolicRegression.jl](https://github.com/MilesCranmer/SymbolicRegression.jl),
  which forms the powerful search engine of PySR.
  The details of these algorithms are described in the [PySR paper](https://arxiv.org/abs/2305.01582).

  Symbolic regression works best on low-dimensional datasets, but
  one can also extend these approaches to higher-dimensional
  spaces by using "*Symbolic Distillation*" of Neural Networks, as explained in
  [2006.11287](https://arxiv.org/abs/2006.11287), where we apply
  it to N-body problems. Here, one essentially uses
  symbolic regression to convert a neural net
  to an analytic equation. Thus, these tools simultaneously present
  an explicit and powerful way to interpret deep neural networks.





  You can install PySR with pip:

  ```bash
  pip install pysr
  ```

  Julia dependencies will be installed at first import.



  Similarly, with conda:

  ```bash
  conda install -c conda-forge pysr
  ```

  <details>
  <summary>



  </summary>

  You can also use the `Dockerfile` to install PySR in a docker container

  1. Clone this repo.
  2. Within the repo's directory, build the docker container:
  ```bash
  docker build -t pysr .
  ```
  3. You can then start the container with an IPython execution with:
  ```bash
  docker run -it --rm pysr ipython
  ```

  For more details, see the [docker section](#docker).

  </details>

  <details>
  <summary>



  </summary>

  If you are using PySR on a cluster where you do not have root access,
  you can use [Apptainer](https://apptainer.org/) to build a container
  instead of Docker. The `Apptainer.def` file is analogous to the `Dockerfile`,
  and can be built with:

  ```bash
  apptainer build --notest pysr.sif Apptainer.def
  ```

  and launched with

  ```bash
  apptainer run pysr.sif
  ```

  </details>

  <details>
  <summary>



  </summary>

  One issue you might run into can result in a hard crash at import with
  a message like "`GLIBCXX_...` not found". This is due to another one of the Python dependencies
  loading an incorrect `libstdc++` library. To fix this, you should modify your
  `LD_LIBRARY_PATH` variable to reference the Julia libraries. For example, if the Julia
  version of `libstdc++.so` is located in `$HOME/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/lib/julia/`
  (which likely differs on your system!), you could add:

  ```
  export LD_LIBRARY_PATH=$HOME/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/lib/julia/:$LD_LIBRARY_PATH
  ```

  to your `.bashrc` or `.zshrc` file.

  </details>




  You might wish to try the interactive tutorial [here](https://colab.research.google.com/github/MilesCranmer/PySR/blob/master/examples/pysr_demo.ipynb), which uses the notebook in `examples/pysr_demo.ipynb`.

  In practice, I highly recommend using IPython rather than Jupyter, as the printing is much nicer.
  Below is a quick demo here which you can paste into a Python runtime.
  First, let's import numpy to generate some test data:

  ```python
  import numpy as np

  X = 2 * np.random.randn(100, 5)
  y = 2.5382 * np.cos(X[:, 3]) + X[:, 0] ** 2 - 0.5
  ```

  We have created a dataset with 100 datapoints, with 5 features each.
  The relation we wish to model is $2.5382 \cos(x_3) + x_0^2 - 0.5$.

  Now, let's create a PySR model and train it.
  PySR's main interface is in the style of scikit-learn:

  ```python
  from pysr import PySRRegressor

  model = PySRRegressor(
      maxsize=20,
      niterations=40,  # < Increase me for better results
      binary_operators=["+", "*"],
      unary_operators=[
          "cos",
          "exp",
          "sin",
          "inv(x) = 1/x",
          
      ],
      extra_sympy_mappings={"inv": lambda x: 1 / x},
      
      elementwise_loss="loss(prediction, target) = (prediction - target)^2",
      
  )
  ```

  This will set up the model for 40 iterations of the search code, which contains hundreds of thousands of mutations and equation evaluations.

  Let's train this model on our dataset:

  ```python
  model.fit(X, y)
  ```

  Internally, this launches a Julia process which will do a multithreaded search for equations to fit the dataset.

  Equations will be printed during training, and once you are satisfied, you may
  quit early by hitting 'q' and then \<enter\>.

  After the model has been fit, you can run `model.predict(X)`
  to see the predictions on a given dataset using the automatically-selected expression,
  or, for example, `model.predict(X, 3)` to see the predictions of the 3rd equation.

  You may run:

  ```python
  print(model)
  ```

  to print the learned equations:

  ```python
  PySRRegressor.equations_ = [
  	   pick     score                                           equation       loss  complexity
  	0        0.000000                                          4.4324794  42.354317           1
  	1        1.255691                                          (x0 * x0)   3.437307           3
  	2        0.011629                          ((x0 * x0) + -0.28087974)   3.358285           5
  	3        0.897855                              ((x0 * x0) + cos(x3))   1.368308           6
  	4        0.857018                ((x0 * x0) + (cos(x3) * 2.4566472))   0.246483           8
  	5  >>>>       inf  (((cos(x3) + -0.19699033) * 2.5382123) + (x0 *...   0.000000          10
  ]
  ```

  This arrow in the `pick` column indicates which equation is currently selected by your
  `model_selection` strategy for prediction.
  (You may change `model_selection` after `.fit(X, y)` as well.)

  `model.equations_` is a pandas DataFrame containing all equations, including callable format
  (`lambda_format`),
  SymPy format (`sympy_format` - which you can also get with `model.sympy()`), and even JAX and PyTorch format
  (both of which are differentiable - which you can get with `model.jax()` and `model.pytorch()`).

  Note that `PySRRegressor` stores the state of the last search, and will restart from where you left off the next time you call `.fit()`, assuming you have set `warm_start=True`.
  This will cause problems if significant changes are made to the search parameters (like changing the operators). You can run `model.reset()` to reset the state.

  You will notice that PySR will save two files:
  `hall_of_fame...csv` and `hall_of_fame...pkl`.
  The csv file is a list of equations and their losses, and the pkl file is a saved state of the model.
  You may load the model from the `pkl` file with:

  ```python
  model = PySRRegressor.from_file("hall_of_fame.2022-08-10_100832.281.pkl")
  ```

  There are several other useful features such as denoising (e.g., `denoise=True`),
  feature selection (e.g., `select_k_features=3`).
  For examples of these and other features, see the [examples page](https://ai.damtp.cam.ac.uk/pysr/examples).
  For a detailed look at more options, see the [options page](https://ai.damtp.cam.ac.uk/pysr/options).
  You can also see the full API at [this page](https://ai.damtp.cam.ac.uk/pysr/api).
  There are also tips for tuning PySR on [this page](https://ai.damtp.cam.ac.uk/pysr/tuning).



  The following code makes use of as many PySR features as possible.
  Note that is just a demonstration of features and you should not use this example as-is.
  For details on what each parameter does, check out the [API page](https://ai.damtp.cam.ac.uk/pysr/api/).

  ```python
  model = PySRRegressor(
      populations=8,
      
      population_size=50,
      
      ncycles_per_iteration=500,
      
      niterations=10000000,  # Run forever
      early_stop_condition=(
          "stop_if(loss, complexity) = loss < 1e-6 && complexity < 10"
          
      ),
      timeout_in_seconds=60 * 60 * 24,
      
      maxsize=50,
      
      maxdepth=10,
      
      binary_operators=["*", "+", "-", "/"],
      unary_operators=["square", "cube", "exp", "cos2(x)=cos(x)^2"],
      constraints={
          "/": (-1, 9),
          "square": 9,
          "cube": 9,
          "exp": 9,
      },
      
      
      
      
      
      nested_constraints={
          "square": {"square": 1, "cube": 1, "exp": 0},
          "cube": {"square": 1, "cube": 1, "exp": 0},
          "exp": {"square": 1, "cube": 1, "exp": 0},
      },
      
      
      complexity_of_operators={"/": 2, "exp": 3},
      
      complexity_of_constants=2,
      
      select_k_features=4,
      
      progress=True,
      
      weight_randomize=0.1,
      
      cluster_manager=None,
      
      
      precision=64,
      
      warm_start=True,
      
      turbo=True,
      
      extra_sympy_mappings={"cos2": lambda x: sympy.cos(x)**2},
      
      
      
      
      
  )
  ```



  You can also test out PySR in Docker, without
  installing it locally, by running the following command in
  the root directory of this repo:

  ```bash
  docker build -t pysr .
  ```

  This builds an image called `pysr` for your system's architecture,
  which also contains IPython. You can select a specific version
  of Python and Julia with:

  ```bash
  docker build -t pysr --build-arg JLVERSION=1.10.0 --build-arg PYVERSION=3.11.6 .
  ```

  You can then run with this dockerfile using:

  ```bash
  docker run -it --rm -v "$PWD:/data" pysr ipython
  ```

  which will link the current directory to the container's `/data` directory
  and then launch ipython.

  If you have issues building for your system's architecture,
  you can emulate another architecture by including `--platform linux/amd64`,
  before the `build` and `run` commands.

  <div align="center">



  </div>

  We are eager to welcome new contributors! Check out our contributors [guide](https://github.com/MilesCranmer/PySR/blob/master/CONTRIBUTORS.md) for tips 🚀.
  If you have an idea for a new feature, don't hesitate to share it on the [issues](https://github.com/MilesCranmer/PySR/issues) or [discussions](https://github.com/MilesCranmer/PySR/discussions) page.

  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
  <!-- prettier-ignore-start -->
  <!-- markdownlint-disable -->
  <table>
    <tbody>
      <tr>
        <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/markkittisopikul/"><img src="https://avatars.githubusercontent.com/u/8062771?v=4?s=50" width="50px;" alt="Mark Kittisopikul"/><br /><sub><b>Mark Kittisopikul</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=mkitti" title="Code">💻</a> <a href="#ideas-mkitti" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-mkitti" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-mkitti" title="Packaging/porting to new platform">📦</a> <a href="#promotion-mkitti" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Amkitti" title="Reviewed Pull Requests">👀</a> <a href="#tool-mkitti" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=mkitti" title="Tests">⚠️</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/tttc3"><img src="https://avatars.githubusercontent.com/u/97948946?v=4?s=50" width="50px;" alt="T Coxon"/><br /><sub><b>T Coxon</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Atttc3" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=tttc3" title="Code">💻</a> <a href="#plugin-tttc3" title="Plugin/utility libraries">🔌</a> <a href="#ideas-tttc3" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-tttc3" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-tttc3" title="Maintenance">🚧</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Atttc3" title="Reviewed Pull Requests">👀</a> <a href="#tool-tttc3" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=tttc3" title="Tests">⚠️</a> <a href="#userTesting-tttc3" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/DhananjayAshok"><img src="https://avatars.githubusercontent.com/u/46792537?v=4?s=50" width="50px;" alt="Dhananjay Ashok"/><br /><sub><b>Dhananjay Ashok</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=DhananjayAshok" title="Code">💻</a> <a href="#example-DhananjayAshok" title="Examples.">🌍</a> <a href="#ideas-DhananjayAshok" title="Ideas, planning, and feedback.">💡</a> <a href="#maintenance-DhananjayAshok" title="Maintenance">🚧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=DhananjayAshok" title="Tests">⚠️</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://gitlab.com/johanbluecreek"><img src="https://avatars.githubusercontent.com/u/852554?v=4?s=50" width="50px;" alt="Johan Blåbäck"/><br /><sub><b>Johan Blåbäck</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Ajohanbluecreek" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=johanbluecreek" title="Code">💻</a> <a href="#ideas-johanbluecreek" title="Ideas, planning, and feedback.">💡</a> <a href="#maintenance-johanbluecreek" title="Maintenance">🚧</a> <a href="#promotion-johanbluecreek" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Ajohanbluecreek" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=johanbluecreek" title="Tests">⚠️</a> <a href="#userTesting-johanbluecreek" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://mathopt.de/people/martensen/index.php"><img src="https://avatars.githubusercontent.com/u/20998300?v=4?s=50" width="50px;" alt="JuliusMartensen"/><br /><sub><b>JuliusMartensen</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AAlCap23" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=AlCap23" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=AlCap23" title="Documentation">📖</a> <a href="#plugin-AlCap23" title="Plugin/utility libraries">🔌</a> <a href="#ideas-AlCap23" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-AlCap23" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-AlCap23" title="Maintenance">🚧</a> <a href="#platform-AlCap23" title="Packaging/porting to new platform">📦</a> <a href="#promotion-AlCap23" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3AAlCap23" title="Reviewed Pull Requests">👀</a> <a href="#tool-AlCap23" title="Tools">🔧</a> <a href="#userTesting-AlCap23" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/ngam"><img src="https://avatars.githubusercontent.com/u/67342040?v=4?s=50" width="50px;" alt="ngam"/><br /><sub><b>ngam</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=ngam" title="Code">💻</a> <a href="#infra-ngam" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-ngam" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Angam" title="Reviewed Pull Requests">👀</a> <a href="#tool-ngam" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=ngam" title="Tests">⚠️</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://cjdoris.github.io/"><img src="https://avatars.githubusercontent.com/u/1844215?v=4?s=50" width="50px;" alt="Christopher Rowley"/><br /><sub><b>Christopher Rowley</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=cjdoris" title="Code">💻</a> <a href="#ideas-cjdoris" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-cjdoris" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#platform-cjdoris" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Acjdoris" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/kazewong"><img src="https://avatars.githubusercontent.com/u/8803931?v=4?s=50" width="50px;" alt="Kaze Wong"/><br /><sub><b>Kaze Wong</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Akazewong" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=kazewong" title="Code">💻</a> <a href="#ideas-kazewong" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-kazewong" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-kazewong" title="Maintenance">🚧</a> <a href="#promotion-kazewong" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Akazewong" title="Reviewed Pull Requests">👀</a> <a href="#research-kazewong" title="Research">🔬</a> <a href="#userTesting-kazewong" title="User Testing">📓</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/ChrisRackauckas"><img src="https://avatars.githubusercontent.com/u/1814174?v=4?s=50" width="50px;" alt="Christopher Rackauckas"/><br /><sub><b>Christopher Rackauckas</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AChrisRackauckas" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=ChrisRackauckas" title="Code">💻</a> <a href="#plugin-ChrisRackauckas" title="Plugin/utility libraries">🔌</a> <a href="#ideas-ChrisRackauckas" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-ChrisRackauckas" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#promotion-ChrisRackauckas" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3AChrisRackauckas" title="Reviewed Pull Requests">👀</a> <a href="#research-ChrisRackauckas" title="Research">🔬</a> <a href="#tool-ChrisRackauckas" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=ChrisRackauckas" title="Tests">⚠️</a> <a href="#userTesting-ChrisRackauckas" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://kidger.site/"><img src="https://avatars.githubusercontent.com/u/33688385?v=4?s=50" width="50px;" alt="Patrick Kidger"/><br /><sub><b>Patrick Kidger</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Apatrick-kidger" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=patrick-kidger" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=patrick-kidger" title="Documentation">📖</a> <a href="#plugin-patrick-kidger" title="Plugin/utility libraries">🔌</a> <a href="#ideas-patrick-kidger" title="Ideas, planning, and feedback.">💡</a> <a href="#maintenance-patrick-kidger" title="Maintenance">🚧</a> <a href="#promotion-patrick-kidger" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Apatrick-kidger" title="Reviewed Pull Requests">👀</a> <a href="#research-patrick-kidger" title="Research">🔬</a> <a href="#tool-patrick-kidger" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=patrick-kidger" title="Tests">⚠️</a> <a href="#userTesting-patrick-kidger" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/OkonSamuel"><img src="https://avatars.githubusercontent.com/u/39421418?v=4?s=50" width="50px;" alt="Okon Samuel"/><br /><sub><b>Okon Samuel</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AOkonSamuel" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=OkonSamuel" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=OkonSamuel" title="Documentation">📖</a> <a href="#maintenance-OkonSamuel" title="Maintenance">🚧</a> <a href="#ideas-OkonSamuel" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-OkonSamuel" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3AOkonSamuel" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=OkonSamuel" title="Tests">⚠️</a> <a href="#userTesting-OkonSamuel" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/w2ll2am"><img src="https://avatars.githubusercontent.com/u/16038228?v=4?s=50" width="50px;" alt="William Booth-Clibborn"/><br /><sub><b>William Booth-Clibborn</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=w2ll2am" title="Code">💻</a> <a href="#example-w2ll2am" title="Examples.">🌍</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=w2ll2am" title="Documentation">📖</a> <a href="#userTesting-w2ll2am" title="User Testing">📓</a> <a href="#maintenance-w2ll2am" title="Maintenance">🚧</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Aw2ll2am" title="Reviewed Pull Requests">👀</a> <a href="#tool-w2ll2am" title="Tools">🔧</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=w2ll2am" title="Tests">⚠️</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://pablo-lemos.github.io/"><img src="https://avatars.githubusercontent.com/u/38078898?v=4?s=50" width="50px;" alt="Pablo Lemos"/><br /><sub><b>Pablo Lemos</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3APablo-Lemos" title="Bug reports">🐛</a> <a href="#ideas-Pablo-Lemos" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-Pablo-Lemos" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3APablo-Lemos" title="Reviewed Pull Requests">👀</a> <a href="#research-Pablo-Lemos" title="Research">🔬</a> <a href="#userTesting-Pablo-Lemos" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/Moelf"><img src="https://avatars.githubusercontent.com/u/5306213?v=4?s=50" width="50px;" alt="Jerry Ling"/><br /><sub><b>Jerry Ling</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AMoelf" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=Moelf" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=Moelf" title="Documentation">📖</a> <a href="#example-Moelf" title="Examples.">🌍</a> <a href="#ideas-Moelf" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-Moelf" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3AMoelf" title="Reviewed Pull Requests">👀</a> <a href="#userTesting-Moelf" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/CharFox1"><img src="https://avatars.githubusercontent.com/u/35052672?v=4?s=50" width="50px;" alt="Charles Fox"/><br /><sub><b>Charles Fox</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3ACharFox1" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=CharFox1" title="Code">💻</a> <a href="#ideas-CharFox1" title="Ideas, planning, and feedback.">💡</a> <a href="#maintenance-CharFox1" title="Maintenance">🚧</a> <a href="#promotion-CharFox1" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3ACharFox1" title="Reviewed Pull Requests">👀</a> <a href="#research-CharFox1" title="Research">🔬</a> <a href="#userTesting-CharFox1" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/johannbrehmer"><img src="https://avatars.githubusercontent.com/u/17068560?v=4?s=50" width="50px;" alt="Johann Brehmer"/><br /><sub><b>Johann Brehmer</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=johannbrehmer" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=johannbrehmer" title="Documentation">📖</a> <a href="#ideas-johannbrehmer" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-johannbrehmer" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Ajohannbrehmer" title="Reviewed Pull Requests">👀</a> <a href="#research-johannbrehmer" title="Research">🔬</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=johannbrehmer" title="Tests">⚠️</a> <a href="#userTesting-johannbrehmer" title="User Testing">📓</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="12.5%"><a href="http://www.cosmicmar.com/"><img src="https://avatars.githubusercontent.com/u/1510968?v=4?s=50" width="50px;" alt="Marius Millea"/><br /><sub><b>Marius Millea</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=marius311" title="Code">💻</a> <a href="#ideas-marius311" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-marius311" title="Promotion">📣</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Amarius311" title="Reviewed Pull Requests">👀</a> <a href="#userTesting-marius311" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://gitlab.com/cobac"><img src="https://avatars.githubusercontent.com/u/27872944?v=4?s=50" width="50px;" alt="Coba"/><br /><sub><b>Coba</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Acobac" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=cobac" title="Code">💻</a> <a href="#ideas-cobac" title="Ideas, planning, and feedback.">💡</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Acobac" title="Reviewed Pull Requests">👀</a> <a href="#userTesting-cobac" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/foxtran"><img src="https://avatars.githubusercontent.com/u/39676482?v=4?s=50" width="50px;" alt="foxtran"/><br /><sub><b>foxtran</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=foxtran" title="Code">💻</a> <a href="#ideas-foxtran" title="Ideas, planning, and feedback.">💡</a> <a href="#maintenance-foxtran" title="Maintenance">🚧</a> <a href="#tool-foxtran" title="Tools">🔧</a> <a href="#userTesting-foxtran" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://smhasan.com/"><img src="https://avatars.githubusercontent.com/u/36223598?v=4?s=50" width="50px;" alt="Shah Mahdi Hasan "/><br /><sub><b>Shah Mahdi Hasan </b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Atanweer-mahdi" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=tanweer-mahdi" title="Code">💻</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Atanweer-mahdi" title="Reviewed Pull Requests">👀</a> <a href="#userTesting-tanweer-mahdi" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/pitmonticone"><img src="https://avatars.githubusercontent.com/u/38562595?v=4?s=50" width="50px;" alt="Pietro Monticone"/><br /><sub><b>Pietro Monticone</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Apitmonticone" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=pitmonticone" title="Documentation">📖</a> <a href="#ideas-pitmonticone" title="Ideas, planning, and feedback.">💡</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/sheevy"><img src="https://avatars.githubusercontent.com/u/1525683?v=4?s=50" width="50px;" alt="Mateusz Kubica"/><br /><sub><b>Mateusz Kubica</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=sheevy" title="Documentation">📖</a> <a href="#ideas-sheevy" title="Ideas, planning, and feedback.">💡</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://jaywadekar.github.io/"><img src="https://avatars.githubusercontent.com/u/5493388?v=4?s=50" width="50px;" alt="Jay Wadekar"/><br /><sub><b>Jay Wadekar</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AJayWadekar" title="Bug reports">🐛</a> <a href="#ideas-JayWadekar" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-JayWadekar" title="Promotion">📣</a> <a href="#research-JayWadekar" title="Research">🔬</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/ablaom"><img src="https://avatars.githubusercontent.com/u/30517088?v=4?s=50" width="50px;" alt="Anthony Blaom, PhD"/><br /><sub><b>Anthony Blaom, PhD</b></sub></a><br /><a href="#infra-ablaom" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#ideas-ablaom" title="Ideas, planning, and feedback.">💡</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Aablaom" title="Reviewed Pull Requests">👀</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/Jgmedina95"><img src="https://avatars.githubusercontent.com/u/97254349?v=4?s=50" width="50px;" alt="Jgmedina95"/><br /><sub><b>Jgmedina95</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3AJgmedina95" title="Bug reports">🐛</a> <a href="#ideas-Jgmedina95" title="Ideas, planning, and feedback.">💡</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3AJgmedina95" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/mcabbott"><img src="https://avatars.githubusercontent.com/u/32575566?v=4?s=50" width="50px;" alt="Michael Abbott"/><br /><sub><b>Michael Abbott</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=mcabbott" title="Code">💻</a> <a href="#ideas-mcabbott" title="Ideas, planning, and feedback.">💡</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Amcabbott" title="Reviewed Pull Requests">👀</a> <a href="#tool-mcabbott" title="Tools">🔧</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/oscardssmith"><img src="https://avatars.githubusercontent.com/u/11729272?v=4?s=50" width="50px;" alt="Oscar Smith"/><br /><sub><b>Oscar Smith</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=oscardssmith" title="Code">💻</a> <a href="#ideas-oscardssmith" title="Ideas, planning, and feedback.">💡</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://ericphanson.com/"><img src="https://avatars.githubusercontent.com/u/5846501?v=4?s=50" width="50px;" alt="Eric Hanson"/><br /><sub><b>Eric Hanson</b></sub></a><br /><a href="#ideas-ericphanson" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-ericphanson" title="Promotion">📣</a> <a href="#userTesting-ericphanson" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/henriquebecker91"><img src="https://avatars.githubusercontent.com/u/14113435?v=4?s=50" width="50px;" alt="Henrique Becker"/><br /><sub><b>Henrique Becker</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/commits?author=henriquebecker91" title="Code">💻</a> <a href="#ideas-henriquebecker91" title="Ideas, planning, and feedback.">💡</a> <a href="https://github.com/MilesCranmer/PySR/pulls?q=is%3Apr+reviewed-by%3Ahenriquebecker91" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/qwertyjl"><img src="https://avatars.githubusercontent.com/u/110912592?v=4?s=50" width="50px;" alt="qwertyjl"/><br /><sub><b>qwertyjl</b></sub></a><br /><a href="https://github.com/MilesCranmer/PySR/issues?q=author%3Aqwertyjl" title="Bug reports">🐛</a> <a href="https://github.com/MilesCranmer/PySR/commits?author=qwertyjl" title="Documentation">📖</a> <a href="#ideas-qwertyjl" title="Ideas, planning, and feedback.">💡</a> <a href="#userTesting-qwertyjl" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://huijzer.xyz/"><img src="https://avatars.githubusercontent.com/u/20724914?v=4?s=50" width="50px;" alt="Rik Huijzer"/><br /><sub><b>Rik Huijzer</b></sub></a><br /><a href="#ideas-rikhuijzer" title="Ideas, planning, and feedback.">💡</a> <a href="#infra-rikhuijzer" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/GCaptainNemo"><img src="https://avatars.githubusercontent.com/u/43086239?v=4?s=50" width="50px;" alt="Hongyu Wang"/><br /><sub><b>Hongyu Wang</b></sub></a><br /><a href="#ideas-GCaptainNemo" title="Ideas, planning, and feedback.">💡</a> <a href="#promotion-GCaptainNemo" title="Promotion">📣</a> <a href="#research-GCaptainNemo" title="Research">🔬</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/ZehaoJin"><img src="https://avatars.githubusercontent.com/u/50961376?v=4?s=50" width="50px;" alt="Zehao Jin"/><br /><sub><b>Zehao Jin</b></sub></a><br /><a href="#research-ZehaoJin" title="Research">🔬</a> <a href="#promotion-ZehaoJin" title="Promotion">📣</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/tmengel"><img src="https://avatars.githubusercontent.com/u/38924390?v=4?s=50" width="50px;" alt="Tanner Mengel"/><br /><sub><b>Tanner Mengel</b></sub></a><br /><a href="#research-tmengel" title="Research">🔬</a> <a href="#promotion-tmengel" title="Promotion">📣</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/agrundner24"><img src="https://avatars.githubusercontent.com/u/38557656?v=4?s=50" width="50px;" alt="Arthur Grundner"/><br /><sub><b>Arthur Grundner</b></sub></a><br /><a href="#research-agrundner24" title="Research">🔬</a> <a href="#promotion-agrundner24" title="Promotion">📣</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://github.com/sjwetzel"><img src="https://avatars.githubusercontent.com/u/24393721?v=4?s=50" width="50px;" alt="sjwetzel"/><br /><sub><b>sjwetzel</b></sub></a><br /><a href="#research-sjwetzel" title="Research">🔬</a> <a href="#promotion-sjwetzel" title="Promotion">📣</a> <a href="#userTesting-sjwetzel" title="User Testing">📓</a></td>
        <td align="center" valign="top" width="12.5%"><a href="https://sauravmaheshkar.github.io/"><img src="https://avatars.githubusercontent.com/u/61241031?v=4?s=50" width="50px;" alt="Saurav Maheshkar"/><br /><sub><b>Saurav Maheshkar</b></sub></a><br /><a href="#tool-SauravMaheshkar" title="Tools">🔧</a></td>
      </tr>
    </tbody>
  </table>

  <!-- markdownlint-restore -->
  <!-- prettier-ignore-end -->

  <!-- ALL-CONTRIBUTORS-LIST:END -->

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


pkgId: df693f97666d7419b814ba7d908206f90cdcc0d5847c37e41a4231f6aaedd342
name: python-pysros-help
arch: noarch
version: 24.10.2
epoch: 0
release: 1
summary: Development documents and examples for pysros
url: https://www.nokia.com
rpm_license: Copyright 2021-2024 Nokia. License available in the LICENSE.md file.
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pysros-24.10.2-1.src.rpm
location_href: Packages/python-pysros-help-24.10.2-1.noarch.rpm
checksum_type: sha256
description:
  The pySROS libraries provide a model-driven management interface for
  Python developers to integrate with supported Nokia routers
  running the Service Router Operating System (SR OS).

  The libraries provide an Application Programming Interface (API) for developers
  to create applications that can interact with Nokia SR OS devices, whether those
  applications are executed from a development machine or directly on the router.

  When a developer uses only libraries and constructs supported on SR OS, a
  single application may be executed from a development machine or ported
  directly to an SR OS node where the application is executed.



  In order to use the pySROS library the following pre-requisites must be met:

  - One or more SR OS node
      - Running in model-driven mode
      - Running SR OS 21.7.R1 or greater (to execute applications on the SR OS device)
      - With NETCONF enabled and accessible by an authorized user (to execute applications
      remotely)
  - A Python 3 interpreter of version 3.10 or newer when using the pySROS library to
    execute applications remotely



  Copyright 2021-2024 Nokia.

  The license is located [here](LICENSE.md).



  Issues, suggestions, and enhancements are welcome.  Please use the Nokia support
  process.  Issues raised in GitHub may be considered for inclusion into the project
  by Nokia.  Pull requests are not accepted.



  Multiple installation methods are available:

  * [PyPi](#pypi)
  * [Nokia support portal](#nokia-support-portal)
  * [GitHub](#github)

  Note: It is recommended to use Python virtual environments where appropriate.



  The preferred method of installation of the pySROS libraries is to install
  directly from the Python Package index (PyPi) using the ``pip`` tool.

  The pySROS project is [located on PyPi.org](https://pypi.org/project/pysros).

  The libraries can be downloaded and installed by using the following:

  ```shell
  pip install pysros
  ```

  To upgrade to the latest release use:

  ```shell
  pip install --upgrade pysros
  ```




  The pySROS libraries are available for [download from the portal](https://customer.nokia.com/support) for registered
  customers.

  The obtained file can be unzipped and subsequently installed using:

  ```shell
  python3 setup.py install
  ```






  The pySROS libraries are available for
  [download from GitHub](https://github.com/jgcumming/pysros-examples).

  The obtained file can be installed using:

  ```shell
  git clone https://github.com/nokia/pysros
  python3 setup.py install
  ```



  Guidance documentation is available in the SR OS System Management Guide.

  API documentation is provided in this repository and may be compiled from source
  using:

  ```shell
  cd docs
  pip3 install -r requirements.txt
  make html
  ```

  The built documentation will be available in the docs/build/html directory.

  Alternative formats may be selected after the ``make`` command instead of the ``html`` attribute.  Some of
  these include:

  - singlehtml
  - man
  - text




  - [Nokia product documentation](https://documentation.nokia.com)
  - [Technical support](https://customer.nokia.com/support/s/)


pkgId: 8c58192e2f3bde77dd1f10219f9684e5a3461b35aa97176ee61e8c62ee4e88d0
name: python-pystand-help
arch: noarch
version: 2.7
epoch: 0
release: 1
summary: Development documents and examples for pystand
url: https://github.com/bulletmark/pystand
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pystand-2.7-1.src.rpm
location_href: Packages/python-pystand-help-2.7-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPi](https://img.shields.io/pypi/v/pystand)](https://pypi.org/project/pystand/)
  [![AUR](https://img.shields.io/aur/version/pystand)](https://aur.archlinux.org/packages/pystand/)

  [`pystand`][pystand] is a command line tool to facilitate the download,
  installation, and update of pre-built Python versions from the
  [`python-build-standalone`][pbs] project. The following commands are
  provided:

  |Command  |Description                                                           |
  |---------|----------------------------------------------------------------------|
  |`install`|Install one or more versions from a python-build-standalone release   |
  |`update` |Update one, more, or all versions to another release                  |
  |`remove` |Remove/uninstall one, more, or all versions                           |
  |`list`   |List installed versions and show which have an update available       |
  |`show`   |Show versions available from a release                                |
  |`path`   |Show path prefix to installed version base directory                  |

  By default, Python versions are sourced from the latest
  `python-build-standalone` [release][pbs-rel] available (e.g.
  "`20240415`") but you can optionally specify any older release. The
  required
  [distribution](https://gregoryszorc.com/docs/python-build-standalone/main/running.html)
  for your machine architecture is normally auto-detected. By default, the
  _`install_only_stripped`_ build of the distribution is installed but you
  can choose to [install any other
  build/distribution](#installing-other-builds/distributions) instead, or
  in parallel.

  Some simple usage examples are:

  ```sh
  $ pystand install 3.12
  Version 3.12.3 @ 20240415 installed.

  $ ls -l $(pystand path 3.12)/bin
  total 4136
  lrwxrwxrwx 1 user user       9 May 30 22:23 2to3 -> 2to3-3.12
  -rwxrwxr-x 1 user user     128 Jan  1 10:00 2to3-3.12
  lrwxrwxrwx 1 user user       8 May 30 22:23 idle3 -> idle3.12
  -rwxrwxr-x 1 user user     126 Jan  1 10:00 idle3.12
  -rwxrwxr-x 1 user user     256 Jan  1 10:00 pip
  -rwxrwxr-x 1 user user     256 Jan  1 10:00 pip3
  -rwxrwxr-x 1 user user     256 Jan  1 10:00 pip3.12
  lrwxrwxrwx 1 user user       9 May 30 22:23 pydoc3 -> pydoc3.12
  -rwxrwxr-x 1 user user     111 Jan  1 10:00 pydoc3.12
  lrwxrwxrwx 1 user user      10 May 30 22:23 python -> python3.12
  lrwxrwxrwx 1 user user      10 May 30 22:23 python3 -> python3.12
  -rwxrwxr-x 1 user user 4206512 Jan  1 10:00 python3.12
  -rwxrwxr-x 1 user user    3078 Jan  1 10:00 python3.12-config
  lrwxrwxrwx 1 user user      17 May 30 22:23 python3-config -> python3.12-config

  $ pystand install 3.10
  Version 3.10.14 @ 20240415 installed.

  $ pystand list
  3.10.14 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"

  $ pystand show
  3.8.19 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.9.19 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.10.14 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.11.9 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)

  $ pystand remove 3.10
  Version 3.10.14 @ 20240415 removed.

  $ pystand list
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  ```

  Here are some examples showing how to use an installed version ..

  ```sh


  $ uv venv -p $(pystand path 3.12) myenv



  $ $(pystand path -p 3.12) -m venv myenv



  $ pipx install --python $(pystand path -p 3.11.1) cowsay
  ```

  See detailed usage information in the [Usage](#usage) section that
  follows.

  Note that similar tools such as [`pdm python`][pdmpy], [`hatch
  python`][hatchpy], and [`rye toolchain`][ryepy] also use
  [`python-build-standalone`][pbs] build releases. However, `pystand` is
  unique because it directly checks the [`python-build-standalone`][pbs]
  github site for new [releases][pbs-rel]. Those other tools
  require a software update before they can fetch and use new
  [`python-build-standalone`][pbs] releases. This means that new Python
  versions and updates are always available more quickly from `pystand`
  than those other tools.

  This utility has been developed and tested on Linux but should also work
  on macOS and Windows although has not been tried on those platforms. The
  latest documentation and code is available at
  https://github.com/bulletmark/pystand.



  Type `pystand` or `pystand -h` to view the usage summary:

  ```
  usage: pystand [-h] [-D DISTRIBUTION] [-P PREFIX_DIR] [-C CACHE_DIR]
                    [-M CACHE_MINUTES] [--purge-days PURGE_DAYS]
                    [--github-access-token GITHUB_ACCESS_TOKEN] [--no-strip]
                    [-V]
                    {install,update,upgrade,remove,uninstall,list,show,path} ...

  Command line tool to download, install, and update pre-built Python versions
  from the python-build-standalone project at
  https://github.com/indygreg/python-build-standalone.

  options:
    -h, --help            show this help message and exit
    -D DISTRIBUTION, --distribution DISTRIBUTION
                          python-build-standalone distribution. Default is
                          "x86_64_v3-unknown-linux-gnu-install_only_stripped for
                          this host.
    -P PREFIX_DIR, --prefix-dir PREFIX_DIR
                          specify prefix dir for storing versions. Default is
                          "$HOME/.local/share/pystand"
    -C CACHE_DIR, --cache-dir CACHE_DIR
                          specify cache dir for downloads. Default is
                          "$HOME/.cache/pystand"
    -M CACHE_MINUTES, --cache-minutes CACHE_MINUTES
                          cache latest YYYYMMDD release tag fetch for this many
                          minutes, before rechecking for latest. Default is 60
                          minutes
    --purge-days PURGE_DAYS
                          cache YYYYMMDD release file lists and downloads for
                          this number of days after last version referencing
                          that release is removed. Default is 90 days
    --github-access-token GITHUB_ACCESS_TOKEN
                          optional Github access token. Can specify to reduce
                          rate limiting.
    --no-strip            do not strip downloaded binaries
    -V, --version         just show pystand version

  Commands:
    {install,update,upgrade,remove,uninstall,list,show,path}
      install             Install one or more versions from a python-build-
                          standalone release.
      update (upgrade)    Update one, more, or all versions to another release.
      remove (uninstall)  Remove/uninstall one, more, or all versions.
      list                List installed versions and show which have an update
                          available.
      show                Show versions available from a release.
      path                Show path prefix to installed version base directory.

  Some commands offer aliases as shown in brackets above. Note you can set
  default starting global options in $HOME/.config/pystand-flags.conf.
  ```

  Type `pystand <command> -h` to see specific help/usage for any
  individual command:



  ```
  usage: pystand install [-h] [-r RELEASE] [-f] [-s] version [version ...]

  Install one or more versions from a python-build-standalone release.

  positional arguments:
    version               version to install. E.g. 3.12 or 3.12.3

  options:
    -h, --help            show this help message and exit
    -r RELEASE, --release RELEASE
                          install from specified python-build-standalone
                          YYYYMMDD release (e.g. 20240415), default is latest
                          release
    -f, --force           force install even if already installed
    -s, --include-source  also install source files if available in distribution
                          download
  ```



  ```
  usage: pystand update [-h] [-r RELEASE] [-a] [--skip] [-k] [version ...]

  Update one, more, or all versions to another release.

  positional arguments:
    version               version to update (or to skip for --all --skip)

  options:
    -h, --help            show this help message and exit
    -r RELEASE, --release RELEASE
                          update to specified YYYMMDD release (e.g. 20240415),
                          default is latest release
    -a, --all             update ALL versions
    --skip                skip the specified versions when updating all (only
                          can be specified with --all)
    -k, --keep            keep old version after updating (but only if different
                          version number)

  aliases: upgrade
  ```



  ```
  usage: pystand remove [-h] [-a] [--skip] [-r RELEASE] [version ...]

  Remove/uninstall one, more, or all versions.

  positional arguments:
    version               version to remove (or to skip for --all --skip)

  options:
    -h, --help            show this help message and exit
    -a, --all             remove ALL versions
    --skip                skip the specified versions when removing all (only
                          can be specified with --all)
    -r RELEASE, --release RELEASE
                          only remove versions if from specified YYYMMDD release
                          (e.g. 20240415)

  aliases: uninstall
  ```



  ```
  usage: pystand list [-h] [-v] [-r RELEASE] [version ...]

  List installed versions and show which have an update available.

  positional arguments:
    version               only list specified version, else all

  options:
    -h, --help            show this help message and exit
    -v, --verbose         explicitly report why a version is not eligible for
                          update
    -r RELEASE, --release RELEASE
                          use specified YYYYMMDD release (e.g. 20240415) for
                          verbose compare, default is latest release
  ```



  ```
  usage: pystand show [-h] [-l | -r RELEASE] [-a] [re_match]

  Show versions available from a release. View available releases and their
  distributions at https://github.com/indygreg/python-build-standalone/releases.

  positional arguments:
    re_match              show only versions+distributions matching this regular
                          expression pattern

  options:
    -h, --help            show this help message and exit
    -l, --list            just list recent releases
    -r RELEASE, --release RELEASE
                          python-build-standalone YYYYMMDD release to show (e.g.
                          20240415), default is latest release
    -a, --all             show all available distributions for each version from
                          the release
  ```



  ```
  usage: pystand path [-h] [-p] [-r] [-c | version]

  Show path prefix to installed version base directory.

  positional arguments:
    version            version number to show path for

  options:
    -h, --help         show this help message and exit
    -p, --python-path  add path to python executable
    -r, --resolve      fully resolve given version
    -c, --cache-path   just show path to cache dir
  ```



  Python 3.8 or later is required. Arch Linux users can install [`pystand`
  from the AUR](https://aur.archlinux.org/packages/pystand) and skip this
  section.

  The easiest way to install [`pystand`][pystand] is to use [`pipx`][pipx]
  (or [`pipxu`][pipxu], or [`uv tool`][uvtool]).

  ```sh
  $ pipx install pystand
  ```

  To upgrade:

  ```sh
  $ pipx upgrade pystand
  ```

  To uninstall:

  ```sh
  $ pipx uninstall pystand
  ```



  For all commands except the `path` command, `pystand` extrapolates
  version text you specify on the command line to the latest available
  corresponding installed or release version. For example, if you specify
  `pystand install 3.12` then `pystand` will look in the release files to
  find the latest (i.e. highest) available version of `3.12`, e.g.
  `3.12.3` (at the time of writing), and will install that. Of course you
  can specify the exact version if you wish, e.g. `3.12.3` but generally
  you don't need to bother. This is true for any command that takes a
  version argument so be aware that this may be confusing if there are
  multiple same Python minor versions, e.g. `3.12.1` and `3.12.3`,
  installed from different releases. So in that case you should specify
  the exact version because e.g. `pystand remove 3.12` will remove
  `3.12.3` which may not be what you want.

  Note, consistent with this, you actually don't need to specify a
  minor version, e.g. `pystand install 3` would also install `3.12.3`
  (assuming `3.12.3` is the latest available version for Python 3).

  After installs or updates or removals,`pystand` also maintains symbolic
  links to each latest installed version in it's version directory, e.g. a
  symlink `~/.local/share/pystand/versions/3.12` will be created pointing
  to `~/.local/share/pystand/versions/3.12.3` so that you can optionally
  hard code the symlink directory in places where it can not be set
  dynamically (i.e. where using `pystand path` is not an option).

  You can exploit these symlinks when you create virtual environments
  using the `pystand path` command (or just hard code the actual link/path
  for your environment/platform). E.g. The following creates a virtual
  environment which runs with whatever the currently latest installed
  Python 3.12 version is:

  ```sh


  $ uv venv -p $(pystand path 3.12)
  ```

  So if you then update to a new version of Python 3.12 using `pystand`,
  e.g. from 3.12.3 to 3.12.4, the virtual environment will automatically
  use the new Python version. However, if you for some reason want to
  create the virtual environment with a specific version of Python that is
  never changed, then just specify that exact version when you create the
  virtual environment, e.g.:

  ```sh


  $ uv venv -p $(pystand path 3.12.2)





  $ uv venv -p $(pystand path -r 3.12)
  ```



  The _`install_only_stripped`_ distribution build is installed by default
  for your running machine architecture. See description of
  distributions/builds
  [here](https://gregoryszorc.com/docs/python-build-standalone/main/running.html#obtaining-distributions).
  However, you can choose to install other distributions/builds (even for
  other architectures). E.g. If we use a standard modern Linux x86_64
  machine as an example, the default distribution is
  _`x86_64-unknown-linux-gnu-install_only_stripped`_ and the versions for
  these are installed by default at `~/.local/share/pystand/<version>`.

  However, let's say you want to experiment with the new free-threaded
  3.13 build, installed to a different directory. E.g.:

  ```sh
  $ mkdir ./3.13-freethreaded
  $ cd ./3.13-freethreaded

  $ pystand -P. -D x86_64-unknown-linux-gnu-freethreaded+lto-full install 3.13
  $ ./3.13/bin/python -V
  Python 3.13.0

  $ pystand -P . list
  3.13.0 @ 20241016 distribution="x86_64_v4-unknown-linux-gnu-freethreaded+lto-full"
  ```

  Note you can set a different default distribution by specifying
  `--distribution` as a [default option](#command-default-options).



  The `show` command can be used to search for distributions as seen in the
  following examples.

  ```sh

  List all the versions installed on this system (at the default location):

  ```sh
  $ pystand list
  3.8.20 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.9.20 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.7 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  ```

  The above shows versions 3.9, 3.12, and 3.13 are installed from the latest
  release 20241016. Version 3.8 is installed from the previous release
  20241002 (and is not available in the latest release otherwise it would
  be shown with an update message).

  Now show all available versions from the latest release:

  ```sh
  $ pystand show
  3.9.20 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.10.15 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.11.10 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.7 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  ```

  We can see that versions 3.9, 3.12, and 3.13 are already installed (as
  we also knew from list output), and that 3.10 and 3.11 are also available.

  What is available from the previous release 20241002?

  ```sh
  $ pystand show -r 20241002
  3.8.20 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.9.20 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.10.15 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.11.10 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.7 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.13.0rc3 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  ```

  Let's install one of the threaded builds of Python 3.13. We can use the
  `-a/-all` option to show all available distributions and then give the
  `show` command a [regular
  expression](https://en.wikipedia.org/wiki/Regular_expression) to filter
  the output (this is really just a shorthand for piping the output of
  `show -a` to grep). E.g.:

  ```sh
  $ pystand show -a 3.13.*x86_64.*unknown-linux-gnu.*thread
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-freethreaded+debug-full"
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-freethreaded+pgo+lto-full"
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-freethreaded+pgo-full"
  3.13.0 @ 20241016 distribution="x86_64_v2-unknown-linux-gnu-freethreaded+debug-full"
  3.13.0 @ 20241016 distribution="x86_64_v2-unknown-linux-gnu-freethreaded+pgo+lto-full"
  3.13.0 @ 20241016 distribution="x86_64_v2-unknown-linux-gnu-freethreaded+pgo-full"
  3.13.0 @ 20241016 distribution="x86_64_v3-unknown-linux-gnu-freethreaded+debug-full"
  3.13.0 @ 20241016 distribution="x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full"
  3.13.0 @ 20241016 distribution="x86_64_v3-unknown-linux-gnu-freethreaded+pgo-full"
  3.13.0 @ 20241016 distribution="x86_64_v4-unknown-linux-gnu-freethreaded+debug-full"
  3.13.0 @ 20241016 distribution="x86_64_v4-unknown-linux-gnu-freethreaded+lto-full"
  3.13.0 @ 20241016 distribution="x86_64_v4-unknown-linux-gnu-freethreaded+noopt-full"
  ```

  So let's install the
  `x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full` build of Python
  3.13 (to the default location):

  ```sh
  $ pystand -D x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full install 3.13
  Version "3.13.0" is already installed.
  ```

  An error is given because the version is already installed. We can
  overwrite that with the `-f/--force` option:

  ```sh
  $ pystand -D x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full install -f 3.13
  Version 3.13.0 @ 20241016 installed.
  ```

  Now we can see the new version distribution is installed:

  ```sh

  $ pystand list
  3.8.20 @ 20241002 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.9.20 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.7 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.13.0 @ 20241016 distribution="x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full"

  $ pystand show
  3.9.20 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.10.15 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.11.10 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.12.7 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped" (installed)
  3.13.0 @ 20241016 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
  3.13.0 @ 20241016 distribution="x86_64_v3-unknown-linux-gnu-freethreaded+pgo+lto-full" (installed)
  ```

  Note that `pystand` caches all downloaded files (at least for a period
  specified by `--purge-days`) so you can easily switch between different
  versions/distributions quite quickly. You can also choose to install any
  distribution/build in a specific directory using the `-P/--prefix-dir`
  global option if you want to keep different distributions separate and
  available in parallel.



  You can add default global options to a personal configuration file
  `~/.config/pystand-flags.conf`. If that file exists then each line of
  options will be concatenated and automatically prepended to your
  `pystand` command line arguments. Comments in the file (i.e. `#` and
  anything after on a line) are ignored. Type `pystand` to see all
  supported options.

  The global options: `--distribution`, `--prefix-dir`, `--cache-dir`,
  `--cache-minutes`, `--purge-days`, `--github-access-token`,
  `--no-strip`, are the only sensible candidates to consider setting
  as defaults.



  This tool minimises and caches Github API responses and file downloads
  from the [`python-build-standalone`][pbs] repository. However, if you
  install many different versions particularly across various releases,
  you may get rate limited by Github so the command can block and you will
  see "backoff" messages reported. You can create a Github access token to
  gain increased rate limits. Create a token in your Github account under
  `Settings -> Developer settings -> Personal access tokens`. Specify the
  token on the command line with `--github-access-token`, or set that as a
  [default option](#command-default-options).



  Command line shell [tab
  completion](https://en.wikipedia.org/wiki/Command-line_completion) is
  automatically enabled on `pystand` commands and options using
  [`argcomplete`](https://github.com/kislyuk/argcomplete). You may need to
  first (once-only) [activate argcomplete global
  completion](https://github.com/kislyuk/argcomplete#global-completion).



  Copyright (C) 2024 Mark Blakeney. This program is distributed under the
  terms of the GNU General Public License. This program is free software:
  you can redistribute it and/or modify it under the terms of the GNU
  General Public License as published by the Free Software Foundation,
  either version 3 of the License, or any later version. 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 General Public License at
  <http://www.gnu.org/licenses/> for more details.

  [pystand]: https://github.com/bulletmark/pystand
  [pbs]: https://github.com/indygreg/python-build-standalone
  [pbs-rel]: https://github.com/indygreg/python-build-standalone/releases
  [pipx]: https://github.com/pypa/pipx
  [pipxu]: https://github.com/bulletmark/pipxu
  [uvtool]: https://docs.astral.sh/uv/guides/tools/#installing-tools
  [pyenv]: https://github.com/pyenv/pyenv
  [pdm]: https://pdm-project.org/
  [pdmpy]: https://pdm-project.org/en/latest/usage/project/#install-python-interpreters-with-pdm
  [hatch]: https://hatch.pypa.io/
  [hatchpy]: https://hatch.pypa.io/latest/tutorials/python/manage/
  [ryepy]: https://rye.astral.sh/guide/toolchains/#fetching-toolchains

  <!-- vim: se ai syn=markdown: -->


pkgId: 1eff3f103d46a55f282132a8c0717cfe76c33cded207a765ee15dd01b41d8dff
name: python-pystoned-help
arch: noarch
version: 0.7.4
epoch: 0
release: 1
summary: Development documents and examples for pystoned
url: https://github.com/ds2010/pyStoNED
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pystoned-0.7.4-1.src.rpm
location_href: Packages/python-pystoned-help-0.7.4-1.noarch.rpm
checksum_type: sha256
description:
  pyStoNED is a Python package that provides functions for estimating multivariate convex regression, convex quantile regression, convex expectile regression, isotonic regression, stochastic nonparametric envelopment of data, and related methods. It also facilitates efficiency measurement using the conventional data envelopement analysis (DEA) and free disposable hull (FDH) approaches. The pyStoNED package allows practitioners to estimate these models in an open access environment under a GPL-3.0 License.



  The [`pyStoNED`](https://pypi.org/project/pystoned/) package is now avaiable on PyPI and the latest development version can be installed from the Github repository [`pyStoNED`](https://github.com/ds2010/pyStoNED). Please feel free to download and test it. We welcome any bug reports and feedback.



      pip install pystoned



      pip install -U git+https://github.com/ds2010/pyStoNED



   + [Sheng Dai](https://daisheng.org), Associate Professor, School of Economics, Zhongnan University of Economics and Law.
   + [Yu-Hsueh Fang](https://github.com/Fangop), Computer Engineer, Institute of Manufacturing Information and Systems, National Cheng Kung University.
   + [Chia-Yen Lee](http://polab.im.ntu.edu.tw/), Professor, College of Management, National Taiwan University.
   + [Timo Kuosmanen](https://www.researchgate.net/profile/Timo_Kuosmanen), Professor, Turku School of Economics, University of Turku.



  If you use [pyStoNED](https://pypi.org/project/pystoned/) for published work, we encourage you to cite our following paper and other related [works](https://pystoned.readthedocs.io/en/latest/citing/index.html). We appreciate it.

  > Dai S, Fang YH, Lee CY, Kuosmanen T. (2024). pyStoNED: A Python Package for Convex Regression and Frontier Estimation. **Journal of Statistical Software**. 111, 1-43.


pkgId: 46d3ce218dcd651e8039843c98353d7a205db498cafc9c1cf0ddba706b69c656
name: python-pytask-help
arch: noarch
version: 0.5.2
epoch: 0
release: 1
summary: Development documents and examples for pytask
url: https://pytask-dev.readthedocs.io/en/stable
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytask-0.5.2-1.src.rpm
location_href: Packages/python-pytask-help-0.5.2-1.noarch.rpm
checksum_type: sha256
description:
  <a href="https://pytask-dev.readthedocs.io/en/stable">
      <p align="center">
          <img src="https://raw.githubusercontent.com/pytask-dev/pytask/main/docs/source/_static/images/pytask_w_text.png" width=50% alt="pytask">
      </p>
  </a>

  ______________________________________________________________________

  <!-- Keep in sync with docs/source/index.md -->

  [![PyPI](https://img.shields.io/pypi/v/pytask?color=blue)](https://pypi.org/project/pytask)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pytask)](https://pypi.org/project/pytask)
  [![image](https://img.shields.io/conda/vn/conda-forge/pytask.svg)](https://anaconda.org/conda-forge/pytask)
  [![image](https://img.shields.io/conda/pn/conda-forge/pytask.svg)](https://anaconda.org/conda-forge/pytask)
  [![PyPI - License](https://img.shields.io/pypi/l/pytask)](https://pypi.org/project/pytask)
  [![image](https://readthedocs.org/projects/pytask-dev/badge/?version=latest)](https://pytask-dev.readthedocs.io/en/stable)
  [![image](https://img.shields.io/github/actions/workflow/status/pytask-dev/pytask/main.yml?branch=main)](https://github.com/pytask-dev/pytask/actions?query=branch%3Amain)
  [![image](https://codecov.io/gh/pytask-dev/pytask/branch/main/graph/badge.svg)](https://app.codecov.io/gh/pytask-dev/pytask)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pytask-dev/pytask/main.svg)](https://results.pre-commit.ci/latest/github/pytask-dev/pytask/main)
  [![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)

  <!-- Keep in sync with docs/source/index.md -->

  pytask is a workflow management system that facilitates reproducible data analyses. Its
  features include:

  - **Automatic discovery of tasks.**
  - **Lazy evaluation.** If a task, its dependencies, and its products have not changed,
    do not execute it.
  - **Debug mode.**
    [Jump into the debugger](https://pytask-dev.readthedocs.io/en/stable/tutorials/debugging.html)
    if a task fails, get feedback quickly, and be more productive.
  - **Repeat a task with different inputs.**
    [Loop over task functions](https://pytask-dev.readthedocs.io/en/stable/tutorials/repeating_tasks_with_different_inputs.html)
    to run the same task with different inputs.
  - **Select tasks via expressions.** Run only a subset of tasks with
    [expressions and marker expressions](https://pytask-dev.readthedocs.io/en/stable/tutorials/selecting_tasks.html).
  - **Easily extensible with plugins**. pytask is built on
    [pluggy](https://pluggy.readthedocs.io/en/latest/), a plugin management framework that
    allows you to adjust pytask to your needs. Plugins are available for
    [parallelization](https://github.com/pytask-dev/pytask-parallel),
    [LaTeX](https://github.com/pytask-dev/pytask-latex),
    [R](https://github.com/pytask-dev/pytask-r), and
    [Stata](https://github.com/pytask-dev/pytask-stata) and more can be found
    [here](https://github.com/topics/pytask). Learn more about plugins in
    [this tutorial](https://pytask-dev.readthedocs.io/en/stable/tutorials/plugins.html).



  <!-- Keep in sync with docs/source/tutorials/installation.md -->

  pytask is available on [PyPI](https://pypi.org/project/pytask) and on
  [Anaconda.org](https://anaconda.org/conda-forge/pytask). Install the package with

  ```console
  $ pip install pytask
  ```

  or

  ```console
  $ conda install -c conda-forge pytask
  ```

  Color support is automatically available on non-Windows platforms. On Windows, please,
  use [Windows Terminal](https://github.com/microsoft/terminal), which can be, for
  example, installed via the [Microsoft Store](https://aka.ms/terminal).

  To quickly set up a new project, use the
  [cookiecutter-pytask-project](https://github.com/pytask-dev/cookiecutter-pytask-project)
  template or start from
  [other templates or example projects](https://pytask-dev.readthedocs.io/en/stable/how_to_guides/bp_templates_and_projects.html).



  A task is a function that is detected if the module and the function name are prefixed
  with `task_`. Here is an example.

  ```python


  from pathlib import Path

  from pytask import Product
  from typing import Annotated


  def task_hello_earth(path: Annotated[Path, Product] = Path("hello_earth.txt")):
      path.write_text("Hello, earth!")
  ```

  - The purpose of the task is to create the file `hello_earth.txt` and add some content.

  - To tell pytask that `hello_earth.txt` is a product and not an input, use the `Product`
    annotation.

    (If you are not used to type annotations, do not worry. pytask also offers simpler
    interfaces without type annotations.)

  - Since you pass a `pathlib.Path` to the function, pytask will check whether the file
    exists after the function is executed.

  To execute the task, enter `pytask` on the command-line

  ![image](https://github.com/pytask-dev/pytask/raw/main/docs/source/_static/images/readme.gif)



  You find the documentation <https://pytask-dev.readthedocs.io/en/stable> with
  [tutorials](https://pytask-dev.readthedocs.io/en/stable/tutorials/index.html) and guides
  for
  [best practices](https://pytask-dev.readthedocs.io/en/stable/how_to_guides/index.html).



  Consult the [release notes](https://pytask-dev.readthedocs.io/en/stable/changes.html) to
  find out about what is new.



  pytask is distributed under the terms of the [MIT license](LICENSE).



  The license also includes a copyright and permission notice from
  [pytest](https://github.com/pytest-dev/pytest) since some modules, classes, and
  functions are copied from pytest. Not to mention how pytest has inspired the development
  of pytask in general. Without the excellent work of
  [Holger Krekel](https://github.com/hpk42) and pytest's many contributors, this project
  would not have been possible. Thank you!

  pytask owes its beautiful appearance on the command line to
  [rich](https://github.com/Textualize/rich), written by
  [Will McGugan](https://github.com/willmcgugan).

  Repeating tasks in loops is inspired by [ward](https://github.com/darrenburns/ward)
  written by [Darren Burns](https://github.com/darrenburns).



  If you rely on pytask to manage your research project, please cite it with the following
  key to help others to discover the tool.

  ```bibtex
  @Unpublished{Raabe2020,
      Title  = {A Python tool for managing scientific workflows.},
      Author = {Tobias Raabe},
      Year   = {2020},
      Url    = {https://github.com/pytask-dev/pytask}
  }
  ```


pkgId: 2d6403387b7202c7d11f1fd8cca52ec04f1cf94393d0145d3d412b60e0463813
name: python-pytaxon-help
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Development documents and examples for pytaxon
url: https://github.com/pytaxon-cli
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytaxon-0.1.1-1.src.rpm
location_href: Packages/python-pytaxon-help-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center"><img src="./pytaxon/pytaxon_logo.png" width="320" height="230"></p>



  Pytaxon is a Python-based tool designed to correct taxonomic name errors in large biodiversity databases, preventing inaccurate data from affecting ecological analyses and conservation efforts. By leveraging the Global Names Resolver (GNR) API and fuzzy matching techniques, Pytaxon identifies and suggests corrections for discrepancies and nomenclatural inconsistencies in spreadsheets. The tool provides both a Command Line Interface (CLI) and a Graphical User Interface (GUI), making it accessible to users with varying levels of computational expertise. Pytaxon thus enhances the accuracy of biodiversity data, supporting informed conservation decisions and robust scientific research.

  <br>



  * Listed at requirements.txt

  Install the package from [PyPI](https://pypi.org/project/pytaxon/):
  ```
  $ pip install pytaxon
  ```
  To download the Pytaxon GUI .exe:

  |      | win                                                          | lin                                                          |
  | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
  | .zip | [Link](https://drive.google.com/file/d/1iBMTVAKbo_06jj6vAG30D01a-HThPzgc/view?usp=drive_link) | [Link](https://drive.google.com/file/d/1m-Jh1CIADKo0OAKUkFiMzj3cehlyShz5/view?usp=drive_link) |
  | .rar | [Link](https://drive.google.com/file/d/1eTyPHLXGj11VH8MC0MMY8L8UH3aOcT16/view?usp=drive_link) | [Link](https://drive.google.com/file/d/1U1CxFBCMslfHMCgo52uZPVlwAShceqjh/view?usp=drive_link) |

  <br>


  Firstly, you will want to check your spreadsheet for errors, then the program will return you and Excel file (.xlsx) containing all the incorrect data depending on the selected data source.

  Then, you may select which data are to be corrected with the "Change" column, after this, you may run the  second command to correct automatically the original spreadsheet with the checked spreadsheet.

  ```
  $ pytaxon -r <column names> -i <path to original spreadsheet> -c <name of to check spreadsheet> -si <source id>

  $ pytaxon -os <path to original spreadsheet> -cs <path of checked spreadsheet> -o <name of corrected spreadsheet>
  ```
  Explore the options for these commands with the `--help` flag.

  <br>



  <p align="center"><img src="./assets/image1.png"></p>

  Pytaxon CLI running on the Visual Studio Code terminal (Powershell) with a modified version of the Uropygi dataset

  <p align="center"><img src="./assets/image2.png"></p>

  The to correct spreadsheet of the modified Uropygi dataset

  <p align="center"><img src="./assets/image3.png"></p>

  Pytaxon GUI application running with a modified version of the Uropygi dataset

  <br>



  If you use the source code of Pytaxon in any form, please cite the following manuscript (we encorage citing Global Names Resolver as well):

  _future manuscript_

  <br>



  We thank the following institutions, which contributed to ensuring the success of our work:

  Museu Paraense Emílio Goeldi (MPEG)

  Centro Universitário do Estado do Pará (CESUPA)

  <br>



  This research was supported  by Centro Universitário do Pará - CESUPA with the PIBICT scientific initiation scholarship project.

  <br>



  Marco Aurélio Proença Neto

  Marcos Paulo Alves de Sousa

  <br>



  Dr. Marcos Paulo Alves de Sousa (Project leader)

  _Email: **msousa@museu-goeldi.br**_

  _Grupo de Estudos Temático em Computação Aplicada (GET-COM)_

  _Centro Universitário do Pará - CESUPA_

  _Av. Perimetral 1901. CEP 66077- 530. Belém, Pará, Brazil._


pkgId: d7cc0d198c37dea3c9d346b26ac746c703c524d2281045c93424e17c6b94df94
name: python-pytaxon-help
arch: noarch
version: 0.2.5
epoch: 0
release: 1
summary: Development documents and examples for pytaxon
url: https://github.com/pytaxon-cli
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytaxon-0.2.5-1.src.rpm
location_href: Packages/python-pytaxon-help-0.2.5-1.noarch.rpm
checksum_type: sha256
description:
  ![](https://raw.githubusercontent.com/pytaxon/pytaxon-cli/main/pytaxon/pytaxon_logo.png)
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.14457929.svg)](https://doi.org/10.5281/zenodo.14457929)



  Pytaxon is a Python-based tool designed to correct taxonomic name errors in large biodiversity databases, preventing inaccurate data from affecting ecological analyses and conservation efforts. By leveraging the Global Names Resolver (GNR) API and fuzzy matching techniques, Pytaxon identifies and suggests corrections for discrepancies and nomenclatural inconsistencies in spreadsheets. The tool provides both a Command Line Interface (CLI) and a Graphical User Interface (GUI), making it accessible to users with varying levels of computational expertise. Pytaxon thus enhances the accuracy of biodiversity data, supporting informed conservation decisions and robust scientific research.

  <br>



  * Listed at requirements.txt

  Install the package from [PyPI](https://pypi.org/project/pytaxon/):
  ```
  $ pip install pytaxon
  ```
  To download the Pytaxon GUI .exe:

  |      | win                                                          | lin                                                          |
  | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
  | .zip | [Link](https://drive.google.com/file/d/1TBxId32jCaKABDWoAVJbjG18jnMMvzqy/view?usp=sharing) | [Link](https://drive.google.com/file/d/1TBxId32jCaKABDWoAVJbjG18jnMMvzqy/view?usp=sharing) |
  | .rar | [Link](https://drive.google.com/file/d/1y8EONhv_nPQ7bSE1CeGTRcDFGa2BttkL/view?usp=sharing) | [Link](https://drive.google.com/file/d/1y8EONhv_nPQ7bSE1CeGTRcDFGa2BttkL/view?usp=sharing) |

  <br>


  Firstly, you will want to check your spreadsheet for errors, then the program will return you and Excel file (.xlsx) containing all the incorrect data depending on the selected data source.

  Then, you may select which data are to be corrected with the "Change" column, after this, you may run the  second command to correct automatically the original spreadsheet with the checked spreadsheet.

  ```
  $ pytaxon -r <column names> -i <path to original spreadsheet> -c <name of to check spreadsheet> -si <source id>

  $ pytaxon -os <path to original spreadsheet> -cs <path of checked spreadsheet> -o <name of corrected spreadsheet>
  ```
  Explore the options for these commands with the `--help` flag.

  <br>



  ![CLI](https://raw.githubusercontent.com/pytaxon/pytaxon-cli/main/assets/image1.png)

  Pytaxon CLI running on the Visual Studio Code terminal (Powershell) with a modified version of the Uropygi dataset

  ![](https://raw.githubusercontent.com/pytaxon/pytaxon-cli/main/assets/image2.png)


  The to correct spreadsheet of the modified Uropygi dataset

  ![](https://raw.githubusercontent.com/pytaxon/pytaxon-cli/main/assets/image4.png)

  Pytaxon GUI application running with a modified version of the Uropygi dataset

  ![](https://raw.githubusercontent.com/pytaxon/pytaxon-cli/main/assets/image3.png)

  Pytaxon1's CLI and GUI workflow

  <br>



  If you use the source code of Pytaxon in any form, please cite the following manuscript (we encorage citing Global Names Resolver as well):

  _future manuscript_

  <br>



  We thank the following institutions, which contributed to ensuring the success of our work:

  Museu Paraense Emílio Goeldi (MPEG)

  Centro Universitário do Estado do Pará (CESUPA)

  <br>



  This research was supported  by Centro Universitário do Pará - CESUPA with the PIBICT scientific initiation scholarship project.

  <br>



  Marco Aurélio Proença Neto

  Marcos Paulo Alves de Sousa

  <br>



  Dr. Marcos Paulo Alves de Sousa (Project leader)

  _Email: **msousa@museu-goeldi.br**_

  _Grupo de Estudos Temático em Computação Aplicada (GET-COM)_

  _Centro Universitário do Pará - CESUPA_

  _Av. Perimetral 1901. CEP 66077- 530. Belém, Pará, Brazil._


pkgId: c02bba1375c879ee3f944b7d67ad63f755108cc4f6f03705ea394fdd9e3e1725
name: python-pytdutils-help
arch: noarch
version: 1.1
epoch: 0
release: 1
summary: Development documents and examples for pytdutils
url: https://pypi.org/project/pytdutils/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytdutils-1.1-1.src.rpm
location_href: Packages/python-pytdutils-help-1.1-1.noarch.rpm
checksum_type: sha256
description:
  The PYthon Tride Dash Utilities module is a python package that allows users to edit tride dash levels programmatically.


pkgId: 6914f5abcf3b62db04286e6f30df8d0bc875314ae9e75fefd9f23991f925910e
name: python-pytech-rules-help
arch: noarch
version: 2.0.2
epoch: 0
release: 1
summary: Development documents and examples for pytech-rules
url: https://gitlab.com/pytech-srl/resources/pytech-rules/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytech-rules-2.0.2-1.src.rpm
location_href: Packages/python-pytech-rules-help-2.0.2-1.noarch.rpm
checksum_type: sha256
description:
  This project aims to provide tools to handle dynamic data structure conversions through rules definition.

  The goal is to be able to define rules to translate data structs that may be incomplete and miss data.


  You may find some new features coming in the [Issue section](https://gitlab.com/pytech-srl/resources/pytech-rules/-/issues)


  This package is provided thanks to:

  - Alessandro Grandi (PyTech srl)


pkgId: ee1e2244139ce1210ebab7b0959aa4456f96c846a77d5ebf13d9ddf303cddf46
name: python-pytech-tools-help
arch: noarch
version: 2.3.2
epoch: 0
release: 1
summary: Development documents and examples for pytech-tools
url: https://gitlab.com/pytech-srl/resources/pytech-tools
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytech-tools-2.3.2-1.src.rpm
location_href: Packages/python-pytech-tools-help-2.3.2-1.noarch.rpm
checksum_type: sha256
description:
  This project aims to provide basic tools that may be useful in general purpose projects.


  You may find some new features coming in the [Issue section](https://gitlab.com/pytech-srl/resources/pytech-tools/-/issues)


  This package is provided thanks to:

  - Alessandro Grandi (PyTech srl)


pkgId: 1d7adc67d9e2abe41b5fc1c5b8662804c6353193ace5d71d6ad2edb190604cb9
name: python-pytemperatureconverter-help
arch: noarch
version: 1.2.0
epoch: 0
release: 1
summary: Development documents and examples for pytemperatureconverter
url: https://github.com/manxlr
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytemperatureconverter-1.2.0-1.src.rpm
location_href: Packages/python-pytemperatureconverter-help-1.2.0-1.noarch.rpm
checksum_type: sha256
description:
  - **Support for All Major Temperature Scales**: Easily convert temperatures between:
    - Celsius ↔ Fahrenheit
    - Celsius ↔ Kelvin
    - Celsius ↔ Rankine
    - Fahrenheit ↔ Kelvin
    - Rankine ↔ Celsius
  - **User Input Warnings**: Prevents conversions that result in physically impossible temperatures (e.g., temperatures below absolute zero).
  - **Comprehensive Test Coverage**: Includes robust test cases to ensure reliable conversions and edge case handling.


pkgId: d3fc871a12f1adfd4a0521a2dbb5e14214b99a3929c6c1e11035da26d2304627
name: python-pyterrier-doc2query-help
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Development documents and examples for pyterrier-doc2query
url: https://pypi.org/project/pyterrier-doc2query/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pyterrier-doc2query-0.1.1-1.src.rpm
location_href: Packages/python-pyterrier-doc2query-help-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  **New: Check out our interactive demo on [🤗 HuggingFace Spaces](https://huggingface.co/spaces/macavaney/pyterrier_doc2query)**

  **New: Improve effectiveness and efficiency using Doc2Query&minus;&minus;**

  This is the [PyTerrier](https://github.com/terrier-org/pyterrier) plugin for the [docTTTTTquery](https://github.com/castorini/docTTTTTquery) [Nogueira20] and Doc2Query&minus;&minus; [Gospodinov23] approaches for document expansion by query prediction.



  This repostory can be installed using Pip.

      pip install --upgrade git+https://github.com/terrierteam/pyterrier_doc2query.git



  A Doc2Query object has a transform() function, which takes the text of each document, and suggests questions
  for that text.

  ```python

  sample_doc = "The presence of communication amid scientific minds was equally important to the success of the Manhattan Project as scientific intellect was. The only cloud hanging over the impressive achievement of the atomic researchers and engineers is what their success truly meant; hundreds of thousands of innocent lives obliterated"

  import pyterrier_doc2query
  doc2query = pyterrier_doc2query.Doc2Query()
  doc2query([{"docno" : "d1", "text" : sample_doc}])

  ```

  The resulting dataframe will have an additional `"querygen"` column, which
  contains the generated queries, such as:

  | docno | querygen  |
  |-------|-----------|
  | "d1"  | 'what was the importance of the manhattan project to the united states atom project? what influenced the success of the united states why was the manhattan project a success? why was it important' |

  As a PyTerrier transformer, there are lots of ways to introduce Doc2query into a PyTerrier retrieval
  process.

  By default, the plugin loads [`macavaney/doc2query-t5-base-msmarco`](https://huggingface.co/macavaney/doc2query-t5-base-msmarco), which is a a version of [the checkpoint released by the original authors](https://git.uwaterloo.ca/jimmylin/doc2query-data/raw/master/T5-passage/t5-base.zip), converted to pytorch format.
  You can load another T5 model by passing another huggingface model name (or path to model on the file system) by passing it as the first argument:

  ```python
  doc2query = pyterrier_doc2query.Doc2Query('some/other/model')
  ```




  Then, indexing is as easy as instantiating the Doc2Query object and a PyTerrier indexer:

  ```python
  import pyterrier as pt
  dataset = pt.get_dataset("irds:vaswani")
  import pyterrier_doc2query
  doc2query = pyterrier_doc2query.Doc2Query(append=True) # append generated queries to the orignal document text
  indexer = doc2query >> pt.IterDictIndexer(index_loc)
  indexer.index(dataset.get_corpus_iter())
  ```



  The performance of Doc2Query can be significantly improved by removing queries that are not relevant to the
  documents that generated them. This involves first scoring the generated queries (using `QueryScorer`) and
  then filtering out the least relevant ones (using `QueryFilter`).

  ```python
  from pyterrier_doc2query import Doc2Query, QueryScorer, QueryFilter
  from pyterrier_dr import ElectraScorer

  doc2query = Doc2Query(append=False, num_samples=5)
  scorer = ElectraScorer()
  indexer = pt.IterDictIndexer('./index')
  pipeline = doc2query >> QueryScorer(scorer) >> QueryFilter(t=3.21484375) >> indexer # t=3.21484375 is the 70th percentile for generated queries on MS MARCO

  pipeline.index(dataset.get_corpus_iter())
  ```

  We've also released pre-computed filter scores for various models on HuggingFace datasets:
   - [macavaney/d2q-msmarco-passage-scores-electra](https://huggingface.co/datasets/macavaney/d2q-msmarco-passage-scores-electra)
   - [macavaney/d2q-msmarco-passage-scores-monot5](https://huggingface.co/datasets/macavaney/d2q-msmarco-passage-scores-monot5)
   - [macavaney/d2q-msmarco-passage-scores-tct](https://huggingface.co/datasets/macavaney/d2q-msmarco-passage-scores-tct)



  Doc2query can also be used at retrieval time (i.e. on retrieved documents) rather than
  at indexing time.

  ```python

  import pyterrier_doc2query
  doc2query = pyterrier_doc2query.Doc2Query()

  dataset = pt.get_dataset("irds:vaswani")
  bm25 = pt.terrier.Retriever.from_dataset("vaswani", "terrier_stemmed", wmodel="BM25")
  bm25 >> pt.get_text(dataset) >> doc2query >> pt.text.scorer(body_attr="querygen", wmodel="BM25")

  ```



  Check out out the notebooks, even on Colab:

   - Vaswani [[Github](https://github.com/terrierteam/pyterrier_doc2query/blob/master/pyterrier_doc2query_vaswani.ipynb)] [[Colab](https://colab.research.google.com/github/terrierteam/pyterrier_doc2query/blob/master/pyterrier_doc2query_vaswani.ipynb)]



  We use a PyTerrier transformer to rewrite documents by doc2query.



    - [Nogueira20]: Rodrigo Nogueira and Jimmy Lin. From doc2query to docTTTTTquery. https://cs.uwaterloo.ca/~jimmylin/publications/Nogueira_Lin_2019_docTTTTTquery-v2.pdf
    - [Gospodinov23]: Mitko Gospodinov, Sean MacAvaney, and Craig Macdonald. Doc2Query--: When Less is More. ECIR 2023.
    - [Macdonald20]: Craig Macdonald, Nicola Tonellotto. Declarative Experimentation inInformation Retrieval using PyTerrier. Craig Macdonald and Nicola Tonellotto. In Proceedings of ICTIR 2020. https://arxiv.org/abs/2007.14271



  - Craig Macdonald, University of Glasgow
  - Sean MacAvaney, University of Glasgow
  - Mitko Gospodinov, University of Glasgow


pkgId: bb927f4ceaf3a7d8757f6fc47a568ae84683a0592e04f19b0a2841a8f3dcf65c
name: python-pytest-mergify-help
arch: noarch
version: 2024.12.17.1
epoch: 0
release: 1
summary: Development documents and examples for pytest-mergify
url: https://pypi.org/project/pytest-mergify/
rpm_license: Apache
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytest-mergify-2024.12.17.1-1.src.rpm
location_href: Packages/python-pytest-mergify-help-2024.12.17.1-1.noarch.rpm
checksum_type: sha256
description:
  A **pytest** plugin that integrates seamlessly with **Mergify**, enabling
  tracing of test executions.

  More information at https://mergify.com


pkgId: b17be31ad45fad71d42d34f09dc9021175aa7f567ce34c36142d864d9a8a7378
name: python-pytest-powerpack-help
arch: noarch
version: 0.1.3
epoch: 0
release: 1
summary: Development documents and examples for pytest-powerpack
url: https://pypi.org/project/pytest-powerpack/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytest-powerpack-0.1.3-1.src.rpm
location_href: Packages/python-pytest-powerpack-help-0.1.3-1.noarch.rpm
checksum_type: sha256
description:
  A plugin containing extra "batteries" for `pytest`. Work in progress, but the code itself is documented.


pkgId: 299c4c01eac5f6f1fcc2d1f8e17d4e5e9ac58c2fbd134584cb6ca74bff3b07bf
name: python-pytest-recorder-help
arch: noarch
version: 0.4.1
epoch: 0
release: 1
summary: Development documents and examples for pytest-recorder
url: https://pypi.org/project/pytest-recorder/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytest-recorder-0.4.1-1.src.rpm
location_href: Packages/python-pytest-recorder-help-0.4.1-1.noarch.rpm
checksum_type: sha256
description:
  STEP 1

  Write this code:




  ```python
  @pytest.mark.record_http
  @pytest.mark.record_time
  @pytest.mark.record_verify_screen
  def test_some_test(record):
      some_python_object = ...

      record.add_verify(object=some_python_object)
  ```

  STEP 2

  Run:

  pytest tests/some_module.py --record

  It will:

  Save all the  HTTP requests

  Save the execution datetime

  Save the screen output

  Save the data you provide to recorder object

  STEP 3

  Run:

  pytest tests/some_module.py

  It will:

  Reuse the stored HTTP requests

  Reuse the same datetime to execute the test

  Compare the current screen output to the previous one and raise and exception if different

  Compare the current recorder object data to the previous one and raise and exception if different


  CODE

  ```python
  @pytest.mark.record_http
  @pytest.mark.record_time(date=datetime(2023, 3, 1, 12, 0, 0), tic=False)
  @pytest.mark.record_verify_screen(hash=True)
  def test_some_test(record):
      ...
      record.hash_only = True
      record.add_verify(object=df)
      record.add_verify(object=[df])

      recorder.add_verify(
          object=df,
      )
  ```

  USAGE

  pytest [FILE] [--record[=none,all,http,object,screen,time]] [--record-no-overwrite] [--record-no-hash]

  FILES

  For a given test_function from test_module, we will have the following files:

  /tests/test_module.py:test_function

  /tests/record/http/test_module/test_function.yaml

  /tests/record/object/test_module/test_function.json

  /tests/record/object_hash/test_module/test_function.txt/json?

  /tests/record/screen/test_module/test_function.txt/json?

  /tests/record/screen_hash/test_module/test_function.txt/json?

  /tests/record/time/test_module/test_function.txt/json?


pkgId: 26d9062059130f3ae8d316eb24133d3d00c1768158149b8bdfa3c768351411c4
name: python-pytest-report-extras-help
arch: noarch
version: 1.0.0rc1
epoch: 0
release: 1
summary: Development documents and examples for pytest-report-extras
url: https://pypi.org/project/pytest-report-extras/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytest-report-extras-1.0.0rc1-1.src.rpm
location_href: Packages/python-pytest-report-extras-help-1.0.0rc1-1.noarch.rpm
checksum_type: sha256
description:
  Pytest plugin to enhance pytest-html and Allure reports of webtest projects with screenshots, comments and webpage sources.

  ![](https://img.shields.io/badge/license-MIT%202.0-blue.svg)



  - [Documentation](https://pytest-webtest-extras.readthedocs.io/en/stable/)
  - [Issue tracker](https://github.com/harmin-parra/pytest-webtest-extras/issues)
  - [Source code](https://github.com/harmin-parra/pytest-webtest-extras)

  <br/>

  If you like this software, consider contributing to the project through [buy me a coffee](https://www.buymeacoffee.com/harmin)


pkgId: ca1ed6b9712c8030d5290c8e6d00a35c52f29c8db954adb538f1ba31e6424cbc
name: python-pytest-smoke-help
arch: noarch
version: 0.4.0
epoch: 0
release: 1
summary: Development documents and examples for pytest-smoke
url: https://github.com/yugokato/pytest-smoke
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytest-smoke-0.4.0-1.src.rpm
location_href: Packages/python-pytest-smoke-help-0.4.0-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/pytest-smoke)](https://pypi.org/project/pytest-smoke/)
  [![Supported Python
  versions](https://img.shields.io/pypi/pyversions/pytest-smoke.svg)](https://pypi.org/project/pytest-smoke/)
  [![test](https://github.com/yugokato/pytest-smoke/actions/workflows/test.yml/badge.svg)](https://github.com/yugokato/pytest-smoke/actions/workflows/test.yml)
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/yugokato/pytest-smoke/main.svg)](https://results.pre-commit.ci/latest/github/yugokato/pytest-smoke/main)
  [![Code style ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://docs.astral.sh/ruff/)
  A small `pytest` plugin that enables quick smoke testing against a large test suite by limiting the number of tests from
  each test function (or specified scope) to a value of `N`.
  You can define `N` as either a fixed number or a percentage, allowing you to scale the test execution down to a smaller
  subset.

  ```
  pip install pytest-smoke
  ```

  The plugin provides the following options, allowing you to limit the amount of tests to run (`N`) and optionally specify
   the scope at which `N` is applied:
  ```
  $ pytest -h
  <snip>
  Smoke testing:
    --smoke=[N]           Run the first N (default=1) tests from each test function or specified scope
    --smoke-last=[N]      Run the last N (default=1) tests from each test function or specified scope
    --smoke-random=[N]    Run N (default=1) randomly selected tests from each test function or specified scope
    --smoke-scope=SCOPE   Specify the scope at which the value of N from the above options is applied.
                          The plugin provides the following predefined scopes:
                          - function: Applies to each test function (default)
                          - class: Applies to each test class
                          - auto: Applies function scope for test functions, class scope for test methods
                          - file: Applies to each test file
                          - all: Applies to the entire test suite
                          NOTE: You can also implement your own custom scopes using a hook
  ```
  > - The value of `N` can be a number (e.g. `5`) or a percentage (e.g. `10%`)
  > - If `N` is not explicitly specified, the default value of `1` will be used
  > - The `--smoke-scope` option supports any custom values, as long as they are handled in the hook
  > - You can overwrite the plugin's default value for `N` and `SCOPE` using INI options. See the "INI Options" section below

  Given you have the following test code:
  ```python
  import pytest
  def test_something1():
      pass
  @pytest.mark.parametrize("p", range(10))
  def test_something2(p):
      pass
  @pytest.mark.parametrize("p", range(20))
  def test_something3(p):
      pass
  ```
  You can run smoke tests with either the `--smoke`, `--smoke-last`, or `--smoke-random` option.
  Here are some examples for each option with the default scope (test function):

  - Run only the first test from each test function
  ```

rpm_license:
  MIT License  Copyright (c) 2024 Yugo Kato  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: 92f385165c7b000d44bd8a4553858a64e3a818ae5b11352c42f659accb3075e4
name: python-pytestomatio-help
arch: noarch
version: 2.8.1
epoch: 0
release: 1
summary: Development documents and examples for pytestomatio
url: https://github.com/testomatio/pytestomatio
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pytestomatio-2.8.1-1.src.rpm
location_href: Packages/python-pytestomatio-help-2.8.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Support Ukraine Badge](https://bit.ly/support-ukraine-now)](https://github.com/support-ukraine/support-ukraine)





  - https://testomatio.github.io/check-tests/
  - https://testomatio.github.io/reporter/



  ```bash
  pip install pytestomatio
  ```



  Synchronize tests to testomat.io and get back test id.
  Tests will not be executed

  ```bash
  pytest --testomatio sync
  ```

  Remove all test ids from source code. Tests will not be executed

  ```bash
  pytest --testomatio remove
  ```

  Run pytest and send test results into testomat.io.
  Test can be sent to testomat.io without ids in your test code. If testomat.io failed to match tests by title, it will create
  new tests for the run

  ```bash
  pytest --testomatio report
  ```

  Run pytest with debug parameter to get test data collected in metadata.json file

  ```bash
  pytest --testomatio debug
  ```


  You can use environment variable to control certain features of testomat.io

  | Env variable |  What it does | Examples |
  |--------|--------|-------|
  | TESTOMATIO| Provides token for pytestomatio to access and push data to testomat.io | TESTOMATIO=tstmt_***** pytest --testomatio sync|
  |TESTOMATIO_RUN|Name of a test run to create on testomat.io|TESTOMATIO_RUN="Smoke test" pytest --testomatio report|
  |TESTOMATIO_RUN_ID| Id of existing test run to use for sending test results to | TESTOMATIO_RUN_ID=98dfas0 pytest --testomatio report |
  |TESTOMATIO_RUNGROUP_TITLE| Create a group (folder) for a test run | TESTOMATIO_RUNGROUP_TITLE="Release 2.0" pytest --testomatio report|
  |TESTOMATIO_ENV|Assign environment to a test run |TESTOMATIO_ENV="linux,chrome,1920x1080" pytest --testomatio report|
  |TESTOMATIO_LABELS|Assign labels to a test run |TESTOMATIO_ENV="smoke,regression" pytest --testomatio report|
  |TESTOMATIO_SYNC_LABELS|Assign labels to a test case when you synchronise test from code with testomat.io|TESTOMATIO_SYNC_LABELS="number:1,list:one,standalone" pytest --testomatio report|
  |TESTOMATIO_CODE_STYLE|If you are not sure, don't set this variable. Default value is 'default'|TESTOMATIO_CODE_STYLE=pep8 pytest --testomatio sync|
  |TESTOMATIO_CI_DOWNSTREAM|If set, pytestomatio will not set or update build url for a test run. This is useful in scenarios where build url is already set in the test run by Testomat.io for test runs that a created directly on Testomat.io.|TESTOMATIO_CI_DOWNSTREAM=true pytest --testomatio report|



  There is environment variable `TESTOMATIO_RUNGROUP_TITLE` that can be used to specify run tests with specific group title.


  In case you are using private testomat.io service, create `pytest.ini` file in your project root directory. Specify
  testomat.io url in it

  ```ini
  [pytest]
  testomatio_url = https://app.testomat.io

  ```



  to configure test environment, you can use additional option:

  ```bash
  pytest --testomatio report --testRunEnv "windows11,chrome,1920x1080"
  ```

  Environment values are comma separated, please use double quotation.




  testomat.io does not store any screenshots, logs or other artifacts.

  In order to manage them it is advised to use S3 Buckets (GCP Storage).
  https://docs.testomat.io/usage/test-artifacts/

  Analyser needs to be aware of the cloud storage credentials.
  There are two options:
  1. Enable **Share credentials with testomat.io Reporter** option in testomat.io Settings -> Artifacts.
  2. Use environment variables   `ACCESS_KEY_ID, SECRET_ACCESS_KEY, ENDPOINT, BUCKET`

  You would need to decide when you want to upload your test artifacts to cloud storage

  1) Upload page screenshot when test fails, using fixtures [reference](https://docs.pytest.org/en/latest/example/simple.html#making-test-result-information-available-in-fixtures)

  ```python

  import pytest
  import random
  import os
  from typing import Dict
  from pytest import StashKey, CollectReport
  from playwright.sync_api import Page

  phase_report_key = StashKey[Dict[str, CollectReport]]()

  @pytest.hookimpl(wrapper=True, tryfirst=True)
  def pytest_runtest_makereport(item, call):
      rep = yield
      item.stash.setdefault(phase_report_key, {})[rep.when] = rep
      return rep


  @pytest.fixture(scope="function")
  def handle_artifacts(page: Page, request):
      yield
      report = request.node.stash[phase_report_key]
      if ("call" not in report) or report["setup"].failed or report["call"].failed:
          random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=8))

          filename = f"{random_string}.png"
          screenshot_path = os.path.join(artifacts_dir, filename)
          page.screenshot(path=screenshot_path)
          
          
          
          
          artifact_url = pytest.testomatio.upload_file(screenshot_path, filename)
          
          
          pytest.testomatio.add_artifacts(request.node, [artifact_url])
      page.close()
  ```

  ⚠️ Please take into account s3_connector available only after **pytest_collection_modifyitems()** hook is executed.

  2) If you prefer to use pytest hooks - add `pytest_runtest_makereport` hook in your `conftest.py` file.

  ```python
  def pytest_runtest_makereport(item, call):
      artifact_url = pytest.testomatio.upload_file(screenshot_path, filename)
      pytest.testomatio.add_artifacts([artifact_url])
  ```



  - tests can be synced even without `@patest.mark.testomatio('@T96c700e6')` decorator.
  - test title in testomat.io == test name in pytest
  - test suit title in testomat.io == test file name in pytest



  To make the experience more consistent, it uses standard pytest markers.
  testomat.io test id is a string value that starts with `@T` and has 8 symbols after.

  ```python
  from pytest import mark


  @mark.testomatio('@T96c700e6')
  def test_example():
      assert 2 + 2 == 4
  ```



  | Action |  Compatibility | Method |
  |--------|--------|-------|
  | Report tests to testomat.io | complete | `pytest --testomatio report` |
  | Filter test by id to run | complete | `pytest --testomatio report --test-id="T00C73028\|T00C73029"` |
  | Importing test into testomat.io | complete | `pytest --testomatio sync` |
  | Exclude hook code of a test | N/A | N/A |
  | Include line number code of a test | N/A | N/A |
  | Import Parametrized Tests | complete | default behaviour |
  | Disable Detached Tests | complete | `pytest --testomatio sync --no-detach` |
  | Synchronous Import | complete | default behaviour |
  | Auto-assign Test IDs in Source Code | complete | default behaviour |
  | Keep Test IDs Between Projects | complete | `pytest --testomatio sync --create` |
  | Clean Test IDs | complete | `pytest --testomatio remove` |
  | Import Into a Branch | N/A | N/A |
  | Keep Structure of Source Code | complete | `pytest --testomatio sync --keep-structure` |
  | Delete Empty Suites | complete | `pytest --testomatio sync --no-empty` |
  | Import Into a Specific Folder | complete | `pytest --testomatio sync --directory "Windows\smoke"` |
  | Debugging | parity | `pytest --testomatio debug` |



  - import into empty project
  - updated test - (resync)
  - test run
  - test run into a folder
  - test run labels, tags


  - Fix test duration


  1. `pip install -e .`
  2. `cz commit`
  3. `cz bump`
  4. `git push remoteName branchName --tags`


pkgId: 919c3efa3c6a9306dd9064ef6c52cd1af164ba501a839519692f41e37baf27c3
name: python-pythagoras-help
arch: noarch
version: 0.17.2
epoch: 0
release: 1
summary: Development documents and examples for pythagoras
url: https://github.com/pythagoras-dev/pythagoras
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pythagoras-0.17.2-1.src.rpm
location_href: Packages/python-pythagoras-help-0.17.2-1.noarch.rpm
checksum_type: sha256
description:
  Planet-scale distributed computing in Python.



  `Pythagoras` is an easy-to-use framework for cost-efficient
  massive algorithm parallelization in Python. It simplifies and accelerates
  data science, machine learning, and AI workflows.

  Pythagoras offers:

  * seamless parallel execution of Python code, locally or
  in diverse distributed environments of any scale;
  * ubiquitous caching for intermediate program states,
  with intelligent data and code change tracking;
  * simple and budget-friendly orchestration backend.



  * `Introduction to Pythagoras` notebook:
  https://colab.research.google.com/drive/1tSJkpHl49Y9ZrYskkdoH2ti3_VZ5_6cj



  The source code is hosted on GitHub at: https://github.com/pythagoras-dev/pythagoras

  Installers for the latest released version are available
  at the Python package index at: https://pypi.org/project/pythagoras

      pip install pythagoras



  * [persidict](https://pypi.org/project/persidict)
  * [jsonpickle](https://jsonpickle.github.io)
  * [joblib](https://joblib.readthedocs.io)
  * [lz4](https://python-lz4.readthedocs.io)
  * [pandas](https://pandas.pydata.org)
  * [numpy](https://numpy.org)
  * [psutil](https://psutil.readthedocs.io)
  * [boto3](https://boto3.readthedocs.io)
  * [pytest](https://pytest.org)
  * [moto](http://getmoto.org)
  * [boto3](https://boto3.readthedocs.io)
  * [scipy](https://www.scipy.org)
  * [jsonpickle](https://jsonpickle.github.io)
  * [scikit-learn](https://scikit-learn.org)
  * [autopep8](https://pypi.org/project/autopep8)
  * [pytorch](https://pytorch.org)
  * [tensorflow](https://www.tensorflow.org)
  * [keras](https://keras.io)
  * [deepdiff](https://zepworks.com/deepdiff/current/)



  * [Vlad (Volodymyr) Pavlov](https://www.linkedin.com/in/vlpavlov/)



  Pythagoras of Samos was a famous ancient Greek thinker and scientist
  who was the first man to call himself a philosopher ("lover of wisdom").
  He is most recognised for his many mathematical findings,
  including the Pythagorean theorem.

  Not everyone knows that in antiquity, Pythagoras was also credited with
  major astronomical discoveries, such as sphericity of the Earth
  and the identity of the morning and evening stars as the planet Venus.


pkgId: dbff86d29bcca707b57f23191d15b1d679207a4d6b0c365862c277593a14114b
name: python-pythainlp-help
arch: noarch
version: 5.0.5
epoch: 0
release: 1
summary: Development documents and examples for pythainlp
url: https://github.com/PyThaiNLP/pythainlp
rpm_license: Apache Software License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pythainlp-5.0.5-1.src.rpm
location_href: Packages/python-pythainlp-help-5.0.5-1.noarch.rpm
checksum_type: sha256
description:
  ![PyThaiNLP Logo](https://avatars0.githubusercontent.com/u/32934255?s=200&v=4)

  PyThaiNLP is a Python library for Thai natural language processing.
  The library provides functions like word tokenization, part-of-speech tagging,
  transliteration, soundex generation, spell checking, and
  date and time parsing/formatting.

  Website: [pythainlp.github.io](https://pythainlp.github.io/)



  For stable version:

  ```sh
  pip install pythainlp
  ```

  For development version:

  ```sh
  pip install --upgrade --pre pythainlp
  ```

  Some functionalities, like named-entity recognition, require extra packages.
  See https://github.com/PyThaiNLP/pythainlp for installation options.


pkgId: c8efb55f9e89b85b8bb3d840e9354f80b150926747d64908ae2aae138179962b
name: python-pythemo-help
arch: noarch
version: 0.2.1
epoch: 0
release: 1
summary: Development documents and examples for pythemo
url: https://pypi.org/project/pythemo/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-pythemo-0.2.1-1.src.rpm
location_href: Packages/python-pythemo-help-0.2.1-1.noarch.rpm
checksum_type: sha256
description:
  The `pythemo` repository provides a Python client for interacting with the Themo API. This library allows you to authenticate, fetch, and control devices associated with your Themo account.



  - **Authentication**: Authenticate with the Themo API using your username and password.
  - **Device Information**: Fetch all devices associated with your account.
  - **Control Devices**: Control device attributes like lights, temperature, mode, and schedules.





  The `models.py` file contains the `Device` class which represents a Themo device. This class provides:

  - Initialization of the device with its ID and token.
  - Methods to fetch and update the device state and attributes.
  - Methods to control the device, including setting lights, temperature, mode, and schedules.



  The `client.py` file contains the `ThemoClient` class which is responsible for:

  - Authenticating the user and obtaining the access token.
  - Fetching the client ID.
  - Fetching all devices associated with the user's account.
  - Closing the client session.



  To use this library, you need to:

  1. Create an instance of the `ThemoClient` class using your Themo account credentials (username and password).
  2. Call the `authenticate()` method to obtain the access token.
  3. Fetch devices using the `get_all_devices()` method.
  4. For each device, you can fetch and update its state, control its attributes, and manage its schedules using methods provided in the `Device` class.



  - `httpx`: A fully featured HTTP client for Python 3.



  Contributions to the `pythemo` repository are welcome. Please ensure that you follow the coding conventions and write tests for any new features or changes.



  This project is licensed under the MIT License. See the `LICENSE` file for more details.


pkgId: 6a0554cc4287ef0cae9149c8f76b5ac83d643ae292f481fc541993efe71694e3
name: python-python-115-help
arch: noarch
version: 0.0.9.8.8.3
epoch: 0
release: 1
summary: Development documents and examples for python-115
url: https://github.com/ChenyangGao/web-mount-packs/tree/main/python-115-client
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-115-0.0.9.8.8.3-1.src.rpm
location_href: Packages/python-python-115-help-0.0.9.8.8.3-1.noarch.rpm
checksum_type: sha256
description:
  ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/python-115)
  ![PyPI - Version](https://img.shields.io/pypi/v/python-115)
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/python-115)
  ![PyPI - Format](https://img.shields.io/pypi/format/python-115)
  ![PyPI - Status](https://img.shields.io/pypi/status/python-115)



  通过 [pypi](https://pypi.org/project/python-115/)

  ```console
  pip install -U python-115
  ```





  **导入模块**

  ```python
  from p115 import P115Client, P115FileSystem
  ```

  **创建客户端对象，需要传入 <kbd>cookie</kbd>，如果不传或者 <kbd>cookie</kbd> 失效，则需要扫码登录**

  ```python
  cookie = "UID=...;CID=...;SEID=..."
  client = P115Client(cookie)
  ```

  **创建文件系统对象**

  ```python
  fs = P115FileSystem(client)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取文件系统对象

  ```python
  fs = client.fs
  ```



  文件系统对象的方法，设计和行为参考了 <kbd>[os](https://docs.python.org/3/library/os.html)</kbd>、<kbd>[posixpath](https://docs.python.org/3/library/os.path.html)</kbd>、<kbd>[pathlib.Path](https://docs.python.org/3/library/pathlib.html)</kbd> 和 <kbd>[shutil](https://docs.python.org/3/library/shutil.html)</kbd> 等模块。

  <kbd>p115.P115FileSystem</kbd> 实现了在自己的网盘上，读写的文件系统方法

  <kbd>p115.P115Path</kbd> 实现了二次封装，从路径的角度来进行操作。

  **使用** <kbd>getcwd</kbd> **方法，获取当前工作目录的路径，参考** <kbd>os.getcwd</kbd>

  ```python
  >>> fs.getcwd()
  '/'
  ```

  **使用** <kbd>getcid</kbd> **方法，获取当前工作目录的 id**

  ```python
  >>> fs.getcid()
  0
  ```

  **使用** <kbd>listdir</kbd> **方法，罗列当前目录的文件名，参考** <kbd>os.listdir</kbd>

  ```python
  >>> fs.listdir()
  ['云下载',
   '000阅读·乱七八糟',
   '电视剧',
   '电影',
   '纪录片',
   'libgen',
   '👾0号：重要资源',
   '📚1号：书籍大礼包',
   '📼资料备份']
  ```

  **使用** <kbd>listdir_attr</kbd> **方法，罗列当前目录时，还可以获取属性**

  ```python
  >>> fs.listdir_attr()
  [{'name': '云下载',
    'is_directory': True,
    'size': None,
    'id': 2593093001609739968,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 16, 21, 58, 22),
    'utime': datetime.datetime(2023, 12, 19, 11, 29, 29),
    'ptime': datetime.datetime(2023, 3, 18, 18, 52, 54),
    'open_time': datetime.datetime(2023, 12, 19, 11, 29, 29),
    'time': datetime.datetime(2023, 12, 16, 21, 58, 22),
    'pick_code': 'fe1kl2mz1if2fl3wmx',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/云下载'},
   {'name': '000阅读·乱七八糟',
    'is_directory': True,
    'size': None,
    'id': 2592968610464922758,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 14, 15, 38, 18),
    'ptime': datetime.datetime(2023, 3, 18, 14, 45, 45),
    'open_time': datetime.datetime(2023, 12, 14, 13, 17, 9),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fccgz8vtu9xt08rmt6',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/000阅读·乱七八糟'},
   {'name': '电视剧',
    'is_directory': True,
    'size': None,
    'id': 2614100250469596984,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 15, 0, 48, 36),
    'ptime': datetime.datetime(2023, 4, 16, 18, 30, 33),
    'open_time': datetime.datetime(2023, 12, 15, 0, 48, 36),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fdjemtliv9d5b55y6u',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/电视剧'},
   {'name': '电影',
    'is_directory': True,
    'size': None,
    'id': 2580587204111760961,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 14, 15, 0, 45),
    'ptime': datetime.datetime(2023, 3, 1, 12, 46, 7),
    'open_time': datetime.datetime(2023, 12, 12, 21, 56, 25),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fdj4gtgvtd5p8q5y6u',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/电影'},
   {'name': '纪录片',
    'is_directory': True,
    'size': None,
    'id': 2576930424647319247,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 18, 18, 49, 29),
    'utime': datetime.datetime(2023, 12, 18, 18, 49, 29),
    'ptime': datetime.datetime(2023, 2, 24, 11, 40, 45),
    'open_time': datetime.datetime(2023, 12, 13, 15, 45, 53),
    'time': datetime.datetime(2023, 12, 18, 18, 49, 29),
    'pick_code': 'fdjagt4u21x1k35y6u',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/纪录片'},
   {'name': 'libgen',
    'is_directory': True,
    'size': None,
    'id': 2644648816430546428,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 15, 18, 24, 57),
    'ptime': datetime.datetime(2023, 5, 28, 22, 5, 6),
    'open_time': datetime.datetime(2023, 12, 15, 18, 24, 57),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fcid29t51koofbrmt6',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/libgen'},
   {'name': '👾0号：重要资源',
    'is_directory': True,
    'size': None,
    'id': 2580131407544188592,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 19, 11, 29, 45),
    'ptime': datetime.datetime(2023, 2, 28, 21, 40, 32),
    'open_time': datetime.datetime(2023, 12, 19, 11, 29, 45),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fa8p74ih0nu1ax4fyr',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/👾0号：重要资源'},
   {'name': '📚1号：书籍大礼包',
    'is_directory': True,
    'size': None,
    'id': 2580246506904748007,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 19, 11, 29, 44),
    'ptime': datetime.datetime(2023, 3, 1, 1, 29, 12),
    'open_time': datetime.datetime(2023, 12, 19, 11, 29, 44),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fccqsmu7225f2vrmt6',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/📚1号：书籍大礼包'},
   {'name': '📼资料备份',
    'is_directory': True,
    'size': None,
    'id': 2673432528538303699,
    'parent_id': 0,
    'sha1': None,
    'etime': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'utime': datetime.datetime(2023, 12, 15, 0, 12, 1),
    'ptime': datetime.datetime(2023, 7, 7, 15, 13, 12),
    'open_time': datetime.datetime(2023, 12, 15, 0, 12, 1),
    'time': datetime.datetime(2023, 12, 14, 14, 54, 20),
    'pick_code': 'fcilznsigu2hczrmt6',
    'star': False,
    'lastest_update': datetime.datetime(2023, 12, 19, 11, 30, 7, 517017),
    'path': '/📼资料备份'}]
  ```

  **使用** <kbd>listdir_path</kbd> **方法，罗列当前目录时，还可以获取** <kbd>p115.P115Path</kbd> **对象**

  ```python
  [<p115.P115Path(name='云下载', is_directory=True, size=None, id=2593093001609739968, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 16, 21, 58, 22), utime=datetime.datetime(2023, 12, 19, 11, 29, 29), ptime=datetime.datetime(2023, 3, 18, 18, 52, 54), open_time=datetime.datetime(2023, 12, 19, 11, 29, 29), time=datetime.datetime(2023, 12, 16, 21, 58, 22), pick_code='fe1kl2mz1if2fl3wmx', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/云下载')>,
   <p115.P115Path(name='000阅读·乱七八糟', is_directory=True, size=None, id=2592968610464922758, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 14, 15, 38, 18), ptime=datetime.datetime(2023, 3, 18, 14, 45, 45), open_time=datetime.datetime(2023, 12, 14, 13, 17, 9), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fccgz8vtu9xt08rmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/000阅读·乱七八糟')>,
   <p115.P115Path(name='电视剧', is_directory=True, size=None, id=2614100250469596984, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 0, 48, 36), ptime=datetime.datetime(2023, 4, 16, 18, 30, 33), open_time=datetime.datetime(2023, 12, 15, 0, 48, 36), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fdjemtliv9d5b55y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/电视剧')>,
   <p115.P115Path(name='电影', is_directory=True, size=None, id=2580587204111760961, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 14, 15, 0, 45), ptime=datetime.datetime(2023, 3, 1, 12, 46, 7), open_time=datetime.datetime(2023, 12, 12, 21, 56, 25), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fdj4gtgvtd5p8q5y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/电影')>,
   <p115.P115Path(name='纪录片', is_directory=True, size=None, id=2576930424647319247, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 18, 18, 49, 29), utime=datetime.datetime(2023, 12, 18, 18, 49, 29), ptime=datetime.datetime(2023, 2, 24, 11, 40, 45), open_time=datetime.datetime(2023, 12, 13, 15, 45, 53), time=datetime.datetime(2023, 12, 18, 18, 49, 29), pick_code='fdjagt4u21x1k35y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/纪录片')>,
   <p115.P115Path(name='libgen', is_directory=True, size=None, id=2644648816430546428, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 18, 24, 57), ptime=datetime.datetime(2023, 5, 28, 22, 5, 6), open_time=datetime.datetime(2023, 12, 15, 18, 24, 57), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fcid29t51koofbrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/libgen')>,
   <p115.P115Path(name='👾0号：重要资源', is_directory=True, size=None, id=2580131407544188592, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 19, 11, 29, 45), ptime=datetime.datetime(2023, 2, 28, 21, 40, 32), open_time=datetime.datetime(2023, 12, 19, 11, 29, 45), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fa8p74ih0nu1ax4fyr', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/👾0号：重要资源')>,
   <p115.P115Path(name='📚1号：书籍大礼包', is_directory=True, size=None, id=2580246506904748007, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 19, 11, 29, 44), ptime=datetime.datetime(2023, 3, 1, 1, 29, 12), open_time=datetime.datetime(2023, 12, 19, 11, 29, 44), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fccqsmu7225f2vrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/📚1号：书籍大礼包')>,
   <p115.P115Path(name='📼资料备份', is_directory=True, size=None, id=2673432528538303699, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 0, 12, 1), ptime=datetime.datetime(2023, 7, 7, 15, 13, 12), open_time=datetime.datetime(2023, 12, 15, 0, 12, 1), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fcilznsigu2hczrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 11, 32, 18, 778700), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x106dcb190>, cid=0, path='/') at 0x108b21b90>, path='/📼资料备份')>]
  ```

  **使用** <kbd>chdir</kbd> **方法，进入某个目录，就像** <kbd>os.chdir</kbd>

  ```python
  >>> fs.chdir("电视剧/欧美剧/A")
  2598195078816071040
  >>> fs.getcwd()
  '/电视剧/欧美剧/A'
  >>> fs.getcid()
  2598195078816071040
  >>> fs.listdir()
  ['A《爱、死亡和机器人》(Love.Death.and.Robot)[tt9561862]']
  >>> fs.chdir("A《爱、死亡和机器人》(Love.Death.and.Robot)[tt9561862]/爱、死亡和机器人S01.Love.Death.and.Robots.1080p.NF.WEB-DL.DDP5.1.x264-NTG（18集）")
  2576931481024724685
  >>> fs.listdir()
  ['Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.简体&英文.ass', 'Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv']
  ```

  **使用** <kbd>attr</kbd> **方法，获取文件或文件夹的属性**

  ```python
  >>> fs.attr("Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv")
  {'name': 'Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv',
   'is_directory': False,
   'size': 924544482,
   'id': 2576931481393823441,
   'parent_id': 2576931481024724685,
   'sha1': '7F4121B68A4E467ABF30A84627E20A8978895A4E',
   'etime': datetime.datetime(2023, 2, 24, 11, 42, 51),
   'utime': datetime.datetime(2023, 12, 19, 0, 21, 42),
   'ptime': datetime.datetime(2023, 2, 24, 11, 42, 51),
   'open_time': datetime.datetime(2023, 7, 7, 0, 50, 30),
   'pick_code': 'djagtomczh64gx50u',
   'star': False,
   'play_long': 1034,
   'lastest_update': datetime.datetime(2023, 12, 19, 11, 41, 34, 914934),
   'path': '/电视剧/欧美剧/A/A《爱、死亡和机器人》(Love.Death.and.Robot)[tt9561862]/爱、死亡和机器人S01.Love.Death.and.Robots.1080p.NF.WEB-DL.DDP5.1.x264-NTG（18集）/Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv'}
  ```

  **使用** <kbd>stat</kbd> **方法，获取文件或文件夹的部分，参考** <kbd>os.stat</kbd>

  ```python
  >>> fs.stat("Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv")
  os.stat_result(st_mode=33279, st_ino=2576931481393823441, st_dev=2576931481024724685, st_nlink=1, st_uid=306576686, st_gid=1, st_size=924544482, st_atime=1688662230.0, st_mtime=1677210171.0, st_ctime=1677210171.0)
  ```

  **使用** <kbd>open</kbd> **方法，打开一个文件（目前只支持读取，不支持写入），参考** <kbd>open</kbd>

  ```python
  >>> f = fs.open("Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.简体&英文.ass", encoding="UTF-16")
  >>> f
  <_io.TextIOWrapper name='Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.简体&英文.ass' encoding='UTF-16'>
  ```

  读取此文件的前 100 个字符

  ```python
  >>> f.read(100)
  '[Script Info]\n;SrtEdit 6.3.2012.1001\n;Copyright(C) 2005-2012 Yuan Weiguo\n\nTitle: YYeTs\nOriginal Scri'
  ```

  用完后请及时关闭文件（其实不主动关闭也可以，只要文件不被引用，就会自动关闭）

  ```python
  >>> f.close()
  ```

  **以二进制模式打开一个文件，此时** `mode="rb"`

  ```python
  >>> f = fs.open("Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv", "rb")
  >>> f
  p115.util.file.RequestsFileReader(<bound method P115PathBase.as_uri of <p115.P115Path(fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=2576931481024724685, path='/电视剧/欧美剧/A/A《爱、死亡和机器人》(Love.Death.and.Robot)[tt9561862]/爱、死亡和机器人S01.Love.Death.and.Robots.1080p.NF.WEB-DL.DDP5.1.x264-NTG（18集）') at 0x106825810>, path='/电视剧/欧美剧/A/A《爱、死亡和机器人》(Love.Death.and.Robot)[tt9561862]/爱、死亡和机器人S01.Love.Death.and.Robots.1080p.NF.WEB-DL.DDP5.1.x264-NTG（18集）/Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv', id=2576931481393823441, url='https://cdnfhnfile.115.com/5c8b637b499f7a09e4bb06f19b09585699f0423c/Love.Death.and.Robots.S01E01.Sonnies.Edge.1080p.NF.WEB-DL.DDP5.1.x264-NTG.mkv?t=1703006667&u=306576686&s=104857600&d=vip-1862476304-djagtomczh64gx50u-1&c=2&f=1&k=f5ea224701acadd1bffad4a9200b23bd&us=1048576000&uc=10&v=1', url_expire_time=1703006667)>>, urlopen=<function RequestsFileReader.__init__.<locals>.urlopen_wrapper at 0x1068e2a20>, headers=mappingproxy({'Accept-Encoding': 'identity', 'Range': 'bytes=0-'}))
  ```

  读取前 10 个字节

  ```python
  >>> f.read(10)
  b'\x1aE\xdf\xa3\xa3B\x86\x81\x01B'
  ```

  再读取 10 个字节

  ```python
  >>> f.read(10)
  b'\xf7\x81\x01B\xf2\x81\x04B\xf3\x81'
  ```

  当前文件偏移位置（从 0 开始计算）

  ```python
  >>> f.tell()
  20
  ```

  把读取位置重新变为文件开头

  ```python
  >>> f.seek(0)
  0
  >>> f.tell()
  0
  ```

  再次读取 20 字节，应该等于上面两次结果的拼接

  ```python
  >>> f.read(20)
  b'\x1aE\xdf\xa3\xa3B\x86\x81\x01B\xf7\x81\x01B\xf2\x81\x04B\xf3\x81'
  >>> f.tell()
  20
  ```

  **回到根目录，我们继续其它试验**

  ```python
  >>> fs.chdir("/")
  0
  ```

  **使用** <kbd>walk</kbd> **方法，可以遍历一个目录，参考** <kbd>os.walk</kbd>

  ```python
  >>> next(fs.walk())
  ('/',
   ['云下载',
    '000阅读·乱七八糟',
    '电视剧',
    '电影',
    '纪录片',
    'libgen',
    '👾0号：重要资源',
    '📚1号：书籍大礼包',
    '📼资料备份'],
   [])
  ```

  **使用** <kbd>walk_path</kbd> **方法，可以遍历一个目录时，获取** <kbd>p115.P115Path</kbd> 对象

  ```python
  >>> next(fs.walk_path())
  ('/',
   [<p115.P115Path(name='云下载', is_directory=True, size=None, id=2593093001609739968, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 16, 21, 58, 22), utime=datetime.datetime(2023, 12, 19, 11, 29, 29), ptime=datetime.datetime(2023, 3, 18, 18, 52, 54), open_time=datetime.datetime(2023, 12, 19, 11, 29, 29), time=datetime.datetime(2023, 12, 16, 21, 58, 22), pick_code='fe1kl2mz1if2fl3wmx', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/云下载')>,
    <p115.P115Path(name='000阅读·乱七八糟', is_directory=True, size=None, id=2592968610464922758, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 14, 15, 38, 18), ptime=datetime.datetime(2023, 3, 18, 14, 45, 45), open_time=datetime.datetime(2023, 12, 14, 13, 17, 9), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fccgz8vtu9xt08rmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/000阅读·乱七八糟')>,
    <p115.P115Path(name='电视剧', is_directory=True, size=None, id=2614100250469596984, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 0, 48, 36), ptime=datetime.datetime(2023, 4, 16, 18, 30, 33), open_time=datetime.datetime(2023, 12, 15, 0, 48, 36), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fdjemtliv9d5b55y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/电视剧')>,
    <p115.P115Path(name='电影', is_directory=True, size=None, id=2580587204111760961, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 14, 15, 0, 45), ptime=datetime.datetime(2023, 3, 1, 12, 46, 7), open_time=datetime.datetime(2023, 12, 12, 21, 56, 25), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fdj4gtgvtd5p8q5y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/电影')>,
    <p115.P115Path(name='纪录片', is_directory=True, size=None, id=2576930424647319247, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 18, 18, 49, 29), utime=datetime.datetime(2023, 12, 18, 18, 49, 29), ptime=datetime.datetime(2023, 2, 24, 11, 40, 45), open_time=datetime.datetime(2023, 12, 13, 15, 45, 53), time=datetime.datetime(2023, 12, 18, 18, 49, 29), pick_code='fdjagt4u21x1k35y6u', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/纪录片')>,
    <p115.P115Path(name='libgen', is_directory=True, size=None, id=2644648816430546428, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 18, 24, 57), ptime=datetime.datetime(2023, 5, 28, 22, 5, 6), open_time=datetime.datetime(2023, 12, 15, 18, 24, 57), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fcid29t51koofbrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/libgen')>,
    <p115.P115Path(name='👾0号：重要资源', is_directory=True, size=None, id=2580131407544188592, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 19, 11, 29, 45), ptime=datetime.datetime(2023, 2, 28, 21, 40, 32), open_time=datetime.datetime(2023, 12, 19, 11, 29, 45), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fa8p74ih0nu1ax4fyr', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/👾0号：重要资源')>,
    <p115.P115Path(name='📚1号：书籍大礼包', is_directory=True, size=None, id=2580246506904748007, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 19, 11, 29, 44), ptime=datetime.datetime(2023, 3, 1, 1, 29, 12), open_time=datetime.datetime(2023, 12, 19, 11, 29, 44), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fccqsmu7225f2vrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/📚1号：书籍大礼包')>,
    <p115.P115Path(name='📼资料备份', is_directory=True, size=None, id=2673432528538303699, parent_id=0, sha1=None, etime=datetime.datetime(2023, 12, 14, 14, 54, 20), utime=datetime.datetime(2023, 12, 15, 0, 12, 1), ptime=datetime.datetime(2023, 7, 7, 15, 13, 12), open_time=datetime.datetime(2023, 12, 15, 0, 12, 1), time=datetime.datetime(2023, 12, 14, 14, 54, 20), pick_code='fcilznsigu2hczrmt6', star=False, lastest_update=datetime.datetime(2023, 12, 19, 12, 43, 23, 433377), fs=<p115.P115FileSystem(client=<p115.P115Client object at 0x104e86050>, cid=0, path='/') at 0x106825810>, path='/📼资料备份')>],
   [])
  ```

  **使用** <kbd>mkdir</kbd> **方法，可以创建空文件夹，参考** <kbd>os.mkdir</kbd>

  ```python
  >>> fs.mkdir("test")
  {'name': 'test',
   'is_directory': True,
   'size': None,
   'id': 2793068685969850230,
   'parent_id': 0,
   'sha1': None,
   'etime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'utime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'ptime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'time': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'pick_code': 'fd4lr0lh0cqf525y6u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 16, 48, 53, 571815),
   'path': '/test'}
  ```

  名字中可以包含斜杠符号 `"/"`，但需要转义 `"\/"`（但我不建议在文件名中包含 `"/"`）

  ```python
  >>> fs.mkdir("test\/2")
  {'name': 'test/2',
   'is_directory': True,
   'size': None,
   'id': 2793068768899628939,
   'parent_id': 0,
   'sha1': None,
   'etime': datetime.datetime(2023, 12, 19, 16, 49, 3),
   'utime': datetime.datetime(2023, 12, 19, 16, 49, 3),
   'ptime': datetime.datetime(2023, 12, 19, 16, 49, 3),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'time': datetime.datetime(2023, 12, 19, 16, 49, 3),
   'pick_code': 'fd4lr0iehizqhn5y6u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 16, 49, 3, 447470),
   'path': '/test\\/2'}
  ```

  **使用** <kbd>rmdir</kbd> **方法，可以删除空文件夹，参考** <kbd>os.rmdir</kbd>

  ```python
  >>> fs.rmdir("test")
  {'name': 'test',
   'is_directory': True,
   'size': None,
   'id': 2793068685969850230,
   'parent_id': 0,
   'sha1': None,
   'etime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'utime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'ptime': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'time': datetime.datetime(2023, 12, 19, 16, 48, 53),
   'pick_code': 'fd4lr0lh0cqf525y6u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 16, 49, 15, 896395),
   'path': '/test'}
  ```

  **使用** <kbd>makedirs</kbd> **方法，可以创建多级的空目录，参考** <kbd>os.makedirs</kbd>

  ```python
  >>> fs.makedirs("test\/2/test\/3/test\/4", exist_ok=True)
  {'name': 'test/4',
   'is_directory': True,
   'size': None,
   'id': 2793068979713736021,
   'parent_id': 2793068974135311685,
   'sha1': None,
   'etime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'utime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'ptime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'time': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'pick_code': 'fd4lr0njs9jm3d5y6u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 16, 49, 28, 578537),
   'path': '/test\\/2/test\\/3/test\\/4'}
  ```

  **使用** <kbd>removedirs</kbd> **方法，可以（自底向上地）删除多级的空目录，参考** <kbd>os.removedirs</kbd>

  ```python
  >>> fs.removedirs("test\/2/test\/3/test\/4")
  {'name': 'test/4',
   'is_directory': True,
   'size': None,
   'id': 2793068979713736021,
   'parent_id': 2793068974135311685,
   'sha1': None,
   'etime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'utime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'ptime': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'time': datetime.datetime(2023, 12, 19, 16, 49, 28),
   'pick_code': 'fd4lr0njs9jm3d5y6u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 16, 49, 37, 830793),
   'path': '/test\\/2/test\\/3/test\\/4'}
  ```

  **使用** <kbd>upload</kbd> **方法上传文件**

  ```python
  >>> from io import BytesIO
  >>> fs.upload(BytesIO(), "test.txt")
  {'name': 'test.txt',
   'is_directory': False,
   'size': 0,
   'id': 2793075411108494446,
   'parent_id': 0,
   'sha1': 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709',
   'etime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'utime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'ptime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'cwpyswv9pyja0dxt6',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 2, 15, 355185),
   'path': '/test.txt'}
  >>> fs.upload("file.py")
  {'name': 'file.py',
   'is_directory': False,
   'size': 11927,
   'id': 2793075920607378515,
   'parent_id': 0,
   'sha1': 'C43B803A5F82E65BCAA9667F66939955CD0450CD',
   'etime': datetime.datetime(2023, 12, 19, 17, 3, 16),
   'utime': datetime.datetime(2023, 12, 19, 17, 3, 16),
   'ptime': datetime.datetime(2023, 12, 19, 17, 3, 16),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'cwpysozr8a9andxt6',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 3, 16, 204904),
   'path': '/file.py'}
  ```

  **使用** <kbd>remove</kbd> **方法可以删除文件，参考** <kbd>os.remove</kbd>

  ```python
  >>> fs.remove("test.txt")
  {'name': 'test.txt',
   'is_directory': False,
   'size': 0,
   'id': 2793075411108494446,
   'parent_id': 0,
   'sha1': 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709',
   'etime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'utime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'ptime': datetime.datetime(2023, 12, 19, 17, 2, 15),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'cwpyswv9pyja0dxt6',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 4, 25, 605253),
   'path': '/test.txt'}
  ```

  **使用** <kbd>rmtree</kbd> **方法可以删除文件或文件夹，并且在删除文件夹时，也删除其中的文件和文件夹，参考** <kbd>shutil.rmtree</kbd>

  ```python
  >>> fs.rmtree("file.py")
  {'name': 'file.py',
   'is_directory': False,
   'size': 11927,
   'id': 2793075920607378515,
   'parent_id': 0,
   'sha1': 'C43B803A5F82E65BCAA9667F66939955CD0450CD',
   'etime': datetime.datetime(2023, 12, 19, 17, 3, 16),
   'utime': datetime.datetime(2023, 12, 19, 17, 3, 17),
   'ptime': datetime.datetime(2023, 12, 19, 17, 3, 16),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'cwpysozr8a9andxt6',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 5, 22, 766249),
   'path': '/file.py'}
  ```

  **使用** <kbd>rename</kbd> **方法可以对文件或文件夹进行改名或移动，参考** <kbd>os.rename</kbd>

  ```python
  >>> fs.touch("anyfile.mp3")
  {'name': 'anyfile.mp3',
   'is_directory': False,
   'size': 0,
   'id': 2793077925249810265,
   'parent_id': 0,
   'sha1': 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709',
   'etime': datetime.datetime(2023, 12, 19, 17, 7, 15),
   'utime': datetime.datetime(2023, 12, 19, 17, 7, 15),
   'ptime': datetime.datetime(2023, 12, 19, 17, 7, 15),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'd47r0th5u0sfhx50u',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 7, 15, 197968),
   'path': '/anyfile.mp3'}
  >>> fs.rename("anyfile.mp3", "xyz.mp4")
  {'name': 'xyz.mp4',
   'is_directory': False,
   'size': 0,
   'id': 2793078164048314194,
   'parent_id': 0,
   'sha1': 'DA39A3EE5E6B4B0D3255BFEF95601890AFD80709',
   'etime': datetime.datetime(2023, 12, 19, 17, 7, 43),
   'utime': datetime.datetime(2023, 12, 19, 17, 7, 43),
   'ptime': datetime.datetime(2023, 12, 19, 17, 7, 43),
   'open_time': datetime.datetime(1970, 1, 1, 8, 0),
   'pick_code': 'e0bgvc5mdo6sxzlvx',
   'star': False,
   'lastest_update': datetime.datetime(2023, 12, 19, 17, 7, 43, 798793),
   'path': '/xyz.mp4'}
  ```

  **使用** <kbd>renames</kbd> **方法可以对文件或文件夹进行改名或移动，并且在移动后如果原来所在目录为空，则会删除那个目录，参考** <kbd>os.renames</kbd>

  **使用** <kbd>replace</kbd> **方法可以对文件或文件夹进行改名或移动，并且如果原始路径上是文件，目标路径上也存在一个文件，则会先把目标路径上的文件删除，参考** <kbd>os.replace</kbd>

  **使用** <kbd>move</kbd> **方法可以对文件或文件夹进行改名或移动，目标路径存在且是一个目录，则把文件移动到其中（但是目录中有同名的文件或文件夹，还是会报错），参考** <kbd>shutil.move</kbd>





  **第 1 种方法，使用** <kbd>iter</kbd>，返回 <kbd>P115Path</kbd> 对象的迭代器

  ```python
  for path in fs.iter(max_depth=-1):
      if path.name.endswith(".mkv"):
          print(path.url)
  ```

  **第 2 种方法，使用** <kbd>glob</kbd>，参考 <kbd>pathlib.Path.glob</kbd> 和 <kbd>glob.iglob</kbd>，使用通配符查找

  ```python
  for path in fs.glob("**/*.mkv"):
      print(path.url)
  ```

  **第 3 种方法，使用** <kbd>rglob</kbd>，参考 <kbd>pathlib.Path.rglob</kbd>

  ```python
  for path in fs.rglob("*.mkv"):
      print(path.url)
  ```



  <kbd>p115.P115ShareFileSystem</kbd> 实现了在<kbd>分享链接</kbd>上，只读的文件系统方法

  <kbd>p115.P115SharePath</kbd> 实现了二次封装，从路径的角度来进行操作

  **创建实例对象**

  ```python
  from p115 import P115ShareFileSystem

  share_link = "https://115.com/s/swzn4d53w8m?password=f247#"

  share_fs = P115ShareFileSystem(client, share_link)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取

  ```python
  share_fs = client.get_share_fs(share_link)
  ```



  <kbd>p115.P115ZipFileSystem</kbd> 实现了在<kbd>压缩包</kbd>上，只读的文件系统方法

  <kbd>p115.P115ZipPath</kbd> 实现了二次封装，从路径的角度来进行操作

  **创建实例对象**

  ```python
  from p115 import P115ZipFileSystem

  pick_code = "abcdefg"

  zip_fs = P115ZipFileSystem(client, pick_code)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取

  ```python
  zip_fs = client.get_zip_fs(pick_code)
  ```



  <kbd>p115.P115Offline</kbd> 实现了对于<kbd>云下载</kbd>的封装。

  **创建实例对象**

  ```python
  from p115 import P115Offline

  offline = P115Offline(client)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取

  ```python
  offline = client.offline
  ```



  <kbd>p115.P115Recyclebin</kbd> 实现了对于<kbd>回收站</kbd>的封装。

  **创建实例对象**

  ```python
  from p115 import P115Recyclebin

  recyclebin = P115Recyclebin(client)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取

  ```python
  recyclebin = client.recyclebin
  ```



  <kbd>p115.P115Sharing</kbd> 实现了对于<kbd>分享记录</kbd>的封装。

  **创建实例对象**

  ```python
  from p115 import P115Sharing

  sharing = P115Sharing(client)
  ```

  或者直接在 <kbd>client</kbd> 上就可获取

  ```python
  sharing = client.sharing
  ```



  > 正在编写中


pkgId: 82bdae30bb992c03ad92d4a7cf9faae53812f37bbc6ef318045b7d22258ded03
name: python-python-amazon-sp-api-help
arch: noarch
version: 1.8.1
epoch: 0
release: 1
summary: Development documents and examples for python-amazon-sp-api
url: https://github.com/saleweaver/python-amazon-sp-api
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-amazon-sp-api-1.8.1-1.src.rpm
location_href: Packages/python-python-amazon-sp-api-help-1.8.1-1.noarch.rpm
checksum_type: sha256
description:
  This tool helps developers and businesses connect seamlessly with Amazon's vast marketplace, enabling powerful automations and data management.
  If you appreciate this project and find it useful, please consider supporting its continued development:
  - 🙌 [GitHub Sponsors](https://github.com/sponsors/saleweaver)
  - 🌐 BTC Address: `bc1q6uqgczasmnvnc5upumarugw2mksnwneg0f65ws`
  - 🌐 ETH Address: `0xf59534F7a7F5410DBCD0c779Ac3bB6503bd32Ae5`


pkgId: 083cc6271d9451889a96d233fc777f96316ce88f3d92c7606d944f17a3ad9a18
name: python-python-automation-framework-help
arch: noarch
version: 0.1.9
epoch: 0
release: 1
summary: Development documents and examples for python-automation-framework
url: https://github.com/mreiche/python-automation-framework
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-automation-framework-0.1.9-1.src.rpm
location_href: Packages/python-python-automation-framework-help-0.1.9-1.noarch.rpm
checksum_type: sha256
description:
  [![Pypi](https://img.shields.io/pypi/v/python-automation-framework.svg)](https://pypi.org/project/python-automation-framework)
  ![Tests Status](https://github.com/mreiche/python-automation-framework/actions/workflows/integration-tests.yml/badge.svg)
  [![Code Coverage Status](https://codecov.io/github/mreiche/python-automation-framework/branch/main/graph/badge.svg)](https://app.codecov.io/github/mreiche/python-automation-framework)




  Python implementation of [Testerra](https://github.com/telekom/testerra) API.

  It is basically a wrapper for Selenium *WebDriver* and *WebElement* which brings some more comfort features.
  This is not a test framework, but it implements assertion features anyway.

  The basic concept is, to identify *WebElements* on every action or property accessor to prevent `StaleElementExceptions`.



  ```python
  import inject
  import paf.config
  from paf.locator import By
  from paf.page import FinderPage, PageFactory


  inject.configure(paf.config.inject)


  page_factory = inject.instance(PageFactory)


  page = page_factory.create_page(FinderPage)


  page.open("https://google.com")


  element = page.find("#q")


  element.type("Search")


  element.expect.text.be("Search")
  ```



  - You need at least a local *WebDriver* installed.
     ```shell
     brew|choco|apt install chromedriver
     ```

  - Python 3.10 (or higher).



  - [UiElements](doc/uielement.md)
  - [Locators](doc/locators.md)
  - [Page objects](doc/pages.md)
  - [Components](doc/components.md)
  - [Managing WebDrivers](doc/manager.md)
  - [Execution controlling](doc/control.md)
  - [Inject listener](doc/listener.md)



  - Rect assertions
  - Drag & Drop over frames



  * `PAF_BROWSER_SETTING=chrome:90`: Sets the requested browser name and it's version.
  * `PAF_WINDOW_SIZE=1920x1080`: Sets the browsers default window size.
  * `PAF_SCREENSHOTS_DIR=screenshots`: Sets the screenshots' directory.
  * `PAF_SEQUENCE_WAIT_AFTER_FAIL=0.3`: Wait in seconds whenever a sequence action fails.
  * `PAF_SEQUENCE_RETRY_COUNT=3`: Retry count for every sequence action.
  * `PAF_DEMO_MODE=0`: Enables the demo mode by highlighting actions and assertions.
  * `PAF_SELENIUM_SERVER_URL=http://127.0.0.1:4444`: Uses Selenium server if set.
  * `PAF_DRIVER_PATH`: Path to Webdriver binary
  * `PAF_BINARY_PATH`: Path to User agent's binary



  Some real world examples.

  1. [test_google.py](examples/test_google.py): is a regular Google search, implemented with [Page Objects](doc/pages.md) and [Components](doc/components.md).
  2. [test_todo_mvc.py](examples/test_todo_mvc.py): are re-implemented test cases from the [Robot Framework TodoMVC](https://docs.robotframework.org/docs/examples/todo) example. It's IMHO developer friendly, better readable and less code.
  3. [test_asyncio.py](examples/test_asyncio.py): Parallel execution via `asyncio`.
  4. [test_monkeytype.py](examples/test_monkeytype.py): Typing test on https://monkeytype.com



  Comparison of the syntax with other frameworks.

  **Pylenium**
  ```python
  py.get("a[href='/about']").should().have_text("About")

  find("a[href='/about']").expect.text.be("About")
  ```
  **SeleniumBase**
  ```python
  self.assert_text_not_visible("Thanks for your purchase.", "#app .success")

  find("#app .success").expect.text.not_be("Thanks for your purchase.")
  ```
  **Selene**
  ```python
  browser.all('#rso>div').should(have.size_greater_than(5)) \
      .first.should(have.text('Selenium automates browsers'))

  div = find("#rso>div")
  div.expect.count.greater_than(5).be(True)
  div.first.expect.text.be("Selenium automates browsers")
  ```

  References: https://www.nextgenerationautomation.com/post/python-test-automation-frameworks





  ```shell
  PAF_TEST_HEADLESS=1 PAF_TEST_LOCAL_SELENIUM=0 pytest --cov=paf -n=4 test
  ```


  ```shell
  podman build -f ubuntu-base.Dockerfile --arch=amd64 -t paf-test-base:latest
  source build.env
  echo $DOCKER_CONTAINER_REGISTRY_TOKEN | podman login -u mreiche --password-stdin ghcr.io
  podman push paf-test-base:latest docker://ghcr.io/mreiche/paf-test-base:latest
  ```


  Run tests within container
  ```shell
  podman run -e PAF_TEST_HEADLESS=1 -e PAF_TEST_CONTAINER=1 -e PAF_TEST_LOCAL_SELENIUM=0 paf-test-base:latest pytest --cov=paf -n=4 test
  ```


  ```shell
  wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.9.0/selenium-server-4.9.0.jar -O selenium-server.jar
  java -jar selenium-server.jar standalone --host 127.0.0.1
  ```



  ```javascript
  xpath = "//dt[.//text()='Title:']/following-sibling::dd[1]"
  snapshot = document.evaluate(xpath, document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE)
  snapshot.snapshotItem(0).textContent
  ```


  1. Update version in `setup.py`
  2. Package library
      ```shell
      python setup.py sdist
      ```
  3. Publish library
      ```shell
      twine upload dist/python-automation-framework-[version].tar.gz
      ```


  - https://stackoverflow.com/questions/64033686/how-can-i-use-private-docker-image-in-github-actions
  - https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/
  - https://stackoverflow.com/questions/46052736/python-proxy-class
  - https://chromedriver.chromium.org/
  - Make stealth WebDriver: https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver


pkgId: ea5549713b8d01ff44185dcaf60c7f02dd56c05a01eebae6c7c6fdcbb29f60e4
name: python-python-bareos-help
arch: noarch
version: 24.0.0
epoch: 0
release: 1
summary: Development documents and examples for python-bareos
url: https://github.com/bareos/bareos/
rpm_license: AGPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-bareos-24.0.0-1.src.rpm
location_href: Packages/python-python-bareos-help-24.0.0-1.noarch.rpm
checksum_type: sha256
description:
  `python-bareos` is a Python module to access a https://www.bareos.com backup system.
  Packages for `python-bareos` are included in the Bareos core distribution and available via https://pypi.org/.
  Documentation is available at https://docs.bareos.org/DeveloperGuide/PythonBareos.html
     By default, the Bareos Director (>= 18.2.4)
     uses TLS-PSK when communicating through the network.
     The Python (https://github.com/python/cpython) core module ``ssl``
     does support TLS-PSK only since Python >= 3.13.
     The section `Transport Encryption (TLS-PSK)`_ describes
     how to use TLS-PSK and about the limitations.
     For testing this module can also be used without TLS.


pkgId: 3caf62798ffd2ff103dace19cb6edf434c4fd8825516d4174cbdd6a6e18196c2
name: python-python-bitget-request-help
arch: noarch
version: 4.9.5
epoch: 0
release: 1
summary: Development documents and examples for python-bitget-request
url: https://github.com/cuongitl/python-bitget
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-bitget-request-4.9.5-1.src.rpm
location_href: Packages/python-python-bitget-request-help-4.9.5-1.noarch.rpm
checksum_type: sha256
description:
  [![License](https://img.shields.io/badge/license-MIT-green)](https://github.com/cuongitl/python-bitget/-/blob/main/LICENSE)
  [![python-bitget Version](https://img.shields.io/pypi/v/python-bitget?logo=pypi)](https://pypi.org/project/python-bitget/)
  [![python-bitget Python Versions](https://img.shields.io/pypi/pyversions/python-bitget?logo=pypi)](https://pypi.org/project/python-bitget/)
  [![python-bitget Downloads Per Day](https://img.shields.io/pypi/dd/python-bitget?logo=pypi)](https://pypi.org/project/python-bitget/)
  [![python-bitget Downloads Per Week](https://img.shields.io/pypi/dw/python-bitget?logo=pypi)](https://pypi.org/project/python-bitget/)
  [![python-bitget Downloads Per Month](https://img.shields.io/pypi/dm/python-bitget?logo=pypi)](https://pypi.org/project/python-bitget/)
  [![Downloads](https://static.pepy.tech/badge/python-bitget)](https://pypi.org/project/python-bitget/)

  [bitget](https://www.bitget.com/en/referral/register?from=referral&clacCode=6EKP94LE) is a cryptocurrency derivatives exchange.

  This is a wrapper around the Bitget API as described on Bitget, including all features the API provides using clear and readable objects, both for the REST  as the websocket API.


  I am in no way affiliated with Bitget, use at your own risk.

  **If you think something is broken, something is missing or have any questions, please open an [Issue](https://github.com/cuongitl/python-bitget/issues)**


  If you're new to Bitget, use the following link to [save 10% on all of your trade fees, and can get rewards up to $5005.](https://www.bitget.com/en/referral/register?from=referral&clacCode=6EKP94LE)
  * [Register an account with Bitget.](https://partner.bitget.com/bg/e55g05831674816745836)
  * [Generate an API Key and assign relevant permissions.](https://www.bitget.com/en/support/articles/360038968251-API%20Creation%20Guide)
  * [Bitget API docs](https://bitgetlimited.github.io/apidoc/en/mix/#welcome)
    * [Example Bitget rest API](https://github.com/cuongitl/python-bitget/blob/master/examples/example_rest_api.py)
    * [Example Bitget websocket API](https://github.com/cuongitl/python-bitget/blob/master/examples/example_websocket_api.py)


      pip install python-bitget


  > Change your API KEY and your SECRET KEY.


  ```python
  from pybitget import Client

  api_key = "your-api-key"
  api_secret = "your-secret-key"
  api_passphrase = "your-api-passphrase"

  client = Client(api_key, api_secret, passphrase=api_passphrase)
  result = client.mix_get_accounts(productType='UMCBL')
  print(result)

  ```


  ```python
  from pybitget.stream import BitgetWsClient, SubscribeReq, handel_error

  from pybitget.enums import *
  from pybitget import logger

  api_key = "your-api-key"
  api_secret = "your-secret-key"
  api_passphrase = "your-api-passphrase"

  def on_message(message):
      logger.info(message)



  client = BitgetWsClient(api_key=api_key,
                          api_secret=api_secret,
                          passphrase=api_passphrase,
                          verbose=True) \
      .error_listener(handel_error) \
      .build()


  channels = [SubscribeReq("mc", "ticker", "BTCUSD"), SubscribeReq("SP", "candle1W", "BTCUSDT")]
  client.subscribe(channels, on_message)


  channels = [SubscribeReq("mc", "ticker", "BTCUSD")]
  client.subscribe(channels, on_message)


  channels = [SubscribeReq(WS_CHANNEL_INSTTYPE, WS_PRIVATE_ORDERS_CHANNEL, WS_CHANNEL_INSTID)]
  client.subscribe(channels, on_message)
  ```


  I develop and maintain this package on my own for free in my spare time.
  Donations are greatly appreciated. If you prefer to donate any other currency please contact me.

  * **Buy me a coffee:** https://buymeacoffee.com/cuongitl

  * **BTC**:  `19rvFC79eVoCMHxJ44hB3GLhiD2HHsMJoZ`

  * **BTC**:  `0xab4686635a02dff0babedddfee813d325f56cfb8`  (BEP20)

  * **USDT**:  `0xab4686635a02dff0babedddfee813d325f56cfb8`  (BEP20)

  * **USDT**:  `TCdyZs2mRhwYpCB5dZqiXEUoYRfiVJuq1H`  (TRC20)

  * **BGB**:  `0x3ee4ca7cc911ad4e423dec2ae8f2846e9a6a0a77`  (ERC-20)


  * Bitget: [Bitget OPENAPI](https://t.me/bitgetOpenapi)
  * Author: [Cuongitl](https://t.me/Cuongitl)


  The release notes can be found
  [here.](https://github.com/cuongitl/python-bitget/blob/master/release_notes.md)


  * Fork this repository.
  * Make pull requests with proper commit message.


pkgId: ba160a37f9b013be86f3c3775e4f764d2564833d007e07581cc1665588e45ff1
name: python-python-cbibs-help
arch: noarch
version: 0.0.3
epoch: 0
release: 1
summary: Development documents and examples for python-cbibs
url: https://github.com/fletchsims/python-cbibs
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-cbibs-0.0.3-1.src.rpm
location_href: Packages/python-python-cbibs-help-0.0.3-1.noarch.rpm
checksum_type: sha256
description:
  Python module to interact with the CBIBS API.

  - [CBIBS](https://www.buoybay.noaa.gov/)
  - [API Documentation](https://www.buoybay.noaa.gov/data/api)


  To get the package, execute:
  ```shell
  pip install python-cbibs
  ```


  View the CBIBS API documentation on [CBIBS](https://www.buoybay.noaa.gov/data/api). By default the response output will
  be in JSON format. If you would like XML, configure your instance to use XML (see example below).

  Then set up an CBIBS instance, set your API key, and make any available requests.

  ```python
  from cbibs.buoy import Cbibs


  buoy = Cbibs(api_key='API_KEY')
  buoy_xml = Cbibs(api_key='API_KEY', response_format='xml')


  latest_all = buoy.get_current_readings_all_stations()


  station_readings = buoy.get_station_readings('AN')


  station_variable = buoy.query_station(
      station_name="AN",
      start_date='2020-04-01T10:00:00z',
      end_date='2020-04-01T20:00:00z',
      variable="sea_water_temperature"
  )
  ```


pkgId: 77f088fadb6d17cccef1aa1dba58ad4bb9bfc51dbd5ded7bccee91c437e44445
name: python-python-dcm-help
arch: noarch
version: 0.1.9
epoch: 0
release: 1
summary: Development documents and examples for python-dcm
url: https://pypi.org/project/python-dcm/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-dcm-0.1.9-1.src.rpm
location_href: Packages/python-python-dcm-help-0.1.9-1.noarch.rpm
checksum_type: sha256
description:
  For detailed documentation and examples, visit our [GitHub repository](https://github.com/c0sogi/python-dcm).


pkgId: 044baa3ccd794adc4ccee98dabfdc66bf829b5b5c945965591f1ce245da75d95
name: python-python-dependency-resolver
arch: noarch
version: 1.0.4
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://anthonykgross.fr/python-dependency-resolver/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-dependency-resolver-1.0.4-1.src.rpm
location_href: Packages/python-python-dependency-resolver-1.0.4-1.noarch.rpm
checksum_type: sha256
description:
  [![Python Application](https://github.com/anthonykgross/python-dependency-resolver/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/anthonykgross/python-dependency-resolver/actions/workflows/main.yml)




  **From PyPI**
  ```commandline
  pip install python-dependency-resolver
  ```

  **From source**
  ```commandline
  rm build/ python_dependency_resolver.egg-info dist -Rf
  python3 setup.py bdist_wheel
  pip3 install -I dist/python_dependency_resolver-*-py3-none-any.whl
  ```



  ***Use case 1***
  ```mermaid
  flowchart TD
      B --> A

      C --> A
      C --> B

      D --> C
      D --> A

      E --> C
      E --> B

      F --> G
  ```
  ```python
  from python_dependency_resolver import DependencyResolver
  tree = {
      'A': [],
      'B': ['A'],
      'C': ['B', 'A'],
      'D': ['C', 'A'],
      'E': ['C', 'B'],
      'F': ['G'],
      'G': []
  }

  dependency_resolver = DependencyResolver()
  dependency_resolver.resolve(tree)

  ```

  ***Use case 2***
  ```mermaid
  flowchart TD
      B --> A
      A --> B
  ```
  ```python
  from python_dependency_resolver import DependencyResolver
  tree = {
      'A': ['B'],
      'B': ['A']
  }

  dependency_resolver = DependencyResolver()
  dependency_resolver.resolve(tree)

  ```

  ***Use case 3***
  ```mermaid
  flowchart TD
      B --> A
      C --> A
  ```
  ```python
  from python_dependency_resolver import DependencyResolver
  tree = {
      'B': ['A'],
      'C': ['A'],
      
  }

  dependency_resolver = DependencyResolver()
  dependency_resolver.resolve(tree)

  ```

  **Documentation**
  - <https://www.electricmonk.nl/log/2008/08/07/dependency-resolving-algorithm/>
  - <http://mamchenkov.net/wordpress/2016/11/22/dependency-resolution-with-graphs-in-php/>


  **Anthony K GROSS**
  - <http://anthonykgross.fr>
  - <https://twitter.com/anthonykgross>
  - <https://github.com/anthonykgross>

  **Joshua Behrens**
  - <https://github.com/JoshuaBehrens>


  Code and documentation copyright 2024. Code released under [the MIT license](https://github.com/anthonykgross/python-dependency-resolver/blob/main/LICENSE).


pkgId: c9050e8d5d1e6c4d880aa9bf3db3b15bc8454d659d938355a599eaace5b9b4b6
name: python-python-docs-theme-help
arch: noarch
version: 2024.12
epoch: 0
release: 1
summary: Development documents and examples for python-docs-theme
url: https://github.com/python/python-docs-theme/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-docs-theme-2024.12-1.src.rpm
location_href: Packages/python-python-docs-theme-help-2024.12-1.noarch.rpm
checksum_type: sha256
description:
  This is the theme for the Python documentation.

  Note that when adopting this theme, you're also borrowing an element of the
  trust and credibility established by the CPython core developers over the
  years. That's fine, and you're welcome to do so for other Python community
  projects if you so choose, but please keep in mind that in doing so you're also
  choosing to accept some of the responsibility for maintaining that collective
  trust.

  To use the theme, install it into your docs build environment via `pip`
  (preferably in a virtual environment).




  To use this theme, add the following to `conf.py`:

  - `html_theme = 'python_docs_theme'`

  - `html_sidebars`, defaults taken from https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_sidebars



  See a demo of the CPython docs using this theme:

  - https://python-docs-theme-previews.readthedocs.io

  The kitchen sink is a showcase of every Sphinx feature:

  - https://sphinx-themes.org/sample-sites/python-docs-theme/kitchen-sink/


pkgId: 937e00c2c18dd72d9c43d68bf3addd70391b7b891df4bbd9ef19b06b4cd7e88e
name: python-python-dom-help
arch: noarch
version: 0.2.2
epoch: 0
release: 1
summary: Development documents and examples for python-dom
url: https://github.com/xpodev/pydom
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-dom-0.2.2-1.src.rpm
location_href: Packages/python-python-dom-help-0.2.2-1.noarch.rpm
checksum_type: sha256
description:
  See [Seamless](https://seamless.rtfd.io) for a more complete and up-to-date implementation of this idea.


pkgId: 227f441c1f7bfe9012ec03c7c25e9ddb32fd2464731f3cd6d1faf647e68ef770
name: python-python-engineio-help
arch: noarch
version: 4.11.1
epoch: 0
release: 1
summary: Development documents and examples for python-engineio
url: https://github.com/miguelgrinberg/python-engineio
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-engineio-4.11.1-1.src.rpm
location_href: Packages/python-python-engineio-help-4.11.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Build status](https://github.com/miguelgrinberg/python-engineio/workflows/build/badge.svg)](https://github.com/miguelgrinberg/python-engineio/actions) [![codecov](https://codecov.io/gh/miguelgrinberg/python-engineio/branch/main/graph/badge.svg)](https://codecov.io/gh/miguelgrinberg/python-engineio)
  Python implementation of the `Engine.IO` realtime client and server.


pkgId: f2df7933579e39e6b8a1132a7b48144062d81e83ed3674cbb7cbb324613c8f4f
name: python-python-esios-help
arch: noarch
version: 0.2.6
epoch: 0
release: 1
summary: Development documents and examples for python-esios
url: https://github.com/datons/python-esios
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-esios-0.2.6-1.src.rpm
location_href: Packages/python-python-esios-help-0.2.6-1.noarch.rpm
checksum_type: sha256
description:
  ESIOS API is a service provided by the Spanish electricity system operator (REE) that offers access to a wide range of data related to the electricity market in Spain.

  This library provides a simple interface to download and preprocess the data from the ESIOS API.



  ```shell
  pip install python-esios
  ```



  Ask for a personal token to access the ESIOS API following the [instructions from REE](https://www.esios.ree.es/es/pagina/api).





  ```python
  TOKEN = '343sdfewe342309gjarijgwoiret834383434524...'
  TOKEN = '<YOUR_TOKEN>'
  ```

  Then, set the token in the environment variable `ESIOS_API_KEY`.

  ```python
  import os
  os.environ['ESIOS_API_KEY'] = TOKEN
  ```



  ```python
  from esios import ESIOSClient
  client = ESIOSClient()
  ```



  ```python
  endpoint = client.endpoint(name=?)
  ```

  In the tutorials below, you will learn how to download, preprocess, and visualize the data from the following endpoints:

  - [Indicators](https://github.com/datons/python-esios/blob/main/examples/30_Indicators/0_Steps/B1_Download.ipynb)
  - [Archives](https://github.com/datons/python-esios/blob/main/examples/20_Archives/0_Steps/B1_Download.ipynb)


pkgId: e76e009c48fdadc2fc0e9dc22119275ccdc3da408f65d70f1be23c56014e6c4f
name: python-python-freeipa-help
arch: noarch
version: 1.0.9
epoch: 0
release: 1
summary: Development documents and examples for python-freeipa
url: https://pypi.org/project/python-freeipa/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-freeipa-1.0.9-1.src.rpm
location_href: Packages/python-python-freeipa-help-1.0.9-1.noarch.rpm
checksum_type: sha256
description:
  python-freeipa is lightweight FreeIPA client.
  API documentation: https://python-freeipa.readthedocs.io/


pkgId: 2c94d5f173ccf55f27587e1389abaf8eb3acdbe7da622dc2b477193f345360f0
name: python-python-gitlab-help
arch: noarch
version: 5.2.0
epoch: 0
release: 1
summary: Development documents and examples for python-gitlab
url: https://github.com/python-gitlab/python-gitlab
rpm_license: LGPL-3.0-or-later
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-gitlab-5.2.0-1.src.rpm
location_href: Packages/python-python-gitlab-help-5.2.0-1.noarch.rpm
checksum_type: sha256
description:
  ``python-gitlab`` is a Python package providing access to the GitLab APIs.
  It includes a client for GitLab's v4 REST API, synchronous and asynchronous GraphQL API
  clients, as well as a CLI tool (``gitlab``) wrapping REST API endpoints.


pkgId: 121ac66f071ce46b801b7c61ab8818f509fb0688eb6a2477e134210e18db9ef8
name: python-python-helpscout-help
arch: noarch
version: 2.0.1
epoch: 0
release: 1
summary: Development documents and examples for python-helpscout
url: https://pypi.org/project/python-helpscout/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-helpscout-2.0.1-1.src.rpm
location_href: Packages/python-python-helpscout-help-2.0.1-1.noarch.rpm
checksum_type: sha256
description:
  This package contains a wrapper to query Help Scout's API.
  The package tries to be as general and assume as little as possible about the
  API. Therefore, it will allow any endpoint to be requested and objects and
  types will be created on the fly.

  Information about the available endpoints, objects and other stuff can be found
  on the [API's documentation](https://developer.helpscout.com/mailbox-api/).
  The client contains as little internal knowledge of the API as possible, mostly
  authentication, pagination and how are objects returned.

  In order to handle pagination calls to API are done inside a generator.
  As a consequence, even post and deletes have to be "nexted" if using the *hit_*
  method.



  Python 3.11+



  Using PyPI into a [venv](https://docs.python.org/3/library/venv.html):
  ```bash
  pip install python-helpscout --require-virtualenv`
  ```

  Manually by cloning the repository and executing pip into a [venv](https://docs.python.org/3/library/venv.html):
  ```bash
  pip install . --require-virtualenv`
  ```




  In order to use the API you need an app id and app secret.

  More about credentials can be found in
  [Help Scout's documentation](https://developer.helpscout.com/mailbox-api/overview/authentication/).



  The general use is by instantiating a client and then hitting the API by
  doing `client.<endpoint>.<method>(<resource_id>, <params>)`. Where:

  * *Endpoint* is one of the endpoints defined in the API's documentation.
  * *Method* is one of get, post, patch, put or delete as defined in the API.
  * *Resource id* can be None or the id of the specific resource to access,
    update or delete. E.g.: a conversation id.
  * *Params* can be None, a string or a dictionary with the parameters to access
    in the get method or the data to send otherwise.

  To access attributes of specific resources, like the tags of a conversation,
  you can do:
  `client.<endpoint>[<resource_id>].<attribute>.<method>(<resource_id>, <params>)`.

  Example: `client.conversations[212109].threads.get()`





  ```python
  > from helpscout import HelpScout
  > hs = HelpScout(app_id='ax0912n', app_secret='axon129')
  > users = hs.users.get()
  > users[0]
  User(id=12391,
       firstName="John",
       lastName="Doe",
       email="john.doe@gmail.com",
       role="user",
       timezone="America/New_York",
       createdAt="2019-01-03T19:00:00Z",
       updatedAt="2019-05-20T18:00:00Z",
       type="user",
       mention="johnny",
       initials="JD",
       _links={'self': {'href': 'https://api.helpscout.net/v2/users/12391'}})
  > users[1].id
  9320
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='laknsdo', app_secret='12haosd9')
  > for mailbox in hs.hit('mailboxes', 'get'):
  >      print(mailbox)
  {'mailboxes': [
     {'id': 1930,
      'name': 'Fake Support',
      'slug': '0912301u',
      'email': 'support@fake.com',
      'createdAt': '2018-12-20T20:00:00Z',
      'updatedAt': '2019-05-01T16:00:00Z',
      '_links': {
        'fields': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/fields/'},
        'folders': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/folders/'},
        'self': {'href': 'https://api.helpscout.net/v2/mailboxes/1930'}
      }
     }
   ]
  }
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='laknsdo', app_secret='12haosd9')
  > for mailbox in hs.hit_('mailboxes', 'get'):
  >      print(mailbox)
  {'mailboxes': [
     {'id': 1930,
      'name': 'Fake Support',
      'slug': '0912301u',
      'email': 'support@fake.com',
      'createdAt': '2018-12-20T20:00:00Z',
      'updatedAt': '2019-05-01T16:00:00Z',
      '_links': {
        'fields': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/fields/'},
        'folders': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/folders/'},
        'self': {'href': 'https://api.helpscout.net/v2/mailboxes/1930'}
      }
     }
   ]
  }
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='laknsdo', app_secret='12haosd9')
  > for mailbox in hs.hit('mailboxes', 'get', resource_id=1930):
  >      print(mailbox)
  {'id': 1930,
   'name': 'Fake Support',
   'slug': '0912301u',
   'email': 'support@fake.com',
   'createdAt': '2018-12-20T20:00:00Z',
   'updatedAt': '2019-05-01T16:00:00Z',
   '_links': {
     'fields': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/fields/'},
     'folders': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/folders/'},
     'self': {'href': 'https://api.helpscout.net/v2/mailboxes/1930'}
   }
  }
  ```



  In this case, you will have to select the first element of the list yourself,
  as it is not quite clear if one or more elements should be expected from the
  api depending on the endpoint.

  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='laknsdo', app_secret='12haosd9')
  > print(hs.mailboxes[1930].get())
  Mailbox(
   id=1930,
   name='Fake Support',
   slug='0912301u',
   email='support@fake.com',
   createdAt='2018-12-20T20:00:00Z',
   updatedAt='2019-05-01T16:00:00Z',
   _links={
     'fields': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/fields/'},
     'folders': {'href': 'https://api.helpscout.net/v2/mailboxes/1930/folders/'},
     'self': {'href': 'https://api.helpscout.net/v2/mailboxes/1930'}
   }
  )
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='asd12', app_secret='onas912')
  > params = {'status': 'active'}
  > conversations = hs.conversations.get(params=params)
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='asdon123', app_secret='asdoin1')
  > params = 'query=(createdAt:[2019-06-20T00:00:00Z TO 2019-06-22T23:59:59Z])'
  > conversations = hs.conversations.get(params=params)
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='asdon123', app_secret='asdoin1')
  > conversation_id = 10
  > hs.conversations.delete(resource_id=conversation_id)
  ```



  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='asdon123', app_secret='asdoin1')
  > report_url = 'reports/happiness?start=2019-06-01T00:00:00Z&end=2019-06-15:00:00Z'
  > next(hs.hit_(report_url, 'get'))
  ...
  ```

  or

  ```python
  > from helpscout.client import HelpScout
  > hs = HelpScout(app_id='asdon123', app_secret='asdoin1')
  > report_url = 'reports/happiness?start=2019-06-01T00:00:00Z&end=2019-06-15:00:00Z'
  > hs.hit(report_url, 'get')
  ...
  ```



  ```python
  > from helpscout import HelpScout
  > helpscout_client = HelpScout(app_id='ax0912n', app_secret='axon129')
  > conversation_id = 999
  > endpoint = 'conversations/%s/tags' % conversation_id
  > data = {'tags': conversation_tags}
  > helpscout_client.hit(endpoint, 'put', data=data)
  ```

  or

  ```python
  > from helpscout import HelpScout
  > helpscout_client = HelpScout(app_id='ax0912n', app_secret='axon129')
  > conversation_id = 999
  > endpoint = 'conversations/%s/tags' % conversation_id
  > data = {'tags': conversation_tags}
  > next(helpscout_client.hit_(endpoint, 'put', data=data))
  ```

  or

  ```python
  > from helpscout import HelpScout
  > helpscout_client = HelpScout(app_id='ax0912n', app_secret='axon129')
  > conversation_id = 999
  > data = {'tags': conversation_tags}
  > helpscout_client.conversations[999].tags.put(data=data)
  ```


pkgId: bc17ec7d29379af08d00c67366951e3ae36313b6eaf3b2f6725b8dd8f3696778
name: python-python-hiccup-help
arch: noarch
version: 0.3.1
epoch: 0
release: 1
summary: Development documents and examples for python-hiccup
url: https://pypi.org/project/python-hiccup/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-hiccup-0.3.1-1.src.rpm
location_href: Packages/python-python-hiccup-help-0.3.1-1.noarch.rpm
checksum_type: sha256
description:
  Python Hiccup is a library for representing HTML using plain Python data structures.

  [![CircleCI](https://dl.circleci.com/status-badge/img/gh/DavidVujic/python-hiccup/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/DavidVujic/python-hiccup/tree/main)

  [![CodeScene Code Health](https://codescene.io/projects/59968/status-badges/code-health)](https://codescene.io/projects/59968)

  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=DavidVujic_python-hiccup&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=DavidVujic_python-hiccup)


  This is a Python implementation of the Hiccup syntax. Python Hiccup is a library for representing HTML in Python.
  Using `list` or `tuple` to represent HTML elements, and `dict` to represent the element attributes.

  _This project started out as a fun coding challenge, and now evolving into something useful for Python Dev teams._


  Create server side HTML using plain Python data structures.
  This library should also be possible to combine with PyScript, but I haven't tested that out yet.



  Python:
  ``` python
  from python_hiccup.html import render

  render(["div", "Hello world!"])
  ```

  The output will be a string: `<div>Hello world!</div>`


  With Hiccup, you can create HTML in a programmatic style.
  To render HTML like:
  ``` html
  <ul>
      <li>one</li>
      <li>two</li>
      <li>three</li>
  </ul>
  ```

  with Python:
  ``` python
  def todo(data: list) -> list:
      return [["li", i] for i in data]

  data = todo(["one", "two", "three"])

  render(["ul", data])
  ```



  Python:
  ``` python
  ["div", "Hello world!"]
  ```

  The HTML equivalent is:
  ``` html
  <div>Hello world!</div>
  ```

  Writing a nested HTML structure, using Python Hiccup:

  ``` python
  ["div", ["span", ["strong", "Hello world!"]]]
  ```

  The HTML equivalent is:
  ``` html
  <div>
      <span>
          <strong>Hello world!</strong>
      </span>
  </div>
  ```


  Adding attributes to an element, such as CSS id and classes, using Python Hiccup:

  ``` python
  ["div", {"id": "foo", "class": "bar"}, "Hello world!"]
  ```

  or, using a more concise syntax:
  ``` python
  ["div#foo.bar", "Hello world!"]
  ```

  The HTML equivalent is:
  ``` html
  <div id="foo" class="bar">Hello world!</div>
  ```

  Adding valueless attributes to elements, such as the `async` or `defer`, by using Python `set`:
  ``` python
  ["!DOCTYPE", {"html"}]
  ["script", {"async"}, {"src": "js/script.js"}]
  ```

  The HTML equivalent is:
  ``` html
  <!DOCTYPE html>
  <script async src="js/script.js"></script>
  ```



  - [Hiccup](https://github.com/weavejester/hiccup) - the original implementation, for Clojure.



  - [pyhiccup](https://github.com/nbessi/pyhiccup)
  - [piccup](https://github.com/alexjuda/piccup)




  Running lint:

  ``` shell
  uv run ruff check
  ```

  Running tests:

  ``` shell
  uv run pytest
  ```


pkgId: f3f31499fa98aa5f8b0a905509e54f0f00e9c111d5c93dd803c666aa232496bd
name: python-python-ifconfig-me-help
arch: noarch
version: 0.0.1
epoch: 0
release: 1
summary: Development documents and examples for python-ifconfig-me
url: https://pypi.org/project/python-ifconfig-me/
rpm_license: GPL
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-ifconfig-me-0.0.1-1.src.rpm
location_href: Packages/python-python-ifconfig-me-help-0.0.1-1.noarch.rpm
checksum_type: sha256
description:
  This is a simple python library used to detect the current public ip.

  - https://checkip.amazonaws.com
  - https://icanhazip.com
  - https://ifconfig.co/ip
  - https://ifconfig.me/ip
  - https://ipecho.net/plain
  - https://ipinfo.io/ip


pkgId: 5acc8394dc5b258a186c2bf29326e23eb3c7a3963d2412f2f41959941f7402e5
name: python-python-irodsclient-help
arch: noarch
version: 3.0.0
epoch: 0
release: 1
summary: Development documents and examples for python-irodsclient
url: https://github.com/irods/python-irodsclient
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-irodsclient-3.0.0-1.src.rpm
location_href: Packages/python-python-irodsclient-help-3.0.0-1.noarch.rpm
checksum_type: sha256
description:
  [iRODS](https://www.irods.org) is an open source distributed data management system. This is a client API implemented in Python.
  Currently supported:
  -   Python 3.6 or later
  -   Establish a (secure) connection to iRODS
  -   Authenticate via password, GSI, PAM
  -   GenQuery and Specific Queries
  -   GenQuery2
  -   Manage collections, data objects, and permissions
      -   Checksum data objects
      -   Replicate data objects
      -   Parallel PUT/GET data objects
      -   Read, write, and seek operations
      -   Register files and directories
  -   Manage users and groups
  -   Manage resources
  -   Manage and execute iRODS rules
  -   Manage metadata
  -   Manage ticket-based access


pkgId: 89197b8fc001d92a904127acb331bace248d8dbcbc175f881aebd870aeb9c779
name: python-python-json-logger-help
arch: noarch
version: 3.2.1
epoch: 0
release: 1
summary: Development documents and examples for python-json-logger
url: https://nhairs.github.io/python-json-logger
rpm_license: BSD-2-Clause License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-json-logger-3.2.1-1.src.rpm
location_href: Packages/python-python-json-logger-help-3.2.1-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPi](https://img.shields.io/pypi/v/python-json-logger.svg)](https://pypi.python.org/pypi/python-json-logger/)
  [![PyPI - Status](https://img.shields.io/pypi/status/python-json-logger)](https://pypi.python.org/pypi/python-json-logger/)
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/python-json-logger)](https://pypi.python.org/pypi/python-json-logger/)
  [![Python Versions](https://img.shields.io/pypi/pyversions/python-json-logger.svg)](https://github.com/nhairs/python-json-logger)
  [![License](https://img.shields.io/github/license/nhairs/python-json-logger.svg)](https://github.com/nhairs/python-json-logger)
  ![Build Status](https://github.com/nhairs/python-json-logger/actions/workflows/test-suite.yml/badge.svg)



  Python JSON Logger enables you produce JSON logs when using Python's `logging` package.

  JSON logs are machine readable allowing for much easier parsing and ingestion into log aggregation tools.




  - [Documentation](https://nhairs.github.io/python-json-logger/latest/)
  - [Quickstart Guide](https://nhairs.github.io/python-json-logger/latest/quickstart/)
  - [Change Log](https://nhairs.github.io/python-json-logger/latest/changelog/)
  - [Contributing](https://nhairs.github.io/python-json-logger/latest/contributing/)



  This project is licensed under the BSD 2 Clause License - see [`LICENSE`](https://github.com/nhairs/python-json-logger/blob/main/LICENSE)



  This project was originally authored by [Zakaria Zajac](https://github.com/madzak) and our wonderful [contributors](https://github.com/nhairs/python-json-logger/graphs/contributors)

  It is currently maintained by:

  - [Nicholas Hairs](https://github.com/nhairs) - [nicholashairs.com](https://www.nicholashairs.com)


pkgId: 1bc52fcb66a2e7a446285cc58f890cb3c778b1159ae45fc7ac4032e6967bcccd
name: python-python-keycloak-help
arch: noarch
version: 5.1.0
epoch: 0
release: 1
summary: Development documents and examples for python-keycloak
url: https://pypi.org/project/python-keycloak/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-keycloak-5.1.0-1.src.rpm
location_href: Packages/python-python-keycloak-help-5.1.0-1.noarch.rpm
checksum_type: sha256
description:
  [![CircleCI](https://github.com/marcospereirampj/python-keycloak/actions/workflows/daily.yaml/badge.svg)](https://github.com/marcospereirampj/python-keycloak/)
  [![Documentation Status](https://readthedocs.org/projects/python-keycloak/badge/?version=latest)](http://python-keycloak.readthedocs.io/en/latest/?badge=latest)



  **python-keycloak** is a Python package providing access to the Keycloak API.



  Install via PyPI:

  `$ pip install python-keycloak`



  Please report bugs and feature requests at
  https://github.com/marcospereirampj/python-keycloak/issues



  The documentation for python-keycloak is available on [readthedocs](http://python-keycloak.readthedocs.io).



  The library strives to always support Keycloak's latest version. Additionally to that, we also support 5 latest major versions of Keycloak,
  in order to give our user base more time for smoother upgrades.

  Current list of supported Keycloak versions:

  - 26.X
  - 25.X
  - 24.X
  - 23.X
  - 22.X



  We only support Python versions that have active or security support by the Python Software Foundation. You can find the list of active Python versions [here](https://endoflife.date/python).



  ```python
  from keycloak import KeycloakOpenID


  keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/",
                                   client_id="example_client",
                                   realm_name="example_realm",
                                   client_secret_key="secret")


  config_well_known = keycloak_openid.well_known()


  auth_url = keycloak_openid.auth_url(
      redirect_uri="your_call_back_url",
      scope="email",
      state="your_state_info")


  access_token = keycloak_openid.token(
      grant_type='authorization_code',
      code='the_code_you_get_from_auth_url_callback',
      redirect_uri="your_call_back_url")



  token = keycloak_openid.token("user", "password")
  token = keycloak_openid.token("user", "password", totp="012345")


  token = keycloak_openid.exchange_token(token['access_token'], "my_client", "other_client", "some_user")


  userinfo = keycloak_openid.userinfo(token['access_token'])


  token = keycloak_openid.refresh_token(token['refresh_token'])


  keycloak_openid.logout(token['refresh_token'])
  ```



  ```python
  from keycloak import KeycloakAdmin
  from keycloak import KeycloakOpenIDConnection

  keycloak_connection = KeycloakOpenIDConnection(
                          server_url="http://localhost:8080/",
                          username='example-admin',
                          password='secret',
                          realm_name="master",
                          user_realm_name="only_if_other_realm_than_master",
                          client_id="my_client",
                          client_secret_key="client-secret",
                          verify=True)

  keycloak_admin = KeycloakAdmin(connection=keycloak_connection)


  new_user = keycloak_admin.create_user({"email": "example@example.com",
                                         "username": "example@example.com",
                                         "enabled": True,
                                         "firstName": "Example",
                                         "lastName": "Example"})



  new_user = keycloak_admin.create_user({"email": "example@example.com",
                                         "username": "example@example.com",
                                         "enabled": True,
                                         "firstName": "Example",
                                         "lastName": "Example"},
                                        exist_ok=False)


  new_user = keycloak_admin.create_user({"email": "example@example.com",
                                         "username": "example@example.com",
                                         "enabled": True,
                                         "firstName": "Example",
                                         "lastName": "Example",
                      "credentials": [{"value": "secret","type": "password",}]})
  ```

  For more details, see the documentation available on [readthedocs](http://python-keycloak.readthedocs.io).


pkgId: 7e53994cede5f3a8d7d7ea89388361b5dad86388a54f391300762b2960498a99
name: python-python-linstor
arch: noarch
version: 1.24.0
epoch: 0
release: 1
summary: Linstor python api
url: https://www.linbit.com
rpm_license: LGPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-linstor-1.24.0-1.src.rpm
location_href: Packages/python-python-linstor-1.24.0-1.noarch.rpm
checksum_type: sha256
description:
  This repository contains a Python library to communicate with a linstor controller.

  LINSTOR, developed by [LINBIT](https://www.linbit.com), is a software that manages DRBD replicated
  LVM/ZFS volumes across a group of machines. It maintains DRBD configuration on the participating machines.  It
  creates/deletes the backing LVM/ZFS volumes. It automatically places the backing LVM/ZFS volumes among the
  participating machines.


  A rendered html documentation for the LINSTOR Python API can be found [here](https://linbit.github.io/linstor-api-py/).


  Please read the user-guide provided at [docs.linbit.com](https://docs.linbit.com).


  For further products and professional support, please
  [contact](http://links.linbit.com/support) us.


  Releases generated by git tags on github are snapshots of the git repository at the given time. You most
  likely do not want to use these. They might lack things such as generated man pages, the `configure` script,
  and other generated files. If you want to build from a tarball, use the ones [provided by us](https://www.linbit.com/en/drbd-community/drbd-download/).


pkgId: f935b64666b89df35567c968981725f0f06636d645a16993973af1bfbae1a2c3
name: python-python-multipart-help
arch: noarch
version: 0.0.20
epoch: 0
release: 1
summary: Development documents and examples for python-multipart
url: https://github.com/Kludex/python-multipart
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-multipart-0.0.20-1.src.rpm
location_href: Packages/python-python-multipart-help-0.0.20-1.noarch.rpm
checksum_type: sha256
description:
  `python-multipart` is an Apache2-licensed streaming multipart parser for Python.
  Test coverage is currently 100%.

  Because streaming uploads are awesome for large files.


pkgId: fa89a1f25d46dd615fe8b7e65e5746d32f3d6d5c6de315f945915ac269268032
name: python-python-nicepay-help
arch: noarch
version: 1.0.2
epoch: 0
release: 1
summary: Development documents and examples for python-nicepay
url: https://github.com/nicepay-dev/python-nicepay
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-nicepay-1.0.2-1.src.rpm
location_href: Packages/python-python-nicepay-help-1.0.2-1.noarch.rpm
checksum_type: sha256
description:
  NICEPAY ❤️ Python!

  This is the Official Python API client / library for NICEPAY Payment API. Visit [Python Library](https://github.com/nicepay-dev/python-nicepay).
  More information about the product and see documentation at [NICEPAY Docs](https://docs.nicepay.co.id/) for more technical details.

  This library provides access to Nicepay BI SNAP and V2 APIs.
  - `SNAP`
  - `v2 Enterprise`
  - `v2 professional`


  You can clone or [download](https://github.com/nicepay-dev/python-nicepay) our source code, then import the folder manually into your project.

  Clone Repository :
  ```bash
  git clone https://github.com/nicepay-dev/python-nicepay.git
  ```


  **Language :**
  Python `v.3.11.9`

  **Library :**

  - `pycryptodome`
  - `requests`



  Get your credentials from [Nicepay Dashboard](http://103.20.51.40:8012/logIn.do)
  initialize Nicepay config



  Credentials used here are for testing purposes only [snap]
  ```bash
  _CLIENT_KEY = "IONPAYTEST"
  _PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAInJe1G22R2fMchIE6BjtYRqyMj6lurP/zq6vy79WaiGKt0Fxs4q3Ab4ifmOXd97ynS5f0JRfIqakXDcV/e2rx9bFdsS2HORY7o5At7D5E3tkyNM9smI/7dk8d3O0fyeZyrmPMySghzgkR3oMEDW1TCD5q63Hh/oq0LKZ/4Jjcb9AgMBAAECgYA4Boz2NPsjaE+9uFECrohoR2NNFVe4Msr8/mIuoSWLuMJFDMxBmHvO+dBggNr6vEMeIy7zsF6LnT32PiImv0mFRY5fRD5iLAAlIdh8ux9NXDIHgyera/PW4nyMaz2uC67MRm7uhCTKfDAJK7LXqrNVDlIBFdweH5uzmrPBn77foQJBAMPCnCzR9vIfqbk7gQaA0hVnXL3qBQPMmHaeIk0BMAfXTVq37PUfryo+80XXgEP1mN/e7f10GDUPFiVw6Wfwz38CQQC0L+xoxraftGnwFcVN1cK/MwqGS+DYNXnddo7Hu3+RShUjCz5E5NzVWH5yHu0E0Zt3sdYD2t7u7HSr9wn96OeDAkEApzB6eb0JD1kDd3PeilNTGXyhtIE9rzT5sbT0zpeJEelL44LaGa/pxkblNm0K2v/ShMC8uY6Bbi9oVqnMbj04uQJAJDIgTmfkla5bPZRR/zG6nkf1jEa/0w7i/R7szaiXlqsIFfMTPimvRtgxBmG6ASbOETxTHpEgCWTMhyLoCe54WwJATmPDSXk4APUQNvX5rr5OSfGWEOo67cKBvp5Wst+tpvc6AbIJeiRFlKF4fXYTb6HtiuulgwQNePuvlzlt2Q8hqQ=="
  _CLIENT_SECRET = "33F49GnCMS1mFYlGXisbUDzVf2ATWCl9k3R++d5hDd3Frmuos/XLx8XhXpe+LDYAbpGKZYSwtlyyLOtS/8aD7A=="
  ```


  ```bash
  from data.builder.snap import builderAccessToken
  from service.snapService import SnapService

  class testAccessToken:
      bodyCreateToken = (
          builderAccessToken.BuildAccessToken()
          .setGrantType("client_credentials")
          .setAdditionalInfo("")
          .build()
      )

  Result = SnapService.serviceOAUTH(bodyCreateToken.jsonAccessToken())
  ```
  Here's the result
  ```bash
  AccessToken : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJJT05QQVlURVNUIiwiaXNzIjoiTklDRVBBWSIsIm5hbWUiOiJCRElOIiwiZXhwIjoiMjAyNC0xMS0xMlQyMDowNTo1NFoifQ==.RfeDzCn7sk5VT54f8NTPnbbeQvaPmQg6wtLWXIbmBCI=
  ```


  ```bash
  from data.builder.snap import builderVirtualAccount
  from data.builder.snap import builderAccessToken
  from constants.constantsEndpoint import ConstantsEndpoints
  from service.snapService import SnapService
  from util.utilLogging import Log

  log = Log()

  class testVirtualAccount:
      bodyCreateToken = (
          builderAccessToken.BuildAccessToken()
          .setGrantType("client_credentials")
          .setAdditionalInfo("")
          .build()
      )

      totalAmount = {"value": "10000.00",
                     "currency": "IDR"
                     }

      additionalInfo = {"bankCd": "BRIN",
                        "goodsNm": "Merchant Goods 1",
                        "dbProcessUrl": "https://webhook.site/e15ef201-98a9-428c-85d4-a0c6458939c3",
                        "vacctValidDt": "",
                        "vacctValidTm": "",
                        "msId": "",
                        "msFee": "",
                        "msFeeType": "",
                        "mbFee": "",
                        "mbFeeType": ""
                        }

      bodyCreateVA = (
          builderVirtualAccount.BuildCreateVA()
          .setPartnerServiceId("")
          .setCustomerNo("")
          .setVirtualAccountNo("")
          .setVirtualAccountName("John Doe")
          .setTrxId("123")
          .setTotalAmount(totalAmount)
          .setAdditionalInfo(additionalInfo)
          .build()
      )

      result = SnapService.serviceTransaction(bodyCreateToken.jsonAccessToken(),
                                              bodyCreateVA.jsonVACreate(),
                                              ConstantsEndpoints.createVA())
  ```
  Here's the result
  ```bash
  body request :
  {"partnerServiceId": "", "customerNo": "", "virtualAccountNo": "", "virtualAccountName": "John Doe", "trxId": "123", "totalAmount": {"value": "10000.00", "currency": "IDR"}, "additionalInfo": {"bankCd": "BRIN", "goodsNm": "Merchant Goods 1", "dbProcessUrl": "https://webhook.site/e15ef201-98a9-428c-85d4-a0c6458939c3", "vacctValidDt": "", "vacctValidTm": "", "msId": "", "msFee": "", "msFeeType": "", "mbFee": "", "mbFeeType": ""}}

  body response :
  {"responseCode": "2002700", "responseMessage": "Successful", "virtualAccountData": {"partnerServiceId": "", "customerNo": "", "virtualAccountNo": "884800040254370152", "virtualAccountName": "John Doe", "trxId": "123", "totalAmount": {"value": "10000.00", "currency": "IDR"}, "additionalInfo": {"msId": "", "msFee": "", "msFeeType": "", "mbFee": "", "mbFeeType": "", "bankCd": "BRIN", "tXidVA": "IONPAYTEST02202411130254370152", "goodsNm": "Merchant Goods 1", "vacctValidDt": "20241115", "vacctValidTm": "025437"}}}
  ```

  - Import
  ```bash
  import hashlib
  import hmac
  from Crypto.Hash import SHA256
  from Crypto.PublicKey import RSA
  from Crypto.Signature import PKCS1_v1_5
  from util.utilLogging import Log
  ```

  - for Access Token
  ```bash
  class Signature:
      log = Log()

      @staticmethod
      def signSHA256RSA(stringToSign, privateKey):
          try:
              b1 = base64.b64decode(privateKey)
              key = RSA.importKey(b1)
              signer = PKCS1_v1_5.new(key)
              digest = SHA256.new()
              digest.update(stringToSign.encode('utf-8'))
              signature = signer.sign(digest)
              hexSignature = base64.b64encode(signature).decode('utf-8')
              return hexSignature
          except Exception as e:
              Signature.log.error("Error Generate Signature:" + e)
              return ''


  @staticmethod
      def sha256EncodeHex(data):
          sha256Hash = hashlib.sha256(data.encode('utf-8')).digest()
          hexEncoded = sha256Hash.hex()
          return hexEncoded
  ```
  - for Signature Service
  ```bash
  @staticmethod
      def getSignature(accessToken, requestBody, endpoint, timestamp, staticKey, httpMethod):
          Signature.log.info("util - Request Endpoint : " + endpoint)
          data = f"{httpMethod}:{endpoint}:{accessToken}:{requestBody}:{timestamp}"
          Signature.log.info("util - StringDataToSign: " + data)
          try:
              sign = Signature.hmacSHA512EncodeBase64(staticKey, data)
              Signature.log.info("util - Signature: " + sign)
              return sign
          except:
              Signature.log.error("Error Generate Signature - getSignature")

   @staticmethod
      def hmacSHA512EncodeBase64(key, data):
          hmacObj = hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha512)
          hmacBytes = hmacObj.digest()
          base64Encoded = base64.b64encode(hmacBytes).decode('utf-8')
          return base64Encoded
  ```
  Here's the result
  ```bash
  StringDataToSign: POST:/api/v1.0/transfer-va/create-va:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJJT05QQVlURVNUIiwiaXNzIjoiTklDRVBBWSIsIm5hbWUiOiJCRElOIiwiZXhwIjoiMjAyNC0xMS0xMlQyMDowOTozN1oifQ==.4djzd9Z1jZE8AXkFRmCrxm8IMfdhuk2RjFz0LSzRXIY=:d04af00b1f17c7045dde178f377b77e385a3d6cecd22fe6822de1ee053489078:2024-11-13T02:54:37+07:00

  Signature: w7BpJ392jzRkAgvWC79Zawvztm/l1D+bxIJWgGq59xih0SuAi4PoTtUAUIXcOLuvZ3pYaSs8Mc1QZxhbVMMBqQ==
  ```

  You can view a code example in the following **[UtilSignature.py](https://github.com/nicepay-dev/python-nicepay/blob/main/util/utilSignature.py)** class.


  Integration test are available for SNAP :
  - [Virtual Account Regist Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testVirtualAccount.py)
  - [Virtual Account Inquiry Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testVirtualAccountInquiry.py)
  - [Virtual Account Cancel Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testVirtualAccountCancel.py)
  - [E-Wallet Regist Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testDirectDebit.py)
  - [E-Wallet Inquiry Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testDirectDebitInquiry.py)
  - [E-Wallet Refund Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testDirectDebitRefund.py)
  - [Qris Regist Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testQris.py)
  - [Qris Inquiry Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testQrisInquiry.py)
  - [Qris Refund Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testQrisRefund.py)
  - [Payout Regist Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayout.py)
  - [Payout Inquiry Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayoutInquiry.py)
  - [Payout Approve Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayoutApprove.py)
  - [Payout Reject Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayoutReject.py)
  - [Payout Cancel Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayoutReject.py)
  - [Payout Balance Inquiry Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/snap/testPayoutBalanceInquiry.py)


  - [Virtual Account V2 Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/v2/enterprise/testVirtualAccount.py)
  - [Inquiry V2 Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/v2/enterprise/testInquiry.py)
  - [Payment V2 Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/v2/enterprise/testPayment.py)
  - [Cancel V2 Unit Test](https://github.com/nicepay-dev/python-nicepay/blob/main/test/v2/enterprise/testCancel.py)

  or you can view a example in the following [V2 APIs](https://github.com/nicepay-dev/python-nicepay/tree/main/test/v2)


  - [Nicepay Docs](https://docs.nicepay.co.id/)
  - [Nicepay Dashboard](http://103.20.51.40:8012/logIn.do)
  - [SNAP documentation](https://docs.nicepay.co.id/nicepay-api-snap)
  - [V2 Enterprise documentation](https://docs.nicepay.co.id/nicepay-api-v2-payment-api)
  - [V2 Professional documentation](https://docs.nicepay.co.id/nicepay-api-v2-checkout-api)


  Can't find answer you looking for? email to `cs@nicepay.co.id`

  **Thank you and Have a NICEPAY!**

  ![Logo](https://nicepay.co.id/wp-content/uploads/2019/09/logo-150.svg )


pkgId: d838f9447907cfb7525e419b53042759eca920efe18bc83dd7d5b0f6273ae97b
name: python-python-odisi-help
arch: noarch
version: 0.7.1
epoch: 0
release: 1
summary: Development documents and examples for python-odisi
url: https://pypi.org/project/python-odisi/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-odisi-0.7.1-1.src.rpm
location_href: Packages/python-python-odisi-help-0.7.1-1.noarch.rpm
checksum_type: sha256
description:
  This python package defines a reader and helper methods to handle data exported from the Luna ODiSI 6000 optical measuring system.
  It allows for an easier retrieval of data corresponding to each segment, as well as the possibility to interpolate the results based on additional measurements, such as experimental load.
  Doing this manually requires some amount of python code, which can be avoided by using this package.



  Install as usual:

  ```bash
  pip install python-odisi
  ```





  The library can be used to read files in the following manner:

  ```python
  from odisi import read_tsv

  d = read_tsv("data_gages.tsv")


  gages = d.gages

  segments = d.segments

  d_gage = d.get_gage("A")

  d_seg, x_seg = d.get_segment("Seg-1")
  ```



  The package allows to easily interpolate an external signal (e.g. the load during the test).
  For this, two strategies can be followed:



  ```python
  import polars as pl

  load = pl.read_csv("load_data.csv")

  d.interpolate(load.select(pl.col("time")))
  ```

  Then you should be able to plot your data against the measured load:

  ```python
  import matplotlib.pyplot as plt

  d_gage = d.get_gage("A")

  a_load = load.select(pl.col("load")).to_series()

  plt.plot(d_gage, a_load)
  ```



  ```python
  import polars as pl

  load = pl.read_csv("load_data.csv")

  new_load = d.interpolate_signal(data=load, time="time")
  ```

  Then you should be able to plot your data against the measured load:

  ```python
  import matplotlib.pyplot as plt

  d_gage = d.get_gage("A")

  a_load = new_load.select(pl.col("load")).to_series()

  plt.plot(d_gage, a_load)
  ```

  In both cases it is assumed that the timestamps from both files are synchronized, i.e. that both measuring computers have synchronized clocks.



  It is probable that the measurements from both data sources (ODiSI and additional system) were started at different times.
  This produces some annoyances during the processing of the data due to the mismatch in datapoints.
  To remedy this, the option `clip=True` can be passed to both interpolation methods (`interpolate(...)` and `interpolate_signal(...)`), which will clip the data to the common time interval between both signals.

  ```python
  import polars as pl

  load = pl.read_csv("load_data.csv")

  d.interpolate(load.select(pl.col("time")), clip=True)
  ```



  The data of all segments can be exported to individual csv-files with the following code:

  ```python
  d.export_segments_csv(prefix="my_experiment", path="data_folder")
  ```



  The package includes a test suite which should be run with pytest:

  ```bash
  poetry run pytest
  ```



  ```bib
  @software{Tapia_2023,
      author = {Tapia Camú, Cristóbal},
      title = {{python-odisi: Import data generated by the Luna ODiSI System}},
      url = {https://github.com/cristobaltapia/python-odisi},
      version = {v0.3},
      year = {2023},
  }
  ```


pkgId: 8e2d259531465127876a82e43f00684aed4deb3bb7f011aac1d4819d92790052
name: python-python-pvm-help
arch: noarch
version: 1.0.4
epoch: 0
release: 1
summary: Development documents and examples for python-pvm
url: https://github.com/workingwheel/python-package-version-manager
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-pvm-1.0.4-1.src.rpm
location_href: Packages/python-python-pvm-help-1.0.4-1.noarch.rpm
checksum_type: sha256
description:
  A Python utility for managing package versions with an interactive CLI interface. This tool helps you monitor, update, and backup your Python packages, whether they're project-specific or globally installed.


  Want to get started quickly? Here's what you need to know:

  1. Install the tool:
  ```bash
  pip install python-pvm
  ```

  2. Run it:
  ```bash
  python-pvm
  ```

  3. Common Tasks:
     - **Check for Updates**: Look for packages highlighted in cyan - these need updates
     - **Update Packages**: Choose "Update all packages" (don't worry, it creates automatic backups)
     - **Restore if Needed**: Use "Restore from backup" if something goes wrong

  That's it! Keep reading for more detailed information.



  - 📊 Interactive CLI with rich terminal formatting
  - 🔍 Check both project-specific and global package versions
  - 🔄 Detect and update outdated packages
  - 💾 Backup and restore package versions
  - 📈 Progress tracking with visual indicators
  - 🎨 Color-coded status display
  - ⚡ Parallel processing for package information retrieval



  - Python 3.12 or higher
  - Required packages (automatically installed):
    - rich
    - inquirer
    - packaging




  ```bash
  pip install python-pvm
  ```


  ```bash
  git clone https://github.com/workingwheel/python-package-version-manager.git
  cd python-package-version-manager
  pip install -e .
  ```



  Run the tool using:
  ```bash
  python-pvm
  ```

  The interactive menu will guide you through the following options:

  1. Choose scope:
     - Project Libraries (checks packages in requirements.txt)
     - Global Libraries (checks all installed packages)

  2. Available actions:
     - Update all packages
     - Create backup only
     - Restore from backup
     - Exit



  Package Status Display
  - Shows package name, current version, latest version, and description
  - Color-coded status indicators:
    - Green: Up to date
    - Red: Outdated
    - Cyan highlight: Outdated packages
  - Sorted display with outdated packages shown first

  Backup System
  - Automatic backup creation before updates
  - Manual backup creation option
  - Restore from previous backups
  - Backups stored in `package_backups` directory with timestamps

  Progress Tracking
  - Visual progress bars for updates and restores
  - Time elapsed tracking
  - Spinner animations for ongoing processes



  Main Functions

  `main()` The entry point of the application. Handles the interactive menu and orchestrates the overall flow of the program.

  `check_project_packages(console, requirements_file)` Analyzes packages listed in a requirements file.
  - Parameters:
    - `console`: Rich console instance for output
    - `requirements_file`: Path to requirements.txt

  `check_global_packages(console)` Analyzes globally installed packages.
  - Parameters:
    - `console`: Rich console instance for output

  Utility Functions

  `get_package_descriptions_parallel(packages, max_workers=10)` Fetches package descriptions concurrently for better performance.
  - Parameters:
    - `packages`: List of package dictionaries
    - `max_workers`: Maximum number of concurrent workers (default: 10)

  `update_packages(outdated_packages, console, global_packages=True)` Updates outdated packages with progress tracking.
  - Parameters:
    - `outdated_packages`: List of packages to update
    - `console`: Rich console instance
    - `global_packages`: Boolean for global/local scope

  `create_backup(packages)` Creates a timestamped backup of current package versions.
  - Parameters:
    - `packages`: List of package information to backup

  `restore_packages(backup_file, console)` Restores packages from a backup file.
  - Parameters:
    - `backup_file`: Path to backup JSON file
    - `console`: Rich console instance



  ![Package Version Manager Screenshot](https://raw.githubusercontent.com/workingwheel/python-package-version-manager/main/Screenshot.png)



  The script includes comprehensive error handling for:
  - File operations
  - Package management operations
  - User interruptions
  - JSON parsing
  - Network-related issues



  1. Always create a backup before updating packages
  2. Review the status table before proceeding with updates
  3. Keep track of backup files for version control
  4. Use project-specific checking for isolated environments



  - PyPI Package: [python-pvm](https://pypi.org/project/python-pvm/)
  - GitHub Repository: [python-package-version-manager](https://github.com/workingwheel/python-package-version-manager)



  Feel free to submit issues and enhancement requests!



  This project is open source and available under the MIT License.


pkgId: af9291d9497c78bd1208eb9ba101d159b3e69133ca43516e637e1aaa157e9ad8
name: python-python-pyper-help
arch: noarch
version: 0.4.1
epoch: 0
release: 1
summary: Development documents and examples for python-pyper
url: https://pyper-dev.github.io/pyper/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-pyper-0.4.1-1.src.rpm
location_href: Packages/python-python-pyper-help-0.4.1-1.noarch.rpm
checksum_type: sha256
description:
  Pyper is a flexible framework for concurrent and parallel data-processing, based on functional programming patterns. Used for 🔀 **ETL Systems**, ⚙️ **Data Microservices**, and 🌐 **Data Collection**
  See the [Documentation](https://pyper-dev.github.io/pyper/)
  **Key features:**
  * 💡**Intuitive API**: Easy to learn, easy to think about. Implements clean abstractions to seamlessly unify threaded, multiprocessed, and asynchronous work.
  * 🚀 **Functional Paradigm**: Python functions are the building blocks of data pipelines. Let's you write clean, reusable code naturally.
  * 🛡️ **Safety**: Hides the heavy lifting of underlying task execution and resource clean-up. No more worrying about race conditions, memory leaks, or thread-level error handling.
  * ⚡ **Efficiency**: Designed from the ground up for lazy execution, using queues, workers, and generators.
  * ✨ **Pure Python**: Lightweight, with zero sub-dependencies.

  Install the latest version using `pip`:
  ```console
  $ pip install python-pyper
  ```
  Note that `python-pyper` is the [pypi](https://pypi.org/project/python-pyper) registered package.

  In Pyper, the `task` decorator is used to transform functions into composable pipelines.
  Let's simulate a pipeline that performs a series of transformations on some data.
  ```python
  import asyncio
  import time
  from pyper import task
  def get_data(limit: int):
      for i in range(limit):
          yield i
  async def step1(data: int):
      await asyncio.sleep(1)
      print("Finished async wait", data)
      return data
  def step2(data: int):
      time.sleep(1)
      print("Finished sync wait", data)
      return data
  def step3(data: int):
      for i in range(10_000_000):
          _ = i*i
      print("Finished heavy computation", data)
      return data
  async def main():
      
      pipeline = task(get_data, branch=True) \
          | task(step1, workers=20) \
          | task(step2, workers=20) \
          | task(step3, workers=20, multiprocess=True)
      
      total = 0
      async for output in pipeline(limit=20):
          total += output
      print("Total:", total)
  if __name__ == "__main__":
      asyncio.run(main())
  ```
  Pyper provides an elegant abstraction of the execution of each task, allowing you to focus on building out the **logical** functions of your program. In the `main` function:
  * `pipeline` defines a function; this takes the parameters of its first task (`get_data`) and yields each output from its last task (`step3`)
  * Tasks are piped together using the `|` operator (motivated by Unix's pipe operator) as a syntactic representation of passing inputs/outputs between tasks.
  In the pipeline, we are executing three different types of work:
  * `task(step1, workers=20)` spins up 20 `asyncio.Task`s to handle asynchronous IO-bound work
  * `task(step2, workers=20)` spins up 20 `threads` to handle synchronous IO-bound work
  * `task(step3, workers=20, multiprocess=True)` spins up 20 `processes` to handle synchronous CPU-bound work
  `task` acts as one intuitive API for unifying the execution of each different type of function.


pkgId: e537c91d957e5923c144a4d14a5b0215765e36e815f75bd7e77fe1515f69ea71
name: python-python-roborock-help
arch: noarch
version: 2.8.1
epoch: 0
release: 1
summary: Development documents and examples for python-roborock
url: https://github.com/humbertogontijo/python-roborock
rpm_license: GPL-3.0-only
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-roborock-2.8.1-1.src.rpm
location_href: Packages/python-python-roborock-help-2.8.1-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
    <a href="https://pypi.org/project/python-roborock/">
      <img src="https://img.shields.io/pypi/v/python-roborock.svg?logo=python&logoColor=fff&style=flat-square" alt="PyPI Version">
    </a>
    <img src="https://img.shields.io/pypi/pyversions/python-roborock.svg?style=flat-square&logo=python&amp;logoColor=fff" alt="Supported Python versions">
    <img src="https://img.shields.io/pypi/l/python-roborock.svg?style=flat-square" alt="License">
  </p>

  Roborock library for online and offline control of your vacuums.



  Install this via pip (or your favourite package manager):

  `pip install python-roborock`



  You can see all of the commands supported [here]("https://python-roborock.readthedocs.io/en/latest/api_commands.html")



  You can find what devices are supported
  [here]("https://python-roborock.readthedocs.io/en/latest/supported_devices.html").
  Please note this may not immediately contain the latest devices.




  Thanks @rovo89 for https://gist.github.com/rovo89/dff47ed19fca0dfdda77503e66c2b7c7 And thanks @PiotrMachowski for https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor


pkgId: 31cdbfb5c3b5face42ea2f45ddb9e00fdc524c1b105acf9ad4d37774d33c5737
name: python-python-rucaptcha-help
arch: noarch
version: 6.3.1
epoch: 0
release: 1
summary: Development documents and examples for python-rucaptcha
url: https://andreidrang.github.io/python-rucaptcha/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-rucaptcha-6.3.1-1.src.rpm
location_href: Packages/python-python-rucaptcha-help-6.3.1-1.noarch.rpm
checksum_type: sha256
description:
  [![RuCaptchaHigh.png](https://s.vyjava.xyz/files/2024/12-December/17/45247a56/RuCaptchaHigh.png)](https://vyjava.xyz/dashboard/image/45247a56-3332-48ee-8df8-fc95bcfc52f0)



  [![capsolver.jpg](https://s.vyjava.xyz/files/2024/12-December/17/54e1db0e/capsolver.jpg)](https://www.capsolver.com/?utm_source=github&utm_medium=repo&utm_campaign=scraping&utm_term=python-rucaptcha)

  <hr>

  [![PyPI version](https://badge.fury.io/py/python-rucaptcha.svg)](https://badge.fury.io/py/python-rucaptcha)
  [![Python versions](https://img.shields.io/pypi/pyversions/python-rucaptcha.svg?logo=python&logoColor=FBE072)](https://badge.fury.io/py/python-rucaptcha)
  [![Downloads](https://static.pepy.tech/badge/python-rucaptcha/month)](https://pepy.tech/project/python-rucaptcha)

  [![Maintainability](https://api.codeclimate.com/v1/badges/aec93bb04a277cf0dde9/maintainability)](https://codeclimate.com/github/AndreiDrang/python-rucaptcha/maintainability)
  [![Codacy Badge](https://app.codacy.com/project/badge/Grade/b4087362bd024b088b358b3e10e7a62f)](https://www.codacy.com/gh/AndreiDrang/python-rucaptcha/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=AndreiDrang/python-rucaptcha&amp;utm_campaign=Badge_Grade)
  [![codecov](https://codecov.io/gh/AndreiDrang/python-rucaptcha/branch/master/graph/badge.svg?token=doybTUCfbD)](https://codecov.io/gh/AndreiDrang/python-rucaptcha)

  [![Sphinx docs](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/sphinx.yml/badge.svg?branch=release)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/sphinx.yml)
  [![Build](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/build.yml)
  [![Installation](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/install.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/install.yml)
  [![Tests](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/test.yml)
  [![Lint](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/lint.yml/badge.svg?branch=master)](https://github.com/AndreiDrang/python-rucaptcha/actions/workflows/lint.yml)

  Python3 library for [RuCaptcha](https://rucaptcha.com/) and [2Captcha](https://2captcha.com/) service API.

  Tested on UNIX based OS.

  The library is intended for software developers and is used to work with the [RuCaptcha](https://rucaptcha.com/) and [2Captcha](https://2captcha.com/) service API.

  Support of the service [Death By Captcha](https://deathbycaptcha.com?refid=1237267242) is integrated into this library, more information in the library documentation or in the [service docs](https://deathbycaptcha.com/api/2captcha?refid=1237267242).
  ***

  Application in [RuCaptcha software](https://rucaptcha.com/software/python-rucaptcha) and [2Captcha software](https://2captcha.com/software/python-rucaptcha).

  If you have any questions, please send a message to the [Telegram](https://t.me/pythoncaptcha) chat room.

  Or email python-captcha@pm.me





  ```bash
  pip install python-rucaptcha
  ```




  Is described in the [documentation-website](https://andreidrang.github.io/python-rucaptcha/).



  1. You need set ``RUCAPTCHA_KEY`` in your environment(get this value from you account).
  2. Run command ``make tests``, from root directory.




  For full changelog info check - [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases).

  - v.6.0 - Library refactoring. Stop using `pydantic`, start using `msgspec`. Move to API v2. Drop Python 3.8 support. More details at [Releases page](https://github.com/AndreiDrang/python-rucaptcha/releases).
  - v.5.3 - Added support for [Death By Captcha](https://www.deathbycaptcha.com?refid=1237267242) and other services by changing `service_type` and `url_request` \ `url_response` parameters.
  - v.5.2 - Added Audio captcha method.
  - v.5.1 - Check [releases page](https://github.com/AndreiDrang/python-rucaptcha/releases).
  - v.5.0 - Added AmazonWAF captcha method.
  - v.4.2 - Added [Yandex Smart Captcha](https://rucaptcha.com/api-rucaptcha#yandex).


  1. On the page - https://rucaptcha.com/enterpage
  2. Find it: [![img.png](https://s.vyjava.xyz/files/2024/12-December/17/ac679557/img.png)](https://vyjava.xyz/dashboard/image/ac679557-f3cc-402f-bf95-6c45d252a2ef)


pkgId: 8ac0970dd9cbf92ce41a4dc320558ed4efe8f3ab84a4367668bd8359996d4906
name: python-python-sage-bbb-help
arch: noarch
version: 0.1.2
epoch: 0
release: 1
summary: Development documents and examples for python-sage-bbb
url: https://pypi.org/project/python-sage-bbb/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-sage-bbb-0.1.2-1.src.rpm
location_href: Packages/python-python-sage-bbb-help-0.1.2-1.noarch.rpm
checksum_type: sha256
description:
  Enhance your virtual collaboration experiences with `sage_bbb` by integrating BigBlueButton’s powerful features into your own applications and automating routine tasks.


pkgId: 1144c452589b8e258f59d55fa2427ba9ccb97101247c1986d61879136af771f0
name: python-python-simple-logger-help
arch: noarch
version: 2.0.2
epoch: 0
release: 1
summary: Development documents and examples for python-simple-logger
url: https://github.com/RedHatQE/python-simple-logger
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-simple-logger-2.0.2-1.src.rpm
location_href: Packages/python-python-simple-logger-help-2.0.2-1.noarch.rpm
checksum_type: sha256
description:
  A simple logger for console/file logging with duplicate logs filter support





  - Export GitHub token

  ```bash
  export GITHUB_TOKEN=<your_github_token>
  ```

  - [release-it](https://github.com/release-it/release-it)

  Run the following once (execute outside repository dir for example `~/`):

  ```bash
  sudo npm install --global release-it
  npm install --save-dev @release-it/bumper
  ```



  - Create a release

  ```bash
  git pull
  release-it # Follow the instructions
  ```



  ```python
  from simple_logger.logger import get_logger
  logger = get_logger(name=__name__, level=logging.DEBUG, filename="my-log.log")
  logger.info("This is INFO log")
  logger.success("This is SUCCESS log")

  TOKEN = "1234"
  PASS = "pass123"
  logger.hash(f"This is my password: {PASS} and this is my token {TOKEN}", hash=[PASS, TOKEN])
  >>> This is INFO log
  >>> This is SUCCESS log
  >>> This is my password: ***** and this is my token *****




  hashed_logger = get_logger(name=__name__, mask_sensitive=True)
  hashed_logger.info(er = get"This is my password: pass123")
  hashed_logger.info(er = get"This is my token tok456!")
  hashed_logger.info(er = get"This is my apikey - api#$789")
  hashed_logger.info(er = get"This is my secret -> sec1234abc")
  >>> This is my password *****
  >>> This is my token *****
  >>> This is my apikey *****
  >>> This is my secret *****
  ```


pkgId: 7f3f8a21b3bc62a9df33cd0a4f71416aa9fc527b67b39755af5caeaecf1b787d
name: python-python-sphinx-doc-help
arch: noarch
version: 0.1
epoch: 0
release: 1
summary: Development documents and examples for python-sphinx-doc
url: https://pypi.org/project/python-sphinx-doc/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-sphinx-doc-0.1-1.src.rpm
location_href: Packages/python-python-sphinx-doc-help-0.1-1.noarch.rpm
checksum_type: sha256
description:
  This extension to Sphinx [autodoc](https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html) enriches class member variable and function parameter lists with type information extracted from Python type annotations.

  Refer to the [Sphinx HTML output](https://hunyadi.github.io/sphinx_doc/) for a live demonstration.



  1. Ensure that you have type hints in all your classes, functions and methods.
  2. Add description to your classes, functions and methods as a doc-string.
  3. Use `:param name: text` to assign a description to member variables and function parameters.
  4. Register `Processor` to the events `autodoc-process-docstring` and `autodoc-before-process-signature`.
  5. Enjoy how type information is automatically injected in the doc-string on `make html`.



  The following code shows how to hook `Processor` to the events `autodoc-process-docstring` and `autodoc-before-process-signature` in Sphinx's `conf.py`:

  ```python
  from sphinx.application import Sphinx
  from sphinx_doc.autodoc import Processor, include_special

  def setup(app: Sphinx) -> None:
      processor = Processor()
      app.connect("autodoc-process-docstring", processor.process_docstring)
      app.connect("autodoc-before-process-signature", processor.process_signature)
      app.connect("autodoc-skip-member", include_special)
  ```

  Refer to the [published sample](https://github.com/hunyadi/sphinx_doc/blob/master/doc/conf.py) for a more detailed example how to use this extension with Sphinx.



  To pass type information to `autodoc`, you would normally be required to use the [info field list](https://www.sphinx-doc.org/en/master/usage/domains/python.html#info-field-lists) items `:param:` and/or `:type:` with explicit type specification:

  ```python
  def send_message(
      sender: str,
      recipient: str,
      message_body: str,
      priority: int = 1,
  ) -> int:
      """
      :param str sender: The person sending the message.
      :param str recipient: The recipient of the message.
      :param str message_body: The body of the message.
      :param priority: The priority of the message, can be a number 1-5.
      :type priority: integer or None
      :return: The message identifier.
      :rtype: int
      """
  ```

  However, a great deal of information is already present in the Python type signature. This extension promotes a more compact parameter definition whereby type information is injected automatically in documentation strings, and you only need to provide description text:

  ```python
  def send_message(
      sender: str,
      recipient: str,
      message_body: str,
      priority: int = 1,
  ) -> int:
      """
      :param sender: The person sending the message.
      :param recipient: The recipient of the message.
      :param message_body: The body of the message.
      :param priority: The priority of the message, can be a number 1-5.
      :returns: The message identifier.
      """
  ```



  * Data-class member variables are published if they have a corresponding `:param ...:` in the class-level doc-string.
  * All enumeration members are published, even if they lack a description.
  * Magic methods (e.g. `__eq__`) are published if they have a doc-string.
  * Multi-line code blocks in doc-strings are converted to syntax-highlighted monospace text.
  * Primary keys in entity classes have extra visuals (e.g. with a symbol 🔑). See [pysqlsync](https://github.com/hunyadi/pysqlsync) for how to define an entity class (using the `@dataclass` syntax) with a primary key (with the type hint `PrimaryKey[T]`).
  * Type aliases are substituted even if [Postponed Evaluation of Annotations (PEP 563)](https://peps.python.org/pep-0563/) is turned off.


pkgId: 8755afd24755f092aeb539acc7aca7bd94d492e4821aec62e4f70e84f1bfb39c
name: python-python-strtobool-help
arch: noarch
version: 1.0.3
epoch: 0
release: 1
summary: Development documents and examples for python-strtobool
url: https://pypi.org/project/python-strtobool/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-strtobool-1.0.3-1.src.rpm
location_href: Packages/python-python-strtobool-help-1.0.3-1.noarch.rpm
checksum_type: sha256
description:
  Convert string to boolean value using `str_to_bool` function.



  ```python
  from str_to_bool import str_to_bool


  value = str_to_bool('true')
  ```



  All values are case-insensitive. Any value not listed below will raise a `ValueError`.



  - `true`
  - `t`
  - `yes`
  - `y`
  - `on`
  - `1`



  - `false`
  - `f`
  - `no`
  - `n`
  - `off`
  - `0`





  ```bash
  pip install python-strtobool
  ```



  ```bash
  poetry add python-strtobool
  ```



  This project is released under the Apache-2.0 License. See the [LICENSE](./LICENSE)
  file for more details.


pkgId: 23b403a5a2430fa26872d42ea71a89d6ece87420a79b490c2400a624a20adb9e
name: python-python-tado-help
arch: noarch
version: 0.18.0
epoch: 0
release: 1
summary: Development documents and examples for python-tado
url: https://pypi.org/project/python-tado/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-tado-0.18.0-1.src.rpm
location_href: Packages/python-python-tado-help-0.18.0-1.noarch.rpm
checksum_type: sha256
description:
  Author: Chris Jewell <chrism0dwk@gmail.com>
  Modified: Wolfgang Malgadey <wolfgang@malgadey.de>
  Licence: GPL v3
  Copyright: Chris Jewell 2016-2018
  PyTado is a Python module implementing an interface to the Tado web API.  It allows a user to interact with their Tado heating system for the purposes of monitoring or controlling their heating system, beyond what Tado themselves currently offer.
  It is hoped that this module might be used by those who wish to tweak their Tado systems, and further optimise their heating setups.

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.  Preamble  The GNU General Public License is a free, copyleft license for software and other kinds of works.  The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  You can apply it to your programs, too.  When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.  To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.  For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.  Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.  For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.  Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.  Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.  The precise terms and conditions for copying, distribution and modification follow.  TERMS AND CONDITIONS  0. Definitions.  "This License" refers to version 3 of the GNU General Public License.  "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.  "The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.  To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.  A "covered work" means either the unmodified Program or a work based on the Program.  To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.  To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.  An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.  1. Source Code.  The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.  A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.  The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.  The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.  The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.  The Corresponding Source for a work in source code form is that same work.  2. Basic Permissions.  All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.  You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.  Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.  3. Protecting Users' Legal Rights From Anti-Circumvention Law.  No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.  When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.  4. Conveying Verbatim Copies.  You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.  You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.  5. Conveying Modified Source Versions.  You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:  a) The work must carry prominent notices stating that you modified it, and giving a relevant date.  b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".  c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.  d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.  A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.  6. Conveying Non-Source Forms.  You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:  a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.  b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.  c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.  d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.  e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.  A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.  A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.  "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.  If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).  The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.  Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.  7. Additional Terms.  "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.  When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.  Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:  a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or  b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or  c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or  d) Limiting the use for publicity purposes of names of licensors or authors of the material; or  e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or  f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.  All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.  If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.  Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.  8. Termination.  You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).  However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.  Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.  Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.  9. Acceptance Not Required for Having Copies.  You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.  10. Automatic Licensing of Downstream Recipients.  Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.  An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.  You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.  11. Patents.  A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".  A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.  Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.  In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.  If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.  If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.  A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.  Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.  12. No Surrender of Others' Freedom.  If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.  13. Use with the GNU Affero General Public License.  Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.  14. Revised Versions of this License.  The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.  Each version is given a distinguishing version number.  If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.  If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.  Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.  15. Disclaimer of Warranty.  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  16. Limitation of Liability.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  17. Interpretation of Sections 15 and 16.  If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.  END OF TERMS AND CONDITIONS  How to Apply These Terms to Your New Programs  If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.  To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.  {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year}  {name of author}  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (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 General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.  Also add information on how to contact you by electronic and paper mail.  If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:  {project}  Copyright (C) {year}  {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.  The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, your program's commands might be different; for a GUI interface, you would use an "about box".  You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.  The GNU General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.  But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.


pkgId: 09d993a132e39998e2fa01e3eb7888adc94349ba2a8493720f0ad053fc706c87
name: python-python-terrier-help
arch: noarch
version: 0.12.1
epoch: 0
release: 1
summary: Development documents and examples for python-terrier
url: https://pypi.org/project/python-terrier/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-terrier-0.12.1-1.src.rpm
location_href: Packages/python-python-terrier-help-0.12.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Continuous Testing](https://github.com/terrier-org/pyterrier/actions/workflows/push.yml/badge.svg)](https://github.com/terrier-org/pyterrier/actions/workflows/push.yml)
  [![PyPI version](https://badge.fury.io/py/python-terrier.svg)](https://badge.fury.io/py/python-terrier)
  [![Documentation Status](https://readthedocs.org/projects/pyterrier/badge/?version=latest)](https://pyterrier.readthedocs.io/en/latest/)




  A Python API for Terrier - v.0.12



  The easiest way to get started with PyTerrier is to use one of our Colab notebooks - look for the ![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg) badges below.


  1. `pip install python-terrier`
  2. You may need to set JAVA_HOME environment variable if Pyjnius cannot find your Java installation.



  1. You need to hava Java installed. Pyjnius/PyTerrier will pick up the location automatically.
  2. `pip install python-terrier`



  PyTerrier has a number of useful classes for creating indices:

   - You can create an index from TREC formatted collection using [TRECCollectionIndexer](https://pyterrier.readthedocs.io/en/latest/terrier-indexing.html#treccollectionindexer).
   - For TXT, PDF, Microsoft Word files, etc files you can use [FilesIndexer](https://pyterrier.readthedocs.io/en/latest/terrier-indexing.html#filesindexer).
   - For any abitrary iterable dictionaries or a Pandas Dataframe, you can use [IterDictIndexer](https://pyterrier.readthedocs.io/en/latest/terrier-indexing.html#iterdictindexer).

  See the [indexing documentation](https://pyterrier.readthedocs.io/en/latest/terrier-indexing.html), or the examples in the [indexing notebook](examples/notebooks/indexing.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/terrier-org/pyterrier/blob/master/examples/notebooks/indexing.ipynb)



  ```python
  topics = pt.io.read_topics(topicsFile)
  qrels = pt.io.read_qrels(qrelsFile)
  BM25_r = pt.terrier.Retriever(index, wmodel="BM25")
  res = BM25_r.transform(topics)
  pt.Evaluate(res, qrels, metrics = ['map'])
  ```

  See also the [retrieval documentation](https://pyterrier.readthedocs.io/en/latest/terrier-retrieval.html), or the worked example in the [retrieval and evaluation notebook](examples/notebooks/retrieval_and_evaluation.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/terrier-org/pyterrier/blob/master/examples/notebooks/retrieval_and_evaluation.ipynb)


  PyTerrier provides an [Experiment](https://pyterrier.readthedocs.io/en/latest/experiments.html) function, which allows to compare multiple retrieval approaches on the same queries & relevance assessments:

  ```python
  pt.Experiment([BM25_r, PL2_r], topics, qrels, ["map", "ndcg"])
  ```

  There is a worked example in the [experiment notebook](examples/notebooks/experiment.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/terrier-org/pyterrier/blob/master/examples/notebooks/experiment.ipynb)



  PyTerrier makes it easy to develop complex retrieval pipelines using Python operators such as `>>` to chain different retrieval components. Each retrieval approach is a [transformer](https://pyterrier.readthedocs.io/en/latest/transformer.html), having one key method, `transform()`, which takes a single Pandas dataframe as input, and returns another dataframe. Two examples might encapsulate applying the sequential dependence model, or a query expansion process:
  ```python
  sdm_bm25 = pt.rewrite.SDM() >> pt.terrier.Retriever(indexref, wmodel="BM25")
  bo1_qe = BM25_r >> pt.rewrite.Bo1QueryExpansion() >> BM25_r
  ```

  There is documentation on [transformer operators](https://pyterrier.readthedocs.io/en/latest/operators.html) as well as [example pipelines](https://pyterrier.readthedocs.io/en/latest/pipeline_examples.html) show other common use cases. For more information, see the [PyTerrier data model](https://pyterrier.readthedocs.io/en/latest/datamodel.html).



  PyTerrier has additional plugins for BERT (through OpenNIR), T5, ColBERT, doc2query and many more...
   - Pyterrier_DR: [[Github](https://github.com/terrierteam/pyterrier_colbert)] - single-representation dense retrieval
   - PyTerrier_ColBERT: [[Github](https://github.com/terrierteam/pyterrier_colbert)] - mulitple-representation dense retrieval and/or neural reranking
   - PyTerrier_PISA: [[Github](https://github.com/terrierteam/pyterrier_pisa)] - fast in-memory indexing and retrieval using [PISA](https://github.com/pisa-engine/pisa)
   - PyTerrier_T5: [[Github](https://github.com/terrierteam/pyterrier_t5)] - neural reranking: monoT5, duoT5
   - PyTerrier_GenRank [[Github](https://github.com/emory-irlab/pyterrier_genrank)] - generative listwise reranking: RankVicuna, RankZephyr
   - PyTerrier_doc2query: [[Github](https://github.com/terrierteam/pyterrier_doc2query)] - neural augmented indexing
   - PyTerrier_SPLADE: [[Github](https://github.com/cmacdonald/pyt_splade)] - neural augmented indexing

  Older plugins include:
   - PyTerrier_ANCE: [[Github](https://github.com/terrierteam/pyterrier_ance)] - dense retrieval
   - PyTerrier_DeepCT: [[Github](https://github.com/terrierteam/pyterrier_deepct)] - neural augmented indexing
   - OpenNIR: [[Github](https://github.com/Georgetown-IR-Lab/OpenNIR)] [[Documentation](https://opennir.net/)]

  You can see examples of how to use these, including notebooks that run on Google Colab, in the contents of our [Search Solutions 2022 tutorial](https://github.com/terrier-org/searchsolutions2022-tutorial).



  Complex learning to rank pipelines, including for learning-to-rank, can be constructed using PyTerrier's operator language. For example, to combine two features and make them available for learning, we can use the `**` operator.
  ```python
  two_features = BM25_r >> (
    pt.terrier.Retriever(indexref, wmodel="DirichletLM") **
    pt.terrier.Retriever(indexref, wmodel="PL2")
  )
  ```

  See also the [learning to rank documentation](https://pyterrier.readthedocs.io/en/latest/ltr.html), as well as the worked examples in the [learning-to-rank notebook](examples/notebooks/ltr.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/terrier-org/pyterrier/blob/master/examples/notebooks/ltr.ipynb). Some pipelines can be automatically optimised - more detail about pipeline optimisation are included in our ICTIR 2020 paper.



  PyTerrier allows simple access to standard information retrieval test collections through its [dataset API](https://pyterrier.readthedocs.io/en/latest/datasets.html), which can download the topics, qrels, corpus or, for some test collections, a ready-made Terrier index.

  ```python
  topics = pt.get_dataset("trec-robust-2004").get_topics()
  qrels = pt.get_dataset("trec-robust-2004").get_qrels()
  pt.Experiment([BM25_r, PL2_r], topics, qrels, eval_metrics)
  ```

  You can index datasets that include a corpus using IterDictIndexer and get_corpus_iter:

  ```python
  dataset = pt.get_dataset('irds:cord19/trec-covid')
  indexer = pt.IterDictIndexer('./cord19-index')
  index_ref = indexer.index(dataset.get_corpus_iter(), fields=('title', 'abstract'))
  ```

  You can use `pt.list_datasets()` to see available test collections - if your favourite test collection is missing, [you can submit a Pull Request](https://github.com/terrier-org/pyterrier/pulls).

  All datasets from the [ir_datasets package](https://github.com/allenai/ir_datasets) are available
  under the `irds:` prefix. E.g., use `pt.datasets.get_dataset("irds:medline/2004/trec-genomics-2004")`
  to get the TREC Genomics 2004 dataset. A full catalogue of ir_datasets is available [here](https://ir-datasets.com/all.html).



  All of the standard Terrier Index API can be access easily from Pyterrier.

  For instance, accessing term statistics is a single call on an index:
  ```python
  index.getLexicon()["circuit"].getDocumentFrequency()
  ```

  There are lots of examples in the [index API notebook](examples/notebooks/index_api.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/terrier-org/pyterrier/blob/master/examples/notebooks/index_api.ipynb)



  More documentation for PyTerrier is available at https://pyterrier.readthedocs.io/en/latest/.



  PyTerrier is subject to the terms detailed in the Mozilla Public License Version 2.0. The Mozilla Public License can be found in the file [LICENSE.txt](LICENSE.txt). By using this software, you have agreed to the licence.



  The source and binary forms of PyTerrier are subject to the following citation license:

  By downloading and using PyTerrier, you agree to cite at the undernoted paper describing PyTerrier in any kind of material you produce where PyTerrier was used to conduct search or experimentation, whether be it a research paper, dissertation, article, poster, presentation, or documentation. By using this software, you have agreed to the citation licence.

  [Declarative Experimentation in Information Retrieval using PyTerrier. Craig Macdonald and Nicola Tonellotto. In Proceedings of ICTIR 2020.](https://arxiv.org/abs/2007.14271)

  ```bibtex
  @inproceedings{pyterrier2020ictir,
      author = {Craig Macdonald and Nicola Tonellotto},
      title = {Declarative Experimentation inInformation Retrieval using PyTerrier},
      booktitle = {Proceedings of ICTIR 2020},
      year = {2020}
  }

  ```



   - Alex Tsolov, University of Glasgow
   - Craig Macdonald, University of Glasgow
   - Nicola Tonellotto, University of Pisa
   - Arthur Câmara, TU Delft
   - Alberto Ueda, Federal University of Minas Gerais
   - Sean MacAvaney, Georgetown University/University of Glasgow
   - Chentao Xu, University of Glasgow
   - Sarawoot Kongyoung, University of Glasgow
   - Zhan Su, Copenhagen University
   - Marcus Schutte, TU Delft
   - Lukas Zeit-Altpeter, Friedrich Schiller University Jena


pkgId: b315966e8a26544e1b2b19aa044f9824b774625a24902b00eae9e60b33ef3694
name: python-python-test-video-async-help
arch: noarch
version: 0.5.0
epoch: 0
release: 1
summary: Development documents and examples for python-test-video-async
url: https://pypi.org/project/python-test-video-async/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-test-video-async-0.5.0-1.src.rpm
location_href: Packages/python-python-test-video-async-help-0.5.0-1.noarch.rpm
checksum_type: sha256
description:
  Use the `client.livestreams.create()` method to start a live stream with specific configurations. For detailed configuration options, refer to the [Create a new stream](https://docs.fastpix.io/reference/create-new-stream) API documentation.
  ```python
  liveStreamRequest = {
    "playbackSettings": {
      "accessPolicy": "public", # Defines the access level of the live stream (public or private)
    },
    "inputMediaSettings": {
      "maxResolution": "1080p", # Set the maximum resolution of the live stream
      "reconnectWindow": 1800, # Set the duration for reconnecting the stream in seconds
      "mediaPolicy": "private", # Define media policy (private or public)
      "metadata": {
        "liveStream": "fp_livestream", # Custom metadata for the live stream
      },
      "enableDvrMode": True, # Enable DVR mode to allow viewers to rewind the live stream
    },
  }

  generateLiveStream = await client.livestreams.create(liveStreamRequest)
  print("Live Stream initiated successfully:", generateLiveStream)
  ```


  Use the `client.livestreams.list()` method to fetch a list of all live streams. You can customize the query by modifying parameters such as `limit`, `offset`, and `orderBy`. For detailed configuration options, refer to the [Get all live streams](https://docs.fastpix.io/reference/get-all-streams) API documentation.
  ```python
  getAllLiveStreamPagination = {
    "limit": 10, # Limit the number of live streams retrieved.
    "offset": 1, # Skip a specified number of streams for pagination.
    "orderBy": "asc", # Order the results based on the specified criteria ("asc" or "desc").
  }
  getAllLiveStreams = await client.livestreams.list(getAllLiveStreamPagination)
  print("All Live Streams:", getAllLiveStreams)
  ```

  Use the `client.livestreams.get()` method to retrieve a specific live stream by its ID. Provide the `streamId` of the stream you wish to fetch. For more details, refer to the [Get stream by ID](https://docs.fastpix.io/reference/get-live-stream-by-id) API documentation.
  ```python
  streamId =  "a09f3e958c16ed00e85bfe798abd9845" # Replace with actual stream ID
  getLiveStreamById = await client.livestreams.get(streamId)
  print("Live Stream Details:", getLiveStreamById)
  ```

  Use the `client.livestreams.update()` method to update a live stream's configuration. Provide the `streamId` of the stream and specify the fields you want to update. For more details, refer to the [Update a stream](https://docs.fastpix.io/reference/update-live-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845" # Provide the stream ID for the live stream to update
   updateLiveStreamRequest = {
    "metadata": {
      "livestream_name": "Game_streaming",
    },
    "reconnectWindow": 100,
  }
  updateLiveStream = await client.livestreams.update(streamId,updateLiveStreamRequest)
  print("Updated Live Stream:", updateLiveStream)
  ```

  Use the `client.livestreams.delete()` method to delete a live stream by its ID. Provide `streamId` of the stream you want to delete. For more details, refer to the [Delete a stream](https://docs.fastpix.io/reference/delete-live-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845" # Provide the stream ID for the live stream to update
  deleteLiveStream = await client.livestreams.delete(streamId)  # Provide the stream ID of the live stream to delete
  print("Deleted Live Stream:", deleteLiveStream)
  ```


  Use the `client.livestream_playback_ids.create()` method to generate a playback ID for a live stream. Replace `streamId` with the actual ID of the live stream and specify the desired `accessPolicy`. For more details, refer to the [Create a playback ID](https://docs.fastpix.io/reference/create-playbackid-of-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  body = { "accessPolicy": "public" }
  generateLiveStreamPlaybackId = await client.livestream_playback_ids.create(streamId, body)
  print("Generated Live Stream Playback ID:", generateLiveStreamPlaybackId)
  ```

  Use the `client.livestream_playback_ids.delete()` method to delete a specific playback ID for a live stream. You need to provide both the `streamId` of the live stream and the `playbackId` to delete. For more details, refer to the [Delete a playback ID](https://docs.fastpix.io/reference/delete-playbackid-of-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  playbackId = "632029b4-7c53-4dcf-a4d3-1884c29e90f8"  # Replace with actual playback ID
  deleteLiveStreamPlaybackId = await client.livestream_playback_ids.delete(streamId, playbackId)
  print("Deleted Live Stream Playback ID:", deleteLiveStreamPlaybackId)
  ```

  Use the `client.livestream_playback_ids.get()` method to retrieve the playback policy for a specific live stream playback ID. Replace `streamId` with the stream's ID and `playbackId` with the actual playback ID to fetch the policy. For more details, refer to the [Get stream's playback ID](https://docs.fastpix.io/reference/get-live-stream-playback-id) API documentation.
  ```python
  streamId = "1c5e8abcc2080cba74f5d0ac91c7833e"  # Replace with the actual stream ID
  playbackId = "95ce872d-0b58-44f3-be72-8ed8b97ee2c9"  # Replace with the actual playback ID
  getLiveStreamPlaybackPolicy = await client.livestream_playback_ids.get(streamId, playbackId)
  print("Live Stream Playback Policy:", getLiveStreamPlaybackPolicy)
  ```


  Use the `client.livestreams.create_simulcast()` method to create a new simulcast for a live stream. Provide the stream ID and simulcast payload with the URL and stream key. For more details, refer to the [Create a simulcast](https://docs.fastpix.io/reference/create-simulcast-of-stream) API documentation.
  ```python
  simulcast_payload = {
      "url": "rtmps://live.fastpix.io:443/live",
      "streamKey": "46c3457fa8a579b2d4da64125a2b6e83ka09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream key
  }
  streamId = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  generateSimulcast = await client.livestreams.create_simulcast(streamId, simulcast_payload)
  print("Generate Simulcast:", generateSimulcast)
  ```

  Use the `client.livestreams.get_simulcast()` method to retrieve details of a specific simulcast stream. Provide the `streamId` and `simulcastId` of the simulcast you want to fetch. For more details, refer to the [Get a specific simulcast of a stream](https://docs.fastpix.io/reference/get-specific-simulcast-of-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcastId = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  getLiveSimulcast = await client.livestreams.get_simulcast(streamId, simulcastId)
  print("Live Stream Simulcast Details:", getLiveSimulcast)
  ```

  Use the `client.livestreams.update_simulcast()` method to update the configuration of a simulcast stream. Provide the `streamId`, `simulcastId`, and the fields you want to update. For more details, refer to the [Update a specific simulcast of a stream](https://docs.fastpix.io/reference/update-specific-simulcast-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcast_id = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  updatePayload = {
      "isEnabled": False,  # Disable the simulcast stream (set to True to enable)
      "metadata": {
          "simulcast2": "media"  # Update the metadata as needed
      }
  }
  updateLiveSimulcast = await client.livestreams.update_simulcast(streamId, simulcastId, updatePayload)
  print("Updated Live Stream Simulcast:", updateLiveSimulcast)
  ```

  Use the `client.livestreams.delete_simulcast()` method to remove a specific simulcast from a live stream. Provide the `streamId` and `simulcastId` for the simulcast you want to delete. For more details, refer to the [Delete a simulcast](https://docs.fastpix.io/reference/delete-simulcast-of-stream) API documentation.
  ```python
  streamId = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcastId = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  deleteLiveSimulcast = await client.livestreams.delete_simulcast(streamId, simulcastId)
  print("Deleted Live Stream Simulcast:", deleteLiveSimulcast)
  ```

  For a complete understanding of each API's functionality, including request and response details, parameter descriptions, and additional examples, please refer to the [FastPix API Reference](https://docs.fastpix.io/reference/signingkeys-overview).
  The API reference provides comprehensive documentation for all available endpoints and features, ensuring developers can integrate and utilize FastPix APIs efficiently.


pkgId: 013380efb4c562b2dcee4da6442bcabae6a4924acd10e2270c67169cfac5dd4d
name: python-python-test-video-fp-help
arch: noarch
version: 1.0.0
epoch: 0
release: 1
summary: Development documents and examples for python-test-video-fp
url: https://pypi.org/project/python-test-video-fp/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-python-test-video-fp-1.0.0-1.src.rpm
location_href: Packages/python-python-test-video-fp-help-1.0.0-1.noarch.rpm
checksum_type: sha256
description:
  Use the `client.livestreams.create()` method to start a live stream with specific configurations. For detailed configuration options, refer to the [Create a new stream](https://docs.fastpix.io/reference/create-new-stream) API documentation.
  ```python
  liveStreamRequest = {
    "playbackSettings": {
      "accessPolicy": "public", # Defines the access level of the live stream (public or private)
    },
    "inputMediaSettings": {
      "maxResolution": "1080p", # Set the maximum resolution of the live stream
      "reconnectWindow": 1800, # Set the duration for reconnecting the stream in seconds
      "mediaPolicy": "private", # Define media policy (private or public)
      "metadata": {
        "liveStream": "fp_livestream", # Custom metadata for the live stream
      },
      "enableDvrMode": True, # Enable DVR mode to allow viewers to rewind the live stream
    },
  }

  generateLiveStream = client.livestreams.create(liveStreamRequest)
  print("Live Stream initiated successfully:", generateLiveStream)
  ```


  Use the `client.livestreams.list()` method to fetch a list of all live streams. You can customize the query by modifying parameters such as `limit`, `offset`, and `orderBy`. For detailed configuration options, refer to the [Get all live streams](https://docs.fastpix.io/reference/get-all-streams) API documentation.
  ```python
  getAllLiveStreamPagination = {
    "limit": 10, # Limit the number of live streams retrieved.
    "offset": 1, # Skip a specified number of streams for pagination.
    "orderBy": "asc", # Order the results based on the specified criteria ("asc" or "desc").
  }
  const getAllLiveStreams = client.livestreams.list(getAllLiveStreamPagination)
  print("All Live Streams:", getAllLiveStreams)
  ```

  Use the `client.livestreams.get()` method to retrieve a specific live stream by its ID. Provide the `streamId` of the stream you wish to fetch. For more details, refer to the [Get stream by ID](https://docs.fastpix.io/reference/get-live-stream-by-id) API documentation.
  ```python
  streamId =  "a09f3e958c16ed00e85bfe798abd9845" # Replace with actual stream ID
  getLiveStreamById = client.livestreams.get(streamId)
  print("Live Stream Details:", getLiveStreamById)
  ```

  Use the `client.livestreams.update()` method to update a live stream's configuration. Provide the `streamId` of the stream and specify the fields you want to update. For more details, refer to the [Update a stream](https://docs.fastpix.io/reference/update-live-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845" # Provide the stream ID for the live stream to update
  updateLiveStreamRequest = {
    "metadata": {
      "livestream_name": "Game_streaming",
    },
    "reconnectWindow": 100,
  }
  updateLiveStream = client.livestreams.update(stream_id,updateLiveStreamRequest)
  print("Updated Live Stream:", updateLiveStream)
  ```

  Use the `client.livestreams.delete()` method to delete a live stream by its ID. Provide `streamId` of the stream you want to delete. For more details, refer to the [Delete a stream](https://docs.fastpix.io/reference/delete-live-stream) API documentation.
  ```python
  deleteLiveStream = client.livestreams.delete("a09f3e958c16ed00e85bfe798abd9845")  # Provide the stream ID of the live stream to delete
  print("Deleted Live Stream:", deleteLiveStream)
  ```


  Use the `client.livestream_playback_ids.create()` method to generate a playback ID for a live stream. Replace `streamId` with the actual ID of the live stream and specify the desired `accessPolicy`. For more details, refer to the [Create a playback ID](https://docs.fastpix.io/reference/create-playbackid-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  body = { accessPolicy: "public" }
  generateLiveStreamPlaybackId = client.livestream_playback_ids.create(stream_id, body)
  print("Generated Live Stream Playback ID:", generateLiveStreamPlaybackId)
  ```

  Use the `client.livestream_playback_ids.delete()` method to delete a specific playback ID for a live stream. You need to provide both the `streamId` of the live stream and the `playbackId` to delete. For more details, refer to the [Delete a playback ID](https://docs.fastpix.io/reference/delete-playbackid-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  playback_id = "632029b4-7c53-4dcf-a4d3-1884c29e90f8"  # Replace with actual playback ID
  deleteLiveStreamPlaybackId = client.livestream_playback_ids.delete(stream_id, playback_id)
  print("Deleted Live Stream Playback ID:", deleteLiveStreamPlaybackId)
  ```

  Use the `client.livestream_playback_ids.get()` method to retrieve the playback policy for a specific live stream playback ID. Replace `streamId` with the stream's ID and `playbackId` with the actual playback ID to fetch the policy. For more details, refer to the [Get stream's playback ID](https://docs.fastpix.io/reference/get-live-stream-playback-id) API documentation.
  ```python
  stream_id = "1c5e8abcc2080cba74f5d0ac91c7833e"  # Replace with the actual stream ID
  playback_id = "95ce872d-0b58-44f3-be72-8ed8b97ee2c9"  # Replace with the actual playback ID
  getLiveStreamPlaybackPolicy = client.livestream_playback_ids.get(stream_id, playback_id)
  print("Live Stream Playback Policy:", getLiveStreamPlaybackPolicy)
  ```


  Use the `client.livestreams.create_simulcast()` method to create a new simulcast for a live stream. Provide the stream ID and simulcast payload with the URL and stream key. For more details, refer to the [Create a simulcast](https://docs.fastpix.io/reference/create-simulcast-of-stream) API documentation.
  ```python
  simulcast_payload = {
      "url": "rtmps://live.fastpix.io:443/live",
      "streamKey": "46c3457fa8a579b2d4da64125a2b6e83ka09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream key
  }
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  generateSimulcast = client.livestreams.create_simulcast(stream_id, simulcast_payload)
  print("Generate Simulcast:", generateSimulcast)
  ```

  Use the `client.livestreams.get_simulcast()` method to retrieve details of a specific simulcast stream. Provide the `streamId` and `simulcastId` of the simulcast you want to fetch. For more details, refer to the [Get a specific simulcast of a stream](https://docs.fastpix.io/reference/get-specific-simulcast-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcast_id = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  getLiveSimulcast = client.livestreams.get_simulcast(stream_id, simulcast_id)
  print("Live Stream Simulcast Details:", getLiveSimulcast)
  ```

  Use the `client.livestreams.update_simulcast()` method to update the configuration of a simulcast stream. Provide the `streamId`, `simulcastId`, and the fields you want to update. For more details, refer to the [Update a specific simulcast of a stream](https://docs.fastpix.io/reference/update-specific-simulcast-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcast_id = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  update_payload = {
      "isEnabled": False,  # Disable the simulcast stream (set to True to enable)
      "metadata": {
          "simulcast2": "media"  # Update the metadata as needed
      }
  }
  updateLiveSimulcast = client.livestreams.update_simulcast(stream_id, simulcast_id, update_payload)
  print("Updated Live Stream Simulcast:", updateLiveSimulcast)
  ```

  Use the `client.livestreams.delete_simulcast()` method to remove a specific simulcast from a live stream. Provide the `streamId` and `simulcastId` for the simulcast you want to delete. For more details, refer to the [Delete a simulcast](https://docs.fastpix.io/reference/delete-simulcast-of-stream) API documentation.
  ```python
  stream_id = "a09f3e958c16ed00e85bfe798abd9845"  # Replace with actual stream ID
  simulcast_id = "7269209ff0299319b6321c9a6e7850ff"  # Replace with actual simulcast ID
  deleteLiveSimulcast = client.livestreams.delete_simulcast(stream_id, simulcast_id)
  print("Deleted Live Stream Simulcast:", deleteLiveSimulcast)
  ```

  For a complete understanding of each API's functionality, including request and response details, parameter descriptions, and additional examples, please refer to the [FastPix API Reference](https://docs.fastpix.io/reference/signingkeys-overview).
  The API reference provides comprehensive documentation for all available endpoints and features, ensuring developers can integrate and utilize FastPix APIs efficiently.


