# packages

pkgId: 22ce222b55cbad409da7a546dacada245282a30bc68dd71d93203eb498c39913
name: python-aerich
arch: src
version: 0.8.0
epoch: 0
release: 1
summary: A database migrations tool for Tortoise ORM.
url: https://github.com/tortoise/aerich
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerich-0.8.0-1.src.rpm
checksum_type: sha256
description:
  [![image](https://img.shields.io/pypi/v/aerich.svg?style=flat)](https://pypi.python.org/pypi/aerich)
  [![image](https://img.shields.io/github/license/tortoise/aerich)](https://github.com/tortoise/aerich)
  [![image](https://github.com/tortoise/aerich/workflows/pypi/badge.svg)](https://github.com/tortoise/aerich/actions?query=workflow:pypi)
  [![image](https://github.com/tortoise/aerich/workflows/ci/badge.svg)](https://github.com/tortoise/aerich/actions?query=workflow:ci)

  English | [Русский](./README_RU.md)



  Aerich is a database migrations tool for TortoiseORM, which is like alembic for SQLAlchemy, or like Django ORM with
  it\'s own migration solution.



  Just install from pypi:

  ```shell
  pip install aerich
  ```



  ```shell
  > aerich -h

  Usage: aerich [OPTIONS] COMMAND [ARGS]...

  Options:
    -V, --version      Show the version and exit.
    -c, --config TEXT  Config file.  [default: pyproject.toml]
    --app TEXT         Tortoise-ORM app name.
    -h, --help         Show this message and exit.

  Commands:
    downgrade  Downgrade to specified version.
    heads      Show current available heads in migrate location.
    history    List all migrate items.
    init       Init config file and generate root migrate location.
    init-db    Generate schema and generate app migrate location.
    inspectdb  Introspects the database tables to standard output as...
    migrate    Generate migrate changes file.
    upgrade    Upgrade to specified version.
  ```



  You need to add `aerich.models` to your `Tortoise-ORM` config first. Example:

  ```python
  TORTOISE_ORM = {
      "connections": {"default": "mysql://root:123456@127.0.0.1:3306/test"},
      "apps": {
          "models": {
              "models": ["tests.models", "aerich.models"],
              "default_connection": "default",
          },
      },
  }
  ```



  ```shell
  > aerich init -h

  Usage: aerich init [OPTIONS]

    Init config file and generate root migrate location.

  Options:
    -t, --tortoise-orm TEXT  Tortoise-ORM config module dict variable, like
                             settings.TORTOISE_ORM.  [required]
    --location TEXT          Migrate store location.  [default: ./migrations]
    -s, --src_folder TEXT    Folder of the source, relative to the project root.
    -h, --help               Show this message and exit.
  ```

  Initialize the config file and migrations location:

  ```shell
  > aerich init -t tests.backends.mysql.TORTOISE_ORM

  Success create migrate location ./migrations
  Success write config to pyproject.toml
  ```



  ```shell
  > aerich init-db

  Success create app migrate location ./migrations/models
  Success generate schema for app "models"
  ```

  If your Tortoise-ORM app is not the default `models`, you must specify the correct app via `--app`,
  e.g. `aerich --app other_models init-db`.



  ```shell
  > aerich migrate --name drop_column

  Success migrate 1_202029051520102929_drop_column.py
  ```

  Format of migrate filename is
  `{version_num}_{datetime}_{name|update}.py`.

  If `aerich` guesses you are renaming a column, it will ask `Rename {old_column} to {new_column} [True]`. You can choose
  `True` to rename column without column drop, or choose `False` to drop the column then create. Note that the latter may
  lose data.

  If you need to manually write migration, you could generate empty file:

  ```shell
  > aerich migrate --name add_index --empty

  Success migrate 1_202326122220101229_add_index.py
  ```



  ```shell
  > aerich upgrade

  Success upgrade 1_202029051520102929_drop_column.py
  ```

  Now your db is migrated to latest.



  ```shell
  > aerich downgrade -h

  Usage: aerich downgrade [OPTIONS]

    Downgrade to specified version.

  Options:
    -v, --version INTEGER  Specified version, default to last.  [default: -1]
    -d, --delete           Delete version files at the same time.  [default:
                           False]

    --yes                  Confirm the action without prompting.
    -h, --help             Show this message and exit.
  ```

  ```shell
  > aerich downgrade

  Success downgrade 1_202029051520102929_drop_column.py
  ```

  Now your db is rolled back to the specified version.



  ```shell
  > aerich history

  1_202029051520102929_drop_column.py
  ```



  ```shell
  > aerich heads

  1_202029051520102929_drop_column.py
  ```



  Currently `inspectdb` support MySQL & Postgres & SQLite.

  ```shell
  Usage: aerich inspectdb [OPTIONS]

    Introspects the database tables to standard output as TortoiseORM model.

  Options:
    -t, --table TEXT  Which tables to inspect.
    -h, --help        Show this message and exit.
  ```

  Inspect all tables and print to console:

  ```shell
  aerich --app models inspectdb
  ```

  Inspect a specified table in the default app and redirect to `models.py`:

  ```shell
  aerich inspectdb -t user > models.py
  ```

  For example, you table is:

  ```sql
  CREATE TABLE `test`
  (
      `id`       int            NOT NULL AUTO_INCREMENT,
      `decimal`  decimal(10, 2) NOT NULL,
      `date`     date                                    DEFAULT NULL,
      `datetime` datetime       NOT NULL                 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `time`     time                                    DEFAULT NULL,
      `float`    float                                   DEFAULT NULL,
      `string`   varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
      `tinyint`  tinyint                                 DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `asyncmy_string_index` (`string`)
  ) ENGINE = InnoDB
    DEFAULT CHARSET = utf8mb4
    COLLATE = utf8mb4_general_ci
  ```

  Now run `aerich inspectdb -t test` to see the generated model:

  ```python
  from tortoise import Model, fields


  class Test(Model):
      date = fields.DateField(null=True, )
      datetime = fields.DatetimeField(auto_now=True, )
      decimal = fields.DecimalField(max_digits=10, decimal_places=2, )
      float = fields.FloatField(null=True, )
      id = fields.IntField(pk=True, )
      string = fields.CharField(max_length=200, null=True, )
      time = fields.TimeField(null=True, )
      tinyint = fields.BooleanField(null=True, )
  ```

  Note that this command is limited and can't infer some fields, such as `IntEnumField`, `ForeignKeyField`, and others.



  ```python
  tortoise_orm = {
      "connections": {
          "default": expand_db_url(db_url, True),
          "second": expand_db_url(db_url_second, True),
      },
      "apps": {
          "models": {"models": ["tests.models", "aerich.models"], "default_connection": "default"},
          "models_second": {"models": ["tests.models_second"], "default_connection": "second", },
      },
  }
  ```

  You only need to specify `aerich.models` in one app, and must specify `--app` when running `aerich migrate` and so on.



  In some cases, such as broken changes from upgrade of `aerich`, you can't run `aerich migrate` or `aerich upgrade`, you
  can make the following steps:

  1. drop `aerich` table.
  2. delete `migrations/{app}` directory.
  3. rerun `aerich init-db`.

  Note that these actions is safe, also you can do that to reset your migrations if your migration files is too many.



  You can use `aerich` out of cli by use `Command` class.

  ```python
  from aerich import Command

  command = Command(tortoise_config=config, app='models')
  await command.init()
  await command.migrate('test')
  ```



  This project is licensed under the
  [Apache-2.0](https://github.com/long2ice/aerich/blob/master/LICENSE) License.


pkgId: 18d4b16b6408e1e6008e6643ff547d8c01e20ebe37b1fc3adbcde9de07cfe172
name: python-aerie
arch: src
version: 0.8.2
epoch: 0
release: 1
summary: An async database toolkit.
url: https://github.com/alex-oleshkevich/aerie
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerie-0.8.2-1.src.rpm
checksum_type: sha256
description:
  A wrapper around SQLAlchemy made to support asynchronous workloads.

  [Aerie](https://baldursgate.fandom.com/wiki/Aerie) - is an [avariel](https://baldursgate.fandom.com/wiki/Elf#Avariel)
  (or winged elf) from Baldur's Gate II game.

  ![PyPI](https://img.shields.io/pypi/v/aerie)
  ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/alex-oleshkevich/aerie/Lint)
  ![GitHub](https://img.shields.io/github/license/alex-oleshkevich/aerie)
  ![Libraries.io dependency status for latest release](https://img.shields.io/librariesio/release/pypi/aerie)
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/aerie)
  ![GitHub Release Date](https://img.shields.io/github/release-date/alex-oleshkevich/aerie)
  ![Lines of code](https://img.shields.io/tokei/lines/github/alex-oleshkevich/aerie)



  Install `aerie` using PIP or poetry:

  ```bash
  pip install aerie[postgresql]

  poetry add aerie[postgresql]
  ```

  For SQLite use "sqlite" extra. To install all drivers use "full" extra.



  - full async/await support
  - plain SQL with bound params
  - SQLAlchemy query builders support
  - SQLAlchemy ORM support
  - pagination



  * simplify column definition: `sa.Column(sa.Integer)` -> `models.IntergerField()`
  * integrate with Alembic CLI



  See example application in [examples/](examples/) directory of this repository.



  As this library is based on [SQLAlchemy](https://docs.sqlalchemy.org/en/14/index.html), it is strictly recommended
  getting yourself familiar with it.

  A general usage is:

  * create an instance of Aerie
  * define ORM models
  * create tables in the database (or, preferably, use Alembic migrations)
  * obtain a session and perform database queries



  Create an instance of Aerie class and pass a connection string to it:

  ```python
  from aerie import Aerie

  db = Aerie('sqlite+aiosqlite:///tmp/database.sqlite2')

  db = Aerie('postgresql+asyncpg://postgres:postgres@localhost/aerie')
  ```

  > You need appropriate driver installed. Add "aiosqlite" for SQLite support, or add "asyncpg" for PostreSQL support.



  At this step Aerie is ready to work. Create a new transaction and execute any query you need.

  ```python
  from sqlalchemy.sql import text


  sql = text('select * from users where user_id = :user_id')
  rows = await db.query(sql, {'user_id': 1}).all()
  ```

  Full listing [examples/raw_sql.py](examples/raw_sql.py)



  Sure, you are not limited to plain SQL. SQLAlchemy query builders also supported (because Aerie is a tiny layer on top
  of the SQLAlchemy)

  ```python
  from sqlalchemy.sql import text
  import sqlalchemy as sa
  from aerie import metadata

  users = sa.Table(
      'users', metadata,
      sa.Column(sa.Integer, name='id', primary_key=True),
      sa.Column(sa.String, name='name'),
  )


  await db.schema.create_tables()

  stmt = select(users).where(users.c.id == 2)
  rows = await db.query(stmt).all()
  ```

  Full listing [examples/tables.py](examples/tables.py)



  Another option to low-level query builder are ORM models. Aerie provides `aerie.Model` class that you should extend to
  create your model.

  ```python
  from aerie import Base
  import sqlalchemy as sa


  class User(Base):
      __tablename__ = 'users'

      id = sa.Column(sa.Integer, primary_key=True)
      name = sa.Column(sa.String)



  await db.schema.create_tables()

  async with db.session() as session:
      session.add_all([
          User(id=1, name='One'),
          User(id=2, name='Two'),
          User(id=3, name='Three'),
      ])
      await session.flush()

      
      user = await session.query(User).first()
  ```

  > Make sure the module with models is imported before you create tables.
  > Otherwise they will not be added to the `metadata` and, thus, not created.

  Full listing [examples/orm.py](examples/orm.py)



  Aerie's DbSession ships with pagination utilities out of the box. When you need to paginate a query just
  call `DbSession.paginate` method.

  ```python
  async with db.session() as session:
      page = await session.query(User).paginate(page=1, page_size=10)

      for user in page:
          print(user)

      print('Next page: %s' % page.next_page)
      print('Previous page: %s' % page.previous_page)
      print('Displaying items: %s - %s' % (page.start_index, page.end_index))
  ```

  The page object has more helper attributes:

  | Property      | Type | Description                                                                                              |
  |---------------|------|----------------------------------------------------------------------------------------------------------|
  | total_pages   | int  | Total pages in the row set.                                                                              |
  | has_next      | bool | Test if the next page is available.                                                                      |
  | has_previous  | bool | Test if the previous page is available.                                                                  |
  | has_other     | bool | Test if there are another pages except current one.                                                      |
  | next_page     | int  | Next page number. Always returns an integer. If there is no more pages the current page number returned. |
  | previous_page | int  | Previous page number. Always returns an integer. If there is no previous page, the number 1 returned.    |
  | start_index   | int  | The 1-based index of the first item on this page.                                                        |
  | end_index     | int  | The 1-based index of the last item on this page.                                                         |
  | total_rows    | int  | Total rows in result set.                                                                                |



  Alembic usage is well documented in the official
  docs: [Using Asyncio with Alembic](https://alembic.sqlalchemy.org/en/latest/cookbook.html#using-asyncio-with-alembic)

  Note, you need to use `aerie.metadata` when you configure `target_metadata` option:

  ```python


  from aerie import metadata

  target_metadata = metadata
  ```

  Also, don't forget to import all your models in Alembic's `env.py` file so their structure is fully loaded and no models
  forgotten.



  You can configure Aerie to populate Aerie.instances class-level variable, so you can access database instances from
  anywhere of your code. For that, just pass `name` argument to Aerie constructor.

  ```python


  from aerie import Aerie

  db = Aerie(name='shared', ...)


  db = Aerie.get_instance('shared')
  ```

  > Note, instances without name cannot be shared.


pkgId: b8e4b1857953f218685bc9ec52dbc5841dc97f231ad494bbfc278e94614afd0e
name: python-aeripy
arch: src
version: 0.2.16
epoch: 0
release: 1
summary: Aeries API Python Adapter
url: https://aeripy.readthedocs.io/
rpm_license: Simplified BSD License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aeripy-0.2.16-1.src.rpm
checksum_type: sha256
description:
  Aeripy is a Python adapter for the Aeries Student Information System API.  It's goal is to simplify interaction with your district's Aeries database.
  This library is mostly a wrapper for the popular `requests <https://github.com/psf/requests>`_ library.
  Note: Aeripy is in no way affiliated with Aeries Software, Inc. This module is based on their publicly available documentation.


pkgId: e6a4bc31bcea63332ac75a2734e471f2a42ea1c9ed446cd1a53a1d9205aa88b6
name: python-aerisweather
arch: src
version: 0.4.1
epoch: 0
release: 1
url: https://aerisweather.com
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerisweather-0.4.1-1.src.rpm
checksum_type: sha256
summary:
  The AerisWeather Python SDK allows a developer to quickly and easily add weather content and functionality to their Python applications.

description:
  The AerisWeather Python SDK allows a developer to quickly and easily add
  weather content and functionality to their Python applications.
  It utilizes the Aeris API backend for data loading and is built on
  top of an object mapping system that efficiently loads requested
  weather content into third-party Python applications, greatly
  reducing the amount of code and development needed on the developer end.
  **Requirements**
   The AerisWeather Python SDK is built using Python v3.6.
   *You also need:*
   - An active AerisWeather API account (don't have one? `sign up here <https://www.aerisweather.com/signup/pricing/>`_)
   - Python v3.6 or Higher
   - aenum v2.1.0 or Higher
   - requests lib
   *Note: To use the included Jupyter Notebook, you will also need to install the Jupyter kernel*
  **How to get it**
   - Download or link to the aerisweather package via The Python Package Index at `pypi.org/project/aerisweather <https://pypi.org/project/aerisweather/>`_
   - Get the code at the AerisWeather Python SDK project on `GitHub <https://github.com/aerisweather/python_sdk>`_
   - Visit the SDK's home at `<https://www.aerisweather.com/support/docs/toolkits/aeris-python-sdk/>`_.
  **Docs**
   - `Browse the code docs online <https://www.aerisweather.com/docs/python/Aeris/index.html>`_


pkgId: 2f251429f70cd658c1210ff07904c116801dc51245a675bab38dffdac45fc381
name: python-aerocae-robotics-controller
arch: src
version: 0.2.0
epoch: 0
release: 1
summary: Python control interface for aerocae robotics
url: https://pypi.org/project/aerocae-robotics-controller/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerocae-robotics-controller-0.2.0-1.src.rpm
checksum_type: sha256
description:
  Python networking interface for aerocae robotics.



  ```
  pip install --upgrade aerocae-robotics-controller
  ```



  ```
  import arcpy

  c = arcpy.Controller()
  obj = c.get_object(...)
  ...
  ```


pkgId: 2a5f1dfa6a75b4c8b9ddfc6a9a902ac604b38a8ccc409fcdaf6d8a3a5f85769d
name: python-aerofiles
arch: src
version: 1.4.0
epoch: 0
release: 1
summary: waypoint, task, tracklog readers and writers for aviation
url: https://github.com/Turbo87/aerofiles/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerofiles-1.4.0-1.src.rpm
checksum_type: sha256
description:
  **waypoint, task, tracklog readers and writers for aviation**
  This is a python library to read and write many important file formats
  for aviation. It is compatible with python 3.0 (and newer) and
  2.6. Please read the documentation under
  https://aerofiles.readthedocs.io for further information.


pkgId: 829da4a291f7bd1165ee3f705ae73aef7b98d87e2ed691f3e0cae7223dc8cda3
name: python-aeromaps
arch: src
version: 0.7.1b0
epoch: 0
release: 1
summary: AeroMAPS: Multidisciplinary Assessment of Prospective Scenarios for air transport
url: https://github.com/AeroMAPS/AeroMAPS
rpm_license: GPL-3.0-only
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aeromaps-0.7.1b0-1.src.rpm
checksum_type: sha256
description:
  AeroMAPS is a framework for performing Multidisciplinary Assessment of Prospective Scenarios for air transport. For
  instance, it allows simulating and analyzing scenarios for reducing aviation climate impacts through various levers of
  action. It is intended to become a sectoral Integrated Assessment Model (IAM) taking into account technological,
  environmental, sociological, economic and other considerations. It aims to assess the sustainability of simulated air
  transport transition scenarios on multiple criteria.
  AeroMAPS is licensed under the [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.en.html) license.
  A [documentation](https://aeromaps.github.io/AeroMAPS/) is available for more details on AeroMAPS.


pkgId: 4b41d1d52d275a6ed49b4b617d6c4ddb84bbd5d70787057201e8947fbfe786f3
name: python-aeroot
arch: src
version: 0.3.9
epoch: 0
release: 1
summary: Android Emulator Rooting system
url: https://github.com/quarkslab/AERoot
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aeroot-0.3.9-1.src.rpm
checksum_type: sha256
description:
  ![Python version](https://img.shields.io/badge/Python-%E2%89%A53.7-brightgreen?style=flat-square&logo=python "Python 3")
  ![Linux](https://img.shields.io/badge/Linux-x86__64-brightgreen?style=flat-square&logo=linux "Linux")
  ![macOS](https://img.shields.io/badge/macOS-x86__64-brightgreen?style=flat-square&logo=apple "macOS")
  [![Codestyle](https://img.shields.io/badge/codestyle-black-000000?style=flat-square)](https://github.com/psf/black)

  ![AERoot](https://user-images.githubusercontent.com/56136693/121723563-f4021c80-cae6-11eb-84bb-ac6d6dc32665.png "AERoot Logo")

  **AERoot** is a command line tool that allows you to give the root privileges on-the-fly to any process running on the Android emulator with Google Play flavors AVDs.
  > This project is a rewrite from scratch of the **android-emuroot** tool (https://github.com/airbus-seclab/android_emuroot).
  > It comes with new features:
  > * Recent AVDs support (Android API > 27)
  > * Execution time optimization
  > * Selection of a process by its PID



  | Kernel                                             | x86    | x86_64 | Android version              |
  |----------------------------------------------------|:------:|:------:|------------------------------|
  | 3.10.0+                                            | ✓      |        | 7.0 / 7.1                    |
  | 3.18.56+                                           | ✓      |        | 8.0                          |
  | 3.18.91+                                           | ✓      |        | 8.1                          |
  | 4.4.124+                                           | ✓      | ✓      | 9.0                          |
  | 4.14.112+                                          | ✓      | ✓      | 9.0 + 10.0 (TV / Automotive) |
  | 5.4.36-00815-g3b29042c17b1                         | ✓      | ✓      | 10.0                         |
  | 5.4.43-00621-g90087296b3b1                         | ✓      | ✓      | 10.0                         |
  | 5.4.47-01061-g22e35a1de440                         | ✓      | ✓      | 10.0                         |
  | 5.4.54-android11-0-00619-g476c942d9b3e-ab6722723   | ✓      | ✓      | 11.0                         |
  | 5.4.61-android11-0-00791-gbad091cc4bf3-ab6833933   | ✓      | ✓      | 11.0                         |
  | 5.4.61-android11-2-00064-g4271ad6e8ade-ab6991359   |        | ✓      | 11.0                         |
  | 5.4.86-android11-2-00006-gae78026f427c-ab7595864   |        | ✓      | 11.0 (Automotive)            |
  | 5.4.86-android11-2-00040-g29b2beadc627-ab7157994   | ✓      | ✓      | 11.0 (TV / Automotive)       |
  | 5.10.4-android12-0-03442-gf2684370d34d-ab7068937   |        | ✓      | 12.0                         |
  | 5.10.15-android12-0-01814-gfca78df78ef2-ab7137072  |        | ✓      | 12.0                         |
  | 5.10.21-android12-0-01012-gcc574f0d3698-ab7214561  |        | ✓      | 12.0                         |
  | 5.10.21-android12-0-01145-ge82381ad9a3f-ab7230153  |        | ✓      | 12.0                         |
  | 5.10.35-android12-4-00865-gd9d0c09e0a3b-ab7349034  |        | ✓      | 12.0                         |
  | 5.10.43-android12-6-00231-g54e7412d4ff9-ab7460289  |        | ✓      | 12.0                         |
  | 5.10.43-android12-9-00001-ga30f38980440-ab7882141  |        | ✓      | 12.0                         |
  | 5.10.66-android12-9-00022-g2d6a43c0364d-ab7992900  | ✓      |        | 12.0 (TV)                    |
  | 5.10.66-android12-9-00041-gfa9c9074531e-ab7914766  |        | ✓      | 12.0                         |
  | 5.10.102-android13-0-00549-g255b30f804ac-ab8238117 | ✓      | ✓      | 13.0 + 13.0 (TV)             |
  | 5.10.107-android13-2-00451-g7ba447d0399b-ab8409457 |        | ✓      | 13.0                         |
  | 5.15.32-android13-3-00067-g7b5e736d7c63-ab8474665  |        | ✓      | 13.0                         |
  | 5.15.41-android13-6-02245-g158384f20d1e-ab8610100  |        | ✓      | 13.0                         |
  | 5.15.41-android13-8-00205-gf1bf82c3dacd-ab8747247  |        | ✓      | 13.0                         |
  | 5.15.41-android13-8-00055-g4f5025129fe8-ab8949913  |        | ✓      | 13.0                         |
  | 5.15.83-android14-5-00138-g5e28b848962c-ab9412825  |        | ✓      | 14.0                         |
  | 6.1.12-android14-0-00356-g116e1532b95d-ab9618665   |        | ✓      | 14.0                         |
  | 6.1.21-android14-3-01811-g9e35a21ec03f-ab9850788   |        | ✓      | 14.0                         |
  | 6.1.23-android14-4-00257-g7e35917775b8-ab9964412   |        | ✓      | 14.0                         |



  AERoot requires [gdb](https://www.gnu.org/software/gdb/) (with Python support enabled) to run properly.





  ```console
  pip install aeroot
  ```



  ```console
  git clone https://github.com/quarkslab/AERoot.git
  ```

  ```console
  python3 setup.py install --user
  ```



  A Docker image of *AERoot* is available on [dockerhub](https://hub.docker.com/r/ha0ris/aeroot).

  Also, you can build an image by yourself:
  ```console
  docker build -t aeroot https://github.com/quarkslab/AERoot.git
  ```





  ```console
  docker run --rm \
             -v $HOME/.emulator_console_auth_token:$HOME/.emulator_console_auth_token \
             --network host \
             ha0ris/aeroot [aeroot options]
  ```



  ```console
  docker run --rm \
             -v $HOME/.emulator_console_auth_token:$HOME/.emulator_console_auth_token \
             --network host \
             ha0ris/aeroot daemon
  ```





  ```console
  docker run --rm \
             -v $HOME/.emulator_console_auth_token:$HOME/.emulator_console_auth_token \
             ha0ris/aeroot --host host.docker.internal [aeroot options]
  ```



  ```console
  docker run --rm \
             -v $HOME/.emulator_console_auth_token:$HOME/.emulator_console_auth_token \
             ha0ris/aeroot --host host.docker.internal daemon
  ```



  First of all, you must launch the Android emulator with the gdb qemu option (`-qemu -s`).
  ```console
  emulator @Your_AVD -qemu -s
  ```

  Then run **aeroot** by choosing the mode among:
  * **pid**: give the root privileges to a process selected by its *PID*.
  * **name**: give the root privileges to a process selected by its *name*.
  * **daemon**: give the root privileges to the ADB daemon, so shells created with adb shell will automaticaly have root rigths.



  ```console
  aeroot [-h] [--verbose | --quiet] [--device DEVICE] [--host HOST] [--port PORT] {name,pid,daemon} ...
  ```





  ```console
  aeroot pid 1337
  ```

  > Gives the root privileges to the process with pid 1337



  ```console
  aeroot name my_process
  ```

  > Gives the root privileges to the process named "my_process"



  ```console
  aeroot daemon
  ```

  > Gives the root privileges to the ADB daemon



  You can find additional options by checking the help of the tool: `aeroot -h`


pkgId: 38118bd9a2657d8713167d509ffe4fb4cb2484856259db64edb83b897c294d09
name: python-aeropress
arch: src
version: 0.0.48
epoch: 0
release: 1
summary: Helper for deploying Docker images to AWS ECS.
url: https://github.com/muraty/aeropress
rpm_license: BSD License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aeropress-0.0.48-1.src.rpm
checksum_type: sha256
description:
  ``aeropress`` is a CLI program for deploying Docker images to AWS ECS. It receives a folder path that includes
  ECS task and service definitions and then does the jobs respectively;
    - Register ECS task definitions
    - Create Cloudwatch metrics for scaling policies
    - Create or update scaling policies for ECS services
    - Create or update alarms on Cloudwatch
    - Create or update ECS services


pkgId: d4248aef245eadb84056eaee90c44f8d0df2d61465c24511ace53311833bc91a
name: python-aerospace-chatbot
arch: src
version: 0.0.8.5
epoch: 0
release: 1
summary: Aerospace engineering chatbot and AI tools.
url: https://github.com/dan-s-mueller/aerospace_chatbot/tree/main
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerospace-chatbot-0.0.8.5-1.src.rpm
checksum_type: sha256
description:
  Aerospace discipline-specific chatbots and AI tools.
  Help docs here: https://aerospace-chatbot.readthedocs.io/en/latest/


  See https://aerospace-chatbot.readthedocs.io/en/latest/help/deployments.html for details.


  > **Note:** For access to this demo, please reach out to [dsm@danmueller.pro](mailto:dsm@danmueller.pro) for an invite link.

  There is a deployment of Aerospace Chatbot, loaded with Aerospace Mecahnism Symposia papers going back to 2020 available as a demo.


pkgId: ee82d1d2ed348d11230ed9d22b79668a7affd6b219ae4e3f861b3f502148a4d9
name: python-aerospace-chatbot
arch: src
version: 0.0.9
epoch: 0
release: 1
summary: Aerospace engineering chatbot and AI tools.
url: https://github.com/dan-s-mueller/aerospace_chatbot/tree/main
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerospace-chatbot-0.0.9-1.src.rpm
checksum_type: sha256
description:
  Aerospace discipline-specific chatbots and AI tools.
  Help docs here: https://aerospace-chatbot.readthedocs.io/en/latest/


  See https://aerospace-chatbot.readthedocs.io/en/latest/help/deployments.html for details.


pkgId: 3b33aa676ff10c49bff2a6be19b6fa39acd3d83f700852b8c2bdea7f6fef3830
name: python-aerospace-chatbot
arch: src
version: 0.0.9.2
epoch: 0
release: 1
summary: Aerospace engineering chatbot and AI tools.
url: https://github.com/dan-s-mueller/aerospace_chatbot/tree/main
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerospace-chatbot-0.0.9.2-1.src.rpm
checksum_type: sha256
description:
  Aerospace discipline-specific chatbots and AI tools.
  Help docs here: https://aerospace-chatbot.readthedocs.io/en/latest/


  See https://danmueller.pro/ai-aerospace-tools/ for details.


pkgId: 4f6e779dd445aa824073ac2503585923dbd49b33b332cc5ec907dd23e83860da
name: python-aerospike-vector-search
arch: src
version: 3.0.1
epoch: 0
release: 1
summary: Aerospike Vector Search Client Library for Python
url: https://aerospike.com
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerospike-vector-search-3.0.1-1.src.rpm
checksum_type: sha256
description:
  Python client for Aerospike Vector Search Database


   - Python 3.9 or higher
   - pip version 9.0.1 or higher
   - Aerospike Vector Search DB and Aerospike clusters running.



  To resolve the client packages using pip, add the following to $HOME/.pip/pip.conf

  ```ini
  [global]
  extra-index-url=https://<jfrog-username>:<jfrog-access-token>@aerospike.jfrog.io/artifactory/api/pypi/ecosystem-python-dev-local/simple
  ```


  ```shell
  python3 -m pip install aerospike-vector-search
  ```
  Or

  You can add the package name `aerospike-vector-search` to your application's `requirements.txt` and install all dependencies using
  ```shell
  python3 -m pip install -r requirements.txt
  ```



  This is the recommended mode for building the python client.

  ```shell

  python3 -m venv .venv
  source .venv/bin/activate
  ```


  ```shell
  python3 -m pip install -vvv  -r requirements.txt
  ```


  ```shell

  ./proto/codegen.sh
  ```


  ```shell
  python3 -m pip install build
  python3 -m build
  ```



  See [examples](https://github.com/aerospike/proximus-examples) for working samples.


pkgId: 443eda2ff032e0881e520823c09467c6f52f7a3af6552a40fd55245fe2839767
name: python-aerostat-launcher
arch: src
version: 0.0.9
epoch: 0
release: 1
url: https://github.com/vinceyyy/Aerostat
rpm_license: GPL-3.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerostat-launcher-0.0.9-1.src.rpm
checksum_type: sha256
summary:
  A simple CLI tool to deploy your Machine Learning models to cloud, with public API and connection templates ready to go.

description:
  A simple CLI tool to deploy your Machine Learning models to cloud, with public API and template connections ready to go.



  The name `Aerostat` has been used by another PyPI project, please install this package with:
  ```bash
  pip install aerostat-launcher
  ```
  Once installed, it can be used directly via `aerostat`. If it doesn't work, add `python -m` prefix to all commands,
  i.e. `python -m aerostat deploy`.

  Only three commands needed for deploying your model: `install`, `login`, and `deploy`.


  1. Run the following command to install all the dependencies needed to run Aerostat. Please allow installation in the pop-up window to
     continue.
  ```bash
  aerostat install
  ```

  2. To login to Aerostat, you need to run the following command:
  ```bash
  aerostat login
  ```
  You will be prompted to choose an existing AWS credentials, or enter a new one. The AWS account used needs to have **AdministratorAccess**.


  To deploy your model, you need to dump your model to a file with pickle, and run the following command:
  ```bash
  aerostat deploy
  ```
  You will be prompted to enter:
  - the path to your model file
  - the input columns of your model
  - the ML library used for your model
  - the name of your project

  Or you can provide these information as command line options like:
  ```bash
  aerostat deploy --model-path /path/to/model --input-columns "['col1','col2','col3']" --python-dependencies scikit-learn --project-name my-project
  ```


  Aerostat provides connection templates to use your model in various applications once it is deployed. Currently, it includes templates for:
  - Microsoft Excel
  - Google Sheets
  - Python / Jupyter Notebook

  Visit the URL produced by the `aerostat deploy` command to test your model on cloud, and get the connection templates.



  To list all the projects you have deployed, run:
  ```bash
  aerostat ls
  ```


  To find deployment information of a specific project, such as API endpoint, run:
  ```bash
  aerostat info
  ```
  then choose the project from the list. You can also provide the project name as a command line option like:
  ```bash
  aerostat info my-project
  ```


  - Improve user interface, including rewrite prompts with Rich, use more colors and emojis
  - Add unit tests
  - Adopt [Semantic Versioning](https://semver.org) once reach v0.1.0 and add
    CI/[CD](https://mestrak.com/blog/semantic-release-with-python-poetry-github-actions-20nn)
  - Support SSO login
  - Support deploying to GCP


pkgId: 9c0cad8221453f7ac587b0e31a4276ff7b5daaac5d98724a003b963b885a9d70
name: python-aerovaldb
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: aeroval database to communicate between pyaerocom and aeroval
url: https://github.com/metno/aerovaldb
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aerovaldb-0.1.4-1.src.rpm
checksum_type: sha256
description:
  aerovaldb is the database-interface used in the aeroval-API to send data to
  aeroval database instances like https://aeroval.met.no . Data is usually provided
  by [PyAerocom](https://pyaerocom.readthedocs.io).

  The scope of aerovaldb are:

  1. A well-tested read-interface for reading resources as python-object, json or json_filehandle.
  2. A interface to write/extend python objects to the resources2.
  3. At least one implementation (largely based on json files) implementing the read-interface. (needed for testing)
  4. At least one implementation (largely based on json files) implementing the write-interface.

  Our documentation can be found [here](https://aerovaldb.readthedocs.io/)



  1. As pyaerocom-programmer using aerovaldb I want to have documented functions with arguments, e.g. `put_heatmap(hm, country, component)`
  2. As a pyaerocom-progammer, I want to be able to write to a new datasource/format by just updating a config-file
  3. As a pyaerocom-user, I want to be able to upgrade an experiment without thinking about the dabase format.
  4. From a DB-implementer I want to have a resource-name (table/path) with parameters as dictionary, e.g.
      `open(f"path/to/heatmaps/{country}/{component}.json")` or `SELECT * FROM PATH_TO_HEATMAPS where country = ? and component = ?`
  5. As Web-developer using aerovaldb, I have to map routes to function, and I have parameters for the routes.
  6. As a Web-developer, I don't want to need to know the type of the aerovaldb-implementation and can auto-guess from a location.
  7. As a web-developer, I might need to handle databases in different formats depending on when the user set up the experiment.
  8. For performance, I want to avoid unnecessary json/obj transformations, so I want to put/get obj or json or filehandle
     and the database might want to decide how to handle that fastest. obj should be the default, json is required,
     filehandle is optional (and only for get-operations.).  (this requirement might be premature optimization? to be discussed ...)
  9. To be discussed: do we want to allow the programmer to set open-modes, e.g. 'r', 'rw', 'w'?


  `python -m pip install 'aerovaldb@git+https://github.com/metno/aerovaldb.git'`






  ```python
  import aerovaldb

  with aerovaldb.open('json_files:path/to/data/') as db:
      try:
          fh = db.get_map(*args, access_type=aerovaldb.AccessType.FILE_PATH)
          
      except FileNotFoundError as e:
          json = db.get_map(*args, access_type=aerovaldb.AccessType.JSON_STR)
          

  ```



  ```python
  import aerovaldb
  import json

  with aerovaldb.open('json_files:path/to/data/') as db:
      db.put
      obj = {"data": "Some test data"}
      json_str = "{ 'data': 'Some test data' }"
      db.put_map(json_str) # String is assumed to be json string and stored directly.

      db.put_map(obj) # Otherwise serialized object is stored.
  ```



  | Data               | Getter                      | Setter                      |
  |--------------------|-----------------------------|-----------------------------|
  | glob_stats         | db.get_glob_stats()         | db.put_glob_stats()         |
  | experiments        | db.get_experiments()        | db.get_experiments()        |
  | config             | db.get_config()             | db.get_config()             |
  | menu               | db.get_menu()               | db.put_menu()               |
  | statistics         | db.get_statistics()         | db.put_statistics()         |
  | ranges             | db.get_ranges()             | db.put_ranges()             |
  | regions            | db.get_regions()            | db.put_regions()            |
  | models_style       | db.get_models_style()       | db.put_models_style()       |
  | map                | db.get_map()                | db.put_map()                |
  | time series        | db.get_timeseries()         | db.put_timeseries()         |
  | time series weekly | db.get_timeseries_weekly()  | db.put_timeseries_weekly()  |
  | scatter            | db.get_scatter()            | db.put_scatter()            |
  | profiles           | db.get_profiles()           | db.put_profiles()           |
  | heatmap timeseries | db.get_heatmap_timeseries() | db.put_heatmap_timeseries() |
  | forecast           | db.get_forecast()           | db.put_forecast()           |
  | contour            | db.get_contour()            | db.put_contour()            |
  | gridded map        | db.get_gridded_map()        | db.put_gridded_map()        |
  | report             | db.get_report()             | db.put_report()             |








  Copyright (C) 2024  Augustin Mortier, Thorbjørn Lunding, Heiko Klein, Norwegian Meteorological Institute

  This library 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 library 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
  Lesser General Public License for more details.

  You should have received a copy of the GNU General Public
  License along with this library; if not, see https://www.gnu.org/licenses/


pkgId: 988cfce5aa7e1662e11dd5f7b621ec1017da4c732c2ddac279b514b067a6456a
name: python-aes-cipher
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: Cipher based on AES256-CBC
url: https://github.com/ebellocchia/aes_cipher
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aes-cipher-2.0.1-1.src.rpm
checksum_type: sha256
description:
  | |
  |---|
  | [![PyPI - Version](https://img.shields.io/pypi/v/aes_cipher.svg?logo=pypi&label=PyPI&logoColor=gold)](https://pypi.org/project/aes_cipher/) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/aes_cipher.svg?logo=python&label=Python&logoColor=gold)](https://pypi.org/project/aes_cipher/) [![GitHub License](https://img.shields.io/github/license/ebellocchia/aes_cipher?label=License)](https://github.com/ebellocchia/aes_cipher?tab=MIT-1-ov-file) |
  | [![Code Coverage](https://github.com/ebellocchia/aes_cipher/actions/workflows/codecov.yml/badge.svg)](https://github.com/ebellocchia/aes_cipher/actions/workflows/codecov.yml) [![Code Analysis](https://github.com/ebellocchia/aes_cipher/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/ebellocchia/aes_cipher/actions/workflows/code-analysis.yml) [![Build & Test](https://github.com/ebellocchia/aes_cipher/actions/workflows/test.yml/badge.svg)](https://github.com/ebellocchia/aes_cipher/actions/workflows/test.yml) |
  | [![Codecov](https://img.shields.io/codecov/c/github/ebellocchia/aes_cipher?label=Code%20Coverage)](https://codecov.io/gh/ebellocchia/aes_cipher) [![Codacy grade](https://img.shields.io/codacy/grade/9afd9788aa0e43faa491edcf6ed29d5e?label=Codacy%20Grade)](https://app.codacy.com/gh/ebellocchia/aes_cipher/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![CodeFactor Grade](https://img.shields.io/codefactor/grade/github/ebellocchia/aes_cipher?label=CodeFactor%20Grade)](https://www.codefactor.io/repository/github/ebellocchia/aes_cipher) |
  | |



  AES cipher is a library to encrypt/decrypt using AES256-CBC. It is possible to encrypt/decrypt both files and raw data (string or bytes).



  1. A master key and IV are derived from the given password and (optionally) salt using a key derivation function. The key derivation function can be chosen among the provided ones:
     - PBKDF2-SHA512
     - Scrypt

      Alternatively, it can also be customized by the user by simply implementing the `IKeyDerivator` interface.\
      Salt is randomly generated (16-byte long) if not specified.
  2. A random key and IV are generated and used to encrypt the actual data. In this way, if the same file is encrypted with the same password multiple times, the encrypted file will always be different.
  3. The random key and IV are encrypted with the master key and IV
  4. HMAC-SHA256 of the encrypted key/IV and file data is computed to ensure integrity, using the master key as key

  It is possible to specify either a single password or a list of passwords.
  In the last case, the file will be encrypted multiple times with a different password and salt each time.



  The package requires Python >= 3.7.

  To install it:
  - Using *setuptools*:

          python setup.py install

  - Using *pip*:

          pip install aes_cipher



  Install develop dependencies:

      pip install -r requirements-dev.txt

  To run tests:

      python -m unittest discover

  To run tests with coverage:

      coverage run -m unittest discover
      coverage report





  `Pbkdf2Sha512` class: derive keys using PBKDF2-SHA512 algorithm
    - `Pbkdf2Sha512(itr_num)`: construct the class
      - `itr_num`: iterations number

  For default values, the `Pbkdf2Sha512Default` class instance can be used:

      Pbkdf2Sha512Default = Pbkdf2Sha512(512 * 1024)

  `Scrypt` class: derive keys using Scrypt algorithm
    - `Scrypt(n, p, r)`: construct the class
      - `n`: CPU/Memory cost parameter
      - `p`: block size parameter
      - `r`: parallelization parameter

  For default values, the `ScryptDefault` class instance can be used:

      ScryptDefault = Scrypt(16384, 8, 8)

  To add a custom key derivation function, the `IKeyDerivator` interface shall be implemented:

      class IKeyDerivator(ABC):
          @abstractmethod
          def DeriveKey(self,
                        password: Union[str, bytes],
                        salt: Union[str, bytes]) -> bytes:
              pass

  The only requirement is that the output of the `DeriveKey` method is at least 48-byte long.\
  A constructor can be added to customize the algorithm.



  `DataEncrypter` class: encrypt bytes or string data

  - `DataEncrypter(key_derivator)`: construct the class
    - `key_derivator`: key derivator to be used for master key and IV generation, it shall be an instance of the `IKeyDerivator` interface. Default value: `Pbkdf2Sha512Default`.
  - `DataEncrypter.Encrypt(data, passwords [, salts])`: encrypt data with the specified passwords and salts
      - `data`: input data (string or bytes)
      - `passwords`: list of passwords (list of strings)
      - `salts` (optional): list of salts (list of strings). The number of salts shall be the same of the passwords. If not specified, salts will be randomly generated (16-byte long).
  - `DataEncrypter.GetEncryptedData()`: get encrypted data (bytes)

  `FileEncrypter` class: encrypt a file

  - `FileEncrypter(key_derivator)`: construct the class
    - `key_derivator`: see `DataEncrypter` constructor
  - `FileEncrypter.Encrypt(file_in, passwords [, salts])`: encrypt file with the specified passwords and salts
      - `file_in`: input file
      - `passwords`: see `DataEncrypter.Encrypt`
      - `salts`: see `DataEncrypter.Encrypt`
  - `FileEncrypter.GetEncryptedData()`: get encrypted data (bytes)
  - `FileEncrypter.SaveTo(file_out)`: save to file
      - `file_out`: output file to be saved



  `DataDecrypter` class: decrypt bytes or string data

  - `DataDecrypter(key_derivator)`: construct the class
    - `key_derivator`: key derivator to be used for master key and IV generation, it shall be an instance of the `IKeyDerivator` interface. Default value: `Pbkdf2Sha512Default`.
  - `DataDecrypter.Decrypt(data, passwords)`: decrypt data with the specified passwords
      - `data`: input data (string or bytes)
      - `passwords`: see `DataEncrypter.Encrypt`
  - `DataDecrypter.GetDecryptedData()`: get decrypted data (bytes)

  `FileDecrypter` class: decrypt a file

  - `FileDecrypter(key_derivator)`: construct the class
    - `key_derivator`: see `DataDecrypter` constructor
  - `FileDecrypter.Decrypt(file_in, passwords)`
      - `file_in`: input file
      - `passwords`: see `DataDecrypter.Decrypt`
  - `FileDecrypter.GetDecryptedData()`: get decrypted data (bytes)
  - `FileDecrypter.SaveTo(file_out)`: save to file
      - `file_out`: output file to be saved



  Data encryption with single password and random salt, using PBKDF2-SHA512 algorithm with default values:

      data_encrypter = DataEncrypter(Pbkdf2Sha512Default)
      data_encrypter.Encrypt(data, "test_pwd")
      enc_data = data_encrypter.GetEncryptedData()

  Data encryption with single password and custom salt, using PBKDF2-SHA512 algorithm with custom values:

      data_encrypter = DataEncrypter(
          Pbkdf2Sha512(1024 * 1024)
      )
      data_encrypter.Encrypt(data, ["test_pwd"], ["test_salt"])
      enc_data = data_encrypter.GetEncryptedData()

  Data encryption with multiple passwords and custom salts, using Scrypt algorithm with default values:

      data_encrypter = DataEncrypter(ScryptDefault)
      data_encrypter.Encrypt(data, ["test_pwd_1", "test_pwd_2"], ["test_salt_1", "test_salt_2"])
      enc_data = data_encrypter.GetEncryptedData()

  Data decryption with single password and random salt:

      data_decrypter = DataDecrypter()
      data_decrypter.Decrypt(data, ["test_pwd"])
      dec_data = data_decrypter.GetDecryptedData()

  Data decryption with multiple passwords and custom salts:

      data_decrypter = DataDecrypter()
      data_decrypter.Decrypt(data, ["test_pwd_1", "test_pwd_2"], ["test_salt_1", "test_salt_2"])
      dec_data = data_decrypter.GetDecryptedData()

  File encryption with single password and random salt:

      file_encrypter = FileEncrypter()
      file_encrypter.Encrypt(file_in, "test_pwd")
      file_encrypter.SaveTo(file_out)

  Enable logging:

      data_encrypter = DataEncrypter()
      data_encrypter.Logger().SetLevel(logging.INFO)

      data_decrypter = DataDecrypter()
      data_decrypter.Logger().SetLevel(logging.INFO)



  A sample application based on the library using the PBKDF2-SHA512 algorithm can be found in the *app* folder.

  Basic usage:

      python aes_cipher_app.py -m <enc:dec> -p <password1,password2,...> -i <input_files_or_folder> -o <output_folder> [-s <salt1,salt2,...>] [-t <itr_num>] [-v] [-h]

  Parameters description:

  |Short name|Long name| Description                                                                                                                                                                   |
  |---|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  |`-m`|`--mode`| Operational mode: `enc` for encrypting, `dec` for decrypting                                                                                                                  |
  |`-p`|`--password`| Password used for encrypting/decrypting. It can be a single password or a list of passwords separated by a comma                                                              |
  |`-i`|`--input`| Input to be encrypted/decrypted. It can be a single file, a list of files separated by a comma or a folder (in this case all files in the folder will be encrypted/decrypted) |
  |`-o`|`--output`| Output folder where the encrypted/decrypted files will be saved                                                                                                               |
  |`-s`|`--salt`| Optional: custom salts for master key and IV derivation, random if not specified`                                                                                             |
  |`-t`|`--iteration`| Optional: number of iteration for the PBKDF2-SHA512 algorithm, default value: 524288                                                                                          |
  |`-v`|`--verbose`| Optional: enable verbose mode                                                                                                                                                 |
  |`-h`|`--help`| Optional: print usage and exit                                                                                                                                                |

  **NOTE:** the password shall not contain spaces or commas (in this case it will be interpreted as multiple passwords)

  Examples:

  - Encrypt a file one time with the given password and salt. If *input_file* is a folder, all the files inside the folder will be encrypted:

          python aes_cipher_app.py -m enc -p test_pwd -i input_file -o encrypted -s test_salt

  - Decrypt the previous file:

          python aes_cipher_app.py -m dec -p test_pwd -i encrypted -o decrypted -s test_salt

  - Encrypt multiple files one time with the given password and salt. If one of the input files is a directory, it will be discarded:

          python aes_cipher_app.py -m enc -p test_pwd -i input_file1,input_file2,input_file3 -o encrypted -s test_salt

  - Encrypt a file 3 times using 3 passwords with random salts and custom number of iteration:

          python aes_cipher_app.py -m enc -p test_pwd_1,test_pwd_2,test_pwd_3 -t 131072 -i input_file -o encrypted

  - Decrypt the previous file:

          python aes_cipher_app.py -m dec -p test_pwd_1,test_pwd_2,test_pwd_3 -t 131072 -i encrypted -o decrypted


pkgId: 08b13b819651ede1f926eb267c659daf80c655f06852def15beab877da51f9f0
name: python-aes-crypto-utils
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: A simple encryption and decryption utility library.
url: https://pypi.org/project/aes-crypto-utils/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aes-crypto-utils-0.1.0-1.src.rpm
checksum_type: sha256
description:
  `crypto_utils` is a simple Python library for encrypting and decrypting strings using AES.



  To install, use `pip`:
  ```bash
  pip install crypto_utils


pkgId: 994027a83c638c2c645732ef195c98a12a1c8ccf16629cea988d3e10fdadd9c1
name: python-aes-everywhere
arch: src
version: 1.2.10
epoch: 0
release: 1
summary: AES Everywhere - Cross Language Encryption Library
url: https://github.com/mervick/aes-everywhere
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aes-everywhere-1.2.10-1.src.rpm
checksum_type: sha256
description:
  AES Everywhere is Cross Language Encryption Library which provides the ability to encrypt and decrypt data using a single algorithm in different programming languages and on different platforms.

  This is an implementation of the AES algorithm, specifically CBC mode, with 256 bits key length and PKCS7 padding.
  It implements OpenSSL compatible cryptography with random generated salt




  Python versions >= 2.7, < 3.8


  ```shell
  pip install aes-everywhere
  ```




  ```python
  from AesEverywhere import aes256


  encrypted = aes256.encrypt('TEXT', 'PASSWORD')
  print(encrypted)


  print(aes256.decrypt(encrypted, 'PASSWORD'))
  ```


pkgId: f45f62fee395dc5b1c166dd66d40c102198f812c76e91574dbfc2ffdf6f32efd
name: python-aesara
arch: src
version: 2.9.4
epoch: 0
release: 1
url: https://github.com/aesara-devs/aesara
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aesara-2.9.4-1.src.rpm
checksum_type: sha256
summary:
  A library for defining, optimizing, and efficiently evaluating mathematical expressions involving multi-dimensional arrays.

description:
  Aesara is a Python library that allows you to define, optimize, and efficiently evaluate mathematical expressions involving multi-dimensional arrays. It is built on top of NumPy_. Aesara features:

   * **tight integration with NumPy:** a similar interface to NumPy's. numpy.ndarrays are also used internally in Aesara-compiled functions.
   * **efficient symbolic differentiation:** Aesara can compute derivatives for functions of one or many inputs.
   * **speed and stability optimizations:** avoid nasty bugs when computing expressions such as log(1 + exp(x)) for large values of x.
   * **dynamic C code generation:** evaluate expressions faster.
   * **extensive unit-testing and self-verification:** includes tools for detecting and diagnosing bugs and/or potential problems.

  .. _NumPy: http://numpy.scipy.org/


pkgId: a4030716f43f3d725952ddf8933c99c23d4288267bb757571ea3791eff3a6d73
name: python-aesir
arch: src
version: 0.4.9
epoch: 0
release: 1
summary: Command line interface used for generating local Lightning test environment
url: https://pypi.org/project/aesir/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aesir-0.4.9-1.src.rpm
checksum_type: sha256
description:
  [![Bitcoin-only](https://img.shields.io/badge/bitcoin-only-FF9900?logo=bitcoin)](https://twentyone.world)
  [![LN](https://img.shields.io/badge/lightning-792EE5?logo=lightning)](https://mempool.space/lightning)
  [![Docker](https://img.shields.io/badge/docker-2496ED?&logo=docker&logoColor=white)](https://hub.docker.com)
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/krutt/aesir/blob/master/LICENSE)
  [![Top](https://img.shields.io/github/languages/top/krutt/aesir)](https://github.com/krutt/aesir)
  [![Languages](https://img.shields.io/github/languages/count/krutt/aesir)](https://github.com/krutt/aesir)
  [![Size](https://img.shields.io/github/repo-size/krutt/aesir)](https://github.com/krutt/aesir)
  [![Last commit](https://img.shields.io/github/last-commit/krutt/aesir/master)](https://github.com/krutt/aesir)

  [![Aesir banner](https://github.com/krutt/aesir/blob/master/static/aesir-banner.svg)](static/aesir-banner.svg)



  * python (3.8+)
  * pip
  * docker



  You can use `aesir` simply by installing via `pip` on your Terminal.

  ```sh
  pip install aesir
  ```

  And then you can begin deploying local cluster as such:

  ```sh
  aesir deploy
  ```

  The initial deployment may take some time at pulling required images from their respective
  repositories. Results may look as such:

  ```sh
  $ pip install aesir
  > ...
  > Installing collected packages: aesir
  > Successfully installed aesir-0.4.3
  $ aesir deploy
  > Deploy specified local cluster:            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:01
  > Generate addresses:                        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
  > Mine initial capital for parties:          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
  ```

  You will have docker containers running in the backend, ready to be interfaced by your local
  environment applications you are developing.



  In order to properly test many functionalities, you will need to send mining commands to local
  setup. You can achieve completely local and running environment with the following command:

  [![Demonstration](static/demo.gif)](https://github.com/krutt/aesir/blob/master/static/demo.gif)



  Currently there are two supported cluster-types in this project. Specified by flags,
  `--duo` (default), or `--cat`, `--ohm`, `--uno` with the following set-up:

  | Type | Description                                                                |
  | ---- | -------------------------------------------------------------------------- |
  |  cat | Customized `aesir-bitcoind-cat` node that has OP_CAT enabled for experiments |
  |  duo | Contains two LND nodes named `aesir-ping` and `aesir-pong` unified by <br> one single `aesir-bitcoind` service. |
  |  ohm | Only has `aesir-bitcoind` without any Lightning nodes. |
  |  uno | Only has one LND node named `aesir-lnd` connected to `aesir-bitcoind`. |



  This project also helps you setup peripheral services to make development process easier, too.
  For example, if you want to deploy a duo-cluster with attached postgres database, run the following:

  ```sh
  $ aesir deploy --with-postgres
  > ...
  $ aesir mine
  > ╭───── containers ─────╮┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━━┓
  > │ aesir-postgres       │┃ Name          ┃ Nodekey      ┃ Channels  ┃ Peers  ┃ Height ┃ Synced? ┃
  > │ aesir-pong           │┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━━━━━┩
  > │ aesir-ping           ││ aesir-pong    │ 3da33d3eb12  │ 2         │ 1      │ 216    │    true │
  > │ aesir-bitcoind       ││               │ deacf4e1a64  │           │        │        │         │
  > │ ...                  ││ ...           │ ...          │ ...       │ ...    │ ...    │ ...     │
  ```

  Or run an uno-cluster with both attached postgres database and redis solid store cache like this:

  ```sh
  $ aesir deploy --uno --with-postgres --with-redis
  > ...
  $ aesir mine
  > ╭───── containers ─────╮┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━━━┓
  > │ aesir-postgres       │┃ Name          ┃ Nodekey      ┃ Channels  ┃ Peers  ┃ Height ┃ Synced? ┃
  > │ aesir-redis          │┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━━━━━┩
  > │ aesir-lnd            ││ aesir-lnd     │ c0ae6b158d0  │ 0         │ 0      │ 202    │    true │
  > │ aesir-bitcoind       ││               │ 4194459b8f3  │           │        │        │         │
  > │ ...                  ││ ...           │ ...          │ ...       │ ...    │ ...    │ ...     │
  ```



  Use the following command to clean up active `aesir-*` containers:

  ```sh
  aesir clean
  ```

  🚧  This will resets the current test state, so use with care. Example below:

  ```sh
  $ aesir clean
  > Remove active containers:                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:01
  ```



  * **0.3.1** Add `aesir-cashu-mint` & `aesir-lnd-krub` image setups and deployments w/ shared volumes
  * **0.3.2** Define classifiers on `pyproject.toml` for PyPI metadata
  * **0.3.3** Drop `black` and use [ruff](https://github.com/astral-sh/ruff) formatter and linter
  * **0.3.4** Simplify deployment workflows and
  * **0.3.5** Restructure project so that when installed, `src` folder will not be created
  * **0.3.6** Breakdown "setup" command into "build" and "pull"
  * **0.3.7** Lightning cluster now with [ord](https://github.com/ordinals/ord)
  * **0.3.8** Rename "ord" to "ord-server" to avoid confusion with cli
  * **0.3.9** Remove intermediate containers
  * **0.4.0** Resist electricity with "ohm" mode
  * **0.4.1** Remove Ordinals' spiked ball
  * **0.4.2** Disable bitcoind prune mode
  * **0.4.3** Implement dashboard walkthrough using [blessed](https://github.com/chj/blessed)
  * **0.4.4** Add `cat` cluster in deployment and `--bitcoind-cat` flag for customized build
  * **0.4.5** The Yggdrasil update where docker build logs are chunked for display
  * **0.4.6** Create default wallet if no lnd containers
  * **0.4.7** (reverted) Remove unittesting from image build process
  * **0.4.8** Follow [Productivity Notes](https://github.com/bitcoin/bitcoin/blob/master/doc/productivity.md) for `bitcoind-cat`; Fix progress bar overlap.



  * Simplify `schema.yml` and embed commands to service definitions
  * De-couple from `polarlightning` images and build from aesir definitions
  * Remove `deprecated` section
  * Write [click](https://click.palletsprojects.com) tests.
  * Add `aesir-tesla-ball` peripheral service using [tesla-ball](https://github.com/krutt/tesla-ball)
  * Use [joblib](https://github.com/joblib/joblib) to speed up deployment with parallelization.
  * Create and add some type of `ordapi` peripheral service.





  The following guide walks through setting up your local working environment using `pyenv`
  as Python version manager and `uv` as Python package manager. If you do not have `pyenv`
  installed, run the following command.

  <details>
    <summary> Install using Homebrew (Darwin) </summary>

    ```sh
    brew install pyenv --head
    ```
  </details>

  <details>
    <summary> Install using standalone installer (Darwin and Linux) </summary>

    ```sh
    curl https://pyenv.run | bash
    ```
  </details>

  If you do not have `uv` installed, run the following command.

  <details>
    <summary> Install using Homebrew (Darwin) </summary>

    ```sh
    brew install uv
    ```
  </details>

  <details>
    <summary> Install using standalone installer (Darwin and Linux) </summary>

    ```sh
    curl -LsSf https://astral.sh/uv/install.sh | sh
    ```
  </details>


  Once you have `pyenv` Python version manager installed, you can
  install any version of Python above version 3.9 for this project.
  The following commands help you set up and activate a Python virtual
  environment where `uv` can download project dependencies from the `PyPI`
  open-sourced registry defined under `pyproject.toml` file.

  <details>
    <summary> Set up environment and synchroniz project dependencies </summary>

    ```sh
    pyenv shell 3.11.9
    uv venv  --python-preference system
    source .venv/bin/activate
    uv sync --dev
    ```
  </details>



  You may run into this setback when first running this project. This is a
  [docker-py](https://github.com/docker/docker-py/issues/3059) issue widely known as of October 2022.

  ```python
  docker.errors.DockerException:
    Error while fetching server API version: (
      'Connection aborted.', FileNotFoundError(
        2, 'No such file or directory'
      )
    )
  ```

  See the following issue for Mac OSX troubleshooting.
  [docker from_env and pull is broken on mac](https://github.com/docker/docker-py/issues/3059#issuecomment-1294369344)
  Recommended fix is to run the following command:

  ```sh
  sudo ln -s "$HOME/.docker/run/docker.sock" /var/run/docker.sock
  ```



  This project is licensed under the terms of the MIT license.


pkgId: dbc4e1b48d201fab1c543ab4e1c3f2eae2c5db4e4c98c44012e7ec47876a772f
name: python-aeskeyschedule
arch: src
version: 0.0.3
epoch: 0
release: 1
summary: Tool to calculate the Rijndael key schedule given any AES-128 round key.
url: https://github.com/fanosta/aeskeyschedule
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aeskeyschedule-0.0.3-1.src.rpm
checksum_type: sha256
description:
  This tool can be used as either a python library or a command line tool

  This project is available on pypi
  ```
  pip3 install aeskeyschedule --user --upgrade
  ```


  ```
  usage: aeskeyschedule [-h] [-r AES_ROUND] round_key

  Tool to calculate the Rijndael key schedule given any AES-128 round key.

  positional arguments:
    round_key             the round key in hex notation from which the full key
                          will be derived.

  optional arguments:
    -h, --help            show this help message and exit
    -r AES_ROUND, --round AES_ROUND
                          The AES round of the provided key. Defaults to 0 (base
                          key).
  ```

  View the AES expanded key given the base key
  ```
  $ aeskeyschedule 00000000000000000000000000000000
   0: 00000000000000000000000000000000
   1: 62636363626363636263636362636363
   2: 9b9898c9f9fbfbaa9b9898c9f9fbfbaa
   3: 90973450696ccffaf2f457330b0fac99
   4: ee06da7b876a1581759e42b27e91ee2b
   5: 7f2e2b88f8443e098dda7cbbf34b9290
   6: ec614b851425758c99ff09376ab49ba7
   7: 217517873550620bacaf6b3cc61bf09b
   8: 0ef903333ba9613897060a04511dfa9f
   9: b1d4d8e28a7db9da1d7bb3de4c664941
  10: b4ef5bcb3e92e21123e951cf6f8f188e
  ```

  Reverse the AES-128 key schedule using the last round key

  ```
  $ aeskeyschedule --round 10 002a5e9033d14c1f03ed911164b9be02
   0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   1: 07060606adacacac07060606adacacac
   2: 94979793393b3b3f3e3d3d3993919195
   3: 1116bd4f282d86701610bb4985812adc
   4: 15f33bd83ddebda82bce06e1ae4f2c3d
   5: 81821c3cbc5ca1949792a77539dd8b48
   6: 60bf4e2edce3efba4b7148cf72acc387
   7: b191596e6d72b6d42603fe1b54af3d9c
   8: 48b6874e25c4319a03c7cf815768f21d
   9: 163f231533fb128f303cdd0e67542f13
  10: 002a5e9033d14c1f03ed911164b9be02
  ```



  The two main functions are `key_schedule` and `reverse_key_schedule`

  Calculate the AES-128 base key given the last round key:
  ```python3
  base_key = reverse_key_schedule(b'\xe2K\xbb"~\xe8\xb3\xe6u\x06_\xdb\x9b\xd6\x9bB', 10)
  ```

  Calculate the last round key using an AES-128 base key:
  ```python3
  base_key = b'\x91\xa3\xba\x04\xe3\xdb:\x10\xc7$R\x15|]\xca\x87'
  expanded_key = key_schedule(base_key)
  assert expanded_key[0] == base_key
  last_round_key = expanded_key[10]
  ```


pkgId: fee5e717adb4c9acbb9660c584a5fd32d4a5cac056f7a7d3862fe0dc35f38e9f
name: python-aespm
arch: src
version: 1.1.3
epoch: 0
release: 1
summary: SPM Automation with Python and Machine Learning.
url: https://github.com/RichardLiuCoding/aespm
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aespm-1.1.3-1.src.rpm
checksum_type: sha256
description:
  Python interface that enables local and remote control of Scanning Probe Microscope (SPM) with codes.
  It offers a modular way to write autonomous workflows ranging from simple routine operations, to advanced automatic scientific discovery based on machine learning.


pkgId: 32fe5a8d6262bb4f2b75f3abca1af3caeef76598be0148f7749bd427df228351
name: python-aetcd
arch: src
version: 1.0.0a4
epoch: 0
release: 1
summary: Python asyncio-based client for etcd
url: https://github.com/martyanov/aetcd
rpm_license: Apache Software License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aetcd-1.0.0a4-1.src.rpm
checksum_type: sha256
description:
  Installation
  ~~~~~~~~~~~~
      $ python -m pip install aetcd
  Basic usage
  ~~~~~~~~~~~
  Run ``asyncio`` REPL:
      $ python -m asyncio
  Test the client:
      import aetcd
      async with aetcd.Client() as client:
          await client.put(b'foo', b'bar')
          await client.get(b'foo')
          await client.delete(b'foo')
  Acknowledgements
  ~~~~~~~~~~~~~~~~
  This project is a fork of `etcd3aio`_, which itself is a fork
  of `python-etcd3`_. ``python-etcd3`` was originally written by `kragniz`_. ``asyncio`` suppport
  was contributed by `hron`_ and based on the previous work by `gjcarneiro`_. Many thanks to all
  the `people`_ involved in the project.


pkgId: 550fd073be2f7709801e39c70b04d9deacdb12d4f9fceef61cddb08a8a3faf1c
name: python-aett-domain
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: Domain modeling types aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-domain-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-domain)](https://pepy.tech/project/aett-domain)

  Aett Domain provide base classes for `aggregate` and `saga` as encapsulations of business rules and processes, respectively.



  The `Aggregate` class is abstract and a subtype aggregate would implement the external interfaces and internal behavior
  and define which events are raised as a response input.

  ```python
  from aett.domain.Domain import Aggregate
  from dataclasses import dataclass
  from aett.eventstore.EventStream import EventStream, Memento, DomainEvent
  import datetime


  @dataclass(frozen=True, kw_only=True)
  class SampleEvent(DomainEvent):
      value: int


  class ExampleAggregate(Aggregate[Memento]):
      def __init__(self, event_stream: EventStream, memento: Memento = None):
          self.value = 0
          super().__init__(event_stream, memento)

      def apply_memento(self, memento: Memento) -> None:
          if self.id != memento.id:
              raise ValueError("Memento id does not match aggregate id")
          self.value = memento.payload

      def get_memento(self) -> Memento:
          """
          The memento is a snapshot of the aggregate state. It is used to rehydrate the aggregate.

          It is backed by the Python __getstate__ and __setstate__ methods.
          """
          return Memento(id=self.id, version=self.version, payload={'key': self.value})

      def set_value(self, value: int) -> None:
          self.raise_event(
              SampleEvent(value=value, id=self.id, version=self.version,
                        timestamp=datetime.datetime.now(datetime.timezone.utc)))

      def _apply(self, event: SampleEvent) -> None:
          """
          The apply method is a convention named method to apply the event to the aggregate. It is called from the raise_event method using multiple dispatch
          """
          self.value = event.value

  ```

  The `saga` class is likewise abstract and a subtype saga would implement the external interfaces and internal behavior,
  similar to the `aggregate` class.

  ```python
  from aett.domain.Domain import Saga
  from aett.eventstore.EventStream import DomainEvent
  from dataclasses import dataclass


  @dataclass(frozen=True, kw_only=True)
  class SampleEvent(DomainEvent):
      value: int


  class SampleSaga(Saga):
      def _apply(self, event: SampleEvent) -> None:
          pass

  ```

rpm_license:
  MIT License  Copyright (c) 2024 python_eventstore  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: 041a87d8bc322e85f49891cd5ba70641849ebd12b8e9f15fe5cfa1947eb0f28d
name: python-aett-dynamodb
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: DynamoDB connector for aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-dynamodb-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-dynamodb)](https://pepy.tech/project/aett-dynamodb)

  Aett DynamoDB provides the ability to store and retrieve events from a DynamoDB table.



  To create an event stream to manage events, you can use the `PersistenceManagement` class.

  ```python
  from aett.dynamodb.EventStore import PersistenceManagement


  mgmt = PersistenceManagement()
  mgmt.initialize()


  mgmt.drop()
  ```

  The package also provides `CommitStore` and `SnapshotStore` classes that can be used to store and retrieve events. They
  can be instantiated by providing AWS credentials and specifying the configured table name and region. If `localhost` is
  set as region, then the stores assume a server running at `http://localhost:8000`.

  ```python
  from aett.dynamodb.EventStore import CommitStore, SnapshotStore

  commit_store = CommitStore()

  snapshot_store = SnapshotStore()
  ```

rpm_license:
  MIT License  Copyright (c) 2024 python_eventstore  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: fc2cd005eba537998a73ebd738d1f923412c6e092538d8448e50eb09a902473a
name: python-aett-inmemory
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: In-Memory persistence for aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-inmemory-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-inmemory)](https://pepy.tech/project/aett-inmemory)

  Aett In-Memory provides the ability to store and retrieve events from an in-memory storage.
  This module should not be used for production. It is intended only for testsing.



  To create an event stream to manage events, you will need to create a bucket, which will serve as the root storage.

  The package also provides `CommitStore` and `SnapshotStore` classes that can be used to store and retrieve events. They
  can be instantiated by providing a Postgres database connection and specifying the configured table name.

  ```python
  from aett.inmemory import CommitStore, SnapshotStore

  commit_store = CommitStore()
  snapshot_store = SnapshotStore()
  ```

rpm_license:
  MIT License  Copyright (c) 2024 python_eventstore  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: ec17fec0b5eb29f48e343c72c7fd316cb526ff782a7f79f98ea467b324c7943b
name: python-aett-mongodb
arch: src
version: 2.1.0
epoch: 0
release: 1
summary: MongoDB connector for aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-mongodb-2.1.0-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-mongodb)](https://pepy.tech/project/aett-mongodb)

  Aett Mongo provides the ability to store and retrieve events from a MongoDB collection.



  To create an event stream to manage events, you can use the `PersistenceManagement` class.

  ```python
  import pymongo.database
  from aett.mongodb.EventStore import PersistenceManagement


  mgmt = PersistenceManagement(pymongo.database.Database(pymongo.MongoClient('mongodb://localhost:27017/'), 'test'))
  mgmt.initialize()


  mgmt.drop()
  ```

  The package also provides `CommitStore` and `SnapshotStore` classes that can be used to store and retrieve events. They
  can be instantiated by providing a MongoDB database connection and specifying the configured table name.

  ```python
  from aett.mongodb.EventStore import CommitStore, SnapshotStore
  import pymongo.database

  snapshot_store = SnapshotStore(pymongo.database.Database(pymongo.MongoClient('mongodb://localhost:27017/'), 'test'))
  ```

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


pkgId: baa1ff3d36dc50ed5c7ee17dd2e93b80f6b7ce8a6c9c1f30614b57d666fd59dc
name: python-aett-postgres
arch: src
version: 2.0.3
epoch: 0
release: 1
summary: Postgres connector for aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-postgres-2.0.3-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-postgres)](https://pepy.tech/project/aett-postgres)

  Aett Postgres provides the ability to store and retrieve events from a Postgres.



  To create an event stream to manage events, you can use the `PersistenceManagement` class.

  ```python
  import psycopg
  from aett.postgres.EventStore import PersistenceManagement


  mgmt = PersistenceManagement(psycopg.connect("host=localhost port=5432 dbname=aett user=aett password=aett"))
  mgmt.initialize()


  mgmt.drop()
  ```

  The package also provides `CommitStore` and `SnapshotStore` classes that can be used to store and retrieve events. They
  can be instantiated by providing a Postgres database connection and specifying the configured table name.

  ```python
  from aett.postgres.EventStore import CommitStore, SnapshotStore
  import pymongo.database

  snapshot_store = SnapshotStore(psycopg.connect("host=localhost port=5432 dbname=aett user=aett password=aett"))
  ```

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


pkgId: 7a539ed16e7a14945c849f3016d26057eb17d19c24564c4b15a840a2a7ac3652
name: python-aett-s3
arch: src
version: 2.0.3
epoch: 0
release: 1
summary: S3 connector for aett event store
url: https://github.com/jjrdk/aett
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aett-s3-2.0.3-1.src.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/badge/aett-postgres)](https://pepy.tech/project/aett-postgres)

  Aett S3 provides the ability to store and retrieve events from an S3 bucket.



  To create an event stream to manage events, you will need to create a bucket, which will serve as the root storage.

  The package also provides `CommitStore` and `SnapshotStore` classes that can be used to store and retrieve events. They
  can be instantiated by providing a Postgres database connection and specifying the configured table name.

  ```python
  from aett.s3 import CommitStore, SnapshotStore, S3Config
  from aett.eventstore import TopicMap

  config = S3Config(bucket='test',
                    endpoint_url='http://localhost:9000',
                    use_tls=False,
                    aws_access_key_id='minioadmin',
                    aws_secret_access_key='minioadmin')
  commit_store = CommitStore(s3_config=config, topic_map=TopicMap())
  snapshot_store = SnapshotStore(s3_config=config)
  ```

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


pkgId: 7848ca76192a44aa981f89f6afd8f4464149ad94fac9aee63a64dd3beeeb6fa9
name: python-afacinemas-scraper
arch: src
version: 1.5.1
epoch: 0
release: 1
summary: Ferramenta para raspagem de dados do site da rede Afa Cinemas
url: https://github.com/douglasgusson/afacinemas-scraper
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afacinemas-scraper-1.5.1-1.src.rpm
checksum_type: sha256
description:
  > **afacinemas-scraper** - Ferramenta para raspagem de dados do site da rede [Afa Cinemas](http://afacinemas.com.br/).

  [![GitHub license](https://img.shields.io/github/license/douglasgusson/afacinemas-scraper)](https://github.com/douglasgusson/afacinemas-scraper/blob/main/LICENSE)
  [![GitHub issues](https://img.shields.io/github/issues/douglasgusson/afacinemas-scraper)](https://github.com/douglasgusson/afacinemas-scraper/issues)
  [![GitHub forks](https://img.shields.io/github/forks/douglasgusson/afacinemas-scraper)](https://github.com/douglasgusson/afacinemas-scraper/network)
  [![GitHub stars](https://img.shields.io/github/stars/douglasgusson/afacinemas-scraper)](https://github.com/douglasgusson/afacinemas-scraper/stargazers)



  ```sh
  pip install afacinemas-scraper
  ```



  ```python
  from afacinemas_scraper import Scraper

  scraper = Scraper()
  ```



  ```python
  from afacinemas_scraper import Scraper

  scraper = Scraper()
  cinemas = scraper.get_cinemas()

  print(cinemas)
  ```

  📄 Saída:
  ```python
  [{'codigo': 4, 'nome': 'Boituva Cine Park', 'logo': 'http://afacinemas.com.br/logotipo/boituva.jpg', 'endereco': 'Avenida Vereador José Biagione, 660 Centro - Boituva /SP', 'contato': '(15) 3363-8083'}, ...]
  ```



  ```python
  from afacinemas_scraper import Scraper

  scraper = Scraper()

  proximos_lancamentos = scraper.get_proximos_lancamentos()
  print(proximos_lancamentos)
  ```

  📄 Saída:
  ```python
  [{'titulo': 'MONSTER HUNTER', 'estreia': '14/01/2021', 'poster': 'http://afacinemas.com.br/adm/cartazSite/hunter.jpg', 'descricao': 'Baseado no jogo da Capcom chamado Monster Hunter, a tenente Artemis e seus soldados são transportados para um novo mundo. Lá, eles se envolvem em batalhas imponentes, buscando desesperadamente a sobrevivência contra bestas gigantes portadoras de habilidades surreais.', 'classificacao': '14 ANOS', 'genero': 'AÇÃO', 'duracao': '110min'}, ...]
  ```



  ```python
  from afacinemas_scraper import Scraper

  scraper = Scraper()

  precos_ingressos = afa.get_precos_ingressos(10)  # código do cinema
  print(precos_ingressos)
  ```

  📄 Saída:
  ```python
  [{'dia_semana': 'Domingo', 'precos': [{'descricao': 'Inteira 2D', 'valor': 24.0}, {'descricao': 'Meia 2D', 'valor': 12.0}, {'descricao': 'Inteira 3D', 'valor': 24.0}, {'descricao': 'Meia 3D', 'valor': 12.0}]}, ...]
  ```



  ```python
  from afacinemas_scraper import Scraper

  scraper = Scraper()

  programacao = afa.get_programacao(10, "2022-06-30")
  print(programacao))
  ```

  📄 Saída:
  ```python
  [{'codigo': '521', 'titulo': 'LIGHTYEAR', 'urlCapa': 'http://afacinemas.com.br/cartazSite/light.jpg', 'classificacao': 'LIVRE', 'genero': 'ANIMAÇÃO', 'duracao': '100 min', 'sinopse': 'Lightyear é uma aventura que apresenta a história definitiva da origem do herói que inspirou o brinquedo, o Buzz Lightyear, apresentando o lendário Patrulheiro Espacial que conquistou fãs de todas as gerações.', 'sessoes': [{'sala': 'Sala 1', 'horario': '16:00', 'audio': 'DUB', 'imagem': '2D'}, {'sala': 'Sala 1', 'horario': '18:15', 'audio': 'DUB', 'imagem': '2D'}] ...
  ```


pkgId: 043bbb8b63557feca3f4083770cc21302984e5cb03f38964f82cb5b24783ac29
name: python-afar
arch: src
version: 0.6.1
epoch: 0
release: 1
summary: Run code on a Dask cluster via a context manager or IPython magic
url: https://github.com/eriknw/afar
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afar-0.6.1-1.src.rpm
checksum_type: sha256
description:
  [![Python Version](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-blue)](https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9-blue)
  [![Version](https://img.shields.io/pypi/v/afar.svg)](https://pypi.org/project/afar/)
  [![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/eriknw/afar/blob/main/LICENSE)
  [![Build Status](https://github.com/eriknw/afar/workflows/Test/badge.svg)](https://github.com/eriknw/afar/actions)
  [![Coverage Status](https://coveralls.io/repos/eriknw/afar/badge.svg?branch=main)](https://coveralls.io/r/eriknw/afar)
  [![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

  > **_One man's magic is another man's engineering_**<br>
  > _Robert A. Heinlein_
  <hr>


  `afar` may be installed with pip:
  ```bash
  pip install afar
  ```
  or with [conda](https://docs.conda.io/en/latest/):
  ```bash
  conda install -c conda-forge afar
  ```


  `afar` allows you to run code on a remote [Dask](https://dask.org/) [cluster](https://distributed.dask.org/en/latest/) using context managers and [IPython magics](#Magic).  For example:
  ```python
  import afar
  from dask.distributed import Client
  client = Client()

  with afar.run, remotely:
      import dask_cudf
      df = dask_cudf.read_parquet("s3://...")
      result = df.sum().compute()
  ```
  Outside the context, `result` is a [Dask Future](https://docs.dask.org/en/latest/futures.html) whose data resides on a worker.  `result.result()` is necessary to copy the data locally.

  By default, only the last assignment is saved.  One can specify which variables to save:
  ```python
  with afar.run("one", "two"), remotely:
      one = 1
      two = one + 1
  ```
  `one` and `two` are now both Futures.  They can be used directly in other `afar.run` contexts:
  ```python
  with afar.run as data, remotely:
      three = one + two

  assert three.result() == 3
  assert data["three"].result() == 3
  ```
  `data` above is a dictionary of variable names to Futures.  It may be necessary at times to get the data from here.  Alternatively, you may pass a mapping to `afar.run` to use as the data.
  ```python
  run = afar.run(data={"four": 4})
  with run, remotely:
      seven = three + four
  assert run.data["seven"].result() == 7
  ```
  If you want to automatically gather the data locally (to avoid calling `.result()`), use `afar.get` instead of `afar.run`:
  ```python
  with afar.get, remotely:
      five = two + three
  assert five == 5
  ```

  There are several enhancements when using `afar` in Jupyter Notebook or Qt console, JupyterLab, or any IPython-based frontend that supports rich display.

  The rich repr of the final expression will be displayed if it's not an assignment:
  ```python
  with afar.run, remotely:
      three + seven

  ```

  Printing is captured and displayed locally:
  ```python
  with afar.run, remotely:
      print(three)
      print(seven, file=sys.stderr)


  ```
  These are done asynchronously using `ipywidgets`.


  First load `afar` magic extension:
  ```python
  %load_ext afar
  ```
  Now you can use `afar` as line or cell magic.  `%afar` is like `with afar.run, remotely:`.  It can optionally accept a list of variable names to save:
  ```python
  %afar x, y
  x = 1
  y = x + 1
  ```
  and
  ```python
  z = %afar x + y
  ```


  I don't know, but it sure is a joy to use 😃 !

  For motivation, see https://github.com/dask/distributed/issues/4003

  It's natural to be skeptical of unconventional syntax.  And magic.  `afar` is both unconventional and magical, yet it also works well and is surprisingly *fun*!  Why not give it a try to see what you think?

  We're still exploring the usability of `afar` [and want to hear what you think](https://github.com/eriknw/afar/discussions).  As you're learning `afar`, please ask yourself questions such as:
  - can we spell anything better?
  - does this offer opportunities?
  - what is surprising?
  - what is lacking?

  Here's an example of an opportunity:
  ```python
  on_gpus = afar.remotely(resources={"GPU": 1})

  with afar.run, on_gpus:
      ...
  ```
  This now works!  Keyword arguments to `remotely` will be passed to [`client.submit`](https://distributed.dask.org/en/latest/api.html#distributed.Client.submit).

  I don't know about you, but I think this is starting to look and feel kinda nice, and it could probably be even better :)





  `afar` automatically gets the data it needs--and only the data it needs--from the outer scope
  and sends it to the Dask cluster to compute on.  Since we don't know whether local data has been modified
  between calls to `afar`, we serialize and send local variables every time we use `run` or `get`.
  This is generally fine: it works, it's safe, and is usually fast enough.  However, if you do this
  frequently with large-ish data, the performance could suffer, and you may be using
  more memory on your local machine than necessary.

  With Dask, a common pattern is to send data to the cluster with `scatter` and get a `Future` back.  This works:
  ```python
  A = np.arange(10**7)
  A = client.scatter(A)
  with afar.run, remotely:
      B = A + 1

  ```

  Another option is to pass `data` to `run`:
  ```python
  run = afar.run(data={"A": np.arange(10**7)})
  with afar.run, remotely:
      B = A + 1

  ```
  Here's a nifty trick to use if you're in an IPython notebook: use `data=globals()`!
  ```python
  run = afar.run(data=globals())
  A = np.arange(10**7)
  with run, remotely:
      B = A + 1

  ```

  As with any Dask workload, one should be careful to not modify remote data that may be reused.


  Similarly, code run remotely isn't able to mutate local variables.  For example:
  ```python
  d = {}
  with afar.run, remotely:
      d['key'] = 'value'

  ```


pkgId: 49d7f2ad1eaf53b3ff548ad32695b3e46781a39becf82f73444e4683a6cb1441
name: python-afasi
arch: src
version: 2022.11.28
epoch: 0
release: 1
summary: Fuzz a language by mixing up only few words.
url: https://git.sr.ht/~sthagen/afasi
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afasi-2022.11.28-1.src.rpm
checksum_type: sha256
description:
  Fuzz a language by mixing up only few words.

  [License: MIT](https://git.sr.ht/~sthagen/afasi/tree/default/item/LICENSE)

  [![version](https://img.shields.io/pypi/v/afasi.svg?style=flat)](https://pypi.python.org/pypi/afasi/)
  [![downloads](https://pepy.tech/badge/afasi/month)](https://pepy.tech/project/afasi)
  [![wheel](https://img.shields.io/pypi/wheel/afasi.svg?style=flat)](https://pypi.python.org/pypi/afasi/)
  [![supported-versions](https://img.shields.io/pypi/pyversions/afasi.svg?style=flat)](https://pypi.python.org/pypi/afasi/)
  [![supported-implementations](https://img.shields.io/pypi/implementation/afasi.svg?style=flat)](https://pypi.python.org/pypi/afasi/)



  User and developer [documentation of afasi](https://codes.dilettant.life/docs/afasi).



  Feature requests and bug reports are best entered in the [todos of afasi](https://todo.sr.ht/~sthagen/afasi).



  The primary source of `afasi` lives somewhere on a mountain in Central Switzerland.
  But, we use decentralized version control (git), so any clone can become the source to everyone's benefit, no central only code.
  Anyway, the preferred public clones of `afasi` are:

  * [on codeberg](https://codeberg.org/sthagen/afasi) - a democratic community-driven, non-profit software development platform operated by Codeberg e.V.
  * [at sourcehut](https://git.sr.ht/~sthagen/afasi) - a collection of tools useful for software development.



  Beta.

  **Note**: The default branch is `default`.


pkgId: 0dc3999ace8a68a4386f476229763d8056c2d8e47cd7f120b4572d1484436eb6
name: python-afc-svm-imbalanced-learning
arch: src
version: 0.10.0
epoch: 0
release: 1
url: https://github.com/KKQanT/afc-imbalanced-learning
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afc-svm-imbalanced-learning-0.10.0-1.src.rpm
checksum_type: sha256
summary:
  Simple implementation of the papar Adaptive Feature-Space Conformal Transformation for Imbalanced-Data Learning

description:
  A simple implementation of Adaptive Feature-Space Conformal Transformationfor any kernel SVM proposed in [2]


  In [1], the idea of inceasing the separability (margin) of classes for kernel SVM, can be achieved by magnify the spatial resolution in the region around the boundary in the hyperspace, the non-linear serface where $\textbf{x}$ has been already mapped to $\phi(\textbf{x})$ using kernel tricks.

  Given $K(\textbf{x}, \textbf{x}') = \langle \phi(\textbf{x}), \phi(\textbf{x}')\rangle$ is a kernel function corresponding to the non-linear mapping function $\phi(\textbf{x})$ for a kernel SVM. We can employ a conformal transformation of kernel:

  $$
  \begin{aligned}
   \tilde{K}(\textbf{x}, \textbf{x}') = D(\textbf{x})D(\textbf{x}')K(\textbf{x}, \textbf{x}')
  \end{aligned}
  $$

  to enlarge the distance near the boundary in non-linear surface in higher dimension by choosing appropriate $D(\textbf{x})$ that has a high value when $\textbf{x}$ is close to the boundary and small when it is far away from the boundary.

  In [1], it has been suggested that $D(\textbf{x})$ can be chosen as:

  $$
  \begin{aligned}
   D(\textbf{x}) = \sum_{\textbf{x}_k \epsilon SV} e^{ -\frac{1}{\tau_k^{2}}||\textbf{x} - \textbf{x}_k||^{2}}
  \end{aligned}
  $$

  where

  $$
  \begin{aligned}
   \tau_k^{2} = \frac{1}{M} \sum_{\textbf{x}_s \epsilon SV_k} || \textbf{x}_s - \textbf{x}_k||^{2} ||
  \end{aligned}
  $$

  where $SV_{k}$ denotes a set of $M$ support vectors $\textbf{x}_{s}$ that are nearest to support vector $\textbf{x}_k$

  In this implementation, we use the $\tau_k^{2}$ proposed in [2]:

  $$
  \begin{aligned}
   \tau_k^{2} = AVG_{\textbf{x}_s \epsilon \{\textbf{x}_s \epsilon SV | \ || \phi{(\textbf{x}_s)} - \phi{(\textbf{x}_k)} ||^2 < M, \ y_s \ne y_k, \}} (|| \phi{(\textbf{x}_s)} - \phi{(\textbf{x}_k)} ||^2)
  \end{aligned}
  $$

  where $M$ is the mean distance squared (in hyperspace) of the nearest and the farthest support vector from $\phi(\textbf{x}_k)$. It has been mentioned in [2] that by setting $\tau_k$ like this will take into account the spatial distribution of the support vectors in hyperspace.

  Note that given kernel function, $K(\textbf{x}, \textbf{x}')$ is known but the mapping function $\phi(\textbf{x})$ is unknown, we can still calculate the distance in hyperspace using Kernel trick

  $$
  \begin{aligned}
      | \phi{(\textbf{x}_s)} - \phi{(\textbf{x}_k)} ||^2 = K(\textbf{x}_s, \textbf{x}_s) +  K(\textbf{x}_k, \textbf{x}_k) - 2K(\textbf{x}_s, \textbf{x}_k)
  \end{aligned}
  $$

  **Dealing with Imbalaned**
  <br/>
  It has been stated in [2] that the $\tau_k^{2}$ will be scaled with a larger factor $\eta_p$ if $\textbf{x}_k$ belong to minority class and will be scaled down with a factor $\eta_n$ to address imbalance issue. The paper suggest that we should choose $\eta_p$ and $\eta_n$ proportional to the skew of support vectors. In this version of implementation, I set $\eta_p$ = 1 and $\eta_n = \frac{|SV^{+}|}{|SV^{-}|}$ for now.



  ***installation***
  ```
  pip install afc-svm-imbalanced-learning
  ```
  ***Usage***
  ```
  from afc_imbalanced_learning import AFSCTSvm

  afc_svm = AFSCTSvm()
  afc_svm.fit(X_train, y_train)
  y_pred = afc_svm.predict(X_test)
  ```

  what `.fit(X_train, y_train)` does is it train kernel svm with laplacian kernel $K(\textbf{x}, \textbf{x}') = e^{-\gamma|\textbf{x} - \textbf{x}'|}$ as used in [2], then it estimates the location of boundary by extracting support vectors and it then calculate $\tau_k$ for every support vectors and then calculate $D(\textbf{x})$ to use for conformal transformation where we'll obtain $\tilde{K}(\textbf{x}, \textbf{x})$ to train our new SVM. We'll then use the new improved Kernel SVM to predict when `.predict` is called.

  ***Custom initial kernel***
  <br/>
  you can use your own custom kernel function by parse it to kernel parameter
  ```
  from sklearn.metrics.pairwise import rbf_kernel
  afc_svm = AFSCTSvm(kernel=rbf_kernel)
  afc_svm.fit(X_train, y_train)
  ```

  Note that in this implementation, cost-sensitive svm will be used by default


  <a id="1">[1]</a>
  Wu, Si and Shun‐ichi Amari. “Conformal Transformation of Kernel Functions: A Data-Dependent Way to Improve Support Vector Machine Classifiers.” Neural Processing Letters 15 (2002): 59-67.
  <br/>
  <a id="2">[2]</a>
  Wu, Gang & Chang, Edward. (2003). Adaptive Feature-Space Conformal Transformation for Imbalanced-Data Learning. Proceedings, Twentieth International Conference on Machine Learning. 2. 816-823.


pkgId: 829d61d51eee6a56ee2e07879ac240bff609c299f4b7528cb734dde6d5bdea51
name: python-afex-audit-trail
arch: src
version: 0.2.6
epoch: 0
release: 1
summary: A Django app to create server logs and users' notification.
url: https://pypi.org/project/afex-audit-trail/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afex-audit-trail-0.2.6-1.src.rpm
checksum_type: sha256
description:
  - **Python 3.8**
  - **Django 4.0**

  Install the package with pip and all the required libraries would be installed

  ```bash
  pip install afex-audit-trail
  ```



  Add '**audit-trails**' to your installed apps:

  ```bash
  INSTALLED_APPS = [
    ...
    'audit_trails',
    ....
  ]
  ```

  Run 'python manage.py migrate' to add the schema

  ```bash
  python manage.py migrate
  ```



  To generate log for every request and response on the server, add the 'ActivityLoggingMiddleware'
  to your MIDDLEWARE list.

  ```bash
  MIDDLEWARE = [
    ....
    'audit_trails.middleware.ActivityLoggingMiddleware',
  ]
  ```

  The log can be stored in either database or file, file being the default storage. Set the LOG_STORAGE variable
  in your settings.py file if you wish to use database for storage.

  ```bash
  LOG_STORAGE = 'database'
  ```

  Log file can be found in activity.log in the project directory




  Notifications are generated manually by calling the appropriate method in your views or anywhere you'd like to
  generate notifications.

  Notification has 4 levels namely; ```info, success, warning, error```. Each of the has a method for creating
  notification with their respective level.

  To generate notification anywhere in your code, import notify from signals and call the method that matches your
  notification level with the right attribute.

  The right syntax is:

  ```snippet
  from audit_trails.signals import notify

  notify.success(actor, recipients, action, action_object_type, action_object_id)
  ```


  For webview projects, include ```audit_trails.urls``` and ```audit_trails.api.urls``` for api, in your  urlconf:

  ```angular2html
  urlpatterns = [
      ...
      path('notifications/', include('audit_trails.api.urls')),
      ...
  ]
  ```




  ```json
  {
      "responseCode": 100,
      "data": [
          {
              "id": 1,
              "level": "success",
              "description": "You modified John Doe's profile",
              "timestamp": "2023-04-03T17:03:01.957252+01:00",
              "timesince": "15 minutes",
              "is_read": false
          },
          {
              "id": 5,
              "level": "success",
              "description": "John created Mary Doe's profile",
              "timestamp": "2023-03-03T10:05:18.361405+01:00",
              "timesince": "1 month",
              "is_read": false
          }
      ],
      "message": "Notification list retrieved successfully"
  }
  ```







  - **actor**: A required object of a user instance
  - **recipients**: A set of users to whom the notifications are sent
  - **action**: A short description (preferably one or two word)
  - **action_object_type**: Specifies the object type on whom the action was performed and it could be of nay type
  - **action_object_id**: An integer of the action object id. together with the ```action_object_type```.
      The actual object is gotten.


  - **action_target_object_type**: Specifies the object type **to** which the action was performed and it could be of nay type
  - **action_target_object_id**: An integer of the action object id. together with the ```action_target_object_type```.
  - **detail**: An optional string field for more information about the notification.



  Other notification level methods are: ```notify.info(), notify.warning(), notify.error()```, with the same
  arguments as ```notify.success()```



  Queryset methods were added to make querying and manipulations easier. Some of the methods are :
  ```unread(), read(), mark_all_as_read(), mark_all_as_unread()```

  e.g ```user.notifications.mark_all_as_read()``` would mark all notification as read for a particular user.



  - timesince: Property returning the difference between the current date and the date the notification was created.
  - description: Property returning string sentence of the actor, action and object of the notification
  - mark_as_read(): toggles the ```is_read``` field of a notification object to ```True```
  - mark_as_unread(): toggles the ```is_read``` field of a notification object to ```False``


pkgId: d777ea7b4fbfe63b8c2183d457b4d2c9a2e8ecc90d98f6710d87747fafbb8f15
name: python-afex-logger
arch: src
version: 0.1.28
epoch: 0
release: 1
summary: AFEX logger package
url: https://pypi.org/project/afex-logger/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afex-logger-0.1.28-1.src.rpm
checksum_type: sha256
description:
  AFEX Logger contains implementation codes that can help you fast-track logging in your app codebase. Integrated with a centralized log server, your logs gets submitted via a background worker utilizing celery with redis as broker.



  This library requires:
  -  celery
  -  boto3



  You can get the package using `pip`, as the following:

  ```bash
  pip install afex-logger
  ```



  Below is a quick way to get started.

  First, in your django (celery) project, add afex logger in the list of your installed apps in your django settings file as below:

  ```python

  INSTALLED_APPS = [
      ..., # your other installed apps
      "afex_logger"
  ]
  ```

  You need a configuration provider class that extends `afex_logger.util.ConfigProvider`. The ConfigProvider provides an abstract method `get_api_key` which your app will hook onto to specify the right api key as retrieved from SSM.

  The configuration provider class can be in any location within your app, this location is where you then need to specify within your app's setting file as:

  ```python

  LOG_CONFIG_PROVIDER="<location_to_your_configuration_provider_class>"

  ```

  The configuration provider will assume test environment by checking the `settings.DEBUG`

  An example configuration provider will look like:

  ```python
  from afex_logger.util import ConfigProvider
  from django.conf import settings


  class LogConfigProvider(ConfigProvider):

     def __init__(self):
        super().__init__(settings.DEBUG)

      def get_api_key(self):
          return settings.LOG_API_KEY

  ```



  1. **Logs Management**

     1. Request Logs:

        This package has provided a middleware that automatically submits request logs to the server. To use this, just add `afex_logger.http_interceptor.LogMiddleware` to your list of middleware in your settings file.
     2. Other logs:

        You can submit other classes of logs (error, process and activity logs) by using the `afex_logger.util.LogUtil` class as follows
        ```python
           from afex_logger.util import LogUtil

           LogUtil.submit_process_log(...) # for process logs
           LogUtil.submit_activity_log(...) # for activity logs
           LogUtil.submit_error_log(...) # for error logs
           LogUtil.submit_requests_log(...) # to manually submit logs
        ```
        The logs are aggregated and kept in local repository typically in cache memory.
        To send aggregated logs, a celery task have to be registered to execute the log aggregation and send to the log server.

        This can be achieved by simply adding the following in the celery.py file
        ```python
           app.conf.beat_schedule = {
               ...
               'afex_logger.tasks.submit_log': {
                   'task': 'afex_logger.tasks.submit_log',
                   'schedule': crontab(minute="*/3")
               },
               ...
           }
        ```
        We also recommend that the log tasks be processed via a different queue. For example, adding the following inside your celery.py file
        ```python
           app.conf.task_routes = {
               ...,
               'afex_logger.tasks.aggregate_log': {'queue': 'logger_tasks'},
               'afex_logger.tasks.submit_log': {'queue': 'logger_tasks'},
               ...
           }
        ```

     3. Retrieving Logs:

        To retrieve any of the four classes of logs, use the same LogUtil class.
        ```python
           from afex_logger.util import LogUtil

           parameters = {
              "page": 1,
              "page_size": 15,
              "keyword": "...", # this us tge field name to filter from
              "filter": "..." # this is the value to filter with
           }
           paged_process_logs, error_1 = LogUtil.fetch_process_logs(parameters) # fetching process logs
           paged_activity_logs, error_2 = LogUtil.fetch_activity_logs(parameters) # fetching activity logs
           paged_error_logs, error_3 = LogUtil.fetch_error_logs(parameters) # fetching error logs
           paged_request_logs, error_4 = LogUtil.fetch_request_logs(parameters) # fetching request logs
        ```
  2. **SSM API Key Management**

     To retrieve API Keys from SSM, use `afex_logger.ssm_service.SsmService`
     ```python

        from afex_logger.ssm_service import SsmService

        ssm_credentials = {...}
        secret_name = ...
        key_name = ...
        service = SsmService(**ssm_credentials)

        api_key, error = service.get_secret_value(secret_name, key_name)
     ```


pkgId: 598622d227984e9a2ab9f39c49e9a530fe4ff88748b92fc86bf2e21542c924da
name: python-affinda
arch: src
version: 4.25.0
epoch: 0
release: 1
summary: Client library for the Affinda API
url: https://github.com/affinda/affinda-python
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinda-4.25.0-1.src.rpm
checksum_type: sha256
description:
  ![affinda logo](https://api.affinda.com/static/documentation/affinda_logo_light.png)

  [![pypi ver](https://img.shields.io/pypi/v/affinda)](https://pypi.org/project/affinda/)
  [![pypi pyver](https://img.shields.io/pypi/pyversions/affinda)](https://pypi.org/affinda/)
  [![pypi dlm](https://img.shields.io/pypi/dm/affinda)](https://pypi.org/project/affinda/)
  [![license](https://img.shields.io/github/license/affinda/affinda-python)](https://choosealicense.com/licenses/mit/)

  [![codestyle](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

  [![Open in Visual Studio Code](https://open.vscode.dev/badges/open-in-vscode.svg)](https://open.vscode.dev/affinda/affinda-python)

  This is a python client for the Affinda document parsing API which wraps all available endpoints
  and handles authentication and signing. You may also want to refer to the full
  [API documentation](https://api.affinda.com/docs) for additional information.



  ```shell
  pip install affinda
  ```



  The Affinda API is currently on `v3`, with breaking changes meant the release of new versions of the client library.
  Please see below for which versions are compatible with which API version.

  | Affinda API version | `affinda-python` versions |
  | ------------------- | ------------------------- |
  | v2                  | 0.1.0 - 3.x.x             |
  | v3                  | \>= 4.x.x                 |



  If you don't have an API token, obtain one from [affinda.com](https://affinda.com/resume-parser/free-api-key/).

  ```python
  from pathlib import Path
  from pprint import pprint

  from affinda import AffindaAPI, TokenCredential
  from affinda.models import WorkspaceCreate, CollectionCreate

  token = "REPLACE_API_TOKEN"
  file_pth = Path("PATH_TO_DOCUMENT.pdf")

  credential = TokenCredential(token=token)
  client = AffindaAPI(credential=credential)


  my_organisation = client.get_all_organizations()[0]


  workspace_body = WorkspaceCreate(
      organization=my_organisation.identifier,
      name="My Workspace",
  )
  recruitment_workspace = client.create_workspace(body=workspace_body)



  collection_body = CollectionCreate(
      name="Resumes", workspace=recruitment_workspace.identifier, extractor="resume"
  )
  resume_collection = client.create_collection(collection_body)


  with open(file_pth, "rb") as f:
      resume = client.create_document(file=f, file_name=file_pth.name, collection=resume_collection.identifier)

  pprint(resume.as_dict())
  ```



  Samples for all operations using the client can be [found here.](./docs/samples_python.md)



  -   [API operations can be found here](./docs/sync_operations.md)
  -   [API models and objects](./docs/models.md)
  -   [Exceptions](./docs/exceptions.md)


  All notable changes to this project will be documented in this file.

  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).





  - Add document splitter endpoints



  - Allow filter tags by name
  - Added enableValidationThreshold to collection and field objects



  - Ability to filter index by name
  - Ability to set workspace for MappingDataSource



  - Removed unnecessary models of InvoiceData fields



  - Fix invoice data deserialization



  - Added filter and sort options for mapping data source endpoint



  - Fix invoiceData annotation required fields to match underling text annotation


  - Reduce maximum limit from 300 to 100 and remove default value



  - Use ruff instead of black to format code, run check and format on code


  - Add AnnotationBatchUpdate endpoint



  - Add validation_results endpoints
  - Add US1 region
  - Add strict attribute to RegionBias
  - Add hideReject, hideEditPages, hideRunOcr and hideReparse options to Organization validationToolConfig
  - `compact` parameter for upload document endpoint



  - Add sourceEmailAddress to DocumentMeta model
  - Add tablesBeta to InvoiceData model
  - Add sourceEmailAddress to document meta



  - Added "website" data point type
  - Add mapping and dataSource to the field endpoints
  - Add list mapping data sources endpoint


  - Removed "cell" data point type


  - Add URL annotation type



  - Add data mapping
  - Add dropNullEnums to Field
  - Added AnnotationContentType
  - Added show_custom_field_creation to Organization
  - Introduce endpoints to deal with data sources that can be created by customers, and used to map data onto a picklist, or lookup values for downstream validation



  - Add PATCH /index/<name> endpoint
  - Add user to Index object
  - Add "compact" query parameter to GET /documents/<identifier> endpoint
  - Add "compact" query parameter to POST /documents endpoint



  - Add `parent` field to `Annotation`


  - Make `Annotation.rectangles` field non-nullable
  - Make `Annotation.document` field required


  - Remove enum constraint from `ordering` on the `getAllDocuments` operation



  - Add display_enum_value config to Collection field config


  - Migrate display_enum_value from DataPoint to Collection field config


  - Remove display_enum_value from DataPoint



  - Add disableEditDocumentMetadata option to validation tool config
  - Add field custom_identifier to DocumentMeta model
  - Allow specifying custom_identifier when create/update document


  - Deprecate writing to identifier when creating/updating document



  - Add SOC group codes to classification



  - Allow creating workspace-scope webhook
  - Add "document.rejected" webhook event



  - Allow create and enable/disable child fields in Collection.fieldsLayout


  - Deprecate `fields` in favor of `enabledChildFields` and `disabledChildFields` in Collection.fieldsLayout



  - Serialisation of Document to Invoice, Resume etc in async get_document()



  - Make Field.slug nullable and not required


  - Deprecate Field.slug


  - Support for custom base URL and http scheme in async client



  - Set CustomFieldConfig default to 0.5


  - Fixed serialisation of Document to Invoice, Resume etc in get_document()



  - Add xml response to api spec to GET /v3/documenets to match existing functionality



  - Allow create/update data point's `parent` and `displayEnumValue` property
  - Allow explicitly set a document as low_priority


  - Make `slug` and `organization` required when creating data point


  - Remove data point's `similarTo` property



  - Add `tailoredExtractorRequested` to Collection
  - Add endpoint for update resumes and JD data



  - Add `rawText` to invoice data



  - Ability to post/patch languages for resumes in v2
  - Add `include_public` parameter to /data_points endpoint
  - Add `base_extractor` parameter to collection creation endpoint


  - Make `extractor` a non required field (internal use)



  - Endpoints for add/remove tag for documents
  - Identifier field in DocumentUpdate model
  - Allow setting `region_bias` when uploading document
  - rawText field to JobDescription Model
  - Required fields for resthook subscriptions
  - Add `fieldsLayout` to `Collection` schema


  - Deprecate `Collection.fields` in favor of `Collection.fieldsLayout`



  - Nest line item table rows correctly.



  - Nest line item table rows correctly.



  - Add `Organization.validationToolConfig` for configuration of the embeddable validation tool
  - Phone number details to Resume Candidate info
  - Add some filters to `GET /documents` endpoint: `failed`, `ready`, `validatable`
  - Custom fields to Job Descriptions
  - Add custom data to job description search results
  - Add international_country_code to phone number details


  - Provide additional filters for data point choices, and allow data point choices to be specified for any existing text field.
  - Allow custom resume fields to be nullable
  - Allow custom job description fields to be nullable
  - Make "pdf" property in SearchResults nullable


  - Remove `include_child` filter from `/data_points` endpoint


  - Update python_requires to be PEP compliant



  - rawText is now not nullable
  - OccupationGroupSearchResult.children is now optional


  - Allow rejectDuplicates to be null



  - Add `whitelistIngestAddresses` to Workspace


  - Make search config action fields required



  - Adding group annotation content type
  - Add rejectDuplicates setting to workspace
  - Add `hideToolbar` to resume & JD search config
  - Add ExtractorConfig object to Collection



  - fixed - Use OccupationGroupResult for v3 SearchAndMatch detail
  - Fixed return type for InvoiceData.currencyCode


  - Don't require Field.slug


  - Add redactedText field to ResumeData



  - Fixed type and path of data_point and data_point_choices
  - Fixed missing data field on base Document type
  - Fixed search and match return types
  - fixed document error return types
  - Ensure list endpoints have 'results' and 'count' properties required


  - Minor re-ordering of API spec paths
  - Change Document API tag from Document API - Upload Documents to Document API - Document



  - Fixed resume search response object



  - Add resthook subscription endpoints
  - Add py.typed marker file
  - Add link to affinda help docs for resthook creation


  - Remove extractor's `id` field, use `identifier` field instead


  - Remove extractor's `id` field
  - Removed v2 endpoints



  - Add document.collection.extractor.identifier to DocumentMeta
  - Add cell to valid content types
  - Add EU API server to api docs
  - Add latitude and longtitude to Location
  - Add expectedremuneration, jobtitle, language, skill and yearsexperience to AnnotationContentType
  - re-add DataPoint.simlarTo
  - Add `exclude` parameter to /documents query
  - add ingest email to Workspace and Collection


  - Updated endpoints for old v2 and newer v3 to point to the correct places.
  - Changed Document top level structure to more closely resemble api v2 with top level keys of meta, data and error
  - ResumeSearchParamaters.resume, ResumeSearchParameters.jobdescription, JobDescriptionSearchParameters.resume, DataPoint.organization
  - Update azure-core version in setup.cfg and pin setuptools as latest version doens't buld


  - Fixed various nullable fields not being nullable, and vice versa


  - Master/child accounts endpoints



  - Added endpoints: Organization, Membership, Invitation, tags
  - Added name, organization to DataPoint, change id to identifier
  - Add new objects schemas Organization, OrganizationMembership, Invitation


  - Identifier instead of id as URL param
  - Update data point filters
  - Allow unlimited nesting in field config
  - Change document state from "export" to "archive"


  - Collection identifier should be nullable
  - Don't paginate extractors endpoint
  - Fix avatar uploads
  - Allow writing resthookSignatureKey


  * Yanked as this was a breaking release, see newer release for more info



  - Allow non TLS http requests



  - Add rectangles to Annotation, add position to referee, add actions to JobDescriptionSearchConfig



  - Bump version to force new release



  - Allowing a few more fields in ResumeData to be null



  - Document meta pages without images should be nullable
  - Small fixes for accreditiation and education return objects
  - Various nullable fields in the API spec


  - Bumped package versions for patch reasons


  - Add reject_duplicates to document upload endpoint
  - XML 404 response schema
  - CustomData to resume search spec
  - suggest skills and job titles endpoints


  - Update spec to allow XML content-type return from resumes, make totalYearsExperience nullable
  - Allow additonalproperties for custom data upload (resumes) and search



  - Update API spec to match API response.



  - Add job description search config and embed endpoints
  - Update index endpoint with document type parameter


  - Fix casing of some properties to match API response.



  - Update modelerfour version to latest
  - Update types of objects for some endpoints using AllOf attributes for better client library generation
  - Changed and updated tag order to better match documentation needs
  - Updated autorest client version


  - Depreciated resume_formats and reformatted_resumes endpoints


  - Reverse match functionality - search job descriptions with a resume, or with a set of parameters.



  - Add search expression to 1v1 match



  - Add ability to find other candidates that have similar attributes to a resume
  - Add an endpoint to get the matching score between a resume and a job description



  - add "tables" property to InvoiceData



  - Ability to update resume data in the search system
  - New endpoint for creating and managing users within a master account



  - Make expiry time native date time



  - Add review URL in the invoice response that allows embedding of the Affinda Invoice Review UI



  - added confidence


  - changed strings to objects



  - Fixes bug in create_invoice when URL is not specified



  - Update autorest depedencies



  - Resume search



  - Add iso 3166 country code to locations



  - Bump version



  - Invoices endpoint


  - Removed 'url' format from url strings in api spec



  - Pin azure-core to 1.18.0



  - Pin azure-core



  - Pinning azure-core dependency due to incompatible changes in 1.19



  - Adding LinkedIn to ResumeData


  - Reformatted code with black
  - Minor changes
  - Very minor formatting changes



  - Profession in ResumeData model
  - Unified Error models



  - wait=true in API spec



  - Code samples naming conversion



  - Description of some endpoints to match updats in API spec
  - Moved samples to their own [./docs/samples_python.md](./docs/samples_python.md) file



  - Added flake, editorconfig, tox.ini etc files to match best practices for existing Draftable/Affinda projects (thanks
  - @ralish!)



  - Update README.md to fix install instructions



  - Update README.md to hard link to github hosted logo to fix display on PyPi


  * Initial release

  The MIT License (MIT)

  Copyright (c) Affinda

  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: bd0062bcf4dea2aa8b5c0a617ddba6055390271e4f51c482e1d0a341441c0e03
name: python-affinder
arch: src
version: 0.4.0
epoch: 0
release: 1
url: https://github.com/jni/affinder
rpm_license: BSD-3
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinder-0.4.0-1.src.rpm
checksum_type: sha256
summary:
  Quickly find the affine matrix mapping one image to another using manual correspondence points annotation

description:
  This GUI plugin allows you to quickly find the affine matrix mapping
  one image to another using manual correspondence points annotation.

  More simply, this plugin allows you to select corresponding points
  on an image, and a second image you wish to transform. It computes
  the requisite transformation matrix using Affine Transform, Euclidean Transform,
  or Similarity Transform, and performs this transformation on the
  moving image, aligning it to the reference image.

  https://user-images.githubusercontent.com/17995243/120086403-f1d0b300-c121-11eb-8000-a44a2ac54339.mp4




  This is a simple plugin which can be used on any 2D images, provided
  they can be loaded as layers into napari. The images need not be the same
  file format and this plugin also works with labels layers.

  No prior understanding of the transformation methods is required, as
  they perform in the background based on the reference points selected.



  You will need a combination of two or more 2D image and/or labels layers
  loaded into napari. Once you have installed affinder, you can find it in
  the dock widgets menu.

  ![Affinder widget in the Plugins->Add Dock Widget menu](https://i.imgur.com/w7MCXQy.png)

  The first two dropdown boxes will be populated with the layers currently
  loaded into napari. Select a layer to use as reference, and another to
  transform.

  ![Dropdowns allow you to select the reference and moving layers](https://i.imgur.com/Tdbm1sX.png)

  Next, you can select the transformation model to use (affine is selected by default
  and is the least rigid transformation of those available). See [below](#transformation-models) for a
  description of the different models.

  Finally, you can optionally select a path to a text file for saving out the
  resulting transformation matrix.

  When you click Start, affinder will add two points layers to napari.
  The plugin will also bring your reference image in focus, and its associated points
  layer. You can then start adding reference points by clicking on your image.

  ![Adding reference points to layer](https://i.imgur.com/WPzNtyy.png)

  Once three points are added, affinder will switch focus to the moving image,
  and you should then proceed to select the corresponding three points.

  ![Adding corresponding points to newly focused layer](https://i.imgur.com/JVZCvmp.png)

  affinder will immediately transform the moving image to align the points you've
  selected when you add your third corresponding point to your moving image.

  ![The moving image is transformed once three points are added](https://i.imgur.com/NTne9fj.png)

  From there, you can continue iteratively adding points until you
  are happy with the alignment. Affinder will switch focus between
  reference and moving image with each point.

  Click Finish to exit affinder.



  There are three transformation models available for use with affinder.
  They are listed here in order of increasing rigidity in the types of
  transforms they will allow. The eponymous Affine Transform is the
  least rigid and is the default choice.

  - [**Affine Transform**](https://en.wikipedia.org/wiki/Affine_transformation):
  the least rigid transformation, it preserves
  lines and parallelism, but not necessarily distance and angles. Translation,
  scaling, similarity, reflection, rotation and shearing are all valid
  affine transformations.

  - [**Similarity Transform**](https://en.wikipedia.org/wiki/Similarity_(geometry)):
  this is a "shape preserving" transformation, producing objects which are
  geometrically similar. Translation, rotation, reflection and uniform scaling are
  valid similarity transforms. Shearing is not.

  - [**Euclidean Transform**](https://en.wikipedia.org/wiki/Rigid_transformation):
  Also known as a rigid transformation, this transform preserves the Euclidean
  distance between each pair of points on the image. This includes rotation,
  translation and reflection but not scaling or shearing.



  If you find a bug with affinder, or would like support with using it, please raise an
  issue on the [GitHub repository](https://github.com/jni/affinder).



  Many plugins may be used in the course of published (or publishable) research, as well as
  during conference talks and other public facing events. If you'd like to be cited in
  a particular format, or have a DOI you'd like used, you should provide that information here.


pkgId: 25b1319a4caf6a3c751077bba6314880461b6c6aa8619b9432d3359b427d6231
name: python-affine
arch: src
version: 2.4.0
epoch: 0
release: 1
summary: Matrices describing affine transformation of the plane
url: https://pypi.org/project/affine/
rpm_license: BSD License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affine-2.4.0-1.src.rpm
checksum_type: sha256
description:
  Matrices describing 2D affine transformation of the plane.
  The Affine package is derived from Casey Duncan's Planar package. Please see
  the copyright statement in `affine/__init__.py <affine/__init__.py>`__.


pkgId: fe39b16cad94a605e5220b0a75bf02bff4bdb7428f431d20b461cbb77b0fba97
name: python-affinidi-tdk-auth-provider
arch: src
version: 1.29.0
epoch: 0
release: 1
summary: Internal module for managing access tokens
url: https://github.com/affinidi/affinidi-tdk#readme
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi-tdk-auth-provider-1.29.0-1.src.rpm
checksum_type: sha256
description:
  Affinidi TDK Internal module for managing access tokens.





  ```bash
  npm install @affinidi-tdk/auth-provider
  ```





  run inside [python virtual env](https://docs.python.org/3/library/venv.html)

  ```bash
  pip install affinidi_tdk_auth_provider
  ```





  ```python
  import affinidi_tdk_auth_provider

  stats = {
    apiGatewayUrl,
    keyId,
    tokenId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
  }

  authProvider = affinidi_tdk_auth_provider.AuthProvider(stats)

  projectScopedToken = authProvider.fetch_project_scoped_token()
  ```



  ```python
  import { AuthProvider } from '@affinidi-tdk/auth-provider'

  const authProvider = new AuthProvider({
    apiGatewayUrl,
    keyId,
    tokenId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
  })

  const projectScopedToken = await authProvider.fetchProjectScopedToken()
  ```



  This is step is required, as python package is not published to pypi.org yet

  ```bash
  git clone git@github.com:affinidi/affinidi-tdk.git
  cd packages/auth-provider/
  npm i --prefix .
  npm run build
  npm run package
  ```

  ```bash
  pip install dist/python/affinidi_tdk_auth_provider-0.1.4-py3-none-any.whl
  ```


pkgId: 298aa33a8eedb15968bd63d98435e79f44c09a203037651290fed762a7acbb15
name: python-affinidi-tdk-common
arch: src
version: 1.21.0
epoch: 0
release: 1
summary: Affinidi TDK Common library with shared utils
url: https://github.com/affinidi/affinidi-tdk#readme
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi-tdk-common-1.21.0-1.src.rpm
checksum_type: sha256
description:
  ```bash
  npm install @affinidi-tdk/common
  ```



  run inside [python virtual env](https://docs.python.org/3/library/venv.html)

  ```bash
  pip install affinidi_tdk_common
  ```



  ```bash
  npm i --prefix .
  npm run build
  npm run package
  ```

  The code will be generated under /dist for each language.


pkgId: f8608538306212714a92c18a70e61cb46b9f7784cc9ed1847f4f1d2490684071
name: python-affinidi-tdk-iota-core
arch: src
version: 1.20.0
epoch: 0
release: 1
summary: Affinidi Iota Framework core library primarily used in the backend
url: https://github.com/affinidi/affinidi-tdk#readme
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi-tdk-iota-core-1.20.0-1.src.rpm
checksum_type: sha256
description:
  ```bash
  npm install @affinidi-tdk/iota-core
  ```



  run inside [python virtual env](https://docs.python.org/3/library/venv.html)

  ```bash
  pip install affinidi_tdk_iota_core
  ```



  Head over to [Affinidi Iota Framework documentation](https://docs.affinidi.com/frameworks/iota-framework) page to better understand how the service works.

  For details on how to use this library please head over to [iota-core documentation](https://docs.affinidi.com/dev-tools/affinidi-tdk/libraries/iota-core) page.


pkgId: 2519b60382a09973c015c3344d3a5ac5111d53068262db1fa49a4c67a44786f3
name: python-affinidi.common-check-widget-backend-lib
arch: src
version: 2.1.1
epoch: 0
release: 1
summary: An common-check-widget-backend-lib used to development backend for common-check-widget-frontend
url: https://gitlab.com/affinidi/safe-travel/st-experiments/common-check-widget-backend-lib
rpm_license: MIT-0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi.common-check-widget-backend-lib-2.1.1-1.src.rpm
checksum_type: sha256
description:
  > An common-check-widget-backend-lib package authored in TypeScript that gets published as GitHub packages for Node.js, Python etc



  This library is licensed under the MIT-0 License. See the LICENSE file.



  https://common-check-widget-backend-lib.affinity-project.org/


pkgId: 55b585457440357066aa625d520560b33da925bb4fd49256a1231e31c648c9e4
name: python-affinidi_tdk_credential_issuance_client
arch: src
version: 1.31.0
epoch: 0
release: 1
summary: CredentialIssuanceService
url: https://github.com/affinidi.com/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_credential_issuance_client-1.31.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-issuance/](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-issuance/)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_credential_issuance_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_issuance_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_issuance_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_credential_issuance_client
  from affinidi_tdk_credential_issuance_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_credential_issuance_client.Configuration(
      host = "https://apse1.api.affinidi.io/cis"
  )







  configuration.api_key['ProjectTokenAuth'] = os.environ["API_KEY"]


  import affinidi_tdk_auth_provider

  stats = {
    apiGatewayUrl,
    keyId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
    tokenId,
  }
  authProvider = affinidi_tdk_auth_provider.AuthProvider(stats)
  configuration.refresh_api_key_hook = lambda api_client: authProvider.fetch_project_scoped_token()






  with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)
      create_issuance_config_input = affinidi_tdk_credential_issuance_client.CreateIssuanceConfigInput() # CreateIssuanceConfigInput | Request body of create configuration

      try:
          api_response = api_instance.create_issuance_config(create_issuance_config_input)
          print("The response of ConfigurationApi->create_issuance_config:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling ConfigurationApi->create_issuance_config: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/cis*

  | Class              | Method                                                                                                        | HTTP request                                                 | Description |
  | ------------------ | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ----------- |
  | _ConfigurationApi_ | [**create_issuance_config**](docs/ConfigurationApi.md#create_issuance_config)                                 | **POST** /v1/configurations                                  |
  | _ConfigurationApi_ | [**delete_issuance_config_by_id**](docs/ConfigurationApi.md#delete_issuance_config_by_id)                     | **DELETE** /v1/configurations/{configurationId}              |
  | _ConfigurationApi_ | [**get_issuance_config_by_id**](docs/ConfigurationApi.md#get_issuance_config_by_id)                           | **GET** /v1/configurations/{configurationId}                 |
  | _ConfigurationApi_ | [**get_issuance_config_list**](docs/ConfigurationApi.md#get_issuance_config_list)                             | **GET** /v1/configurations                                   |
  | _ConfigurationApi_ | [**update_issuance_config_by_id**](docs/ConfigurationApi.md#update_issuance_config_by_id)                     | **PUT** /v1/configurations/{configurationId}                 |
  | _CredentialsApi_   | [**generate_credentials**](docs/CredentialsApi.md#generate_credentials)                                       | **POST** /v1/{projectId}/credential                          |
  | _IssuanceApi_      | [**issuance_state**](docs/IssuanceApi.md#issuance_state)                                                      | **GET** /v1/{projectId}/issuance/state/{issuanceId}          |
  | _IssuanceApi_      | [**list_issuance**](docs/IssuanceApi.md#list_issuance)                                                        | **GET** /v1/{projectId}/issuance                             |
  | _IssuanceApi_      | [**start_issuance**](docs/IssuanceApi.md#start_issuance)                                                      | **POST** /v1/{projectId}/issuance/start                      |
  | _OfferApi_         | [**get_credential_offer**](docs/OfferApi.md#get_credential_offer)                                             | **GET** /v1/{projectId}/offers/{issuanceId}                  |
  | _WellKnownApi_     | [**get_well_known_open_id_credential_issuer**](docs/WellKnownApi.md#get_well_known_open_id_credential_issuer) | **GET** /v1/{projectId}/.well-known/openid-credential-issuer |



  - [ActionForbiddenError](docs/ActionForbiddenError.md)
  - [ActionForbiddenErrorDetailsInner](docs/ActionForbiddenErrorDetailsInner.md)
  - [CorsGenerateCredentialsOK](docs/CorsGenerateCredentialsOK.md)
  - [CorsGetCredentialOfferOK](docs/CorsGetCredentialOfferOK.md)
  - [CorsGetWellKnownOpenIdCredentialIssuerOK](docs/CorsGetWellKnownOpenIdCredentialIssuerOK.md)
  - [CreateCredentialInput](docs/CreateCredentialInput.md)
  - [CreateIssuanceConfig400Response](docs/CreateIssuanceConfig400Response.md)
  - [CreateIssuanceConfigInput](docs/CreateIssuanceConfigInput.md)
  - [CredentialIssuanceIdExistError](docs/CredentialIssuanceIdExistError.md)
  - [CredentialOfferClaimedError](docs/CredentialOfferClaimedError.md)
  - [CredentialOfferExpiredError](docs/CredentialOfferExpiredError.md)
  - [CredentialOfferResponse](docs/CredentialOfferResponse.md)
  - [CredentialOfferResponseGrants](docs/CredentialOfferResponseGrants.md)
  - [CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCode](docs/CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCode.md)
  - [CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCodeTxCode](docs/CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCodeTxCode.md)
  - [CredentialProof](docs/CredentialProof.md)
  - [CredentialResponse](docs/CredentialResponse.md)
  - [CredentialResponseDeferred](docs/CredentialResponseDeferred.md)
  - [CredentialResponseImmediate](docs/CredentialResponseImmediate.md)
  - [CredentialResponseImmediateCNonceExpiresIn](docs/CredentialResponseImmediateCNonceExpiresIn.md)
  - [CredentialResponseImmediateCredential](docs/CredentialResponseImmediateCredential.md)
  - [CredentialSubjectNotValidError](docs/CredentialSubjectNotValidError.md)
  - [CredentialSupportedObject](docs/CredentialSupportedObject.md)
  - [DeferredCredentialInput](docs/DeferredCredentialInput.md)
  - [GenerateCredentials400Response](docs/GenerateCredentials400Response.md)
  - [GetCredentialOffer400Response](docs/GetCredentialOffer400Response.md)
  - [InvalidCredentialRequestError](docs/InvalidCredentialRequestError.md)
  - [InvalidCredentialTypeError](docs/InvalidCredentialTypeError.md)
  - [InvalidIssuerWalletError](docs/InvalidIssuerWalletError.md)
  - [InvalidJwtTokenError](docs/InvalidJwtTokenError.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [InvalidProofError](docs/InvalidProofError.md)
  - [IssuanceConfigDto](docs/IssuanceConfigDto.md)
  - [IssuanceConfigListResponse](docs/IssuanceConfigListResponse.md)
  - [IssuanceConfigMiniDto](docs/IssuanceConfigMiniDto.md)
  - [IssuanceStateResponse](docs/IssuanceStateResponse.md)
  - [ListIssuanceResponse](docs/ListIssuanceResponse.md)
  - [ListIssuanceResponseIssuancesInner](docs/ListIssuanceResponseIssuancesInner.md)
  - [MissingHolderDidError](docs/MissingHolderDidError.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [ProjectCredentialConfigExistError](docs/ProjectCredentialConfigExistError.md)
  - [ProjectCredentialConfigNotExistError](docs/ProjectCredentialConfigNotExistError.md)
  - [StartIssuance400Response](docs/StartIssuance400Response.md)
  - [StartIssuanceInput](docs/StartIssuanceInput.md)
  - [StartIssuanceInputDataInner](docs/StartIssuanceInputDataInner.md)
  - [StartIssuanceInputDataInnerMetaData](docs/StartIssuanceInputDataInnerMetaData.md)
  - [StartIssuanceResponse](docs/StartIssuanceResponse.md)
  - [SupportedCredentialMetadata](docs/SupportedCredentialMetadata.md)
  - [SupportedCredentialMetadataDisplayInner](docs/SupportedCredentialMetadataDisplayInner.md)
  - [SupportedCredentialMetadataDisplayInnerLogo](docs/SupportedCredentialMetadataDisplayInnerLogo.md)
  - [UpdateIssuanceConfigInput](docs/UpdateIssuanceConfigInput.md)
  - [VcClaimedError](docs/VcClaimedError.md)
  - [WellKnownOpenIdCredentialIssuerResponse](docs/WellKnownOpenIdCredentialIssuerResponse.md)
  - [WellKnownOpenIdCredentialIssuerResponseCredentialsSupportedInner](docs/WellKnownOpenIdCredentialIssuerResponseCredentialsSupportedInner.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="AwsSigV4"></a>



  - **Type**: API key
  - **API key parameter name**: Authorization
  - **Location**: HTTP header

  <a id="ApiKey"></a>



  - **Type**: API key
  - **API key parameter name**: x-api-key
  - **Location**: HTTP header

  <a id="bearerAuth"></a>



  - **Type**: Bearer authentication (JWT)

  <a id="ConsumerTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="HeritageTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: b594e80928523c20f437f55f5191336c03240cd9ff478267c5f897c6a9047a45
name: python-affinidi_tdk_credential_issuance_client
arch: src
version: 1.33.0
epoch: 0
release: 1
summary: CredentialIssuanceService
url: https://github.com/affinidi/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_credential_issuance_client-1.33.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-issuance/](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-issuance/)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_credential_issuance_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_issuance_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_issuance_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_credential_issuance_client
  from affinidi_tdk_credential_issuance_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_credential_issuance_client.Configuration(
      host = "https://apse1.api.affinidi.io/cis"
  )







  configuration.api_key['ProjectTokenAuth'] = os.environ["API_KEY"]


  import affinidi_tdk_auth_provider

  stats = {
    apiGatewayUrl,
    keyId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
    tokenId,
  }
  authProvider = affinidi_tdk_auth_provider.AuthProvider(stats)
  configuration.refresh_api_key_hook = lambda api_client: authProvider.fetch_project_scoped_token()






  with affinidi_tdk_credential_issuance_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_credential_issuance_client.ConfigurationApi(api_client)
      create_issuance_config_input = affinidi_tdk_credential_issuance_client.CreateIssuanceConfigInput() # CreateIssuanceConfigInput | Request body of create configuration

      try:
          api_response = api_instance.create_issuance_config(create_issuance_config_input)
          print("The response of ConfigurationApi->create_issuance_config:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling ConfigurationApi->create_issuance_config: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/cis*

  | Class              | Method                                                                                                        | HTTP request                                                                            | Description                   |
  | ------------------ | ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------- |
  | _ConfigurationApi_ | [**create_issuance_config**](docs/ConfigurationApi.md#create_issuance_config)                                 | **POST** /v1/configurations                                                             |
  | _ConfigurationApi_ | [**delete_issuance_config_by_id**](docs/ConfigurationApi.md#delete_issuance_config_by_id)                     | **DELETE** /v1/configurations/{configurationId}                                         |
  | _ConfigurationApi_ | [**get_issuance_config_by_id**](docs/ConfigurationApi.md#get_issuance_config_by_id)                           | **GET** /v1/configurations/{configurationId}                                            |
  | _ConfigurationApi_ | [**get_issuance_config_list**](docs/ConfigurationApi.md#get_issuance_config_list)                             | **GET** /v1/configurations                                                              |
  | _ConfigurationApi_ | [**update_issuance_config_by_id**](docs/ConfigurationApi.md#update_issuance_config_by_id)                     | **PUT** /v1/configurations/{configurationId}                                            |
  | _CredentialsApi_   | [**generate_credentials**](docs/CredentialsApi.md#generate_credentials)                                       | **POST** /v1/{projectId}/credential                                                     |
  | _DefaultApi_       | [**change_credential_satatus**](docs/DefaultApi.md#change_credential_satatus)                                 | **POST** /v1/{projectId}/configurations/{configurationId}/issuance/change-status        | change credential status.     |
  | _DefaultApi_       | [**get_status_list**](docs/DefaultApi.md#get_status_list)                                                     | **GET** /v1/{projectId}/status-list/{statusListId}                                      | Return status list credential |
  | _DefaultApi_       | [**list_issuance_data_records**](docs/DefaultApi.md#list_issuance_data_records)                               | **GET** /v1/{projectId}/configurations/{configurationId}/issuance/issuance-data-records | List records                  |
  | _IssuanceApi_      | [**issuance_state**](docs/IssuanceApi.md#issuance_state)                                                      | **GET** /v1/{projectId}/issuance/state/{issuanceId}                                     |
  | _IssuanceApi_      | [**list_issuance**](docs/IssuanceApi.md#list_issuance)                                                        | **GET** /v1/{projectId}/issuance                                                        |
  | _IssuanceApi_      | [**start_issuance**](docs/IssuanceApi.md#start_issuance)                                                      | **POST** /v1/{projectId}/issuance/start                                                 |
  | _OfferApi_         | [**get_credential_offer**](docs/OfferApi.md#get_credential_offer)                                             | **GET** /v1/{projectId}/offers/{issuanceId}                                             |
  | _WellKnownApi_     | [**get_well_known_open_id_credential_issuer**](docs/WellKnownApi.md#get_well_known_open_id_credential_issuer) | **GET** /v1/{projectId}/.well-known/openid-credential-issuer                            |



  - [ActionForbiddenError](docs/ActionForbiddenError.md)
  - [ActionForbiddenErrorDetailsInner](docs/ActionForbiddenErrorDetailsInner.md)
  - [ChangeCredentialStatusInput](docs/ChangeCredentialStatusInput.md)
  - [CorsGenerateCredentialsOK](docs/CorsGenerateCredentialsOK.md)
  - [CorsGetCredentialOfferOK](docs/CorsGetCredentialOfferOK.md)
  - [CorsGetWellKnownOpenIdCredentialIssuerOK](docs/CorsGetWellKnownOpenIdCredentialIssuerOK.md)
  - [CreateCredentialInput](docs/CreateCredentialInput.md)
  - [CreateIssuanceConfig400Response](docs/CreateIssuanceConfig400Response.md)
  - [CreateIssuanceConfigInput](docs/CreateIssuanceConfigInput.md)
  - [CredentialIssuanceIdExistError](docs/CredentialIssuanceIdExistError.md)
  - [CredentialOfferClaimedError](docs/CredentialOfferClaimedError.md)
  - [CredentialOfferExpiredError](docs/CredentialOfferExpiredError.md)
  - [CredentialOfferResponse](docs/CredentialOfferResponse.md)
  - [CredentialOfferResponseGrants](docs/CredentialOfferResponseGrants.md)
  - [CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCode](docs/CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCode.md)
  - [CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCodeTxCode](docs/CredentialOfferResponseGrantsUrnIetfParamsOauthGrantTypePreAuthorizedCodeTxCode.md)
  - [CredentialProof](docs/CredentialProof.md)
  - [CredentialResponse](docs/CredentialResponse.md)
  - [CredentialResponseDeferred](docs/CredentialResponseDeferred.md)
  - [CredentialResponseImmediate](docs/CredentialResponseImmediate.md)
  - [CredentialResponseImmediateCNonceExpiresIn](docs/CredentialResponseImmediateCNonceExpiresIn.md)
  - [CredentialResponseImmediateCredential](docs/CredentialResponseImmediateCredential.md)
  - [CredentialSubjectNotValidError](docs/CredentialSubjectNotValidError.md)
  - [CredentialSupportedObject](docs/CredentialSupportedObject.md)
  - [DeferredCredentialInput](docs/DeferredCredentialInput.md)
  - [FlowData](docs/FlowData.md)
  - [FlowDataStatusListsDetailsInner](docs/FlowDataStatusListsDetailsInner.md)
  - [GenerateCredentials400Response](docs/GenerateCredentials400Response.md)
  - [GetCredentialOffer400Response](docs/GetCredentialOffer400Response.md)
  - [GetStatusListResultDto](docs/GetStatusListResultDto.md)
  - [InvalidCredentialRequestError](docs/InvalidCredentialRequestError.md)
  - [InvalidCredentialTypeError](docs/InvalidCredentialTypeError.md)
  - [InvalidIssuerWalletError](docs/InvalidIssuerWalletError.md)
  - [InvalidJwtTokenError](docs/InvalidJwtTokenError.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [InvalidProofError](docs/InvalidProofError.md)
  - [IssuanceConfigDto](docs/IssuanceConfigDto.md)
  - [IssuanceConfigListResponse](docs/IssuanceConfigListResponse.md)
  - [IssuanceConfigMiniDto](docs/IssuanceConfigMiniDto.md)
  - [IssuanceStateResponse](docs/IssuanceStateResponse.md)
  - [ListIssuanceRecordResponse](docs/ListIssuanceRecordResponse.md)
  - [ListIssuanceResponse](docs/ListIssuanceResponse.md)
  - [ListIssuanceResponseIssuancesInner](docs/ListIssuanceResponseIssuancesInner.md)
  - [MissingHolderDidError](docs/MissingHolderDidError.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [ProjectCredentialConfigExistError](docs/ProjectCredentialConfigExistError.md)
  - [ProjectCredentialConfigNotExistError](docs/ProjectCredentialConfigNotExistError.md)
  - [StartIssuance400Response](docs/StartIssuance400Response.md)
  - [StartIssuanceInput](docs/StartIssuanceInput.md)
  - [StartIssuanceInputDataInner](docs/StartIssuanceInputDataInner.md)
  - [StartIssuanceInputDataInnerMetaData](docs/StartIssuanceInputDataInnerMetaData.md)
  - [StartIssuanceInputDataInnerStatusListDetailsInner](docs/StartIssuanceInputDataInnerStatusListDetailsInner.md)
  - [StartIssuanceResponse](docs/StartIssuanceResponse.md)
  - [SupportedCredentialMetadata](docs/SupportedCredentialMetadata.md)
  - [SupportedCredentialMetadataDisplayInner](docs/SupportedCredentialMetadataDisplayInner.md)
  - [SupportedCredentialMetadataDisplayInnerLogo](docs/SupportedCredentialMetadataDisplayInnerLogo.md)
  - [UpdateIssuanceConfigInput](docs/UpdateIssuanceConfigInput.md)
  - [VcClaimedError](docs/VcClaimedError.md)
  - [WellKnownOpenIdCredentialIssuerResponse](docs/WellKnownOpenIdCredentialIssuerResponse.md)
  - [WellKnownOpenIdCredentialIssuerResponseCredentialsSupportedInner](docs/WellKnownOpenIdCredentialIssuerResponseCredentialsSupportedInner.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="AwsSigV4"></a>



  - **Type**: API key
  - **API key parameter name**: Authorization
  - **Location**: HTTP header

  <a id="ApiKey"></a>



  - **Type**: API key
  - **API key parameter name**: x-api-key
  - **Location**: HTTP header

  <a id="bearerAuth"></a>



  - **Type**: Bearer authentication (JWT)

  <a id="ConsumerTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="HeritageTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: c08e5182595e4ca3c2581fd06b794e9995c3b8c09009ed42ca8272e34d66c326
name: python-affinidi_tdk_credential_verification_client
arch: src
version: 1.30.0
epoch: 0
release: 1
summary: VerificationService
url: https://github.com/affinidi.com/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_credential_verification_client-1.30.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-verification](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/credential-verification)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_credential_verification_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_verification_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_credential_verification_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_credential_verification_client
  from affinidi_tdk_credential_verification_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_credential_verification_client.Configuration(
      host = "https://apse1.api.affinidi.io/ver"
  )







  configuration.api_key['ProjectTokenAuth'] = os.environ["API_KEY"]


  import affinidi_tdk_auth_provider

  stats = {
    apiGatewayUrl,
    keyId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
    tokenId,
  }
  authProvider = affinidi_tdk_auth_provider.AuthProvider(stats)
  configuration.refresh_api_key_hook = lambda api_client: authProvider.fetch_project_scoped_token()






  with affinidi_tdk_credential_verification_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_credential_verification_client.DefaultApi(api_client)
      verify_credential_input = affinidi_tdk_credential_verification_client.VerifyCredentialInput() # VerifyCredentialInput | VerifyCredentials

      try:
          
          api_response = api_instance.verify_credentials(verify_credential_input)
          print("The response of DefaultApi->verify_credentials:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling DefaultApi->verify_credentials: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/ver*

  | Class        | Method                                                            | HTTP request                     | Description  |
  | ------------ | ----------------------------------------------------------------- | -------------------------------- | ------------ |
  | _DefaultApi_ | [**verify_credentials**](docs/DefaultApi.md#verify_credentials)   | **POST** /v1/verifier/verify-vcs | Verifying VC |
  | _DefaultApi_ | [**verify_presentation**](docs/DefaultApi.md#verify_presentation) | **POST** /v1/verifier/verify-vp  | Verifying VP |



  - [Constraints](docs/Constraints.md)
  - [ConstraintsStatuses](docs/ConstraintsStatuses.md)
  - [CredentialRequirements](docs/CredentialRequirements.md)
  - [CredentialRequirementsConstraints](docs/CredentialRequirementsConstraints.md)
  - [Descriptor](docs/Descriptor.md)
  - [Error](docs/Error.md)
  - [ErrorDetail](docs/ErrorDetail.md)
  - [EvaluateVpOutput](docs/EvaluateVpOutput.md)
  - [Field](docs/Field.md)
  - [Filter](docs/Filter.md)
  - [FilterConst](docs/FilterConst.md)
  - [FilterItems](docs/FilterItems.md)
  - [Format](docs/Format.md)
  - [FreeFormObject](docs/FreeFormObject.md)
  - [HolderSubject](docs/HolderSubject.md)
  - [InputDescriptor](docs/InputDescriptor.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [JwtObject](docs/JwtObject.md)
  - [LdpObject](docs/LdpObject.md)
  - [NestedDescriptor](docs/NestedDescriptor.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [NotFoundErrorDetailsInner](docs/NotFoundErrorDetailsInner.md)
  - [PdStatus](docs/PdStatus.md)
  - [PresentationDefinition](docs/PresentationDefinition.md)
  - [PresentationSubmission](docs/PresentationSubmission.md)
  - [SubmissionRequirement](docs/SubmissionRequirement.md)
  - [ValidateJwtInput](docs/ValidateJwtInput.md)
  - [ValidateJwtOutput](docs/ValidateJwtOutput.md)
  - [VerifyCredentialInput](docs/VerifyCredentialInput.md)
  - [VerifyCredentialOutput](docs/VerifyCredentialOutput.md)
  - [VerifyPresentationInput](docs/VerifyPresentationInput.md)
  - [VerifyPresentationOutput](docs/VerifyPresentationOutput.md)
  - [VerifyPresentationOutputErrors](docs/VerifyPresentationOutputErrors.md)
  - [W3cCredential](docs/W3cCredential.md)
  - [W3cCredentialCredentialSchema](docs/W3cCredentialCredentialSchema.md)
  - [W3cCredentialCredentialSubject](docs/W3cCredentialCredentialSubject.md)
  - [W3cCredentialHolder](docs/W3cCredentialHolder.md)
  - [W3cCredentialStatus](docs/W3cCredentialStatus.md)
  - [W3cPresentation](docs/W3cPresentation.md)
  - [W3cPresentationContext](docs/W3cPresentationContext.md)
  - [W3cPresentationContextOneOfInner](docs/W3cPresentationContextOneOfInner.md)
  - [W3cProof](docs/W3cProof.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: 49757568ab0621cffccbe644f94ae2beaee93f12b04a7a8eed85630d0f8593fa
name: python-affinidi_tdk_iam_client
arch: src
version: 1.29.0
epoch: 0
release: 1
summary: Iam
url: https://github.com/affinidi.com/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_iam_client-1.29.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk](https://docs.affinidi.com/dev-tools/affinidi-tdk)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_iam_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iam_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iam_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_iam_client
  from affinidi_tdk_iam_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_iam_client.Configuration(
      host = "https://apse1.api.affinidi.io/iam"
  )




  with affinidi_tdk_iam_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_iam_client.ConsumerAuthApi(api_client)
      consumer_auth_token_endpoint_input = affinidi_tdk_iam_client.ConsumerAuthTokenEndpointInput() # ConsumerAuthTokenEndpointInput | ConsumerAuthTokenEndpoint

      try:
          
          api_response = api_instance.consumer_auth_token_endpoint(consumer_auth_token_endpoint_input)
          print("The response of ConsumerAuthApi->consumer_auth_token_endpoint:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling ConsumerAuthApi->consumer_auth_token_endpoint: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/iam*

  | Class             | Method                                                                                   | HTTP request                                     | Description                           |
  | ----------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------- |
  | _ConsumerAuthApi_ | [**consumer_auth_token_endpoint**](docs/ConsumerAuthApi.md#consumer_auth_token_endpoint) | **POST** /v1/consumer/oauth2/token               | The Consumer OAuth 2.0 Token Endpoint |
  | _DefaultApi_      | [**v1_auth_proxy_delete**](docs/DefaultApi.md#v1_auth_proxy_delete)                      | **DELETE** /v1/auth/{proxy+}                     |
  | _DefaultApi_      | [**v1_auth_proxy_get**](docs/DefaultApi.md#v1_auth_proxy_get)                            | **GET** /v1/auth/{proxy+}                        |
  | _DefaultApi_      | [**v1_auth_proxy_patch**](docs/DefaultApi.md#v1_auth_proxy_patch)                        | **PATCH** /v1/auth/{proxy+}                      |
  | _DefaultApi_      | [**v1_auth_proxy_post**](docs/DefaultApi.md#v1_auth_proxy_post)                          | **POST** /v1/auth/{proxy+}                       |
  | _DefaultApi_      | [**v1_auth_proxy_put**](docs/DefaultApi.md#v1_auth_proxy_put)                            | **PUT** /v1/auth/{proxy+}                        |
  | _DefaultApi_      | [**v1_idp_proxy_delete**](docs/DefaultApi.md#v1_idp_proxy_delete)                        | **DELETE** /v1/idp/{proxy+}                      |
  | _DefaultApi_      | [**v1_idp_proxy_get**](docs/DefaultApi.md#v1_idp_proxy_get)                              | **GET** /v1/idp/{proxy+}                         |
  | _DefaultApi_      | [**v1_idp_proxy_patch**](docs/DefaultApi.md#v1_idp_proxy_patch)                          | **PATCH** /v1/idp/{proxy+}                       |
  | _DefaultApi_      | [**v1_idp_proxy_post**](docs/DefaultApi.md#v1_idp_proxy_post)                            | **POST** /v1/idp/{proxy+}                        |
  | _DefaultApi_      | [**v1_idp_proxy_put**](docs/DefaultApi.md#v1_idp_proxy_put)                              | **PUT** /v1/idp/{proxy+}                         |
  | _PoliciesApi_     | [**get_policies**](docs/PoliciesApi.md#get_policies)                                     | **GET** /v1/policies/principals/{principalId}    |
  | _PoliciesApi_     | [**update_policies**](docs/PoliciesApi.md#update_policies)                               | **PUT** /v1/policies/principals/{principalId}    |
  | _ProjectsApi_     | [**add_principal_to_project**](docs/ProjectsApi.md#add_principal_to_project)             | **POST** /v1/projects/principals                 |
  | _ProjectsApi_     | [**create_project**](docs/ProjectsApi.md#create_project)                                 | **POST** /v1/projects                            |
  | _ProjectsApi_     | [**delete_principal_from_project**](docs/ProjectsApi.md#delete_principal_from_project)   | **DELETE** /v1/projects/principals/{principalId} |
  | _ProjectsApi_     | [**list_principals_of_project**](docs/ProjectsApi.md#list_principals_of_project)         | **GET** /v1/projects/principals                  |
  | _ProjectsApi_     | [**list_project**](docs/ProjectsApi.md#list_project)                                     | **GET** /v1/projects                             |
  | _ProjectsApi_     | [**update_project**](docs/ProjectsApi.md#update_project)                                 | **PATCH** /v1/projects/{projectId}               |
  | _StsApi_          | [**create_project_scoped_token**](docs/StsApi.md#create_project_scoped_token)            | **POST** /v1/sts/create-project-scoped-token     |
  | _StsApi_          | [**whoami**](docs/StsApi.md#whoami)                                                      | **GET** /v1/sts/whoami                           |
  | _TokensApi_       | [**create_token**](docs/TokensApi.md#create_token)                                       | **POST** /v1/tokens                              |
  | _TokensApi_       | [**delete_token**](docs/TokensApi.md#delete_token)                                       | **DELETE** /v1/tokens/{tokenId}                  |
  | _TokensApi_       | [**get_token**](docs/TokensApi.md#get_token)                                             | **GET** /v1/tokens/{tokenId}                     |
  | _TokensApi_       | [**list_token**](docs/TokensApi.md#list_token)                                           | **GET** /v1/tokens                               |
  | _TokensApi_       | [**update_token**](docs/TokensApi.md#update_token)                                       | **PATCH** /v1/tokens/{tokenId}                   |
  | _WellKnownApi_    | [**get_well_known_did**](docs/WellKnownApi.md#get_well_known_did)                        | **GET** /.well-known/did.json                    |
  | _WellKnownApi_    | [**get_well_known_jwks**](docs/WellKnownApi.md#get_well_known_jwks)                      | **GET** /.well-known/jwks.json                   |



  - [ActionForbiddenError](docs/ActionForbiddenError.md)
  - [AddUserToProjectInput](docs/AddUserToProjectInput.md)
  - [ConsumerAuthTokenEndpointInput](docs/ConsumerAuthTokenEndpointInput.md)
  - [ConsumerAuthTokenEndpointOutput](docs/ConsumerAuthTokenEndpointOutput.md)
  - [CorsConsumerAuthTokenEndpointOK](docs/CorsConsumerAuthTokenEndpointOK.md)
  - [CreateProjectInput](docs/CreateProjectInput.md)
  - [CreateProjectScopedTokenInput](docs/CreateProjectScopedTokenInput.md)
  - [CreateProjectScopedTokenOutput](docs/CreateProjectScopedTokenOutput.md)
  - [CreateTokenInput](docs/CreateTokenInput.md)
  - [GetWellKnownDidOK](docs/GetWellKnownDidOK.md)
  - [InvalidDIDError](docs/InvalidDIDError.md)
  - [InvalidJwtTokenError](docs/InvalidJwtTokenError.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [JsonWebKeyDto](docs/JsonWebKeyDto.md)
  - [JsonWebKeySetDto](docs/JsonWebKeySetDto.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [PolicyDto](docs/PolicyDto.md)
  - [PolicyStatementDto](docs/PolicyStatementDto.md)
  - [PrincipalCannotBeDeletedError](docs/PrincipalCannotBeDeletedError.md)
  - [PrincipalDoesNotBelongToProjectError](docs/PrincipalDoesNotBelongToProjectError.md)
  - [ProjectDto](docs/ProjectDto.md)
  - [ProjectList](docs/ProjectList.md)
  - [PublicKeyCannotBeResolvedFromDidError](docs/PublicKeyCannotBeResolvedFromDidError.md)
  - [ServiceErrorResponse](docs/ServiceErrorResponse.md)
  - [ServiceErrorResponseDetailsInner](docs/ServiceErrorResponseDetailsInner.md)
  - [TokenAuthenticationMethodDto](docs/TokenAuthenticationMethodDto.md)
  - [TokenDto](docs/TokenDto.md)
  - [TokenList](docs/TokenList.md)
  - [TokenPrivateKeyAuthenticationMethodDto](docs/TokenPrivateKeyAuthenticationMethodDto.md)
  - [TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo](docs/TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfo.md)
  - [TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfoOneOf](docs/TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfoOneOf.md)
  - [TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfoOneOf1](docs/TokenPrivateKeyAuthenticationMethodDtoPublicKeyInfoOneOf1.md)
  - [TypedPricipalId](docs/TypedPricipalId.md)
  - [UnauthorizedError](docs/UnauthorizedError.md)
  - [UnexpectedError](docs/UnexpectedError.md)
  - [UpdateProjectInput](docs/UpdateProjectInput.md)
  - [UpdateTokenInput](docs/UpdateTokenInput.md)
  - [UpdateTokenPrivateKeyAuthenticationMethodDto](docs/UpdateTokenPrivateKeyAuthenticationMethodDto.md)
  - [UserDto](docs/UserDto.md)
  - [UserList](docs/UserList.md)
  - [WhoamiDto](docs/WhoamiDto.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="HeritageTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ConsumerTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: 817b1410247871614d07a37bc55a8588da04a2c395bb29c421ef2b066cfa30a9
name: python-affinidi_tdk_iota_client
arch: src
version: 1.27.0
epoch: 0
release: 1
summary: IotaService
url: https://github.com/affinidi.com/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_iota_client-1.27.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/iota-framework](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/iota-framework)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_iota_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iota_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iota_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_iota_client
  from affinidi_tdk_iota_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_iota_client.Configuration(
      host = "https://apse1.api.affinidi.io/ais"
  )




  with affinidi_tdk_iota_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_iota_client.CallbackApi(api_client)
      callback_input = affinidi_tdk_iota_client.CallbackInput() # CallbackInput | CallbackRequestInput

      try:
          
          api_response = api_instance.iot_oidc4_vp_callback(callback_input)
          print("The response of CallbackApi->iot_oidc4_vp_callback:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling CallbackApi->iot_oidc4_vp_callback: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/ais*

  | Class               | Method                                                                                               | HTTP request                                                               | Description                              |
  | ------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ---------------------------------------- |
  | _CallbackApi_       | [**iot_oidc4_vp_callback**](docs/CallbackApi.md#iot_oidc4_vp_callback)                               | **POST** /v1/callback                                                      | Processes the callback for OIDC4VP flows |
  | _ConfigurationsApi_ | [**create_iota_configuration**](docs/ConfigurationsApi.md#create_iota_configuration)                 | **POST** /v1/configurations                                                |
  | _ConfigurationsApi_ | [**delete_iota_configuration_by_id**](docs/ConfigurationsApi.md#delete_iota_configuration_by_id)     | **DELETE** /v1/configurations/{configurationId}                            |
  | _ConfigurationsApi_ | [**get_iota_configuration_by_id**](docs/ConfigurationsApi.md#get_iota_configuration_by_id)           | **GET** /v1/configurations/{configurationId}                               |
  | _ConfigurationsApi_ | [**get_iota_configuration_meta_data**](docs/ConfigurationsApi.md#get_iota_configuration_meta_data)   | **GET** /v1/projects/{projectId}/configurations/{configurationId}/metadata |
  | _ConfigurationsApi_ | [**list_iota_configurations**](docs/ConfigurationsApi.md#list_iota_configurations)                   | **GET** /v1/configurations                                                 |
  | _ConfigurationsApi_ | [**update_iota_configuration_by_id**](docs/ConfigurationsApi.md#update_iota_configuration_by_id)     | **PATCH** /v1/configurations/{configurationId}                             |
  | _DefaultApi_        | [**list_logged_consents**](docs/DefaultApi.md#list_logged_consents)                                  | **GET** /v1/logged-consents                                                |
  | _IotaApi_           | [**aws_exchange_credentials**](docs/IotaApi.md#aws_exchange_credentials)                             | **POST** /v1/aws-exchange-credentials                                      |
  | _IotaApi_           | [**aws_exchange_credentials_project_token**](docs/IotaApi.md#aws_exchange_credentials_project_token) | **POST** /v1/aws-exchange-credentials/project-token                        |
  | _IotaApi_           | [**fetch_iota_vp_response**](docs/IotaApi.md#fetch_iota_vp_response)                                 | **POST** /v1/fetch-iota-response                                           |
  | _IotaApi_           | [**initiate_data_sharing_request**](docs/IotaApi.md#initiate_data_sharing_request)                   | **POST** /v1/initiate-data-sharing-request                                 |
  | _IotaApi_           | [**iota_exchange_credentials**](docs/IotaApi.md#iota_exchange_credentials)                           | **POST** /v1/exchange-credentials                                          |
  | _PexQueryApi_       | [**create_pex_query**](docs/PexQueryApi.md#create_pex_query)                                         | **POST** /v1/configurations/{configurationId}/pex-queries                  |
  | _PexQueryApi_       | [**delete_pex_queries**](docs/PexQueryApi.md#delete_pex_queries)                                     | **POST** /v1/configurations/{configurationId}/delete-queries               | deletes pex queries                      |
  | _PexQueryApi_       | [**delete_pex_query_by_id**](docs/PexQueryApi.md#delete_pex_query_by_id)                             | **DELETE** /v1/configurations/{configurationId}/pex-queries/{queryId}      |
  | _PexQueryApi_       | [**get_pex_query_by_id**](docs/PexQueryApi.md#get_pex_query_by_id)                                   | **GET** /v1/configurations/{configurationId}/pex-queries/{queryId}         |
  | _PexQueryApi_       | [**list_pex_queries**](docs/PexQueryApi.md#list_pex_queries)                                         | **GET** /v1/configurations/{configurationId}/pex-queries                   |
  | _PexQueryApi_       | [**save_pex_queries**](docs/PexQueryApi.md#save_pex_queries)                                         | **POST** /v1/configurations/{configurationId}/save-queries                 |
  | _PexQueryApi_       | [**update_pex_query_by_id**](docs/PexQueryApi.md#update_pex_query_by_id)                             | **PATCH** /v1/configurations/{configurationId}/pex-queries/{queryId}       |



  - [AlreadyExistsError](docs/AlreadyExistsError.md)
  - [AwsExchangeCredentials](docs/AwsExchangeCredentials.md)
  - [AwsExchangeCredentialsOK](docs/AwsExchangeCredentialsOK.md)
  - [AwsExchangeCredentialsProjectToken](docs/AwsExchangeCredentialsProjectToken.md)
  - [AwsExchangeCredentialsProjectTokenOK](docs/AwsExchangeCredentialsProjectTokenOK.md)
  - [AwsExchangeCredentialsProjectTokenOKCredentials](docs/AwsExchangeCredentialsProjectTokenOKCredentials.md)
  - [CallbackInput](docs/CallbackInput.md)
  - [CallbackResponseOK](docs/CallbackResponseOK.md)
  - [ConsentDto](docs/ConsentDto.md)
  - [CorsAwsExchangeCredentialsOK](docs/CorsAwsExchangeCredentialsOK.md)
  - [CorsAwsExchangeCredentialsProjectTokenOK](docs/CorsAwsExchangeCredentialsProjectTokenOK.md)
  - [CorsFetchIotaVpResponseOK](docs/CorsFetchIotaVpResponseOK.md)
  - [CorsInitiateDataSharingRequestOK](docs/CorsInitiateDataSharingRequestOK.md)
  - [CorsIotOidc4vpcallbackOK](docs/CorsIotOidc4vpcallbackOK.md)
  - [CorsIotaExchangeCredentialsOK](docs/CorsIotaExchangeCredentialsOK.md)
  - [CreateIotaConfigurationInput](docs/CreateIotaConfigurationInput.md)
  - [CreatePexQueryInput](docs/CreatePexQueryInput.md)
  - [DeletePexQueriesInput](docs/DeletePexQueriesInput.md)
  - [FetchIOTAVPResponseInput](docs/FetchIOTAVPResponseInput.md)
  - [FetchIOTAVPResponseOK](docs/FetchIOTAVPResponseOK.md)
  - [GetIotaConfigurationMetaDataOK](docs/GetIotaConfigurationMetaDataOK.md)
  - [InitiateDataSharingRequestInput](docs/InitiateDataSharingRequestInput.md)
  - [InitiateDataSharingRequestOK](docs/InitiateDataSharingRequestOK.md)
  - [InitiateDataSharingRequestOKData](docs/InitiateDataSharingRequestOKData.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [InvalidParameterErrorDetailsInner](docs/InvalidParameterErrorDetailsInner.md)
  - [IotaConfigurationDto](docs/IotaConfigurationDto.md)
  - [IotaConfigurationDtoClientMetadata](docs/IotaConfigurationDtoClientMetadata.md)
  - [IotaExchangeCredentials](docs/IotaExchangeCredentials.md)
  - [IotaExchangeCredentialsOK](docs/IotaExchangeCredentialsOK.md)
  - [IotaExchangeCredentialsOKCredentials](docs/IotaExchangeCredentialsOKCredentials.md)
  - [ListConfigurationOK](docs/ListConfigurationOK.md)
  - [ListLoggedConsentsOK](docs/ListLoggedConsentsOK.md)
  - [ListPexQueriesOK](docs/ListPexQueriesOK.md)
  - [MessagePublishingError](docs/MessagePublishingError.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [OperationForbiddenError](docs/OperationForbiddenError.md)
  - [PexQueryDto](docs/PexQueryDto.md)
  - [PrepareRequest](docs/PrepareRequest.md)
  - [PrepareRequestCreated](docs/PrepareRequestCreated.md)
  - [PrepareRequestCreatedData](docs/PrepareRequestCreatedData.md)
  - [ResourceLimitExceededError](docs/ResourceLimitExceededError.md)
  - [SavePexQueriesUpdateInput](docs/SavePexQueriesUpdateInput.md)
  - [SavePexQueriesUpdateInputQueriesInner](docs/SavePexQueriesUpdateInputQueriesInner.md)
  - [UpdateConfigurationByIdInput](docs/UpdateConfigurationByIdInput.md)
  - [UpdateConfigurationByIdOK](docs/UpdateConfigurationByIdOK.md)
  - [UpdatePexQueryInput](docs/UpdatePexQueryInput.md)
  - [VPTokenValidationError](docs/VPTokenValidationError.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="AwsSigV4"></a>



  - **Type**: API key
  - **API key parameter name**: Authorization
  - **Location**: HTTP header

  <a id="ApiKey"></a>



  - **Type**: API key
  - **API key parameter name**: x-api-key
  - **Location**: HTTP header

  <a id="bearerAuth"></a>



  - **Type**: Bearer authentication (JWT)

  <a id="ConsumerTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="HeritageTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: 60abf49970a8b27b933a411418a34ea8d7ee6079ce084f04a99d14d071d4674e
name: python-affinidi_tdk_iota_client
arch: src
version: 1.29.0
epoch: 0
release: 1
summary: IotaService
url: https://github.com/affinidi/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_iota_client-1.29.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/iota-framework](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/iota-framework)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_iota_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iota_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_iota_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_iota_client
  from affinidi_tdk_iota_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_iota_client.Configuration(
      host = "https://apse1.api.affinidi.io/ais"
  )




  with affinidi_tdk_iota_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_iota_client.CallbackApi(api_client)
      callback_input = affinidi_tdk_iota_client.CallbackInput() # CallbackInput | CallbackRequestInput

      try:
          api_response = api_instance.iot_oidc4_vp_callback(callback_input)
          print("The response of CallbackApi->iot_oidc4_vp_callback:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling CallbackApi->iot_oidc4_vp_callback: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/ais*

  | Class               | Method                                                                                               | HTTP request                                                               | Description |
  | ------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------- |
  | _CallbackApi_       | [**iot_oidc4_vp_callback**](docs/CallbackApi.md#iot_oidc4_vp_callback)                               | **POST** /v1/callback                                                      |
  | _ConfigurationsApi_ | [**create_iota_configuration**](docs/ConfigurationsApi.md#create_iota_configuration)                 | **POST** /v1/configurations                                                |
  | _ConfigurationsApi_ | [**delete_iota_configuration_by_id**](docs/ConfigurationsApi.md#delete_iota_configuration_by_id)     | **DELETE** /v1/configurations/{configurationId}                            |
  | _ConfigurationsApi_ | [**get_iota_configuration_by_id**](docs/ConfigurationsApi.md#get_iota_configuration_by_id)           | **GET** /v1/configurations/{configurationId}                               |
  | _ConfigurationsApi_ | [**get_iota_configuration_meta_data**](docs/ConfigurationsApi.md#get_iota_configuration_meta_data)   | **GET** /v1/projects/{projectId}/configurations/{configurationId}/metadata |
  | _ConfigurationsApi_ | [**list_iota_configurations**](docs/ConfigurationsApi.md#list_iota_configurations)                   | **GET** /v1/configurations                                                 |
  | _ConfigurationsApi_ | [**update_iota_configuration_by_id**](docs/ConfigurationsApi.md#update_iota_configuration_by_id)     | **PATCH** /v1/configurations/{configurationId}                             |
  | _DefaultApi_        | [**list_logged_consents**](docs/DefaultApi.md#list_logged_consents)                                  | **GET** /v1/logged-consents                                                |
  | _IotaApi_           | [**aws_exchange_credentials**](docs/IotaApi.md#aws_exchange_credentials)                             | **POST** /v1/aws-exchange-credentials                                      |
  | _IotaApi_           | [**aws_exchange_credentials_project_token**](docs/IotaApi.md#aws_exchange_credentials_project_token) | **POST** /v1/aws-exchange-credentials/project-token                        |
  | _IotaApi_           | [**fetch_iota_vp_response**](docs/IotaApi.md#fetch_iota_vp_response)                                 | **POST** /v1/fetch-iota-response                                           |
  | _IotaApi_           | [**initiate_data_sharing_request**](docs/IotaApi.md#initiate_data_sharing_request)                   | **POST** /v1/initiate-data-sharing-request                                 |
  | _IotaApi_           | [**iota_exchange_credentials**](docs/IotaApi.md#iota_exchange_credentials)                           | **POST** /v1/exchange-credentials                                          |
  | _PexQueryApi_       | [**create_pex_query**](docs/PexQueryApi.md#create_pex_query)                                         | **POST** /v1/configurations/{configurationId}/pex-queries                  |
  | _PexQueryApi_       | [**delete_pex_queries**](docs/PexQueryApi.md#delete_pex_queries)                                     | **POST** /v1/configurations/{configurationId}/delete-queries               |
  | _PexQueryApi_       | [**delete_pex_query_by_id**](docs/PexQueryApi.md#delete_pex_query_by_id)                             | **DELETE** /v1/configurations/{configurationId}/pex-queries/{queryId}      |
  | _PexQueryApi_       | [**get_pex_query_by_id**](docs/PexQueryApi.md#get_pex_query_by_id)                                   | **GET** /v1/configurations/{configurationId}/pex-queries/{queryId}         |
  | _PexQueryApi_       | [**list_pex_queries**](docs/PexQueryApi.md#list_pex_queries)                                         | **GET** /v1/configurations/{configurationId}/pex-queries                   |
  | _PexQueryApi_       | [**save_pex_queries**](docs/PexQueryApi.md#save_pex_queries)                                         | **POST** /v1/configurations/{configurationId}/save-queries                 |
  | _PexQueryApi_       | [**update_pex_query_by_id**](docs/PexQueryApi.md#update_pex_query_by_id)                             | **PATCH** /v1/configurations/{configurationId}/pex-queries/{queryId}       |



  - [AlreadyExistsError](docs/AlreadyExistsError.md)
  - [AwsExchangeCredentials](docs/AwsExchangeCredentials.md)
  - [AwsExchangeCredentialsOK](docs/AwsExchangeCredentialsOK.md)
  - [AwsExchangeCredentialsProjectToken](docs/AwsExchangeCredentialsProjectToken.md)
  - [AwsExchangeCredentialsProjectTokenOK](docs/AwsExchangeCredentialsProjectTokenOK.md)
  - [AwsExchangeCredentialsProjectTokenOKCredentials](docs/AwsExchangeCredentialsProjectTokenOKCredentials.md)
  - [CallbackInput](docs/CallbackInput.md)
  - [CallbackResponseOK](docs/CallbackResponseOK.md)
  - [ConsentDto](docs/ConsentDto.md)
  - [CorsAwsExchangeCredentialsOK](docs/CorsAwsExchangeCredentialsOK.md)
  - [CorsAwsExchangeCredentialsProjectTokenOK](docs/CorsAwsExchangeCredentialsProjectTokenOK.md)
  - [CorsFetchIotaVpResponseOK](docs/CorsFetchIotaVpResponseOK.md)
  - [CorsInitiateDataSharingRequestOK](docs/CorsInitiateDataSharingRequestOK.md)
  - [CorsIotOidc4vpcallbackOK](docs/CorsIotOidc4vpcallbackOK.md)
  - [CorsIotaExchangeCredentialsOK](docs/CorsIotaExchangeCredentialsOK.md)
  - [CreateIotaConfigurationInput](docs/CreateIotaConfigurationInput.md)
  - [CreatePexQueryInput](docs/CreatePexQueryInput.md)
  - [DeletePexQueriesInput](docs/DeletePexQueriesInput.md)
  - [FetchIOTAVPResponseInput](docs/FetchIOTAVPResponseInput.md)
  - [FetchIOTAVPResponseOK](docs/FetchIOTAVPResponseOK.md)
  - [GetIotaConfigurationMetaDataOK](docs/GetIotaConfigurationMetaDataOK.md)
  - [InitiateDataSharingRequestInput](docs/InitiateDataSharingRequestInput.md)
  - [InitiateDataSharingRequestOK](docs/InitiateDataSharingRequestOK.md)
  - [InitiateDataSharingRequestOKData](docs/InitiateDataSharingRequestOKData.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [InvalidParameterErrorDetailsInner](docs/InvalidParameterErrorDetailsInner.md)
  - [IotaConfigurationDto](docs/IotaConfigurationDto.md)
  - [IotaConfigurationDtoClientMetadata](docs/IotaConfigurationDtoClientMetadata.md)
  - [IotaExchangeCredentials](docs/IotaExchangeCredentials.md)
  - [IotaExchangeCredentialsOK](docs/IotaExchangeCredentialsOK.md)
  - [IotaExchangeCredentialsOKCredentials](docs/IotaExchangeCredentialsOKCredentials.md)
  - [ListConfigurationOK](docs/ListConfigurationOK.md)
  - [ListLoggedConsentsOK](docs/ListLoggedConsentsOK.md)
  - [ListPexQueriesOK](docs/ListPexQueriesOK.md)
  - [MessagePublishingError](docs/MessagePublishingError.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [OperationForbiddenError](docs/OperationForbiddenError.md)
  - [PexQueryDto](docs/PexQueryDto.md)
  - [PrepareRequest](docs/PrepareRequest.md)
  - [PrepareRequestCreated](docs/PrepareRequestCreated.md)
  - [PrepareRequestCreatedData](docs/PrepareRequestCreatedData.md)
  - [ResourceLimitExceededError](docs/ResourceLimitExceededError.md)
  - [SavePexQueriesUpdateInput](docs/SavePexQueriesUpdateInput.md)
  - [SavePexQueriesUpdateInputQueriesInner](docs/SavePexQueriesUpdateInputQueriesInner.md)
  - [UpdateConfigurationByIdInput](docs/UpdateConfigurationByIdInput.md)
  - [UpdateConfigurationByIdOK](docs/UpdateConfigurationByIdOK.md)
  - [UpdatePexQueryInput](docs/UpdatePexQueryInput.md)
  - [VPTokenValidationError](docs/VPTokenValidationError.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="AwsSigV4"></a>



  - **Type**: API key
  - **API key parameter name**: Authorization
  - **Location**: HTTP header

  <a id="ApiKey"></a>



  - **Type**: API key
  - **API key parameter name**: x-api-key
  - **Location**: HTTP header

  <a id="bearerAuth"></a>



  - **Type**: Bearer authentication (JWT)

  <a id="ConsumerTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="UserTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header

  <a id="HeritageTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: 2b4805c4abdc5492c7ae7aa164ddd0c58ec7536837d07b8871409c74c822a455
name: python-affinidi_tdk_wallets_client
arch: src
version: 1.30.0
epoch: 0
release: 1
summary: CloudWalletEssentials
url: https://github.com/affinidi.com/affinidi-tdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-affinidi_tdk_wallets_client-1.30.0-1.src.rpm
checksum_type: sha256
description:
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

  For more information, please visit [https://github.com/affinidi/affinidi-tdk](https://github.com/affinidi/affinidi-tdk)

  Documentation is available at [https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/wallets](https://docs.affinidi.com/dev-tools/affinidi-tdk/clients/wallets)



  Python 3.7+





  If the python package is hosted on a repository, you can install directly using:

  ```sh
  pip install affinidi_tdk_wallets_client
  ```

  Then import the package:

  ```python
  import affinidi_tdk_wallets_client
  ```



  Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

  ```sh
  python setup.py install --user
  ```

  Then import the package:

  ```python
  import affinidi_tdk_wallets_client
  ```



  Execute `pytest` to run the tests.



  Please follow the [installation procedure](#installation--usage) and then run the following:

  ```python

  import time
  import affinidi_tdk_wallets_client
  from affinidi_tdk_wallets_client.rest import ApiException
  from pprint import pprint



  configuration = affinidi_tdk_wallets_client.Configuration(
      host = "https://apse1.api.affinidi.io/cwe"
  )







  configuration.api_key['ProjectTokenAuth'] = os.environ["API_KEY"]


  import affinidi_tdk_auth_provider

  stats = {
    apiGatewayUrl,
    keyId,
    passphrase,
    privateKey,
    projectId,
    tokenEndpoint,
    tokenId,
  }
  authProvider = affinidi_tdk_auth_provider.AuthProvider(stats)
  configuration.refresh_api_key_hook = lambda api_client: authProvider.fetch_project_scoped_token()






  with affinidi_tdk_wallets_client.ApiClient(configuration) as api_client:
      
      api_instance = affinidi_tdk_wallets_client.RevocationApi(api_client)
      project_id = 'project_id_example' # str | Description for projectId.
      wallet_id = 'wallet_id_example' # str | Description for walletId.
      status_id = 'status_id_example' # str | Description for statusId.

      try:
          api_response = api_instance.get_revocation_credential_status(project_id, wallet_id, status_id)
          print("The response of RevocationApi->get_revocation_credential_status:\n")
          pprint(api_response)
      except ApiException as e:
          print("Exception when calling RevocationApi->get_revocation_credential_status: %s\n" % e)

  ```



  All URIs are relative to *https://apse1.api.affinidi.io/cwe*

  | Class           | Method                                                                                         | HTTP request                                                                       | Description                        |
  | --------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------- |
  | _RevocationApi_ | [**get_revocation_credential_status**](docs/RevocationApi.md#get_revocation_credential_status) | **GET** /v1/projects/{projectId}/wallets/{walletId}/revocation-statuses/{statusId} |
  | _RevocationApi_ | [**get_revocation_list_credential**](docs/RevocationApi.md#get_revocation_list_credential)     | **GET** /v1/wallets/{walletId}/revocation-list/{listId}                            | Return revocation list credential. |
  | _RevocationApi_ | [**revoke_credential**](docs/RevocationApi.md#revoke_credential)                               | **POST** /v1/wallets/{walletId}/revoke                                             | Revoke Credential.                 |
  | _WalletApi_     | [**create_wallet**](docs/WalletApi.md#create_wallet)                                           | **POST** /v1/wallets                                                               |
  | _WalletApi_     | [**delete_wallet**](docs/WalletApi.md#delete_wallet)                                           | **DELETE** /v1/wallets/{walletId}                                                  |
  | _WalletApi_     | [**get_wallet**](docs/WalletApi.md#get_wallet)                                                 | **GET** /v1/wallets/{walletId}                                                     |
  | _WalletApi_     | [**list_wallets**](docs/WalletApi.md#list_wallets)                                             | **GET** /v1/wallets                                                                |
  | _WalletApi_     | [**sign_credential**](docs/WalletApi.md#sign_credential)                                       | **POST** /v1/wallets/{walletId}/sign-credential                                    |
  | _WalletApi_     | [**sign_jwt_token**](docs/WalletApi.md#sign_jwt_token)                                         | **POST** /v1/wallets/{walletId}/sign-jwt                                           |
  | _WalletApi_     | [**update_wallet**](docs/WalletApi.md#update_wallet)                                           | **PATCH** /v1/wallets/{walletId}                                                   |



  - [CreateWalletInput](docs/CreateWalletInput.md)
  - [CreateWalletResponse](docs/CreateWalletResponse.md)
  - [DidKeyInputParams](docs/DidKeyInputParams.md)
  - [DidWebInputParams](docs/DidWebInputParams.md)
  - [EntityNotFoundError](docs/EntityNotFoundError.md)
  - [GetRevocationCredentialStatusOK](docs/GetRevocationCredentialStatusOK.md)
  - [GetRevocationListCredentialResultDto](docs/GetRevocationListCredentialResultDto.md)
  - [InvalidDidParameterError](docs/InvalidDidParameterError.md)
  - [InvalidParameterError](docs/InvalidParameterError.md)
  - [KeyNotFoundError](docs/KeyNotFoundError.md)
  - [NotFoundError](docs/NotFoundError.md)
  - [OperationForbiddenError](docs/OperationForbiddenError.md)
  - [RevokeCredentialInput](docs/RevokeCredentialInput.md)
  - [ServiceErrorResponse](docs/ServiceErrorResponse.md)
  - [ServiceErrorResponseDetailsInner](docs/ServiceErrorResponseDetailsInner.md)
  - [SignCredential400Response](docs/SignCredential400Response.md)
  - [SignCredentialInputDto](docs/SignCredentialInputDto.md)
  - [SignCredentialInputDtoUnsignedCredentialParams](docs/SignCredentialInputDtoUnsignedCredentialParams.md)
  - [SignCredentialResultDto](docs/SignCredentialResultDto.md)
  - [SignCredentialResultDtoSignedCredential](docs/SignCredentialResultDtoSignedCredential.md)
  - [SignJwtToken](docs/SignJwtToken.md)
  - [SignJwtTokenOK](docs/SignJwtTokenOK.md)
  - [SigningFailedError](docs/SigningFailedError.md)
  - [UpdateWalletInput](docs/UpdateWalletInput.md)
  - [WalletDto](docs/WalletDto.md)
  - [WalletDtoKeysInner](docs/WalletDtoKeysInner.md)
  - [WalletsListDto](docs/WalletsListDto.md)

  <a id="documentation-for-authorization"></a>



  Authentication schemes defined for the API:
  <a id="ProjectTokenAuth"></a>



  - **Type**: API key
  - **API key parameter name**: authorization
  - **Location**: HTTP header



  info@affinidi.com


pkgId: 84acbd1c2e6395ec8d99e16428f3db828ae6ab65b9284a6e87c425a88fe46c89
name: python-afl-ai-utils
arch: src
version: 0.6.2
epoch: 0
release: 1
summary: A sample test package
url: https://github.com/gituser/test-tackage
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afl-ai-utils-0.6.2-1.src.rpm
checksum_type: sha256
description:
      rm -rf build dist
      python3 setup.py sdist bdist_wheel
      twine upload --repository pypi dist/*



          pip install afl-ai-utils




      from afl_ai_utils.slack_alerts import send_slack_alert
      send_slack_alert(info_alert_slack_webhook_url=None, red_alert_slack_webhook_url=None, slack_red_alert_userids=None, payload=None, is_red_alert=False)

          """Send a Slack message to a channel via a webhook.

      Args:
          info_alert_slack_webhook_url(str): Infor slack channel url
          red_alert_slack_webhook_url(str): red alert channel url
          slack_red_alert_userids (list): userid's to mention in slack for red alert notification
          payload (dict): Dictionary containing Slack message, i.e. {"text": "This is a test"}
          is_red_alert (bool): Full Slack webhook URL for your chosen channel.

      Returns:
          HTTP response code, i.e. <Response [503]>
      """




          def dump_dataframe_to_bq_table(self, dataframe: pd.DataFrame, schema_cols_type: dict, table_id: str, mode: str):

          >>> from afl_ai_utils.bigquery_utils import BigQuery
          >>> bq = BigQuery("keys.json")
          >>> bq.write_insights_to_bq_table(dataframe=None, schema=None, table_id=None, mode=None)


          """Insert a dataframe to bigquery

          Args:
              dataframe(pandas dataframe): for dataframe to be dumped to bigquery
              schema(BigQuery.Schema ): ex:
              schema_cols_type: {"date_start":"date", "id": "integer", "name": "string"}
              table_id (list): table_id in which dataframe need to be inserted e.g project_id.dataset.table_name = table_id
              mode(str): To append or replace the table - e.g mode = "append"  or mode="replace"
          Returns:
              returns as success message with number of inserted rows and table name
          """






          def execute_query(self, query):

          >>> from afl_ai_utils.bigquery_utils import BigQuery
          >>> bq = BigQuery("keys.json")
          >>> df = bq.execute_query(query = "SELECT * FROM TABLE")


          """
          Args:
              query (query of any type SELECT/INSERT/DELETE )
          Returns:
              returns dataframe of execute query result
          """


pkgId: b386a02566ae3e31ea039c6228b1bfbdde6c3004eed6f133198530b3454c8f44
name: python-aflow
arch: src
version: 0.0.11
epoch: 0
release: 1
summary: Python API for searching AFLOW database.
url: https://github.com/rosenbrockc/aflow
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aflow-0.0.11-1.src.rpm
checksum_type: sha256
description:
  Python API wrapping the AFLUX API language for AFLOW library. *Note:*
  This is not an official repo of the AFLOW consortium and is not
  maintained by them. `API
  Documentation <https://rosenbrockc.github.io/aflow/>`__.
  If you use this package, please cite it:
     @ARTICLE{2017arXiv171000813R,
        author = {{Rosenbrock}, C.~W.},
         title = "{A Practical Python API for Querying AFLOWLIB}",
       journal = {ArXiv e-prints},
     archivePrefix = "arXiv",
        eprint = {1710.00813},
      primaryClass = "cs.DB",
      keywords = {Computer Science - Databases},
          year = 2017,
         month = sep,
        adsurl = {http://adsabs.harvard.edu/abs/2017arXiv171000813R},
       adsnote = {Provided by the SAO/NASA Astrophysics Data System}
     }


pkgId: 99e99406603907a49b1b80263248afdb5e5e607884fbb82ddfef72ec087f591c
name: python-aflr
arch: src
version: 0.8.1
epoch: 0
release: 1
summary: Python library for the Aflorithmic api.audio API
url: https://github.com/aflorithmic/aflr_python
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aflr-0.8.1-1.src.rpm
checksum_type: sha256
description:
  <p align="center"> aflr is the official <a href="https://www.api.audio/" rel="noopener">api.audio</a> Python 3 SDK. This SDK provides easy access to the api.audio API from applications written in python.
      <br>
  </p>

  - [About](#about)
  - [Getting Started](#getting_started)
  - [Hello World](#hello_world)
  - [Documentation](#documentation)
    - [Import](#import)
    - [Authentication](#authentication)
    - [Authentication with environment variable](#authentication_env)
    - [Resource usage](#resource)
    - [Script](#script)
    - [Speech](#speech)
    - [Voice](#voice)
    - [Sound](#sound)
    - [Mastering](#mastering)
    - [File](#file)
  - [Authors](#authors)
  - [License](#license)

  This repository is actively maintained by [Aflorithmic Labs](https://www.aflorithmic.ai/). For examples, recipes and api reference see the [api.audio docs](https://docs.api.audio/reference).


  You don't need this source code unless you want to modify it. If you want to use the package, just run:
  ```sh
  pip install aflr -U
  ```
  Install from source with:
  ```sh
  python setup.py install
  ```

  Python 3.6+

  Create a file `hello.py`
  ```python
  touch hello.py
  ```

  The library needs to be configured with your account's secret key which is available in your [Aflorithmic Dashboard](https://console.api.audio). Import the aflr package and set `aflr.api_key` with the api-key you got from the dashboard:
  ```python
  import aflr
  aflr.api_key = "your-key"
  ```

  Let's create our first audio from text.
  ✍️ Create a new script:
  ```python
  script = aflr.Script.create(scriptText="Hello world", scriptName="hello")
  print(script)
  ```
  🎤 Create an speech audio file from the script using Joanna's voice:
  ```python
  response = aflr.Speech.create(scriptId=script["scriptId"], voice="Joanna")
  print(response)
  ```
  🎧 Now let's master the speech file with high quality and a nice background track.
  ```python
  response = aflr.Mastering.create(
  	scriptId=script.get("scriptId"),
  	backgroundTrackId="full__citynights.wav"
  	)
  print(response)
  ```
  🎉 Finally, get the urls of the audio files generated:
  ```python
  urls = aflr.Mastering.retrieve(scriptId=script["scriptId"])
  print(urls)
  ```
  Or download the files in your current folder:
  ```python
  filepath = aflr.Mastering.download(scriptId=script["scriptId"], destination=".")
  print(filepath)
  ```
  Easy right? 🔮 This is the `hello.py` final picture:
  ```python
  import aflr
  aflr.api_key = "your-key"

  script = aflr.Script.create(scriptText="Hello world", scriptName="hello")

  response = aflr.Speech.create(scriptId=script["scriptId"], voice="Joanna")
  print(response)

  response = aflr.Mastering.create(
  	scriptId=script.get("scriptId"),
  	backgroundTrackId="full__citynights.wav"
  	)
  print(response)

  urls = aflr.Mastering.retrieve(scriptId=script["scriptId"])
  print(urls)

  filepath = aflr.Mastering.download(scriptId=script["scriptId"], destination=".")
  print(filepath)
  ```
  Now let's run the code:
  ```sh
  python hello.py
  ```
  Once completed, check the files in the `hello.py` root folder - you will see a new audio file. Play it!


  ```python
  import aflr
  ```

  The library needs to be configured with your account's secret key which is available in your [Aflorithmic Dashboard](https://console.api.audio). Set `aflr.api_key` with the api-key you got from the dashboard:
  ```python
  aflr.api_key = "your-key"
  ```

  You can also authenticate using `aflr_key` environment variable and the aflr SDK will automatically use it. To setup, open the terminal and type:
  ```sh
  export aflr_key=<your-key>
  ```
  If you provide both environment variable and `aflr.api_key` authentication, the `aflr.api_key` will be used.

  There are two approaches to use the resources.
  First approach is to import the resource classes you want to use first, then use resource methods. For example, to use `Script`, we could do:
  ```python
  from aflr import Script
  Script.create()
  ```
  The second approach is to use it directly from aflr:
  ```python
  import aflr
  aflr.Script.create()
  ```
  Same logic applies for other resources (`Speech`, `Voice`, `Sound`...)

  The Script resource/class allows you to create, retrieve and list scripts. Learn more about scripts [here](https://docs.api.audio/docs/script-2).
  Script methods are:
  - `create()` - Create a new script.
    - Parameters:
      - `scriptText` \* [Required] (string) - Text for your script. A script can contain multiple sections and SSML tags. Learn more about scriptText details [here](https://docs.api.audio/docs/script-2)
      - `projectName` (string) - The name of your project. Default value is "default"
      - `moduleName` (string) - The name of your module. Default value is "default"
      - `scriptName` (string) - The name of your script. Default value is "default"
      - `scriptId` (string) - Custom identifier for your script. If scriptId parameter is used, then projectName, moduleName and scriptName are required parameters.
    - Example:
      ```python
      script = aflr.Script.create(
          scriptText="<<sectionName::hello>> Hello {{username|buddy}} <<sectionName::bye>> Good bye from {{location|barcelona}}",
          projectName="myProject",
          moduleName="myModule",
          scriptName="myScript",
          scriptId="id-1234"
          )
      ```
  - `retrieve()` - Retrieve a script by id.
    - Parameters:
      - `scriptId` \* [Required] (string) - The script ID you want to retrieve.
    - Example:
      ```python
      script = aflr.Script.retrieve(scriptId="id-1234")
      ```
  - `list()` - List all scripts available in your organization.
    - Parameters:
      - No parameters required.
    - Example:
      ```python
      scripts = aflr.Script.list()
      ```
  - `get_random_text()` - Retrieve random text from a list of categories.
    - Parameters:
      - `category` (string) - The category from which the random text is retrieved. If no category is specified, the function defaults to `"FunFact"`
    - Example:
      ```python
      text = aflr.Script.get_random_text(category="BibleVerse")
      ```
      - Categories currently available: `"BibleVerse"`, `"FunFact"`, `"InspirationalQuote"`, `"Joke"`, `"MovieSynopsis"`, `"Poem"`, `"PhilosophicalQuestion"`, `"Recipe"`, `"TriviaQuestion"`.

  Speech allows you to do Text-To-Speech (TTS) with our API using all the voices available. Use it to create a speech audio file from your script.
  Speech methods are:
  - `create()` Send a Text-To-Speech request to our Text-To-Speech service.
    - Parameters:
      - `scriptId` \* [Required] (string) - The script ID
      - `voice` (string) - Voice name. See the list of available voices using [Voice resource](#voice). Default voice is "Joanna".
      - `speed` (string) - Voice speed. Default speed is 100.
      - `effect` (string) - Put a funny effect in your voice. You can try the following ones: `dark_father`, `chewie`, `88b`, `2r2d`, `volume_boost_low` `volume_boost_middle` `volume_boost_high` (Volume boost allows you to adjust the volume of speech. NOTE! Volume boost effect only applies to speech creation and will be overwritten by the mastering process)
      - `silence_padding` (integer) - Add a silence padding to your speech tracks (in milliseconds). Default is 0 (no padding)
      - `audience` (dictionary) - List of dicts containing the personalisation parameters as key-value pairs. This parameter depends on the number of parameters you used in your script resource. For instance, if in the script resource you have `scriptText="Hello {{name}} {{lastname}}"`, the audience should be: `[{"username": "Elon", "lastname": "Musk"}]`
      - `sections` (dictionary) is a dictionary (key-value pairs), where the key is a section name, and the value is another dictionary with the section configuration ( valid parameters are: voice, speed, effect, silence_padding). If a section is not found here, the section will automatically inherit the voice, speed, effect and silence_padding values you defined above (or the default ones if you don't provide them). See an example below with 2 sections and different configuration parameters being used.
        ```python
        sections={
            "firstsection": {
                "voice": "Matthew",
                "speed": 110,
                "silence_padding": 100,
                "effect": "dark_father"
            },
            "anothersection": {
                "voice": "en-GB-RyanNeural",
                "speed": 100
            }
        }
        ```
      - `voiceName` (DEPRECATED, use `voice` instead)
      - `scriptSpeed`(DEPRECATED, use `speed` instead)
    - Simple example:
      ```python
      response = aflr.Speech.create(
          scriptId="id-1234",
          voice="Joanna"
          )
      ```
    - Complete example:
      ```python
      response = aflr.Speech.create(
          scriptId="id-1234",
          voice="Matthew",
          speed=100,
          effect="dark_father",
          silence_padding= 1000,
          audience=[{"username": "Elon", "lastname": "Musk"}],
          sections={
              "firstsection": {
                  "voice": "Matthew",
                  "speed": 110,
                  "silence_padding": 100,
                  "effect": "dark_father"
              },
              "anothersection": {
                  "voice": "en-GB-RyanNeural",
              }
          }
      )
      ```
  - `retrieve()` Retrieve the speech file urls.
    - Parameters:
      - `scriptId` \* [Required] (string) - The script ID you want to retrieve.
      - `section` (string) - The script section name for the first section. The default name for a script section is "default". NOTE: At the moment, Only scripts with 1 section are supported. If the scripts contain more than one section, only the first section can be retrieved.
      - `parameters` (dict) - Dict containing the personalisation parameters for the first section of the script. This parameter depends on the parameters you used in your [script](#script)'s resource section. If this parameter is used, `section` must be specified.
    - Example:
      ```python
      audio_files = aflr.Speech.retrieve(scriptId="id-1234")
      ```
  - `download()` Download the speech files in your preferred folder.
    - Parameters:
      - `scriptId` \* [Required] (string) - The script ID you want to download
      - `section` (string) - The script section name for the first section. The default name for a script section is "default". NOTE: At the moment, Only scripts with 1 section are supported. If the scripts contain more than one section, only the first section can be retrieved.
      - `parameters` (dict) - Dict containing the personalisation parameters for the first section of the script. This parameter depends on the parameters you used in your [script](#script)'s resource section. If this parameter is used, `section` must be specified.
      - `destination` (string) - The folder destination path. Default is "." (current folder)
    - Example:
      ```python
      audio_files = aflr.Speech.download(scriptId="id-1234", destination=".")
      ```

  Voice allows you to retrieve a list of the available voices from our API.
  Voice methods are:
  - `list()` List all the available voices in our API. The parameters are all optional, and can be used in combination to get the perfect voice for your usecase.
    - Parameters:
      - `provider` (string) - Try one of: google, polly, azure, msnr
      - `providerFullName` (string) - Try with one of: amazon polly, google, microsoft azure, aflorithmic labs
      - `language` (string) - Try with one of: english, spanish, french, german
      - `accent` (string) - Try with one of: american, british, neutral, portuguese/brazilian, american soft, mexican, australian
      - `gender` (string) - Try with one of: male, female
      - `ageBracket` (string) - Try with one of: adult, child, senior
      - `tags` (string) - Try with one or more (separated by commas) of: steady, confident, balanced, informative, serious, instructional, slow, storytelling, calm, clear, deep, formal, sad, thin, fast, upbeat, fun, energetic, tense, very fast, flat, low pitched, high pitched, low-pitched, sing-y, cooperative, kind, stable, monotonous, neutral, responsible, business man, straight to the point, knowledgeable, focused, newscastery, newsreader, interviewer, reliable, friendly, welcoming, good for handing out information, slightly friendly
      - `industryExamples` (string) - Try with one or more (separated by commas) of: fitness, business, commercial, fashion, travel, audiobook, real estate, faith, health industry, comercial, realestate, kids entertainment, games, customer service, education, storytelling, entertainment, kids, education audiobook
    - Example:
      ```python
      all_voices = aflr.Voice.list()
      ```
    - Example:
      ```python
      french_voices = aflr.Voice.list(language="french",tags="steady, fun")
      ```
  - `list_parameters()` This endpoint lets you see which attributes you can filter the voices by, along with the allowed values for each attribute. You can later use these parameters and values to filter the voices you wish to list.
    - Parameters:
      - No parameters required.
    - Example:
      ```python
      parameters = aflr.Voice.list_parameters()
      ```

  Sound allows you to design your own sound template from a script and a background track. In order to get a sound template/project, make sure you requested [speech](#speech) for your script resource first.
  Sound methods are:
  - `create()` Creates a sound template, compresses the sound project into a zip file and returns the url.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
      - `backgroundTrackId` \* [Required] (string) - The background track file ID.
    - Example:
      ```python
      sound_url = aflr.Sound.create(
          scriptId="id-1234",
          backgroundTrackId="full__citynights.wav",
      )
      ```
  - `retrieve()` Retrieve the url of the sound project zip file.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
    - Example:
      ```python
      audio_files = aflr.Sound.retrieve(scriptId="id-1234")
      ```
  - `list_sound_templates()` List all the available sound templates in our api.
    - Parameters:
      - No parameters required.
    - Example:
      ```python
      sound_templates = aflr.Sound.list_sound_templates()
      ```
  - `list()` List all the available background tracks in our API.
    - Parameters:
      - No parameters required.
    - Example:
      ```python
      all_bg_tracks = aflr.Sound.list()
      ```
  - `list_v2()` List all the available background tracks in our API including a 15 seconds audio snippet.
    - Parameters:
      - No parameters required.
    - Example:
      ```python
      all_bg_tracks = aflr.Sound.list_v2()
      ```
  - `download()` Download the sound project zip file in your preferred folder.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
      - `destination` (string) - The folder destination path. Default is "." (current folder)
    - Example:
      ```python
      audio_files = aflr.Sound.download(scriptId="id-1234", destination=".")
      ```

  Mastering allows you to create and retrieve a mastered audio file of your script. A mastered version contains the speech of the script, a background track, personalised parameters for your audience and a mastering process to enhance the audio quality of the whole track. In order to get a mastered audio file, make sure you requested [speech](#speech) for your script resource first.
  Mastering methods are:
  - `create()` Creates a mastered version of your script.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
      - `backgroundTrackId` \* [Required] (string) - The background track file ID.
      - `audience` (list) - List of dicts containing the personalisation parameters. This parameter depends on the number of parameters you used in your [script](#script) resource. In the script documentation example above, we used 2 parameters: `username` and `location`, and in the following example below we want to produce the script for username `Antonio` with location `Barcelona`.
      - `public` (boolean) - Boolean flag that allows to store the mastered file in a public s3 folder. Default value is `False`. Warning - This will cause your mastered files to be public to anyone in the internet. Use this at your own risk.
      - `vast` (boolean) - Boolean flag that allows to create a VAST file of your mastered file. The `vast` flag only works if `public` is `True`. Default value is `False`.
    - Example:
      ```python
      response = aflr.Mastering.create(
          scriptId="id-1234",
          backgroundTrackId="full__citynights.wav",
          audience=[{"username":"antonio", "location":"barcelona"}]
      )
      ```
  - `retrieve()` Retrieves the mastered file urls.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
      - `parameters` (dict) - Dictionary containing the audience item you want to retrieve.
      - `public` (boolean) - Boolean flag that allows to retrieve the mastered file from the public bucket. Use this if you want to retrieve a mastered file created using `public=True`. Default value is `False`.
      - `vast` (boolean) - Boolean flag that allows to retrieve the VAST file of your mastered file. The `vast` flag only works if `public` is `True`. Default value is `False`.
    - Example:
      ```python
      mastered_files = aflr.Mastering.retrieve(
        scriptId="id-1234",
        parameters={"username":"antonio", "location":"barcelona"}
      )
      ```
  - `download()` Download the mastered files in your preferred folder.
    - Parameters:
      - `scriptId` \* [Required] (string) - The [script](#script) resource ID.
      - `parameters` (dict) - Dictionary containing the audience item you want to retrieve.
      - `destination` (string) - The folder destination path. Default is "." (current folder)
      - `public` (boolean) - Boolean flag that allows to retrieve the mastered file from the public bucket. Use this if you want to retrieve a mastered file created using `public=True`. Default value is `False`.
      - `vast` (boolean) - Boolean flag that allows to retrieve the VAST file of your mastered file. The `vast` flag only works if `public` is `True`. Default value is `False`.
    - Example:
      ```python
      mastered_files = aflr.Mastering.download(
        scriptId="id-1234",
        parameters={"username":"antonio", "location":"barcelona"}
        destination="."
      )
      ```

  File allows you to retrieve all the files available in api.audio for your organization.
  Available soon.

  - https://github.com/tonythree
  - https://github.com/GetOn4
  - https://github.com/zeritte
  - https://github.com/springcoil
  - https://github.com/a96lex

  This project is licensed under the terms of the MIT license.


pkgId: 8577e0361a96efcd5a7c0abf2bb62d1201b50be813842c253132e75b9f97ab44
name: python-afmformats
arch: src
version: 0.18.0
epoch: 0
release: 1
summary: reading common AFM file formats
url: https://github.com/AFM-analysis/afmformats
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afmformats-0.18.0-1.src.rpm
checksum_type: sha256
description:
  |PyPI Version| |Build Status| |Coverage Status| |Docs Status|
  Reading common atomic force microscopy (AFM) file formats.


pkgId: 1f16aa01e08fcb90c3c4a2e44eec7a14fd4e723ff29aa70e3e48bb1ca81594c6
name: python-afplay-win
arch: src
version: 0.0.1
epoch: 0
release: 1
summary: Tiny utility that mimics 'afplay' in windows
url: https://github.com/sukhbinder/afplay-win
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afplay-win-0.0.1-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/afplay-win.svg)](https://pypi.org/project/afplay-win/)
  [![Changelog](https://img.shields.io/github/v/release/sukhbinder/afplay-win?include_prereleases&label=changelog)](https://github.com/sukhbinder/afplay-win/releases)
  [![Tests](https://github.com/sukhbinder/afplay-win/actions/workflows/test.yml/badge.svg)](https://github.com/sukhbinder/afplay-win/actions/workflows/test.yml)
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/sukhbinder/afplay-win/blob/master/LICENSE)

  Tiny utility that mimics 'afplay' in windows




  Install this tool using `pip`:
  ```bash
  pip install afplay-win
  ```


  For help, run:
  ```bash
  afplay --help
  ```
  You can also use:
  ```bash
  python -m afplay --help
  ```


  To contribute to this tool, first checkout the code. Then create a new virtual environment:
  ```bash
  cd afplay-win
  python -m venv venv
  source venv/bin/activate
  ```
  Now install the dependencies and test dependencies:
  ```bash
  pip install -e '.[test]'
  ```
  To run the tests:
  ```bash
  python -m pytest
  ```



  This implementation is inspired from [playsound3](https://github.com/sjmikler/playsound3/blob/main/playsound3/)


pkgId: 175fbeaef9da21039639ae6a5471ad2cf7c83bfb7e446121c2a3b73ff59e18cd
name: python-afreeca
arch: src
version: 0.5.4
epoch: 0
release: 1
summary: AfreecaTV API Wrapper
url: https://pypi.org/project/afreeca/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afreeca-0.5.4-1.src.rpm
checksum_type: sha256
description:
  AfreecaTV API Wrapper



  ```bash
  pip install afreeca
  ```



  ```python
  import asyncio
  from afreeca import AfreecaTV, Chat, UserCredential

  async def callback(chat: Chat):
      print(f"{chat.nickname}: {chat.message}")

  async def main():
      cred = await UserCredential.login("ID", "PW")
      afreeca = AfreecaTV(credential=cred)

      chat = await afreeca.create_chat("BJ")

      chat.add_callback(callback)

      await chat.start()


  asyncio.run(main())
  ```



  https://github.com/ha1fstack/aftv-ws


pkgId: 429b82995d08671dae77d7fae7960b0e3c9d734d3958db8387e44776c27a07a2
name: python-africanwhisper
arch: src
version: 0.9.18
epoch: 0
release: 1
url: https://kevkibe.github.io/African-Whisper
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-africanwhisper-0.9.18-1.src.rpm
checksum_type: sha256
summary:
  A framework for fast fine-tuning and API endpoint deployment of Whisper model specifically developed to accelerate Automatic Speech Recognition(ASR) for African Languages.

description:
  <h1 align="center">African Whisper: ASR for African Languages</h1>

  <p align="center">
    <a href="https://twitter.com/AfriWhisper">
      <img src="https://img.shields.io/twitter/follow/AfriWhisper?style=social" alt="Twitter">
    </a>
    <a href="https://github.com/KevKibe/African-Whisper/commits/">
      <img src="https://img.shields.io/github/last-commit/KevKibe/African-Whisper?" alt="Last commit">
    </a>
    <a href="https://github.com/KevKibe/African-Whisper/blob/main/LICENSE">
      <img src="https://img.shields.io/github/license/KevKibe/African-Whisper?" alt="License">
    </a>

  </p>

  <p align="center">
      <img src= "logo_image.png" width="100">
  </p>


  *Framework for seamless fine-tuning and deploying Whisper Model developed to advance Automatic Speech Recognition (ASR): translation and transcription capabilities for African languages*.




  - 🔧 **Fine-Tuning**: Fine-tune the [Whisper](https://huggingface.co/collections/openai/whisper-release-6501bba2cf999715fd953013) model on any audio dataset from Huggingface, e.g., [Mozilla's](https://huggingface.co/mozilla-foundation) Common Voice datasets.

  - 📊 **Metrics Monitoring**: View training run metrics on [Wandb](https://wandb.ai/).

  - 🐳 **Production Deployment**: Seamlessly containerize and deploy the model inference endpoint for real-world applications.

  - 🚀 **Model Optimization**: Utilize CTranslate2 for efficient model optimization, ensuring faster inference times.

  - 📝 **Word-Level Transcriptions**: Produce detailed word-level transcriptions and translations, complete with timestamps.

  - 🎙️ **Multi-Speaker Diarization**: Perform speaker identification and separation in multi-speaker audio using diarization techniques.

  - 🔍 **Alignment Precision**: Improve transcription and translation accuracy by aligning outputs with Wav2vec models.

  - 🛡️ **Reduced Hallucination**: Leverage Voice Activity Detection (VAD) to minimize hallucination and improve transcription clarity.
  <br>
  The framework implements the following papers:
  <br>

  1. [Robust Speech Recognition via Large-Scale Weak Supervision](https://arxiv.org/abs/2212.04356) : Speech processing systems trained to predict large amounts of transcripts of audio on the internet scaled to 680,000 hours of multilingual and multitask supervision.

  2. [WhisperX](https://arxiv.org/abs/2303.00747): Time-Accurate Speech Transcription of Long-Form Audio for time-accurate speech recognition with word-level timestamps.

  3. [Pyannote.audio](https://arxiv.org/abs/1911.01255): Neural building blocks for speaker diarization for advanced speaker diarization capabilities.

  4. [Efficient and High-Quality Neural Machine Translation with OpenNMT](https://arxiv.org/abs/1701.02810): Efficient neural machine translation and model acceleration.

  For more details, you can refer to the [Whisper ASR model paper](https://cdn.openai.com/papers/whisper.pdf).<br>


  Refer to the [Documentation](https://kevkibe.github.io/African-Whisper/gettingstarted/) to get started



  Contributions are welcome and encouraged.

  Before contributing, please take a moment to review our [Contribution Guidelines](https://github.com/KevKibe/African-Whisper/blob/master/DOCS/CONTRIBUTING.md) for important information on how to contribute to this project.

  If you're unsure about anything or need assistance, don't hesitate to reach out to us or open an issue to discuss your ideas.

  We look forward to your contributions!



  This project is licensed under the MIT License - see the [LICENSE](https://github.com/KevKibe/African-Whisper/blob/main/LICENSE) file for details.


  For any enquiries, please reach out to me through keviinkibe@gmail.com


pkgId: 64f7bd60dea23e7120cc9635414d7ad46b4f51032b8e64712e1567b55b0fabb6
name: python-africanwhisper
arch: src
version: 0.9.22
epoch: 0
release: 1
url: https://kevkibe.github.io/African-Whisper
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-africanwhisper-0.9.22-1.src.rpm
checksum_type: sha256
summary:
[cell repeats an earlier one in this file: 171 characters]

description:
  <h1 align="center">African Whisper: ASR for African Languages</h1>

  <p align="center">
    <a href="https://twitter.com/AfriWhisper">
      <img src="https://img.shields.io/twitter/follow/AfriWhisper?style=social" alt="Twitter">
    </a>
    <a href="https://github.com/KevKibe/African-Whisper/commits/">
      <img src="https://img.shields.io/github/last-commit/KevKibe/African-Whisper?" alt="Last commit">
    </a>
    <a href="https://github.com/KevKibe/African-Whisper/blob/main/LICENSE">
      <img src="https://img.shields.io/github/license/KevKibe/African-Whisper?" alt="License">
    </a>

  </p>

  <p align="center">
      <img src= "logo_image.png" width="100">
  </p>


  *Framework for seamless fine-tuning and deploying Whisper Model developed to advance Automatic Speech Recognition (ASR): translation and transcription capabilities for African languages*.




  - 🔧 **Fine-Tuning**: Fine-tune the [Whisper](https://huggingface.co/collections/openai/whisper-release-6501bba2cf999715fd953013) model on any audio dataset from Huggingface, e.g., [Mozilla's](https://huggingface.co/mozilla-foundation) Common Voice, [Fleurs](https://huggingface.co/datasets/google/fleurs), [LibriSpeech](https://huggingface.co/datasets/facebook/multilingual_librispeech), or your own custom private/public dataset etc

  - 📊 **Metrics Monitoring**: View training run metrics on [Wandb](https://wandb.ai/).

  - 🐳 **Production Deployment**: Seamlessly containerize and deploy the model inference endpoint for real-world applications.

  - 🚀 **Model Optimization**: Utilize CTranslate2 for efficient model optimization, ensuring faster inference times.

  - 📝 **Word-Level Transcriptions**: Produce detailed word-level transcriptions and translations, complete with timestamps.

  - 🎙️ **Multi-Speaker Diarization**: Perform speaker identification and separation in multi-speaker audio using diarization techniques.

  - 🔍 **Alignment Precision**: Improve transcription and translation accuracy by aligning outputs with Wav2vec models.

  - 🛡️ **Reduced Hallucination**: Leverage Voice Activity Detection (VAD) to minimize hallucination and improve transcription clarity.
  <br>
  The framework implements the following papers:
  <br>

  1. [Robust Speech Recognition via Large-Scale Weak Supervision](https://arxiv.org/abs/2212.04356) : Speech processing systems trained to predict large amounts of transcripts of audio on the internet scaled to 680,000 hours of multilingual and multitask supervision.

  2. [WhisperX](https://arxiv.org/abs/2303.00747): Time-Accurate Speech Transcription of Long-Form Audio for time-accurate speech recognition with word-level timestamps.

  3. [Pyannote.audio](https://arxiv.org/abs/1911.01255): Neural building blocks for speaker diarization for advanced speaker diarization capabilities.

  4. [Efficient and High-Quality Neural Machine Translation with OpenNMT](https://arxiv.org/abs/1701.02810): Efficient neural machine translation and model acceleration.

  For more details, you can refer to the [Whisper ASR model paper](https://cdn.openai.com/papers/whisper.pdf).<br>


  Refer to the [Documentation](https://kevkibe.github.io/African-Whisper/gettingstarted/) to get started



  Contributions are welcome and encouraged.

  Before contributing, please take a moment to review our [Contribution Guidelines](https://github.com/KevKibe/African-Whisper/blob/master/DOCS/CONTRIBUTING.md) for important information on how to contribute to this project.

  If you're unsure about anything or need assistance, don't hesitate to reach out to us or open an issue to discuss your ideas.

  We look forward to your contributions!



  This project is licensed under the MIT License - see the [LICENSE](https://github.com/KevKibe/African-Whisper/blob/main/LICENSE) file for details.


  For any enquiries, please reach out to me through keviinkibe@gmail.com


pkgId: 91618fd8d4d7f74755818ff408c7c69fb30a445b1d123f425453b03fe01c099a
name: python-afroy
arch: src
version: 0.0.19
epoch: 0
release: 1
summary: Simplifies some tasks
url: https://pypi.org/project/afroy/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afroy-0.0.19-1.src.rpm
checksum_type: sha256
description:
  Type 'afro.help()' for help
  Type 'afro.' followed by one of the folloing colors [green, red, yellow, cyan, magenta] then ("the text to add color to here") without spaces for eg. print(afro.red("This Text Is Red"))
  Type 'afro.' followed by 'diflet()' which will find the amount of different letters in a string.            (string, starting_value) so afro.diflet("hellllllllllo", 1) would return 5 because 4 different letters are in that string and the second parameter would be the added value.
  username and password account integration to programs!!!


pkgId: 1d4d224a8d6ba245e3d6d96eac58a63f6cfcdf017558290231be3ba63238765b
name: python-afsapi
arch: src
version: 0.2.8
epoch: 0
release: 1
summary: Asynchronous Implementation of the Frontier Silicon API
url: https://github.com/zhelev/python-afsapi.git
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afsapi-0.2.8-1.src.rpm
checksum_type: sha256
description:
  ```python
  import asyncio
  from afsapi import AFSAPI
  URL = 'http://192.168.1.XYZ:80/device'
  PIN = 1234
  TIMEOUT = 1 # in seconds
  async def test():
      afsapi = await AFSAPI.create(URL, PIN, TIMEOUT)
      print(f'Set power succeeded? - {await afsapi.set_power(True)}' )
      print(f'Power on: {await afsapi.get_power()}')
      print(f'Friendly name: {await afsapi.get_friendly_name()}')
      for mode in await afsapi.get_modes():
          print(f'Available Mode: {mode}')
      print(f'Current Mode: {await afsapi.get_mode()}')
      for equaliser in await afsapi.get_equalisers():
          print(f'Equaliser: {equaliser}')
      print(f'EQ Preset: {await afsapi.get_eq_preset()}' )
      for preset in await afsapi.get_presets():
          print(f"Preset: {preset}")
      print(f'Set power succeeded? - {await afsapi.set_power(False)}')
      print(f'Set sleep succeeded? - {await afsapi.set_sleep(10)}')
      print(f'Sleep: {await afsapi.get_sleep()}')
      print(f'Get power {await afsapi.get_power()}' )
  loop = asyncio.new_event_loop()
  loop.run_until_complete(test())
  ```


pkgId: 046475bdeedd2625313a804d321c2305153bc35c8b567a01947580179291d456
name: python-afscgap
arch: src
version: 1.0.4
epoch: 0
release: 1
summary: Tools for interacting with the public bottom trawl surveys data from the NOAA AFSC GAP.
url: https://pyafscgap.org
rpm_license: BSD License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afscgap-1.0.4-1.src.rpm
checksum_type: sha256
description:
  | Group | Badges |
  |-------|--------|
  | Status | ![build workflow status](https://github.com/SchmidtDSE/afscgap/actions/workflows/build.yml/badge.svg?branch=main) ![docs workflow status](https://github.com/SchmidtDSE/afscgap/actions/workflows/docs.yml/badge.svg?branch=main) [![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) |
  | Usage | [![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370/) [![Pypi Badge](https://img.shields.io/pypi/v/afscgap)](https://pypi.org/project/afscgap/) [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/SchmidtDSE/afscgap/main?urlpath=/tree/index.ipynb) |
  | Publication | [![pyOpenSci](https://tinyurl.com/y22nb8up)](https://github.com/pyOpenSci/software-submission/issues/93) [![Open in Code Ocean](https://codeocean.com/codeocean-assets/badge/open-in-code-ocean.svg)](https://codeocean.com/capsule/4905407/tree/v2) [![DOI](https://zenodo.org/badge/603308264.svg)](https://zenodo.org/badge/latestdoi/603308264) |

  <br>

  Python-based tool chain ("Pyafscgap.org") for working with the public bottom trawl data from the [NOAA AFSC GAP](https://www.fisheries.noaa.gov/contact/groundfish-assessment-program). This provides information from multiple survey programs about where certain species were seen and when under what conditions, information useful for research in ocean health.

  See [webpage](https://pyafscgap.org), [project Github](https://github.com/SchmidtDSE/afscgap), and [example notebook](https://mybinder.org/v2/gh/SchmidtDSE/afscgap/main?urlpath=/tree/index.ipynb).

  <br>
  <br>


  Taking your first step is easy!

  **Explore the data in a UI:** To learn about the datasets, try out an in-browser visual analytics app at [https://app.pyafscgap.org](https://app.pyafscgap.org) without writing any code.

  **Try out a tutorial in your browser:** Learn from and modify an in-depth [tutorial notebook](https://mybinder.org/v2/gh/SchmidtDSE/afscgap/main?urlpath=/tree/index.ipynb) in a free hosted academic environment (all without installing any local software).

  **Jump into code:** Ready to build your own scripts? Here's an example querying for Pacific cod in the Gulf of Alaska for 2021:

  ```python
  import afscgap  # install with pip install afscgap
  query = afscgap.Query()
  query.filter_year(eq=2021)
  query.filter_srvy(eq='GOA')
  query.filter_scientific_name(eq='Gadus macrocephalus')
  results = query.execute()
  ```

  Continue your exploration in the [developer docs](https://pyafscgap.org/docs/usage/).

  <br>
  <br>


  Ready to take it to your own machine? Install the open source tools for accessing the AFSC GAP via Pypi / Pip:

  ```bash
  $ pip install afscgap
  ```

  The library's only dependency is [requests](https://docs.python-requests.org/en/latest/index.html) and [Pandas / numpy are not expected but supported](https://pyafscgap.org/docs/usage/#pandas). The above will install the release version of the library. However, you can also install the development version via:

  ```bash
  $ pip install git+https://github.com/SchmidtDSE/afscgap.git@main
  ```

  Installing directly from the repo provides the "edge" version of the library which should be treated as pre-release.

  <br>
  <br>


  Unofficial Python-based tool set for interacting with [bottom trawl surveys](https://www.fisheries.noaa.gov/alaska/commercial-fishing/alaska-groundfish-bottom-trawl-survey-data) from the [Ground Fish Assessment Program (GAP)](https://www.fisheries.noaa.gov/contact/groundfish-assessment-program). It offers:

   - Pythonic access to the official [NOAA AFSC GAP API service](https://www.fisheries.noaa.gov/foss/f?p=215%3A28).
   - Tools for inference of the "negative" observations not provided by the API service.
   - Visualization tools for quickly exploring and creating comparisons within the datasets, including for audiences with limited programming experience.

  Note that GAP are an excellent collection of datasets produced by the [Resource Assessment and Conservation Engineering (RACE) Division](https://www.fisheries.noaa.gov/about/resource-assessment-and-conservation-engineering-division) of the [Alaska Fisheries Science Center (AFSC)](https://www.fisheries.noaa.gov/about/alaska-fisheries-science-center) as part of the National Oceanic and Atmospheric Administration's Fisheries organization ([NOAA Fisheries](https://www.fisheries.noaa.gov/)).

  Please see our [objectives documentation](https://pyafscgap.org/docs/objectives/) for additional information about the purpose, developer needs addressed, and goals of the project.

  <br>
  <br>


  This library provides access to the AFSC GAP data with optional zero catch ("absence") record inference.

  <br>


  One of the best ways to learn is through our examples / tutorials series. For more details see our [usage guide](https://pyafscgap.org/docs/usage/).

  <br>


  [Full formalized API documentation is available](https://pyafscgap.org/devdocs/afscgap.html) as generated by pdoc in CI / CD.

  <br>


  Detailed information about our data structures and their relationship to the data structures found in NOAA's upstream database is available in our [data model documentation](https://pyafscgap.org/docs/model/).

  <br>


  By default, the NOAA API service will only return information on hauls matching a query. So, for example, requesting data on Pacific cod will only return information on hauls in which Pacific cod is found. This can complicate the calculation of important metrics like catch per unit effort (CPUE). That in mind, one of the most important features in `afscgap` is the ability to infer "zero catch" records as enabled by `set_presence_only(False)`. See more information in [our inference docs](https://pyafscgap.org/docs/inference/).

  <br>


  There are a few caveats for working with these data that are important for researchers to understand. These are detailed in our [limitations docs](https://pyafscgap.org/docs/limitations/).

  <br>
  <br>


  We are happy to make this library available under the BSD 3-Clause license. See LICENSE for more details. (c) 2023 Regents of University of California. See the [Eric and Wendy Schmidt Center for Data Science and the Environment
  at UC Berkeley](https://dse.berkeley.edu).

  <br>
  <br>


  Intersted in contributing to the project or want to bulid manually? Please see our [build docs](https://pyafscgap.org/docs/building/) for details.

  <br>
  <br>


  [Sam Pottinger](https://github.com/sampottinger) is the primary contact with additional development from [Giulia Zarpellon](https://github.com/gizarp). Additionally some acknowledgements:

   - Thank you to [Carl Boettiger](https://github.com/cboettig) and [Fernando Perez](https://github.com/fperez) for advice in the Python library.
   - Thanks also to [Maya Weltman-Fahs](https://dse.berkeley.edu/people/maya-weltman-fahs), [Brookie Guzder-Williams](https://github.com/brookisme), Angela Hayes, David Joy, and [Magali de Bruyn](https://github.com/magalidebruyn) for advice on the visual analytics tool.
   - Lewis Barnett, Emily Markowitz, and Ciera Martinez for general guidance.

  This is a project of the [The Eric and Wendy Schmidt Center for Data Science and the Environment
  at UC Berkeley](https://dse.berkeley.edu) where [Kevin Koy](https://github.com/kevkoy) is Executive Director. Please contact us via dse@berkeley.edu.

  <br>
  <br>


  We are happy to be part of the open source community.

  At this time, the only open source dependency used by this microlibrary is [Requests](https://docs.python-requests.org/en/latest/index.html) which is available under the [Apache v2 License](https://github.com/psf/requests/blob/main/LICENSE) from [Kenneth Reitz and other contributors](https://github.com/psf/requests/graphs/contributors).

  In addition to Github-provided [Github Actions](https://docs.github.com/en/actions), our build and documentation systems also use the following but are not distributed with or linked to the project itself:

   - [mkdocs](https://www.mkdocs.org) under the [BSD License](https://github.com/mkdocs/mkdocs/blob/master/LICENSE).
   - [mkdocs-windmill](https://github.com/gristlabs/mkdocs-windmill) under the [MIT License](https://github.com/gristlabs/mkdocs-windmill/blob/master/LICENSE).
   - [mypy](https://github.com/python/mypy) under the [MIT License](https://github.com/python/mypy/blob/master/LICENSE) from Jukka Lehtosalo, Dropbox, and other contributors.
   - [nose2](https://docs.nose2.io/en/latest/index.html) under a [BSD license](https://github.com/nose-devs/nose2/blob/main/license.txt) from Jason Pellerin and other contributors.
   - [pdoc](https://github.com/mitmproxy/pdoc) under the [Unlicense license](https://github.com/mitmproxy/pdoc/blob/main/LICENSE) from [Andrew Gallant](https://github.com/BurntSushi) and [Maximilian Hils](https://github.com/mhils).
   - [pycodestyle](https://pycodestyle.pycqa.org/en/latest/) under the [Expat License](https://github.com/PyCQA/pycodestyle/blob/main/LICENSE) from Johann C. Rocholl, Florent Xicluna, and Ian Lee.
   - [pyflakes](https://github.com/PyCQA/pyflakes) under the [MIT License](https://github.com/PyCQA/pyflakes/blob/main/LICENSE) from Divmod, Florent Xicluna, and other contributors.
   - [sftp-action](https://github.com/Creepios/sftp-action) under the [MIT License](https://github.com/Creepios/sftp-action/blob/master/LICENSE) from Niklas Creepios.
   - [ssh-action](https://github.com/appleboy/ssh-action) under the [MIT License](https://github.com/appleboy/ssh-action/blob/master/LICENSE) from Bo-Yi Wu.

  Next, the visualization tool has additional dependencies as documented in the [visualization readme](https://github.com/SchmidtDSE/afscgap/blob/main/afscgapviz/README.md).

  Finally, note that the website uses assets from [The Noun Project](thenounproject.com/) under the NounPro plan. If used outside of https://pyafscgap.org, they may be subject to a [different license](https://thenounproject.com/pricing/#icons).

  Thank you to all of these projects for their contribution.

  <br>
  <br>


  Annotated version history:

   - `1.0.4`: Minor documentation fypo fix.
   - `1.0.3`: Documentation edits for journal article.
   - `1.0.2`: Minor documentation touch ups for pyopensci.
   - `1.0.1`: Minor documentation fix.
   - `1.0.0`: Release with pyopensci.
   - `0.0.9`: Fix with issue for certain import modalities and the `http` module.
   - `0.0.8`: New query syntax (builder / chaining) and units conversions.
   - `0.0.7`: Visual analytics tools.
   - `0.0.6`: Performance and size improvements.
   - `0.0.5`: Changes to documentation.
   - `0.0.4`: Negative / zero catch inference.
   - `0.0.3`: Minor updates in documentation.
   - `0.0.2`: License under BSD.
   - `0.0.1`: Initial release.


pkgId: 912fc5b4d685eda5abce8d7dacf003b5e10c6bbbdd535224e3cf9fcb3595f9ff
name: python-aft-pytorch
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: Attention Free Transformer - Pytorch
url: https://github.com/rish-16/aft-pytorch
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aft-pytorch-0.2.2-1.src.rpm
checksum_type: sha256
description:
  Unofficial PyTorch implementation of **Attention Free Transformer**'s layers by [Zhai](https://twitter.com/zhaisf?lang=en), et al. [[abs](https://openreview.net/forum?id=pW--cu2FCHY), [pdf](https://arxiv.org/pdf/2105.14103.pdf)] from Apple Inc.

  <img src="https://github.com/rish-16/aft-pytorch/raw/main/pic.png" width=650>


  You can install `aft-pytorch` via `pip`:

  ```bash
  pip install aft-pytorch
  ```


  You can import the **AFT-Full** or **AFT-Simple** layer (as described in the paper) from the package like so:


  ```python
  from aft_pytorch import AFTFull

  layer = AFTFull(
      max_seqlen=20,
      dim=512,
      hidden_dim=64
  )


  x = torch.rand(32, 10, 512)
  y = layer(x) # [32, 10, 512]
  ```


  ```python
  from aft_pytorch import AFTSimple

  layer = AFTSimple(
      max_seqlen=20,
      dim=512,
      hidden_dim=64
  )


  x = torch.rand(32, 10, 512)
  y = layer(x) # [32, 10, 512]
  ```

  ```python
  from aft_pytorch import AFTLocal

  layer = AFTLocal(
      max_seqlen=20,
      dim=512,
      hidden_dim=64
  )


  x = torch.rand(32, 10, 512)
  y = layer(x) # [32, 10, 512]
  ```

  > This layer wrapper is a 'plug-and-play' with your existing networks / Transformers. You can swap out the Self-Attention layer with the available layers in this package with minimal changes.


  - Add full AFT architecture
  - Add variants like, `AFTConv`, `AFTLocal`


  If you like this repo, please leave a star! If there are any amends or suggestions, feel free to raise a PR/issue.


  ```
  @misc{attention-free-transformer,
  title = {An Attention Free Transformer},
  author = {Shuangfei Zhai and Walter Talbott and Nitish Srivastava and Chen Huang and Hanlin Goh and Ruixiang Zhang and Josh Susskind},
  year = {2021},
  URL = {https://arxiv.org/pdf/2105.14103.pdf}
  }
  ```


  [MIT](https://github.com/rish-16/aft-pytorch/blob/main/LICENSE)


pkgId: a9937aeff950a2b0721433ee292db75950aa74668ae62d0be44a6f3ad3a9f05b
name: python-afusion
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: A Streamlit app for running AlphaFold 3 predictions
url: https://github.com/Hanziwww/AlphaFold3-GUI
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afusion-0.2.2-1.src.rpm
checksum_type: sha256
description:
  If you encounter any issues or have suggestions for improvements, please open an issue or submit a pull request.
  Happy Folding! 🧬


pkgId: 6c299b3b9250c3819c37db07b810758d31e1c0d71a249df52fd9c81d43bb9718
name: python-afusion
arch: src
version: 1.2.2.1
epoch: 0
release: 1
summary: AFusion: AlphaFold 3 GUI & Toolkit with Visualization
url: https://github.com/Hanziwww/AlphaFold3-GUI
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-afusion-1.2.2.1-1.src.rpm
checksum_type: sha256
description:
  If you encounter any issues or have suggestions for improvements, please open an [issue](https://github.com/Hanziwww/AlphaFold3-GUI/issues) or submit a [pull request](https://github.com/Hanziwww/AlphaFold3-GUI/pulls).
  Happy Folding! 🧬


pkgId: 80e30dd74ae48a0176f17aece1ee8f1d267e5772617d36212808961856c09ee6
name: python-ag2
arch: src
version: 0.4
epoch: 0
release: 1
summary: A programming framework for agentic AI
url: https://github.com/ag2ai/ag2
rpm_license: Apache Software License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ag2-0.4-1.src.rpm
checksum_type: sha256
description:
  <a name="readme-top"></a>

  [![PyPI version](https://badge.fury.io/py/autogen.svg)](https://badge.fury.io/py/autogen)
  [![Build](https://github.com/ag2ai/ag2/actions/workflows/python-package.yml/badge.svg)](https://github.com/ag2ai/ag2/actions/workflows/python-package.yml)
  ![Python Version](https://img.shields.io/badge/3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)
  [![Discord](https://img.shields.io/discord/1153072414184452236?logo=discord&style=flat)](https://discord.gg/pAbnFJrkgZ)
  [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40ag2ai)](https://x.com/ag2ai)

  <!-- [![NuGet version](https://badge.fury.io/nu/AutoGen.Core.svg)](https://badge.fury.io/nu/AutoGen.Core) -->



  [📚 Cite paper](#related-papers).
  <!-- <p align="center">
      <img src="https://github.com/ag2ai/ag2/blob/main/website/static/img/flaml.svg"  width=200>
      <br>
  </p> -->

  > [!IMPORTANT]
  >
  > :fire: :tada: Nov 11, 2024: We are evolving AutoGen into AG2! A new organization [ag2ai](https://github.com/ag2ai) is created to host the development of AG2 and related projects with open governance. We invite collaborators from all organizations and individuals to join the development.


  :fire: :tada: AG2 is available via `ag2` (or its alias  `autogen` or  `pyautogen`)  on PyPI! Starting with version 0.3.2, you can now install AG2 using:
  ```
  pip install ag2
  ```
  or
  ```
  pip install pyautogen
  ```
  or
  ```
  pip install autogen
  ```


  📄 **License:**
  We adopt the Apache 2.0 license from v0.3. This enhances our commitment to open-source collaboration while providing additional protections for contributors and users alike.


  :tada: May 29, 2024: DeepLearning.ai launched a new short course [AI Agentic Design Patterns with AutoGen](https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen), made in collaboration with Microsoft and Penn State University, and taught by AutoGen creators [Chi Wang](https://github.com/sonichi) and [Qingyun Wu](https://github.com/qingyun-wu).

  :tada: May 24, 2024: Foundation Capital published an article on [Forbes: The Promise of Multi-Agent AI](https://www.forbes.com/sites/joannechen/2024/05/24/the-promise-of-multi-agent-ai/?sh=2c1e4f454d97) and a video [AI in the Real World Episode 2: Exploring Multi-Agent AI and AutoGen with Chi Wang](https://www.youtube.com/watch?v=RLwyXRVvlNk).

  :tada: May 13, 2024: [The Economist](https://www.economist.com/science-and-technology/2024/05/13/todays-ai-models-are-impressive-teams-of-them-will-be-formidable) published an article about multi-agent systems (MAS) following a January 2024 interview with [Chi Wang](https://github.com/sonichi).

  :tada: May 11, 2024: [AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation](https://openreview.net/pdf?id=uAjxFFing2) received the best paper award at the [ICLR 2024 LLM Agents Workshop](https://llmagents.github.io/).

  <!-- :tada: Apr 26, 2024: [AutoGen.NET](https://ag2ai.github.io/ag2-for-net/) is available for .NET developers! -->

  :tada: Apr 17, 2024: Andrew Ng cited AutoGen in [The Batch newsletter](https://www.deeplearning.ai/the-batch/issue-245/) and [What's next for AI agentic workflows](https://youtu.be/sal78ACtGTc?si=JduUzN_1kDnMq0vF) at Sequoia Capital's AI Ascent (Mar 26).

  :tada: Mar 3, 2024: What's new in AutoGen? 📰[Blog](https://ag2ai.github.io/ag2/blog/2024/03/03/AutoGen-Update); 📺[Youtube](https://www.youtube.com/watch?v=j_mtwQiaLGU).

  <!-- :tada: Mar 1, 2024: the first AutoGen multi-agent experiment on the challenging [GAIA](https://huggingface.co/spaces/gaia-benchmark/leaderboard) benchmark achieved the No. 1 accuracy in all the three levels. -->

  <!-- :tada: Jan 30, 2024: AutoGen is highlighted by Peter Lee in Microsoft Research Forum [Keynote](https://t.co/nUBSjPDjqD). -->

  :tada: Dec 31, 2023: [AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework](https://arxiv.org/abs/2308.08155) is selected by [TheSequence: My Five Favorite AI Papers of 2023](https://thesequence.substack.com/p/my-five-favorite-ai-papers-of-2023).

  <!-- :fire: Nov 24: pyautogen [v0.2](https://github.com/ag2ai/ag2/releases/tag/v0.2.0) is released with many updates and new features compared to v0.1.1. It switches to using openai-python v1. Please read the [migration guide](https://ag2ai.github.io/ag2/docs/Installation#python). -->

  <!-- :fire: Nov 11: OpenAI's Assistants are available in AutoGen and interoperatable with other AutoGen agents! Checkout our [blogpost](https://ag2ai.github.io/ag2/blog/2023/11/13/OAI-assistants) for details and examples. -->

  :tada: Nov 8, 2023: AutoGen is selected into [Open100: Top 100 Open Source achievements](https://www.benchcouncil.org/evaluation/opencs/annual.html) 35 days after spinoff from [FLAML](https://github.com/microsoft/FLAML).

  <!-- :tada: Nov 6, 2023: AutoGen is mentioned by Satya Nadella in a [fireside chat](https://youtu.be/0pLBvgYtv6U). -->

  <!-- :tada: Nov 1, 2023: AutoGen is the top trending repo on GitHub in October 2023. -->

  <!-- :tada: Oct 03, 2023: AutoGen spins off from [FLAML](https://github.com/microsoft/FLAML) on GitHub. -->

  <!-- :tada: Aug 16: Paper about AutoGen on [arxiv](https://arxiv.org/abs/2308.08155). -->

  :tada: Mar 29, 2023: AutoGen is first created in [FLAML](https://github.com/microsoft/FLAML).

  <!--
  :fire: FLAML is highlighted in OpenAI's [cookbook](https://github.com/openai/openai-cookbook#related-resources-from-around-the-web).

  :fire: [autogen](https://ag2ai.github.io/ag2/) is released with support for ChatGPT and GPT-4, based on [Cost-Effective Hyperparameter Optimization for Large Language Model Generation Inference](https://arxiv.org/abs/2303.04673).

  :fire: FLAML supports Code-First AutoML & Tuning – Private Preview in [Microsoft Fabric Data Science](https://learn.microsoft.com/en-us/fabric/data-science/). -->



  AG2 (formerly AutoGen) is an open-source programming framework for building AI agents and facilitating cooperation among multiple agents to solve tasks. AG2 aims to streamline the development and research of agentic AI, much like PyTorch does for Deep Learning. It offers features such as agents capable of interacting with each other, facilitates the use of various large language models (LLMs) and tool use support, autonomous and human-in-the-loop workflows, and multi-agent conversation patterns.

  **Open Source Statement**: The project welcomes contributions from developers and organizations worldwide. Our goal is to foster a collaborative and inclusive community where diverse perspectives and expertise can drive innovation and enhance the project's capabilities. Whether you are an individual contributor or represent an organization, we invite you to join us in shaping the future of this project. Together, we can build something truly remarkable.

  The project is currently maintained by a [dynamic group of volunteers](MAINTAINERS.md) from several organizations. Contact project administrators Chi Wang and Qingyun Wu via [support@ag2.ai](mailto:support@ag2.ai) if you are interested in becoming a maintainer.


  ![AutoGen Overview](./website/static/img/autogen_agentchat.png)



  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>

  <!--

  -->


  The easiest way to start playing is
  1. Click below to use the GitHub Codespace

      [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/ag2ai/ag2?quickstart=1)

   2. Copy OAI_CONFIG_LIST_sample to ./notebook folder, name to OAI_CONFIG_LIST, and set the correct configuration.
   3. Start playing with the notebooks!

  *NOTE*: OAI_CONFIG_LIST_sample lists gpt-4o as the default model. If you use a different model, you may need to revise various system prompts (especially if using weaker models like gpt-4o-mini). Proceed with caution when updating this default and be aware of additional risks related to alignment and safety.

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>





  Find detailed instructions for users [here](https://ag2ai.github.io/ag2/docs/installation/Docker#step-1-install-docker), and for developers [here](https://ag2ai.github.io/ag2/docs/Contribute#docker-for-development).



  AG2 requires **Python version >= 3.8, < 3.14**. It can be installed from pip:

  ```bash
  pip install ag2
  ```

  Minimal dependencies are installed without extra options. You can install extra options based on the feature you need.

  <!-- For example, use the following to install the dependencies needed by the [`blendsearch`](https://microsoft.github.io/FLAML/docs/Use-Cases/Tune-User-Defined-Function#blendsearch-economical-hyperparameter-optimization-with-blended-search-strategy) option.
  ```bash
  pip install "autogen[blendsearch]"
  ``` -->

  Find more options in [Installation](https://ag2ai.github.io/ag2/docs/Installation#option-2-install-autogen-locally-using-virtual-environment).

  <!-- Each of the [`notebook examples`](https://github.com/ag2ai/ag2/tree/main/notebook) may require a specific option to be installed. -->

  Even if you are installing and running AG2 locally outside of docker, the recommendation and default behavior of agents is to perform [code execution](https://ag2ai.github.io/ag2/docs/FAQ/#code-execution) in docker. Find more instructions and how to change the default behaviour [here](https://ag2ai.github.io/ag2/docs/Installation#code-execution-with-docker-(default)).

  For LLM inference configurations, check the [FAQs](https://ag2ai.github.io/ag2/docs/FAQ#set-your-api-endpoints).

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  AG2 enables the next-gen LLM applications with a generic [multi-agent conversation](https://ag2ai.github.io/ag2/docs/Use-Cases/agent_chat) framework. It offers customizable and conversable agents that integrate LLMs, tools, and humans.
  By automating chat among multiple capable agents, one can easily make them collectively perform tasks autonomously or with human feedback, including tasks that require using tools via code.

  Features of this use case include:

  - **Multi-agent conversations**: AG2 agents can communicate with each other to solve tasks. This allows for more complex and sophisticated applications than would be possible with a single LLM.
  - **Customization**: AG2 agents can be customized to meet the specific needs of an application. This includes the ability to choose the LLMs to use, the types of human input to allow, and the tools to employ.
  - **Human participation**: AG2 seamlessly allows human participation. This means that humans can provide input and feedback to the agents as needed.

  For [example](https://github.com/ag2ai/ag2/blob/main/test/twoagent.py),

  ```python
  from autogen import AssistantAgent, UserProxyAgent, config_list_from_json



  config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")

  assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
  user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False}) # IMPORTANT: set to True to run code in docker, recommended
  user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")

  ```

  This example can be run with

  ```python
  python test/twoagent.py
  ```

  After the repo is cloned.
  The figure below shows an example conversation flow with AG2.

  ![Agent Chat Example](./website/static/img/chat_example.png)


  Alternatively, the [sample code](https://github.com/ag2ai/build-with-ag2/blob/main/samples/simple_chat.py) here allows a user to chat with an AG2 agent in ChatGPT style.
  Please find more [code examples](https://ag2ai.github.io/ag2/docs/Examples#automated-multi-agent-chat) for this feature.

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  AG2 also helps maximize the utility out of the expensive LLMs such as gpt-4o. It offers [enhanced LLM inference](https://ag2ai.github.io/ag2/docs/Use-Cases/enhanced_inference#api-unification) with powerful functionalities like caching, error handling, multi-config inference and templating.

  <!-- For example, you can optimize generations by LLM with your own tuning data, success metrics, and budgets.

  ```python

  config, analysis = autogen.Completion.tune(
      data=tune_data,
      metric="success",
      mode="max",
      eval_func=eval_func,
      inference_budget=0.05,
      optimization_budget=3,
      num_samples=-1,
  )

  response = autogen.Completion.create(context=test_instance, **config)
  ```

  Please find more [code examples](https://ag2ai.github.io/ag2/docs/Examples#tune-gpt-models) for this feature. -->

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  You can find detailed documentation about AG2 [here](https://ag2ai.github.io/ag2/).

  In addition, you can find:

  - [Research](https://ag2ai.github.io/ag2/docs/Research), [blogposts](https://ag2ai.github.io/ag2/blog) around AG2, and [Transparency FAQs](https://github.com/ag2ai/ag2/blob/main/TRANSPARENCY_FAQS.md)

  - [Discord](https://discord.gg/pAbnFJrkgZ)

  - [Contributing guide](https://ag2ai.github.io/ag2/docs/Contribute)

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  Explore detailed implementations with sample code and applications to help you get started with AG2.
  [Cookbook](https://github.com/ag2ai/build-with-ag2)




  [AutoGen](https://arxiv.org/abs/2308.08155)

  ```
  @inproceedings{wu2023autogen,
        title={AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework},
        author={Qingyun Wu and Gagan Bansal and Jieyu Zhang and Yiran Wu and Beibin Li and Erkang Zhu and Li Jiang and Xiaoyun Zhang and Shaokun Zhang and Jiale Liu and Ahmed Hassan Awadallah and Ryen W White and Doug Burger and Chi Wang},
        year={2023},
        eprint={2308.08155},
        archivePrefix={arXiv},
        primaryClass={cs.AI}
  }
  ```

  [EcoOptiGen](https://arxiv.org/abs/2303.04673)

  ```
  @inproceedings{wang2023EcoOptiGen,
      title={Cost-Effective Hyperparameter Optimization for Large Language Model Generation Inference},
      author={Chi Wang and Susan Xueqing Liu and Ahmed H. Awadallah},
      year={2023},
      booktitle={AutoML'23},
  }
  ```

  [MathChat](https://arxiv.org/abs/2306.01337)

  ```
  @inproceedings{wu2023empirical,
      title={An Empirical Study on Challenging Math Problem Solving with GPT-4},
      author={Yiran Wu and Feiran Jia and Shaokun Zhang and Hangyu Li and Erkang Zhu and Yue Wang and Yin Tat Lee and Richard Peng and Qingyun Wu and Chi Wang},
      year={2023},
      booktitle={ArXiv preprint arXiv:2306.01337},
  }
  ```

  [AgentOptimizer](https://arxiv.org/pdf/2402.11359)

  ```
  @article{zhang2024training,
    title={Training Language Model Agents without Modifying Language Models},
    author={Zhang, Shaokun and Zhang, Jieyu and Liu, Jiale and Song, Linxin and Wang, Chi and Krishna, Ranjay and Wu, Qingyun},
    journal={ICML'24},
    year={2024}
  }
  ```

  [StateFlow](https://arxiv.org/abs/2403.11322)
  ```
  @article{wu2024stateflow,
    title={StateFlow: Enhancing LLM Task-Solving through State-Driven Workflows},
    author={Wu, Yiran and Yue, Tianwei and Zhang, Shaokun and Wang, Chi and Wu, Qingyun},
    journal={arXiv preprint arXiv:2403.11322},
    year={2024}
  }
  ```

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>


  <a href="https://github.com/ag2ai/ag2/graphs/contributors">
    <img src="https://contrib.rocks/image?repo=ag2ai/ag2&max=204" />
  </a>

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>


  This project is licensed under the [Apache License, Version 2.0 (Apache-2.0)](./LICENSE).

  This project is a spin-off of [AutoGen](https://github.com/microsoft/autogen) and contains code under two licenses:

  - The original code from https://github.com/microsoft/autogen is licensed under the MIT License.  See the [LICENSE_original_MIT](./license_original/LICENSE_original_MIT) file for details.

  - Modifications and additions made in this fork are licensed under the Apache License, Version 2.0. See the  [LICENSE](./LICENSE) file for the full license text.

  We have documented these changes for clarity and to ensure transparency with our user and contributor community. For more details, please see the [NOTICE](./NOTICE.md) file.


pkgId: ce173825fa283195cf592299b2d8d95cc43816b2f5fd2ce3752780688d0ccbbf
name: python-ag2
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: A programming framework for agentic AI
url: https://github.com/ag2ai/ag2
rpm_license: Apache Software License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ag2-0.4.1-1.src.rpm
checksum_type: sha256
description:
  <a name="readme-top"></a>

  ![Pypi Downloads](https://img.shields.io/pypi/dm/pyautogen?label=PyPI%20downloads)
  [![PyPI version](https://badge.fury.io/py/autogen.svg)](https://badge.fury.io/py/autogen)
  [![Build](https://github.com/ag2ai/ag2/actions/workflows/python-package.yml/badge.svg)](https://github.com/ag2ai/ag2/actions/workflows/python-package.yml)
  ![Python Version](https://img.shields.io/badge/3.8%20%7C%203.9%20%7C%203.10%20%7C%203.11%20%7C%203.12-blue)
  [![Discord](https://img.shields.io/discord/1153072414184452236?logo=discord&style=flat)](https://discord.gg/pAbnFJrkgZ)
  [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/cloudposse.svg?style=social&label=Follow%20%40ag2ai)](https://x.com/ag2ai)

  <!-- [![NuGet version](https://badge.fury.io/nu/AutoGen.Core.svg)](https://badge.fury.io/nu/AutoGen.Core) -->



  [📚 Cite paper](#related-papers).
  <!-- <p align="center">
      <img src="https://github.com/ag2ai/ag2/blob/main/website/static/img/flaml.svg"  width=200>
      <br>
  </p> -->

  > **:tada: IMPORTANT**
  >
  > :fire: :tada: **Nov 11, 2024:** We are evolving AutoGen into **AG2**!
  > A new organization [AG2ai](https://github.com/ag2ai) is created to host the development of AG2 and related projects with open governance. Check [AG2's new look](https://ag2.ai/).
  >
  > We invite collaborators from all organizations and individuals to join the development.


  :fire: :tada: AG2 is available via `ag2` (or its alias  `autogen` or  `pyautogen`)  on PyPI! Starting with version 0.3.2, you can now install AG2 using:
  ```
  pip install ag2
  ```
  or
  ```
  pip install pyautogen
  ```
  or
  ```
  pip install autogen
  ```


  📄 **License:**
  We adopt the Apache 2.0 license from v0.3. This enhances our commitment to open-source collaboration while providing additional protections for contributors and users alike.


  :tada: May 29, 2024: DeepLearning.ai launched a new short course [AI Agentic Design Patterns with AutoGen](https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen), made in collaboration with Microsoft and Penn State University, and taught by AutoGen creators [Chi Wang](https://github.com/sonichi) and [Qingyun Wu](https://github.com/qingyun-wu).

  :tada: May 24, 2024: Foundation Capital published an article on [Forbes: The Promise of Multi-Agent AI](https://www.forbes.com/sites/joannechen/2024/05/24/the-promise-of-multi-agent-ai/?sh=2c1e4f454d97) and a video [AI in the Real World Episode 2: Exploring Multi-Agent AI and AutoGen with Chi Wang](https://www.youtube.com/watch?v=RLwyXRVvlNk).

  :tada: May 13, 2024: [The Economist](https://www.economist.com/science-and-technology/2024/05/13/todays-ai-models-are-impressive-teams-of-them-will-be-formidable) published an article about multi-agent systems (MAS) following a January 2024 interview with [Chi Wang](https://github.com/sonichi).

  :tada: May 11, 2024: [AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation](https://openreview.net/pdf?id=uAjxFFing2) received the best paper award at the [ICLR 2024 LLM Agents Workshop](https://llmagents.github.io/).

  <!-- :tada: Apr 26, 2024: [AutoGen.NET](https://ag2ai.github.io/ag2-for-net/) is available for .NET developers! -->

  :tada: Apr 17, 2024: Andrew Ng cited AutoGen in [The Batch newsletter](https://www.deeplearning.ai/the-batch/issue-245/) and [What's next for AI agentic workflows](https://youtu.be/sal78ACtGTc?si=JduUzN_1kDnMq0vF) at Sequoia Capital's AI Ascent (Mar 26).

  :tada: Mar 3, 2024: What's new in AutoGen? 📰[Blog](https://ag2ai.github.io/ag2/blog/2024/03/03/AutoGen-Update); 📺[Youtube](https://www.youtube.com/watch?v=j_mtwQiaLGU).

  <!-- :tada: Mar 1, 2024: the first AutoGen multi-agent experiment on the challenging [GAIA](https://huggingface.co/spaces/gaia-benchmark/leaderboard) benchmark achieved the No. 1 accuracy in all the three levels. -->

  <!-- :tada: Jan 30, 2024: AutoGen is highlighted by Peter Lee in Microsoft Research Forum [Keynote](https://t.co/nUBSjPDjqD). -->

  :tada: Dec 31, 2023: [AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework](https://arxiv.org/abs/2308.08155) is selected by [TheSequence: My Five Favorite AI Papers of 2023](https://thesequence.substack.com/p/my-five-favorite-ai-papers-of-2023).

  <!-- :fire: Nov 24: pyautogen [v0.2](https://github.com/ag2ai/ag2/releases/tag/v0.2.0) is released with many updates and new features compared to v0.1.1. It switches to using openai-python v1. Please read the [migration guide](https://ag2ai.github.io/ag2/docs/Installation#python). -->

  <!-- :fire: Nov 11: OpenAI's Assistants are available in AutoGen and interoperatable with other AutoGen agents! Checkout our [blogpost](https://ag2ai.github.io/ag2/blog/2023/11/13/OAI-assistants) for details and examples. -->

  :tada: Nov 8, 2023: AutoGen is selected into [Open100: Top 100 Open Source achievements](https://www.benchcouncil.org/evaluation/opencs/annual.html) 35 days after spinoff from [FLAML](https://github.com/microsoft/FLAML).

  <!-- :tada: Nov 6, 2023: AutoGen is mentioned by Satya Nadella in a [fireside chat](https://youtu.be/0pLBvgYtv6U). -->

  <!-- :tada: Nov 1, 2023: AutoGen is the top trending repo on GitHub in October 2023. -->

  <!-- :tada: Oct 03, 2023: AutoGen spins off from [FLAML](https://github.com/microsoft/FLAML) on GitHub. -->

  <!-- :tada: Aug 16: Paper about AutoGen on [arxiv](https://arxiv.org/abs/2308.08155). -->

  :tada: Mar 29, 2023: AutoGen is first created in [FLAML](https://github.com/microsoft/FLAML).

  <!--
  :fire: FLAML is highlighted in OpenAI's [cookbook](https://github.com/openai/openai-cookbook#related-resources-from-around-the-web).

  :fire: [autogen](https://ag2ai.github.io/ag2/) is released with support for ChatGPT and GPT-4, based on [Cost-Effective Hyperparameter Optimization for Large Language Model Generation Inference](https://arxiv.org/abs/2303.04673).

  :fire: FLAML supports Code-First AutoML & Tuning – Private Preview in [Microsoft Fabric Data Science](https://learn.microsoft.com/en-us/fabric/data-science/). -->



  AG2 (formerly AutoGen) is an open-source programming framework for building AI agents and facilitating cooperation among multiple agents to solve tasks. AG2 aims to streamline the development and research of agentic AI, much like PyTorch does for Deep Learning. It offers features such as agents capable of interacting with each other, facilitates the use of various large language models (LLMs) and tool use support, autonomous and human-in-the-loop workflows, and multi-agent conversation patterns.

  **Open Source Statement**: The project welcomes contributions from developers and organizations worldwide. Our goal is to foster a collaborative and inclusive community where diverse perspectives and expertise can drive innovation and enhance the project's capabilities. Whether you are an individual contributor or represent an organization, we invite you to join us in shaping the future of this project. Together, we can build something truly remarkable.

  The project is currently maintained by a [dynamic group of volunteers](MAINTAINERS.md) from several organizations. Contact project administrators Chi Wang and Qingyun Wu via [support@ag2.ai](mailto:support@ag2.ai) if you are interested in becoming a maintainer.


  ![AutoGen Overview](https://media.githubusercontent.com/media/ag2ai/ag2/refs/heads/main/website/static/img/autogen_agentchat.png)


  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>

  <!--

  -->


  The easiest way to start playing is
  1. Click below to use the GitHub Codespace

      [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/ag2ai/ag2?quickstart=1)

   2. Copy OAI_CONFIG_LIST_sample to ./notebook folder, name to OAI_CONFIG_LIST, and set the correct configuration.
   3. Start playing with the notebooks!

  *NOTE*: OAI_CONFIG_LIST_sample lists gpt-4o as the default model. If you use a different model, you may need to revise various system prompts (especially if using weaker models like gpt-4o-mini). Proceed with caution when updating this default and be aware of additional risks related to alignment and safety.

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>





  Find detailed instructions for users [here](https://ag2ai.github.io/ag2/docs/installation/Docker#step-1-install-docker), and for developers [here](https://ag2ai.github.io/ag2/docs/Contribute#docker-for-development).



  AG2 requires **Python version >= 3.8, < 3.14**. It can be installed from pip:

  ```bash
  pip install ag2
  ```

  Minimal dependencies are installed without extra options. You can install extra options based on the feature you need.

  <!-- For example, use the following to install the dependencies needed by the [`blendsearch`](https://microsoft.github.io/FLAML/docs/Use-Cases/Tune-User-Defined-Function#blendsearch-economical-hyperparameter-optimization-with-blended-search-strategy) option.
  ```bash
  pip install "autogen[blendsearch]"
  ``` -->

  Find more options in [Installation](https://ag2ai.github.io/ag2/docs/Installation#option-2-install-autogen-locally-using-virtual-environment).

  <!-- Each of the [`notebook examples`](https://github.com/ag2ai/ag2/tree/main/notebook) may require a specific option to be installed. -->

  Even if you are installing and running AG2 locally outside of docker, the recommendation and default behavior of agents is to perform [code execution](https://ag2ai.github.io/ag2/docs/FAQ/#code-execution) in docker. Find more instructions and how to change the default behaviour [here](https://ag2ai.github.io/ag2/docs/Installation#code-execution-with-docker-(default)).

  For LLM inference configurations, check the [FAQs](https://ag2ai.github.io/ag2/docs/FAQ#set-your-api-endpoints).

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  AG2 enables the next-gen LLM applications with a generic [multi-agent conversation](https://ag2ai.github.io/ag2/docs/Use-Cases/agent_chat) framework. It offers customizable and conversable agents that integrate LLMs, tools, and humans.
  By automating chat among multiple capable agents, one can easily make them collectively perform tasks autonomously or with human feedback, including tasks that require using tools via code.

  Features of this use case include:

  - **Multi-agent conversations**: AG2 agents can communicate with each other to solve tasks. This allows for more complex and sophisticated applications than would be possible with a single LLM.
  - **Customization**: AG2 agents can be customized to meet the specific needs of an application. This includes the ability to choose the LLMs to use, the types of human input to allow, and the tools to employ.
  - **Human participation**: AG2 seamlessly allows human participation. This means that humans can provide input and feedback to the agents as needed.

  For [example](https://github.com/ag2ai/ag2/blob/main/test/twoagent.py),

  ```python
  from autogen import AssistantAgent, UserProxyAgent, config_list_from_json



  config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")

  assistant = AssistantAgent("assistant", llm_config={"config_list": config_list})
  user_proxy = UserProxyAgent("user_proxy", code_execution_config={"work_dir": "coding", "use_docker": False}) # IMPORTANT: set to True to run code in docker, recommended
  user_proxy.initiate_chat(assistant, message="Plot a chart of NVDA and TESLA stock price change YTD.")

  ```

  This example can be run with

  ```python
  python test/twoagent.py
  ```

  After the repo is cloned.
  The figure below shows an example conversation flow with AG2.

  ![Agent Chat Example](https://media.githubusercontent.com/media/ag2ai/ag2/refs/heads/main/website/static/img/chat_example.png)


  Alternatively, the [sample code](https://github.com/ag2ai/build-with-ag2/blob/main/samples/simple_chat.py) here allows a user to chat with an AG2 agent in ChatGPT style.
  Please find more [code examples](https://ag2ai.github.io/ag2/docs/Examples#automated-multi-agent-chat) for this feature.

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  AG2 also helps maximize the utility out of the expensive LLMs such as gpt-4o. It offers [enhanced LLM inference](https://ag2ai.github.io/ag2/docs/Use-Cases/enhanced_inference#api-unification) with powerful functionalities like caching, error handling, multi-config inference and templating.

  <!-- For example, you can optimize generations by LLM with your own tuning data, success metrics, and budgets.

  ```python

  config, analysis = autogen.Completion.tune(
      data=tune_data,
      metric="success",
      mode="max",
      eval_func=eval_func,
      inference_budget=0.05,
      optimization_budget=3,
      num_samples=-1,
  )

  response = autogen.Completion.create(context=test_instance, **config)
  ```

  Please find more [code examples](https://ag2ai.github.io/ag2/docs/Examples#tune-gpt-models) for this feature. -->

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  You can find detailed documentation about AG2 [here](https://ag2ai.github.io/ag2/).

  In addition, you can find:

  - [Research](https://ag2ai.github.io/ag2/docs/Research), [blogposts](https://ag2ai.github.io/ag2/blog) around AG2, and [Transparency FAQs](https://github.com/ag2ai/ag2/blob/main/TRANSPARENCY_FAQS.md)

  - [Discord](https://discord.gg/pAbnFJrkgZ)

  - [Contributing guide](https://ag2ai.github.io/ag2/docs/Contribute)

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>



  Explore detailed implementations with sample code and applications to help you get started with AG2.
  [Cookbook](https://github.com/ag2ai/build-with-ag2)




  [AutoGen](https://arxiv.org/abs/2308.08155)

  ```
  @inproceedings{wu2023autogen,
        title={AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework},
        author={Qingyun Wu and Gagan Bansal and Jieyu Zhang and Yiran Wu and Beibin Li and Erkang Zhu and Li Jiang and Xiaoyun Zhang and Shaokun Zhang and Jiale Liu and Ahmed Hassan Awadallah and Ryen W White and Doug Burger and Chi Wang},
        year={2023},
        eprint={2308.08155},
        archivePrefix={arXiv},
        primaryClass={cs.AI}
  }
  ```

  [EcoOptiGen](https://arxiv.org/abs/2303.04673)

  ```
  @inproceedings{wang2023EcoOptiGen,
      title={Cost-Effective Hyperparameter Optimization for Large Language Model Generation Inference},
      author={Chi Wang and Susan Xueqing Liu and Ahmed H. Awadallah},
      year={2023},
      booktitle={AutoML'23},
  }
  ```

  [MathChat](https://arxiv.org/abs/2306.01337)

  ```
  @inproceedings{wu2023empirical,
      title={An Empirical Study on Challenging Math Problem Solving with GPT-4},
      author={Yiran Wu and Feiran Jia and Shaokun Zhang and Hangyu Li and Erkang Zhu and Yue Wang and Yin Tat Lee and Richard Peng and Qingyun Wu and Chi Wang},
      year={2023},
      booktitle={ArXiv preprint arXiv:2306.01337},
  }
  ```

  [AgentOptimizer](https://arxiv.org/pdf/2402.11359)

  ```
  @article{zhang2024training,
    title={Training Language Model Agents without Modifying Language Models},
    author={Zhang, Shaokun and Zhang, Jieyu and Liu, Jiale and Song, Linxin and Wang, Chi and Krishna, Ranjay and Wu, Qingyun},
    journal={ICML'24},
    year={2024}
  }
  ```

  [StateFlow](https://arxiv.org/abs/2403.11322)
  ```
  @article{wu2024stateflow,
    title={StateFlow: Enhancing LLM Task-Solving through State-Driven Workflows},
    author={Wu, Yiran and Yue, Tianwei and Zhang, Shaokun and Wang, Chi and Wu, Qingyun},
    journal={arXiv preprint arXiv:2403.11322},
    year={2024}
  }
  ```

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>


  <a href="https://github.com/ag2ai/ag2/graphs/contributors">
    <img src="https://contrib.rocks/image?repo=ag2ai/ag2&max=204" />
  </a>

  <p align="right" style="font-size: 14px; color: #555; margin-top: 20px;">
    <a href="#readme-top" style="text-decoration: none; color: blue; font-weight: bold;">
      ↑ Back to Top ↑
    </a>
  </p>


  This project is licensed under the [Apache License, Version 2.0 (Apache-2.0)](./LICENSE).

  This project is a spin-off of [AutoGen](https://github.com/microsoft/autogen) and contains code under two licenses:

  - The original code from https://github.com/microsoft/autogen is licensed under the MIT License.  See the [LICENSE_original_MIT](./license_original/LICENSE_original_MIT) file for details.

  - Modifications and additions made in this fork are licensed under the Apache License, Version 2.0. See the  [LICENSE](./LICENSE) file for the full license text.

  We have documented these changes for clarity and to ensure transparency with our user and contributor community. For more details, please see the [NOTICE](./NOTICE.md) file.


pkgId: 47a68b7a97a57e38cebdfbecdd9e08fdfa02886f73a839dd41dc4f591c014598
name: python-ag2studio
arch: src
version: 0.0.1rc3
epoch: 0
release: 1
summary: AG2 Studio
url: https://github.com/ag2ai/ag2
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ag2studio-0.0.1rc3-1.src.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/ag2studio.svg)](https://badge.fury.io/py/ag2studio)
  [![Downloads](https://static.pepy.tech/badge/ag2studio/week)](https://pepy.tech/project/ag2studio)

  AG2 Studio is an AG2-powered (formerly AutoGen) AI app (user interface) to help you rapidly prototype AI agents, enhance them with skills, compose them into workflows and interact with them to accomplish tasks. It is built on top of the [AG2](https://ag2ai.github.io/ag2) framework, which is a toolkit for building AI agents.

  > **Note**: AG2 Studio is meant to help you rapidly prototype multi-agent workflows and demonstrate an example of end user interfaces built with AG2. It is not meant to be a production-ready app.

  > [!WARNING]
  > AG2 Studio is currently under active development and we are iterating quickly. Kindly consider that we may introduce breaking changes in the releases during the upcoming weeks, and also the `README` might be outdated. Please see the AG2 Studio [docs](https://ag2ai.github.io/ag2/docs/autogen-studio/getting-started) page for the most up-to-date information.

  Project Structure:

  - _ag2studio/_ code for the backend classes and web api (FastAPI)
  - _frontend/_ code for the webui, built with Gatsby and TailwindCSS



  There are two ways to install AG2 Studio - from PyPi or from source. We **recommend installing from PyPi** unless you plan to modify the source code.

  1.  **Install from PyPi**

      We recommend using a virtual environment (e.g., conda) to avoid conflicts with existing Python packages. With Python 3.10 or newer active in your virtual environment, use pip to install AG2 Studio:

      ```bash
      pip install ag2studio
      ```

  2.  **Install from Source**

      > Note: This approach requires some familiarity with building interfaces in React.

      If you prefer to install from source, ensure you have Python 3.10+ and Node.js (version above 14.15.0) installed. Here's how you get started:

      - Clone the AG2 Studio repository and install its Python dependencies:

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

      - Navigate to the `samples/apps/ag2-studio/frontend` directory, install dependencies, and build the UI:

        ```bash
        npm install -g gatsby-cli
        npm install --global yarn
        cd frontend
        yarn install
        yarn build
        ```

  For Windows users, to build the frontend, you may need alternative commands to build the frontend.

  ```bash

    gatsby clean && rmdir /s /q ..\\ag2studio\\web\\ui 2>nul & (set \"PREFIX_PATH_VALUE=\" || ver>nul) && gatsby build --prefix-paths && xcopy /E /I /Y public ..\\ag2studio\\web\\ui

  ```



  Once installed, run the web UI by entering the following in your terminal:

  ```bash
  ag2studio ui --port 8081
  ```

  This will start the application on the specified port. Open your web browser and go to `http://localhost:8081/` to begin using AG2 Studio.

  AG2 Studio also takes several parameters to customize the application:

  - `--host <host>` argument to specify the host address. By default, it is set to `localhost`. Y
  - `--appdir <appdir>` argument to specify the directory where the app files (e.g., database and generated user files) are stored. By default, it is set to the a `.ag2studio` directory in the user's home directory.
  - `--port <port>` argument to specify the port number. By default, it is set to `8080`.
  - `--reload` argument to enable auto-reloading of the server when changes are made to the code. By default, it is set to `False`.
  - `--database-uri` argument to specify the database URI. Example values include `sqlite:///database.sqlite` for SQLite and `postgresql+psycopg://user:password@localhost/dbname` for PostgreSQL. If this is not specified, the database URIL defaults to a `database.sqlite` file in the `--appdir` directory.

  Now that you have AG2 Studio installed and running, you are ready to explore its capabilities, including defining and modifying agent workflows, interacting with agents and sessions, and expanding agent skills.



  We welcome contributions to AG2 Studio. We recommend the following general steps to contribute to the project:

  - Review the overall AG2 project [contribution guide](https://github.com/ag2ai/ag2?tab=readme-ov-file#contributing)
  - Please initiate a discussion on the roadmap issue or a new issue to discuss your proposed contribution.
  - Submit a pull request with your contribution!
  - If you are modifying AG2 Studio, it has its own devcontainer. See instructions in `.devcontainer/README.md` to use it
  - Please use the tag `studio` for any issues, questions, and PRs related to Studio



  Please refer to the AG2 Studio [FAQs](https://ag2ai.github.io/ag2/docs/autogen-studio/faqs) page for more information.



  AG2 Studio is Based on the [AG2 (Formerly AutoGen)](https://ag2ai.github.io/ag2) project. It was adapted from a research prototype built in October 2023 (original credits: Gagan Bansal, Adam Fourney, Victor Dibia, Piali Choudhury, Saleema Amershi, Ahmed Awadallah, Chi Wang).


pkgId: f40ad6b19c84a44f82d6255360e758e72012c2edbe99a199f731042b26f96c64
name: python-aga
arch: src
version: 0.13.10
epoch: 0
release: 1
summary: aga grades assignments
url: https://github.com/nihilistkitten/aga
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aga-0.13.10-1.src.rpm
checksum_type: sha256
description:
  <div align="center">



  [![tests](https://github.com/nihilistkitten/aga/workflows/tests/badge.svg)](https://github.com/nihilistkitten/aga/actions?workflow=tests)
  [![lints](https://github.com/nihilistkitten/aga/workflows/lints/badge.svg)](https://github.com/nihilistkitten/aga/actions?workflow=lints)
  [![Codecov](https://codecov.io/gh/nihilistkitten/aga/branch/main/graph/badge.svg)](https://codecov.io/gh/nihilistkitten/aga)
  [![PyPI](https://img.shields.io/pypi/v/aga.svg)](https://pypi.org/project/aga/)
  [![Read the Docs](https://readthedocs.org/projects/aga/badge/)](https://aga.readthedocs.io/)
  [![License](https://img.shields.io/github/license/nihilistkitten/aga)](https://choosealicense.com/licenses/mit/)

  </div>

  **aga** (**a**ga **g**rades **a**ssignments) is a tool for easily producing autograders for python programming assignments, originally developed for Reed College's CS1 course.



  Unlike traditional software testing, where there is likely no _a priori_ known-correct implementation, there is always such an implementation (or one can be easily written by course staff) in homework grading. Therefore, applying traditional software testing frameworks to homework grading is limited. Relying on reference implementations (what aga calls _golden solutions_) has several benefits:

  1. Reliability: having a reference solution gives a second layer of confirmation for the correctness of expected outputs. Aga supports _golden tests_, which function as traditional unit tests of the golden solution.
  2. Test case generation: many complex test cases can easily be generated via the reference solution, instead of needing to work out the expected output by hand. Aga supports generating test cases from inputs without explcitly referring to an expected output, and supports collecting test cases from python generators.
  3. Property testing: unit testing libraries like [hypothesis](https://hypothesis.readthedocs.io) allow testing large sets of arbitrary inputs for certain properties, and identifying simple inputs which reproduce violations of those properties. This is traditionally unreliable, because identifying specific properties to test is difficult. In homework grading, the property can simply be "the input matches the golden solution's output." Support for hypothesis is a [long-term goal](https://github.com/nihilistkitten/aga/issues/32) of aga.



  Install from pip:

  ```bash
  pip install aga
  ```

  or with the python dependency manager of your choice (I like [poetry](https://github.com/python-poetry/poetry)), for example:

  ```bash
  curl -sSL https://install.python-poetry.org | python3 -
  echo "cd into aga repo"
  cd aga
  poetry install && poetry shell
  ```



  In `square.py` (or any python file), write:

  ```python
  from aga import problem, test_case, test_cases

  @test_cases(-3, 100)
  @test_case(2, aga_expect=4)
  @test_case(-2, aga_expect=4)
  @problem()
  def square(x: int) -> int:
      """Square x."""
      return x * x
  ```

  Then run `aga gen square.py` from the directory with `square.py`. This will generate a ZIP file suitable for upload to Gradescope.



  Aga relies on the notion of a _golden solution_ to a given problem which is known to be correct. The main work of the library is to compare the output of this golden solution on some family of test inputs against the output of a student submission. To that end, aga integrates with frontends: existing classroom software which allow submission of student code. Currently, only Gradescope is supported.

  To use aga:

  1. Write a golden solution to some programming problem.
  2. Decorate this solution with the `problem` decorator.
  3. Decorate this problem with any number of `test_case` decorators, which take arbitrary positional or keyword arguments and pass them verbatim to the golden and submitted functions.
  4. Generate the autograder using the CLI: `aga gen <file_name>`.

  The `test_case` decorator may optionally take a special keyword argument called `aga_expect`. This allows easy testing of the golden solution: aga will not successfully produce an autograder unless the golden solution's output matches the `aga_expect`. You should use these as sanity checks to ensure your golden solution is implemented correctly.

  For more info, see the [tutorial](https://aga.readthedocs.io/en/stable/tutorial.html).

  For complete documentation, including configuring problem and test case metadata, see the [API reference](https://aga.readthedocs.io/en/stable/reference.html).

  For CLI documentation, run `aga --help`, or access the docs [online](https://aga.readthedocs.io/en/stable/cli.html).



  Bug reports, feature requests, and pull requests are all welcome. For details on our test suite, development environment, and more, see the [developer documentation](https://aga.readthedocs.io/en/stable/development.html).

  <!-- vim:set tw=0: -->


pkgId: fe3d86cac51437f308fa2c4bd0ce97cde2940608817888bc0a46da1a0cfdbb19
name: python-again
arch: src
version: 1.2.21
epoch: 0
release: 1
description: UNKNOWN
url: https://github.com/kashifrazzaqui/again
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-again-1.2.21-1.src.rpm
checksum_type: sha256
summary:
  Python decorators for type and value checking at runtime. Also, some boilerplate code for making classes that support event registration and firing.


pkgId: 659c7e1cf6533f07a5e51da565ffc6bb4107879b273b25c924df24f37adf42a9
name: python-agamprimer
arch: src
version: 0.6.9
epoch: 0
release: 1
url: https://pypi.org/project/agamprimer/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agamprimer-0.6.9-1.src.rpm
checksum_type: sha256
summary:
  A package to design primers in Anopheles gambiae whilst considering genetic variation with malariagen_data


pkgId: 4d82bf5a789410ea8c23a40bdf2f9b77b3214c7f072a36224137c0b569f9fbb9
name: python-agate
arch: src
version: 1.12.0
epoch: 0
release: 1
summary: A data analysis library that is optimized for humans instead of machines.
url: https://agate.readthedocs.org/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agate-1.12.0-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://github.com/wireservice/agate/workflows/CI/badge.svg
      :target: https://github.com/wireservice/agate/actions
      :alt: Build status

  .. image:: https://coveralls.io/repos/wireservice/agate/badge.svg?branch=master
      :target: https://coveralls.io/r/wireservice/agate
      :alt: Coverage status

  .. image:: https://img.shields.io/pypi/dm/agate.svg
      :target: https://pypi.python.org/pypi/agate
      :alt: PyPI downloads

  .. image:: https://img.shields.io/pypi/v/agate.svg
      :target: https://pypi.python.org/pypi/agate
      :alt: Version

  .. image:: https://img.shields.io/pypi/l/agate.svg
      :target: https://pypi.python.org/pypi/agate
      :alt: License

  .. image:: https://img.shields.io/pypi/pyversions/agate.svg
      :target: https://pypi.python.org/pypi/agate
      :alt: Support Python versions

  agate is a Python data analysis library that is optimized for humans instead of machines. It is an alternative to numpy and pandas that solves real-world problems with readable code.

  agate was previously known as journalism.

  Important links:

  * Documentation:    https://agate.rtfd.org
  * Repository:       https://github.com/wireservice/agate
  * Issues:           https://github.com/wireservice/agate/issues


pkgId: 4f5c29af25433740366980bd3e0e6de564af8726b53168c1118fc35271636393
name: python-agate-dbf
arch: src
version: 0.2.3
epoch: 0
release: 1
summary: agate-dbf adds read support for dbf files to agate.
url: https://agate-dbf.readthedocs.org/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agate-dbf-0.2.3-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://github.com/wireservice/agate-dbf/workflows/CI/badge.svg
      :target: https://github.com/wireservice/agate-dbf/actions
      :alt: Build status

  .. image:: https://coveralls.io/repos/wireservice/agate-dbf/badge.svg?branch=master
      :target: https://coveralls.io/r/wireservice/agate-dbf
      :alt: Coverage status

  .. image:: https://img.shields.io/pypi/dw/agate-dbf.svg
      :target: https://pypi.python.org/pypi/agate-dbf
      :alt: PyPI downloads

  .. image:: https://img.shields.io/pypi/v/agate-dbf.svg
      :target: https://pypi.python.org/pypi/agate-dbf
      :alt: Version

  .. image:: https://img.shields.io/pypi/l/agate-dbf.svg
      :target: https://pypi.python.org/pypi/agate-dbf
      :alt: License

  .. image:: https://img.shields.io/pypi/pyversions/agate-dbf.svg
      :target: https://pypi.python.org/pypi/agate-dbf
      :alt: Support Python versions

  agate-dbf adds read support for dbf files to `agate <https://github.com/wireservice/agate>`_.

  Important links:

  * agate             https://agate.rtfd.org
  * Documentation:    https://agate-dbf.rtfd.org
  * Repository:       https://github.com/wireservice/agate-dbf
  * Issues:           https://github.com/wireservice/agate-dbf/issues


pkgId: ec8544cb0c386ee44b607457a7acc0bd8a3b2d1a1892abc7c65ce3943a8d96ce
name: python-agate-excel
arch: src
version: 0.4.1
epoch: 0
release: 1
summary: agate-excel adds read support for Excel files (xls and xlsx) to agate.
url: https://agate-excel.readthedocs.org/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agate-excel-0.4.1-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://github.com/wireservice/agate-excel/workflows/CI/badge.svg
      :target: https://github.com/wireservice/agate-excel/actions
      :alt: Build status

  .. image:: https://coveralls.io/repos/wireservice/agate-excel/badge.svg?branch=master
      :target: https://coveralls.io/r/wireservice/agate-excel
      :alt: Coverage status

  .. image:: https://img.shields.io/pypi/dm/agate-excel.svg
      :target: https://pypi.python.org/pypi/agate-excel
      :alt: PyPI downloads

  .. image:: https://img.shields.io/pypi/v/agate-excel.svg
      :target: https://pypi.python.org/pypi/agate-excel
      :alt: Version

  .. image:: https://img.shields.io/pypi/l/agate-excel.svg
      :target: https://pypi.python.org/pypi/agate-excel
      :alt: License

  .. image:: https://img.shields.io/pypi/pyversions/agate-excel.svg
      :target: https://pypi.python.org/pypi/agate-excel
      :alt: Support Python versions

  agate-excel adds read support for Excel files (xls and xlsx) to `agate <https://github.com/wireservice/agate>`_.

  Important links:

  * agate             https://agate.rtfd.org
  * Documentation:    https://agate-excel.rtfd.org
  * Repository:       https://github.com/wireservice/agate-excel
  * Issues:           https://github.com/wireservice/agate-excel/issues


pkgId: c4f955ce1ed9bbba7aa245ca9447b787c2dea318786d1c0198a712ddd20bae53
name: python-agate-lookup
arch: src
version: 0.3.3
epoch: 0
release: 1
summary: agate-lookup adds remote lookup tables to agate.
url: https://agate-lookup.readthedocs.org/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agate-lookup-0.3.3-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://github.com/wireservice/agate-lookup/workflows/CI/badge.svg
      :target: https://github.com/wireservice/agate-lookup/actions
      :alt: Build status

  .. image:: https://coveralls.io/repos/wireservice/agate-lookup/badge.svg?branch=master
      :target: https://coveralls.io/r/wireservice/agate-lookup
      :alt: Coverage status

  .. image:: https://img.shields.io/pypi/dw/agate-lookup.svg
      :target: https://pypi.python.org/pypi/agate-lookup
      :alt: PyPI downloads

  .. image:: https://img.shields.io/pypi/v/agate-lookup.svg
      :target: https://pypi.python.org/pypi/agate-lookup
      :alt: Version

  .. image:: https://img.shields.io/pypi/l/agate-lookup.svg
      :target: https://pypi.python.org/pypi/agate-lookup
      :alt: License

  .. image:: https://img.shields.io/pypi/pyversions/agate-lookup.svg
      :target: https://pypi.python.org/pypi/agate-lookup
      :alt: Support Python versions

  agate-lookup adds one-line access to `lookup <https://github.com/wireservice/lookup>`_ tables to `agate <https://github.com/wireservice/agate>`_.

  Important links:

  * agate             https://agate.rtfd.org
  * Documentation:    https://agate-lookup.rtfd.org
  * Repository:       https://github.com/wireservice/agate-lookup
  * Issues:           https://github.com/wireservice/agate-lookup/issues


pkgId: 51a540606c1a6a6b91a88682c88e65b269087e7bf6a6e1511cb93f2ac3f9c3c7
name: python-agate-sql
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: agate-sql adds SQL read/write support to agate.
url: https://agate-sql.readthedocs.org/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agate-sql-0.7.2-1.src.rpm
checksum_type: sha256
description:
  .. image:: https://github.com/wireservice/agate-sql/workflows/CI/badge.svg
      :target: https://github.com/wireservice/agate-sql/actions
      :alt: Build status

  .. image:: https://coveralls.io/repos/wireservice/agate-sql/badge.svg?branch=master
      :target: https://coveralls.io/r/wireservice/agate-sql
      :alt: Coverage status

  .. image:: https://img.shields.io/pypi/dm/agate-sql.svg
      :target: https://pypi.python.org/pypi/agate-sql
      :alt: PyPI downloads

  .. image:: https://img.shields.io/pypi/v/agate-sql.svg
      :target: https://pypi.python.org/pypi/agate-sql
      :alt: Version

  .. image:: https://img.shields.io/pypi/l/agate-sql.svg
      :target: https://pypi.python.org/pypi/agate-sql
      :alt: License

  .. image:: https://img.shields.io/pypi/pyversions/agate-sql.svg
      :target: https://pypi.python.org/pypi/agate-sql
      :alt: Support Python versions

  agate-sql adds SQL read/write support to `agate <https://github.com/wireservice/agate>`_.

  Important links:

  * agate             https://agate.rtfd.org
  * Documentation:    https://agate-sql.rtfd.org
  * Repository:       https://github.com/wireservice/agate-sql
  * Issues:           https://github.com/wireservice/agate-sql/issues


pkgId: efa0729695aa5b7d981fbde3f7e6941740077380a6168a46b993f87bfc058039
name: python-agave
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: Rest_api
url: https://github.com/cuenca-mx/agave
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agave-0.2.2-1.src.rpm
checksum_type: sha256
description:
  [![test](https://github.com/cuenca-mx/agave/workflows/test/badge.svg)](https://github.com/cuenca-mx/agave/actions?query=workflow%3Atest)
  [![codecov](https://codecov.io/gh/cuenca-mx/agave/branch/main/graph/badge.svg)](https://codecov.io/gh/cuenca-mx/agave)
  [![PyPI](https://img.shields.io/pypi/v/agave.svg)](https://pypi.org/project/agave/)

  Agave is a library that implement rest_api across the use of Blueprints based on Chalice Aws.

  this library allow send and receive JSON data to these endpoints to query, modify and create content.

  Install agave using pip:

  ```bash
  pip install agave==0.0.2.dev0
  ```

  You can use agave for blueprint like this:
  ```python

  from agave.blueprints.rest_api import RestApiBlueprint

  ```

  agave include helpers for mongoengine, for example:
  ```python

  from agave.models.helpers import (uuid_field, mongo_to_dict, EnumField, updated_at, list_field_to_dict)

  ```

  Correr tests
  ```bash
  make test
  ```


pkgId: bab40b3f3c6b410b842947daf00767c29040c8c26bccfab733361644cf07b2a0
name: python-agave-pyclient
arch: src
version: 1.7.2
epoch: 0
release: 1
summary: A Python client for the Agave 3d volume renderer
url: https://github.com/allen-cell-animated/agave
rpm_license: Allen Institute Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agave-pyclient-1.7.2-1.src.rpm
checksum_type: sha256
description:
  - Connects to AGAVE server and sends draw commands. Receives and saves rendered images.

  You must have AGAVE installed. On command line, run:
  ```
  agave --server &
  ```
  For Linux headless operation, you need to tell the Qt library to use the offscreen platform plugin:
  ```
  agave -platform offscreen --server &
  ```
  ```python
  from agave_pyclient import AgaveRenderer

  r = agave_pyclient.AgaveRenderer()

  r.load_data("my_favorite.ome.tiff")

  r.set_resolution(681, 612)
  r.background_color(0, 0, 0)
  r.render_iterations(128)
  r.set_primary_ray_step_size(4)
  r.set_secondary_ray_step_size(4)
  r.set_voxel_scale(0.270833, 0.270833, 0.53)
  r.exposure(0.75)
  r.density(28.7678)

  r.session("output.png")

  r.redraw()
  ```

  **Stable Release:** `pip install agave_pyclient`<br>

  For full package documentation please visit [allen-cell-animated.github.io/agave](https://allen-cell-animated.github.io/agave).

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

  1. `pip install -e .[dev]`
     This will install your package in editable mode with all the required development
     dependencies (i.e. `tox`).
  2. `make build`
     This will run `tox` which will run all your tests in both Python 3.7
     and Python 3.8 as well as linting your code.
  3. `make clean`
     This will clean up various Python and build generated files so that you can ensure
     that you are working in a clean environment.
  4. `make docs`
     This will generate and launch a web browser to view the most up-to-date
     documentation for your Python package.
  **Allen Institute Software License**


pkgId: a3f0d25ab342c7bd6c37b9a37fb83d68ee2e6ecc49711ecf7da39881df919dad
name: python-agcounts
arch: src
version: 0.2.6
epoch: 0
release: 1
summary: This project contains code to generate activity counts from accelerometer data.
url: https://github.com/actigraph/agcounts
rpm_license: GPL-3.0-or-later
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agcounts-0.2.6-1.src.rpm
checksum_type: sha256
description:
  ![Tests](https://github.com/actigraph/agcounts/actions/workflows/tests.yml/badge.svg)

  A python package for extracting actigraphy counts from accelerometer data.


  ```bash
  pip install agcounts
  ```

  Download test data:
  ```bash
  curl -L https://github.com/actigraph/agcounts/files/8247896/GT3XPLUS-AccelerationCalibrated-1x8x0.NEO1G75911139.2000-01-06-13-00-00-000-P0000.sensor.csv.gz --output data.csv.gz
  ```

  Run a simple test

  ```python
  import pandas as pd
  import numpy as np
  from agcounts.extract import get_counts


  def get_counts_csv(
      file,
      freq: int,
      epoch: int,
      fast: bool = True,
      verbose: bool = False,
      time_column: str = None,
  ):
      if verbose:
          print("Reading in CSV", flush=True)
      raw = pd.read_csv(file, skiprows=0)
      if time_column is not None:
          ts = raw[time_column]
          ts = pd.to_datetime(ts)
          time_freq = str(epoch) + "S"
          ts = ts.dt.round(time_freq)
          ts = ts.unique()
          ts = pd.DataFrame(ts, columns=[time_column])
      raw = raw[["X", "Y", "Z"]]
      if verbose:
          print("Converting to array", flush=True)
      raw = np.array(raw)
      if verbose:
          print("Getting Counts", flush=True)
      counts = get_counts(raw, freq=freq, epoch=epoch, fast=fast, verbose=verbose)
      del raw
      counts = pd.DataFrame(counts, columns=["Axis1", "Axis2", "Axis3"])
      counts["AC"] = (
          counts["Axis1"] ** 2 + counts["Axis2"] ** 2 + counts["Axis3"] ** 2
      ) ** 0.5
      ts = ts[0 : counts.shape[0]]
      if time_column is not None:
          counts = pd.concat([ts, counts], axis=1)
      return counts


  def convert_counts_csv(
      file,
      outfile,
      freq: int,
      epoch: int,
      fast: bool = True,
      verbose: bool = False,
      time_column: str = None,
  ):
      counts = get_counts_csv(
          file, freq=80, epoch=60, verbose=True, time_column=time_column
      )
      counts.to_csv(outfile, index=False)
      return counts


  counts = get_counts_csv("data.csv.gz", freq=80, epoch=60)
  counts = convert_counts_csv(
      "data.csv.gz",
      outfile="counts.csv.gz",
      freq=80,
      epoch=60,
      verbose=True,
      time_column="HEADER_TIMESTAMP",
  )
  ```


pkgId: 1769b3c84e475775c3771b4d294a7722ccbfced2c262e3a468e5fd74033d24e9
name: python-age
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: Actually good encryption. In Python.
url: https://github.com/jojonas/pyage
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-age-0.5.1-1.src.rpm
checksum_type: sha256
description:
  [![Build and Test](https://github.com/jojonas/pyage/workflows/Build%20and%20Test/badge.svg)](https://github.com/jojonas/pyage/actions?workflow=Build+and+Test)
  [![Compatibility Check](https://github.com/jojonas/pyage/workflows/Compatibility%20with%20FiloSottile/age/badge.svg)](https://github.com/jojonas/pyage/actions?workflow=Compatibility%20with%20FiloSottile/age)
  [![Documentation Status](https://readthedocs.org/projects/pyage/badge/?version=latest)](https://pyage.readthedocs.io/en/latest/?badge=latest)
  ![License](https://img.shields.io/github/license/jojonas/pyage)

  ![pyage screenshot](https://raw.githubusercontent.com/jojonas/pyage/master/docs/source/_static/carbon.png)

  pyage is an experimental implementation of @FiloSottile and @Benjojo12 's project "age".
  The spec is currently available as seven-page Google doc at [age-encryption.org/v1](https://age-encryption.org/v1).

  This project is still work-in-progress.

  ⚠️ pyage is not intended to be a secure age implementation!
  My original intention was to better understand the spec, find mistakes early and provide a redundant implementation for validation. I'm not a cryptographer (IANAC) and did not (yet) find the time to address  implementation-specific security issues (such as DoS attacks or side-channel attacks).

  So:
  *Use at your own risk.*


  Install from pip:

      pip install age

  Generate a key pair:

      mkdir -p ~/.config/age
      pyage generate > ~/.config/age/keys.txt

  Encrypt a file:

      pyage encrypt -i hello.txt -o hello.age pubkey:<recipient public key>

  Decrypt a file (uses `~/.config/age/keys.txt`):

      pyage decrypt -i hello.age

  For a real tutorial, see [the Tutorial section in the documentation](https://pyage.readthedocs.io/en/latest/tutorials.html).


  The full documentation can be found at [pyage.readthedocs.io](https://pyage.readthedocs.io/en/latest/index.html).


pkgId: afb86ca3612b1f537ed797f443f9ae1bc429224ab69906f9913d805709f78ab2
name: python-age-verification-psehack
arch: src
version: 0.2.2
epoch: 0
release: 1
summary: A Django middleware for verifying the user's age before allowing them access to resources
url: https://pypi.org/project/age-verification-psehack/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-age-verification-psehack-0.2.2-1.src.rpm
checksum_type: sha256
description:
  A Django middleware for verifying the user's age before allowing them access to a resource.
  Developed for the purposes of the PSE Hackathon held in Sep 2024.

  The user is expected to own an Android or iOS device with an **NFC reader** and a compatible passport.



  - pip install age_verification_psehack

  In your Django project's `settings.py`:

  Add the following line to the bottom of the **MIDDLEWARE** section:

  - "age_verification_psehack.middleware.AgeVerificationMiddleware"

  Add the following line to the bottom of the **INSTALLED_APPS** section:

  - "age_verification_psehack.apps.AgeVerificationPSEHackConfig"

  Add a new **AGE_VERIFICATION_PATHS** setting containing all paths requiring age verification:

  - AGE_VERIFICATION_PATHS = ['/protected_path1', '/protected/path2']

  Usually all Django projects are already configured to serve static files. If yours is not configured,
  consult https://docs.djangoproject.com/en/4.2/howto/static-files/

  Navigate to the root of your Django project and run:

  - python manage.py makemigrations age_verification_psehack
  - python manage.py migrate
  - python manage.py collectstatic





  In case if you need to make changes and test them, in the root of this repo run

  - python -m pip install build
  - python -m build

  In the root of your Django project create a file `requirements.txt` with the following:

  -e path/to/the/root/of/this/repo

  Then run:

  python -m pip install -r requirements.txt


pkgId: 8a20d564792c49621a95cf1dbc60fdf57249064e3ca7ba6d5d71613f65a81609
name: python-agefreighter
arch: src
version: 0.1.0
epoch: 0
release: 1
url: https://github.com/rioriost/agefreighter
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agefreighter-0.1.0-1.src.rpm
checksum_type: sha256
summary:
  AgeFreighter is a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

description:
  a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

  [Apache AGE™](https://age.apache.org/) is a PostgreSQL Graph database compatible with PostgreSQL's distributed assets and leverages graph data structures to analyze and use relationships and patterns in data.

  [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/services/postgresql/) is a managed database service that is based on the open-source Postgres database engine.

  [Introducing support for Graph data in Azure Database for PostgreSQL (Preview)](https://techcommunity.microsoft.com/blog/adforpostgresql/introducing-support-for-graph-data-in-azure-database-for-postgresql-preview/4275628).


  * Asynchronous connection pool support for psycopg PostgreSQL driver
  * 'direct_load' option for loading data directly into the graph for better performance
  * 'COPY' protocol support for loading data into the graph for much better performance



  ```bash
  pip install agefreighter
  ```


  * over Python 3.11
  * This module runs on [psycopg](https://www.psycopg.org/) and [psycopg_pool](https://www.psycopg.org/)
  * Enable the Apache AGE extension in your Azure Database for PostgreSQL instance. Login Azure Portal, go to 'server parameters' blade, and check 'AGE" on within 'azure.extensions' and 'shared_preload_libraries' parameters. See, above blog post for more information.
  * Load the AGE extension in your PostgreSQL database.

  ```sql
  CREATE EXTENSION IF NOT EXISTS age CASCADE;
  ```



  ```python
  import os

  import asyncio
  from agefreighter import AgeFreighter




  async def test_loadFromSingleCSV(af: AgeFreighter, chunk_size: int = 96, direct_loading: bool = False) -> None:
      await af.loadFromSingleCSV(
          graph_name="actorfilms",
          csv="actorfilms.csv",
          start_vertex_type="Actor",
          start_id="ActorID",
          start_properties=["Actor"],
          edge_label="ACTED_IN",
          end_vertex_type="Film",
          end_id="FilmID",
          end_properties=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          direct_loading = direct_loading,
          drop_graph = True
      )





  async def test_loadFromCSVs(af: AgeFreighter, chunk_size: int = 96, direct_loading: bool = False) -> None:
      await af.loadFromCSVs(
          graph_name="cities_countries",
          vertex_csvs=["countries.csv", "cities.csv"],
          vertex_labels=["Country", "City"],
          edge_csvs=["edges.csv"],
          edge_labels=["has_city"],
          chunk_size=chunk_size,
          direct_loading = direct_loading,
          drop_graph = True
      )

  async def test_copyFromSingleCSV(af: AgeFreighter, chunk_size: int = 96) -> None:
      start_time = time.time()
      await af.copyFromSingleCSV(
          graph_name="actorfilms",
          csv="actorfilms.csv",
          start_vertex_type="Actor",
          start_id="ActorID",
          start_properties=["Actor"],
          edge_label="ACTED_IN",
          end_vertex_type="Film",
          end_id="FilmID",
          end_properties=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          drop_graph = True
      )

  async def test_copyFromCSVs(af: AgeFreighter, chunk_size: int = 96) -> None:
      start_time = time.time()
      await af.copyFromCSVs(
          graph_name="cities_countries",
          vertex_csvs=["countries.csv", "cities.csv"],
          vertex_labels=["Country", "City"],
          edge_csvs=["edges.csv"],
          edge_labels=["has_city"],
          chunk_size=chunk_size,
          drop_graph = True
      )

  async def main() -> None:
      
      try:
          connection_string = os.environ["PG_CONNECTION_STRING"]
      except KeyError:
          print("Please set the environment variable PG_CONNECTION_STRING")
          return

      af = await AgeFreighter.connect(dsn = connection_string, max_connections = 64)
      try:
          
          
          
          
          
          chunk_size = 64
          await test_loadFromSingleCSV(af, chunk_size = chunk_size, direct_loading = False)
          await asyncio.sleep(10)
          await test_loadFromSingleCSV(af, chunk_size = chunk_size, direct_loading = True)
          await asyncio.sleep(10)
          await test_copyFromSingleCSV(af, chunk_size = chunk_size)
          await asyncio.sleep(10)

          await test_loadFromCSVs(af, chunk_size = chunk_size, direct_loading = False)
          await asyncio.sleep(10)
          await test_loadFromCSVs(af, chunk_size = chunk_size, direct_loading = True)
          await asyncio.sleep(10)
          await test_copyFromCSVs(af, chunk_size = chunk_size)
          await asyncio.sleep(10)

      finally:
          await af.pool.close()

  if __name__ == "__main__":
      asyncio.run(main())
  ```


  ```
  export PG_CONNECTION_STRING="host=your_server.postgres.database.azure.com port=5432 dbname=postgres user=account password=your_password"
  python3 tests/test_agefreighter.py
  ```


  * Apache AGE : https://age.apache.org/
  * GitHub : https://github.com/apache/age
  * Document : https://age.apache.org/age-manual/master/index.html


  MIT License

rpm_license:
  MIT License  Copyright (c) 2024 Rio Fujita  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: c3239b54688ab4db332fb7350c6c1af8b3bbee8198387281bab610b47a7b8d5a
name: python-agefreighter
arch: src
version: 0.1.2
epoch: 0
release: 1
url: https://github.com/rioriost/agefreighter
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agefreighter-0.1.2-1.src.rpm
checksum_type: sha256
summary:
  AgeFreighter is a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

description:
  a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

  [Apache AGE™](https://age.apache.org/) is a PostgreSQL Graph database compatible with PostgreSQL's distributed assets and leverages graph data structures to analyze and use relationships and patterns in data.

  [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/services/postgresql/) is a managed database service that is based on the open-source Postgres database engine.

  [Introducing support for Graph data in Azure Database for PostgreSQL (Preview)](https://techcommunity.microsoft.com/blog/adforpostgresql/introducing-support-for-graph-data-in-azure-database-for-postgresql-preview/4275628).


  * Asynchronous connection pool support for psycopg PostgreSQL driver
  * 'direct_load' option for loading data directly into the graph for better performance
  * 'COPY' protocol support for loading data into the graph for much better performance



  ```bash
  pip install agefreighter
  ```


  * over Python 3.11
  * This module runs on [psycopg](https://www.psycopg.org/) and [psycopg_pool](https://www.psycopg.org/)
  * Enable the Apache AGE extension in your Azure Database for PostgreSQL instance. Login Azure Portal, go to 'server parameters' blade, and check 'AGE" on within 'azure.extensions' and 'shared_preload_libraries' parameters. See, above blog post for more information.
  * Load the AGE extension in your PostgreSQL database.

  ```sql
  CREATE EXTENSION IF NOT EXISTS age CASCADE;
  ```



  ```python
  import os

  import asyncio
  from agefreighter import AgeFreighter




  async def test_loadFromSingleCSV(af: AgeFreighter, chunk_size: int = 96, direct_loading: bool = False) -> None:
      await af.loadFromSingleCSV(
          graph_name="actorfilms",
          csv="actorfilms.csv",
          start_vertex_type="Actor",
          start_id="ActorID",
          start_properties=["Actor"],
          edge_label="ACTED_IN",
          end_vertex_type="Film",
          end_id="FilmID",
          end_properties=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          direct_loading = direct_loading,
          drop_graph = True
      )





  async def test_loadFromCSVs(af: AgeFreighter, chunk_size: int = 96, direct_loading: bool = False) -> None:
      await af.loadFromCSVs(
          graph_name="cities_countries",
          vertex_csvs=["countries.csv", "cities.csv"],
          vertex_labels=["Country", "City"],
          edge_csvs=["edges.csv"],
          edge_labels=["has_city"],
          chunk_size=chunk_size,
          direct_loading = direct_loading,
          drop_graph = True
      )

  async def test_copyFromSingleCSV(af: AgeFreighter, chunk_size: int = 96) -> None:
      await af.loadFromSingleCSV(
          graph_name="actorfilms",
          csv="actorfilms.csv",
          start_vertex_type="Actor",
          start_id="ActorID",
          start_properties=["Actor"],
          edge_label="ACTED_IN",
          end_vertex_type="Film",
          end_id="FilmID",
          end_properties=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          drop_graph=True,
          use_copy=True,
      )

  async def test_copyFromCSVs(af: AgeFreighter, chunk_size: int = 96) -> None:
      await af.loadFromCSVs(
          graph_name="cities_countries",
          vertex_csvs=["countries.csv", "cities.csv"],
          vertex_labels=["Country", "City"],
          edge_csvs=["edges.csv"],
          edge_labels=["has_city"],
          chunk_size=chunk_size,
          drop_graph=True,
          use_copy=True,
      )

  async def main() -> None:
      
      try:
          connection_string = os.environ["PG_CONNECTION_STRING"]
      except KeyError:
          print("Please set the environment variable PG_CONNECTION_STRING")
          return

      af = await AgeFreighter.connect(dsn = connection_string, max_connections = 64)
      try:
          
          
          
          
          
          chunk_size = 64
          await test_loadFromSingleCSV(af, chunk_size = chunk_size, direct_loading = False)
          await asyncio.sleep(10)
          await test_loadFromSingleCSV(af, chunk_size = chunk_size, direct_loading = True)
          await asyncio.sleep(10)
          await test_copyFromSingleCSV(af, chunk_size = chunk_size)
          await asyncio.sleep(10)

          await test_loadFromCSVs(af, chunk_size = chunk_size, direct_loading = False)
          await asyncio.sleep(10)
          await test_loadFromCSVs(af, chunk_size = chunk_size, direct_loading = True)
          await asyncio.sleep(10)
          await test_copyFromCSVs(af, chunk_size = chunk_size)
          await asyncio.sleep(10)

      finally:
          await af.pool.close()

  if __name__ == "__main__":
      asyncio.run(main())
  ```


  ```
  export PG_CONNECTION_STRING="host=your_server.postgres.database.azure.com port=5432 dbname=postgres user=account password=your_password"
  python3 tests/test_agefreighter.py
  ```


  * Apache AGE : https://age.apache.org/
  * GitHub : https://github.com/apache/age
  * Document : https://age.apache.org/age-manual/master/index.html


  MIT License

rpm_license:
  MIT License  Copyright (c) 2024 Rio Fujita  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: 5cbbf110a6ad1a58ad62f4c967f9ef5ef402e7d0b796af05fe94f6ef765b4679
name: python-agefreighter
arch: src
version: 0.2.3
epoch: 0
release: 1
url: https://github.com/rioriost/agefreighter
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agefreighter-0.2.3-1.src.rpm
checksum_type: sha256
summary:
  AgeFreighter is a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

description:
  a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

  [Apache AGE™](https://age.apache.org/) is a PostgreSQL Graph database compatible with PostgreSQL's distributed assets and leverages graph data structures to analyze and use relationships and patterns in data.

  [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/services/postgresql/) is a managed database service that is based on the open-source Postgres database engine.

  [Introducing support for Graph data in Azure Database for PostgreSQL (Preview)](https://techcommunity.microsoft.com/blog/adforpostgresql/introducing-support-for-graph-data-in-azure-database-for-postgresql-preview/4275628).


  * Asynchronous connection pool support for psycopg PostgreSQL driver
  * 'direct_loading' option for loading data directly into the graph. If 'direct_loading' is True, the data is loaded into the graph using the 'INSERT' statement, not Cypher queries.
  * 'COPY' protocol support for loading data into the graph. If 'use_copy' is True, the data is loaded into the graph using the 'COPY' protocol.


  * 'loadFromSingleCSV()' expects a single CSV file that contains the data for the graph as a source.
  * 'loadFromCSVs()' expects multiple CSV files, two CSV files for vertices and one CSV file for edges as sources.
  * 'loadFromNetworkx()' expects a NetworkX graph object as a source.
  * 'loadFromNeo4j()' expects a Neo4j as a source.
  * 'loadFromPGSQL()' expects a PGSQL as a source.
  * 'loadFromParquet()' expects a Parquet file as a source.
  * Many more coming soon...



  ```bash
  pip install agefreighter
  ```


  * over Python 3.11
  * This module runs on [psycopg](https://www.psycopg.org/) and [psycopg_pool](https://www.psycopg.org/)
  * Enable the Apache AGE extension in your Azure Database for PostgreSQL instance. Login Azure Portal, go to 'server parameters' blade, and check 'AGE" on within 'azure.extensions' and 'shared_preload_libraries' parameters. See, above blog post for more information.
  * Load the AGE extension in your PostgreSQL database.

  ```sql
  CREATE EXTENSION IF NOT EXISTS age CASCADE;
  ```


  See, [tests/test_agefreighter.py](https://github.com/rioriost/agefreighter/blob/6c61f53ec2cf3daf79356690096fee2d18e37631/tests/test_agefreighter.py) for more details.

  ```python


  import os
  import time

  import asyncio
  from agefreighter import AgeFreighter

  import networkx as nx
  import pandas as pd









  async def test_loadFromSingleCSV(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
  ) -> None:
      start_time = time.time()
      await af.loadFromSingleCSV(
          graph_name="actorfilms",
          csv="actorfilms.csv",
          start_v_label="Actor",
          start_id="ActorID",
          start_props=["Actor"],
          edge_type="ACTED_IN",
          end_v_label="Film",
          end_id="FilmID",
          end_props=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromSingleCSV : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )








  async def test_loadFromCSVs(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
  ) -> None:
      start_time = time.time()
      await af.loadFromCSVs(
          graph_name="cities_countries",
          vertex_csvs=["countries.csv", "cities.csv"],
          v_labels=["Country", "City"],
          edge_csvs=["edges.csv"],
          e_types=["has_city"],
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromCSVs : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )






  async def test_loadFromNetworkx(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
  ) -> None:
      df = pd.read_csv("actorfilms.csv")
      G = nx.DiGraph()

      for name, group in df.groupby("ActorID"):
          for idx, row in group.iterrows():
              G.add_node(row["ActorID"], label="Actor", name=row["Actor"])
              G.add_node(
                  row["FilmID"],
                  label="Film",
                  name=row["Film"],
                  year=row["Year"],
                  votes=row["Votes"],
                  rating=row["Rating"],
              )
              G.add_edge(row["ActorID"], row["FilmID"], label="ACTED_IN")

      start_time = time.time()
      await af.loadFromNetworkx(
          graph_name="actorfilms",
          networkx_graph=G,
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromNetworkx : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )





  async def test_loadFromNeo4j(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
      init_neo4j: bool = False,
  ) -> None:
      try:
          n4j_uri = os.environ["NEO4J_URI"]
          n4j_user = os.environ["NEO4J_USER"]
          n4j_password = os.environ["NEO4J_PASSWORD"]
      except KeyError:
          print(
              "Please set the environment variables NEO4J_URI, NEO4J_USER, NEO4J_PASSWORD"
          )
          return

      
      if init_neo4j:
          await loadTestDataToNeo4j(n4j_uri, n4j_user, n4j_password)

      start_time = time.time()
      graph_name = "actorfilms"
      await af.loadFromNeo4j(
          uri=n4j_uri,
          user=n4j_user,
          password=n4j_password,
          neo4j_database="neo4j",
          graph_name=graph_name,
          id_map={"Actor": "ActorID", "Film": "FilmID"},
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromNeo4j : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )




  async def loadTestDataToNeo4j(
      n4j_uri: str = "",
      n4j_user: str = "",
      n4j_password: str = "",
  ) -> None:
      from neo4j import AsyncGraphDatabase

      batch_size = 1000
      df = pd.read_csv("actorfilms.csv")
      uniq_actors = df[["ActorID", "Actor"]].drop_duplicates()
      uniq_films = df[["FilmID", "Film", "Year", "Votes", "Rating"]].drop_duplicates()

      async with AsyncGraphDatabase.driver(
          n4j_uri, auth=(n4j_user, n4j_password)
      ) as driver:
          async with driver.session() as session:
              
              await session.run("MATCH (a)-[r]->() DELETE a, r")
              await session.run("MATCH (a) DELETE a")
              await session.run("DROP INDEX actor_index_id IF EXISTS")
              await session.run("DROP INDEX film_index_id IF EXISTS")
              await session.run(
                  "CREATE INDEX actor_index_id FOR (n:Actor) ON (n.ActorID)"
              )
              await session.run("CREATE INDEX film_index_id FOR (n:Film) ON (n.FilmID)")
              
              for idx in range(0, len(uniq_actors), batch_size):
                  actors = [
                      {"Actor": actor, "ActorID": actorid}
                      for i, (actor, actorid) in enumerate(
                          zip(
                              uniq_actors["Actor"][idx : idx + batch_size].tolist(),
                              uniq_actors["ActorID"][idx : idx + batch_size].tolist(),
                          )
                      )
                  ]
                  await session.run(
                      """UNWIND $actors AS row
                      CREATE (a:Actor)
                      SET a += row""",
                      actors=actors,
                  )
              
              for idx in range(0, len(uniq_films), batch_size):
                  films = [
                      {
                          "Film": film,
                          "FilmID": filmid,
                          "Year": year,
                          "Votes": votes,
                          "Rating": rating,
                      }
                      for i, (film, filmid, year, votes, rating) in enumerate(
                          zip(
                              uniq_films["Film"][idx : idx + batch_size].tolist(),
                              uniq_films["FilmID"][idx : idx + batch_size].tolist(),
                              uniq_films["Year"][idx : idx + batch_size].tolist(),
                              uniq_films["Votes"][idx : idx + batch_size].tolist(),
                              uniq_films["Rating"][idx : idx + batch_size].tolist(),
                          )
                      )
                  ]
                  await session.run(
                      """UNWIND $films AS row
                      CREATE (f:Film)
                      SET f += row""",
                      films=films,
                  )
              
              for idx in range(0, len(df), batch_size):
                  acted_ins = [
                      {"from": actorid, "to": filmid}
                      for i, (actorid, filmid) in enumerate(
                          zip(
                              df["ActorID"][idx : idx + batch_size].tolist(),
                              df["FilmID"][idx : idx + batch_size].tolist(),
                          )
                      )
                  ]
                  await session.run(
                      """UNWIND $acted_ins AS row
                      MATCH (from:Actor {ActorID: row.from})
                      MATCH (to:Film {FilmID: row.to})
                      CREATE (from)-[r:ACTED_IN]->(to)
                      SET r += row""",
                      acted_ins=acted_ins,
                  )





  async def test_loadFromPGSQL(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
      init_pgsql: bool = False,
  ) -> None:
      try:
          src_connection_string = os.environ["SRC_PG_CONNECTION_STRING"]
      except KeyError:
          print("Please set the environment variables SRC_PG_CONNECTION_STRING")
          return

      src_tables = {"from_nodes": "Actor", "to_nodes": "Film", "edges": "ACTED_IN"}

      if init_pgsql:
          
          await loadTestDataToPGSQL(
              con_string=src_connection_string,
              src_tables=src_tables,
              src_csv="actorfilms.csv",
          )

      start_time = time.time()
      graph_name = "actorfilms"
      await af.loadFromPGSQL(
          src_con_string=src_connection_string,
          src_tables=src_tables,
          graph_name=graph_name,
          
          id_maps={
              "Actor": "actorid",
              "Film": "filmid",
          },
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromPGSQL : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )




  async def loadTestDataToPGSQL(
      con_string: str = "",
      src_tables: dict = {},
      src_csv: str = "",
  ) -> None:
      import psycopg as pg

      df = pd.read_csv(src_csv)

      datum = [None, None, None]
      types = [None, None, None]

      datum[0] = df[["ActorID", "Actor"]].drop_duplicates()
      datum[0].insert(0, "serial", range(1, len(datum[0]) + 1))
      types[0] = ["SERIAL", "TEXT", "TEXT"]

      datum[1] = df[["FilmID", "Film", "Year", "Votes", "Rating"]].drop_duplicates()
      datum[1].insert(0, "serial", range(1, len(datum[1]) + 1))
      types[1] = ["SERIAL", "TEXT", "TEXT", "INT", "INT", "REAL"]

      datum[2] = df[["ActorID", "FilmID"]].rename(
          columns={"ActorID": "start_id", "FilmID": "end_id"}
      )
      datum[2].insert(0, "serial", range(1, len(datum[2]) + 1))
      types[2] = ["SERIAL", "TEXT", "TEXT"]

      with pg.connect(con_string) as conn:
          with conn.cursor() as cur:
              for idx, (table, data, type) in enumerate(
                  zip(src_tables.values(), datum, types)
              ):
                  cur.execute(f"DROP TABLE IF EXISTS {table}")
                  cols = ",".join(
                      [
                          col + " " + tp
                          for _, (col, tp) in enumerate(zip(data.columns, type))
                      ]
                  )
                  cur.execute(f"CREATE TABLE {table} ({cols})")
                  query = f"COPY {table} FROM STDIN (FORMAT TEXT, FREEZE)"
                  with cur.copy(query) as copy:
                      copy.write(
                          "\n".join(
                              [
                                  "\t".join(map(str, row))
                                  for row in data.itertuples(index=False)
                              ]
                          )
                      )
              cur.execute("COMMIT")





  async def test_loadFromParquet(
      af: AgeFreighter,
      chunk_size: int = 96,
      direct_loading: bool = False,
      use_copy: bool = False,
      init_parquet: bool = False,
  ) -> None:
      src_parquet = "actorfilms.parquet"

      if init_parquet:
          pd.read_csv("actorfilms.csv").to_parquet(src_parquet)

      start_time = time.time()
      graph_name = "actorfilms"
      await af.loadFromParquet(
          src_parquet=src_parquet,
          graph_name=graph_name,
          start_v_label="Actor",
          start_id="ActorID",
          start_props=["Actor"],
          edge_type="ACTED_IN",
          end_v_label="Film",
          end_id="FilmID",
          end_props=["Film", "Year", "Votes", "Rating"],
          chunk_size=chunk_size,
          direct_loading=direct_loading,
          drop_graph=True,
          use_copy=use_copy,
      )
      print(
          f"test_loadFromParquet : time, {time.time() - start_time:.2f}, chunk_size: {chunk_size}, direct_loading: {direct_loading}, use_copy: {use_copy}"
      )


  async def main() -> None:
      
      try:
          connection_string = os.environ["PG_CONNECTION_STRING"]
      except KeyError:
          print("Please set the environment variable PG_CONNECTION_STRING")
          return

      try:
          af = await AgeFreighter.connect(dsn=connection_string, max_connections=64)
          
          
          
          
          

          test_set = [
              [False, False],
              [True, False],
              [False, True],
          ]

          chunk_size = 128
          do = True
          if do:
              [
                  await test_loadFromSingleCSV(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print("test_loadFromSingleCSV done\n")

          do = True
          if do:
              [
                  await test_loadFromCSVs(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print("test_loadFromCSVs done\n")

          do = True
          if do:
              [
                  await test_loadFromNetworkx(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print("test_loadFromNetworkx done\n")

          do = True
          if do:
              [
                  await test_loadFromNeo4j(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                      init_neo4j=True,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print(
                  "test_loadFromNeo4j done\n"
                  "##### The duration for test_loadFromNeo4j depends on the performance of the neo4j server. #####\n"
              )

          do = True
          if do:
              [
                  await test_loadFromPGSQL(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                      init_pgsql=True,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print(
                  "test_loadFromPGSQL done\n"
                  "##### The duration for test_loadFromPGSQL depends on the performance of the source pgsql server. #####\n"
              )

          do = True
          if do:
              [
                  await test_loadFromParquet(
                      af,
                      chunk_size=chunk_size,
                      direct_loading=direct_loading,
                      use_copy=use_copy,
                      init_parquet=False,
                  )
                  for idx, (direct_loading, use_copy) in enumerate(test_set)
              ]
              print("test_loadFromParquet done\n")

      finally:
          await af.pool.close()


  if __name__ == "__main__":
      asyncio.run(main())

  ```


  ```sql
  export PG_CONNECTION_STRING="host=your_server.postgres.database.azure.com port=5432 dbname=postgres user=account password=your_password"
  python3 tests/test_agefreighter.py
  ```


  * Apache AGE : https://age.apache.org/
  * GitHub : https://github.com/apache/age
  * Document : https://age.apache.org/age-manual/master/index.html


  MIT License

rpm_license:
  MIT License  Copyright (c) 2024 Rio Fujita  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: 329a3d23a0a8dc34a00cc704da9a083d9e9f135f62a3be13c4af5a65fbd579af
name: python-agefreighter
arch: src
version: 0.4.4
epoch: 0
release: 1
url: https://github.com/rioriost/agefreighter
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agefreighter-0.4.4-1.src.rpm
checksum_type: sha256
summary:
[cell repeats an earlier one in this file: 111 characters]

description:
  a Python package that helps you to create a graph database using Azure Database for PostgreSQL.

  [Apache AGE™](https://age.apache.org/) is a PostgreSQL Graph database compatible with PostgreSQL's distributed assets and leverages graph data structures to analyze and use relationships and patterns in data.

  [Azure Database for PostgreSQL](https://azure.microsoft.com/en-us/services/postgresql/) is a managed database service that is based on the open-source Postgres database engine.

  [Introducing support for Graph data in Azure Database for PostgreSQL (Preview)](https://techcommunity.microsoft.com/blog/adforpostgresql/introducing-support-for-graph-data-in-azure-database-for-postgresql-preview/4275628).


  * Asynchronous connection pool support for psycopg PostgreSQL driver
  * 'direct_loading' option for loading data directly into the graph. If 'direct_loading' is True, the data is loaded into the graph using the 'INSERT' statement, not Cypher queries.
  * 'COPY' protocol support for loading data into the graph. If 'use_copy' is True, the data is loaded into the graph using the 'COPY' protocol.


  * common arguments
    * graph_name (str) : the name of the graph
    * chunk_size (int) : the number of rows to be loaded at once
    * direct_loading (bool) : if True, the data is loaded into the graph using the 'INSERT' statement, not Cypher queries
    * use_copy (bool) : if True, the data is loaded into the graph using the 'COPY' protocol
    * drop_graph (bool) : if True, the graph is dropped before loading the data
  * 'loadFromSingleCSV()' expects a single CSV file that contains the data for the graph as a source.
    *  start_v_label (str): The label of the start vertex.
    *  start_id (str): The ID of the start vertex.
    *  start_props (list): The properties of the start vertex.
    *  edge_type (str): The type of the edge.
    *  end_v_label (str): The label of the end vertex.
    *  end_id (str): The ID of the end vertex.
    *  end_props (list): The properties of the end vertex.
  * 'loadFromCSVs()' expects multiple CSV files, two CSV files for vertices and one CSV file for edges as sources.
    *  vertex_csvs (list): The list of CSV files for vertices.
    *  vertex_labels (list): The list of labels for vertices.
    *  edge_csvs (list): The list of CSV files for edges.
    *  edge_types (list): The list of types for edges.
  * 'loadFromNetworkx()' expects a NetworkX graph object as a source.
    * networkx_graph (DiGraph): The NetworkX graph.
    *  graph_name (str): The name of the graph to load the data into.
    *  id_map (dict): The ID map.
  * 'loadFromNeo4j()' expects a Neo4j as a source.
    *  uri (str): The URI of the Neo4j server.
    *  user (str): The user name of the Neo4j server.
    *  password (str): The password of the Neo4j server.
    *  neo4j_database (str): The name of the Neo4j database.
    *  id_map (dict): The mapping of the vertex label to the vertex ID.
  * 'loadFromPGSQL()' expects a PGSQL as a source.
    *  src_con_string (str): The connection string of the source PostgreSQL database.
    *  src_tables (list): The source tables.
    *  id_map (dict): The ID map.
  * 'loadFromParquet()' expects a Parquet file as a source.
    *  src_parquet (str): The source Parquet file.
    *  start_v_label (str): The label of the start vertex.
    *  start_id (str): The ID of the start vertex.
    *  start_props (list): The properties of the start vertex.
    *  edge_type (str): The type of the edge.
    *  end_v_label (str): The label of the end vertex.
    *  end_id (str): The ID of the end vertex.
    *  end_props (list): The properties of the end vertex.
  * 'loadFromCosmosGremlin()' expects a Cosmos Gremlin API as a source.
    *  cosmos_gremlin_endpoint (str): The endpoint of the Cosmos Gremlin API.
    *  cosmos_gremlin_key (str): The key of the Cosmos Gremlin API.
    *  cosmos_username (str): The username of the Cosmos Gremlin API.
    *  cosmos_pkey (str): The partition key of the Cosmos Gremlin API.
    *  id_map (dict): The ID map.
  * Many more coming soon...


  * 0.4.0 : Added 'loadFromCosmosGremlin()' function.
  * 0.4.1 : Changed base Python version to 3.9 to run on Azure Cloud Shell and Databricks 15.4ML.
  * 0.4.2 : Tuning for 'loadFromCosmosGremlin()' function.
  * 0.4.3 : Standardized the argument names. Enhanced the tests for each functions.
  * 0.4.4 : Performance tuning.



  ```bash
  pip install agefreighter
  ```


  * over Python 3.9
  * This module runs on [psycopg](https://www.psycopg.org/) and [psycopg_pool](https://www.psycopg.org/)
  * Enable the Apache AGE extension in your Azure Database for PostgreSQL instance. Login Azure Portal, go to 'server parameters' blade, and check 'AGE" on within 'azure.extensions' and 'shared_preload_libraries' parameters. See, above blog post for more information.
  * Load the AGE extension in your PostgreSQL database.

  ```sql
  CREATE EXTENSION IF NOT EXISTS age CASCADE;
  ```


  See, [tests/test_agefreighter.py](https://github.com/rioriost/agefreighter/blob/main/tests/test_agefreighter.py) for more details.


  ```sql
  export PG_CONNECTION_STRING="host=your_server.postgres.database.azure.com port=5432 dbname=postgres user=account password=your_password"
  python3 tests/test_agefreighter.py
  ```


  * Apache AGE : https://age.apache.org/
  * GitHub : https://github.com/apache/age
  * Document : https://age.apache.org/age-manual/master/index.html


  MIT License

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


pkgId: 5c2991449196c406e7130a8b0afe80d2eda020481fa9f3d48482b34a30eb3f90
name: python-agefromname
arch: src
version: 0.0.8
epoch: 0
release: 1
url: https://github.com/JasonKessler/agefromname
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agefromname-0.0.8-1.src.rpm
checksum_type: sha256
summary:
  Predict how old someone is from their name and gender, using the baby name data from the US Social Security Administration. Predicts gender from name as well.


pkgId: aedb1ea16c3757e39a2510f98706682aa3b35c667277a61902cfdbf0c38eb64f
name: python-agency-swarm
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: An open source agent orchestration framework built on top of the latest OpenAI Assistants API.
url: https://github.com/VRSEN/agency-swarm
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agency-swarm-0.4.0-1.src.rpm
checksum_type: sha256
description:
  ![Framework](https://firebasestorage.googleapis.com/v0/b/vrsen-ai/o/public%2Fgithub%2Fagency-swarm-logo-white.png?alt=media&token=76d8615d-1211-426a-bd4f-b9098cbfbc43)



  Agency Swarm started as a desire and effort of Arsenii Shatokhin (aka VRSEN) to fully automate his AI Agency with AI. By building this framework, we aim to simplify the agent creation process and enable anyone to create collaborative swarm of agents (Agencies), each with distinct roles and capabilities. By thinking about automation in terms of real world entities, such as agencies and specialized agent roles, we make it a lot more intuitive for both the agents and the users.

  [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1qGVyK-vIoxZD0dMrMVqCxCsgL1euMLKj)
  [![Docs](https://img.shields.io/website?label=Docs&up_message=available&url=https://vrsen.github.io/agency-swarm/)](https://vrsen.github.io/agency-swarm/)
  [![Subscribe on YouTube](https://img.shields.io/youtube/channel/subscribers/UCSv4qL8vmoSH7GaPjuqRiCQ
  )](https://youtube.com/@vrsen/)
  [![Follow on Twitter](https://img.shields.io/twitter/follow/__vrsen__.svg?style=social&label=Follow%20%40__vrsen__)](https://twitter.com/__vrsen__)
  [![Join our Discord!](https://img.shields.io/discord/1200037936352202802?label=Discord)](https://discord.gg/cw2xBaWfFM)
  [![Agents-as-a-Service](https://img.shields.io/website?label=Agents-as-a-Service&up_message=For%20Business&url=https%3A%2F%2Fvrsen.ai)](https://agents.vrsen.ai)



  - **Customizable Agent Roles**: Define roles like CEO, virtual assistant, developer, etc., and customize their functionalities with [Assistants API](https://platform.openai.com/docs/assistants/overview).
  - **Full Control Over Prompts**: Avoid conflicts and restrictions of pre-defined prompts, allowing full customization.
  - **Tool Creation**: Tools within Agency Swarm are created using [Instructor](https://github.com/jxnl/instructor), which provides a convenient interface and automatic type validation.
  - **Efficient Communication**: Agents communicate through a specially designed "send message" tool based on their own descriptions.
  - **State Management**: Agency Swarm efficiently manages the state of your assistants on OpenAI, maintaining it in a special `settings.json` file.
  - **Deployable in Production**: Agency Swarm is designed to be reliable and easily deployable in production environments.




  ```bash
  pip install -U agency-swarm
  ```




  1. **Set Your OpenAI Key**:

      ```python
      from agency_swarm import set_openai_key
      set_openai_key("YOUR_API_KEY")
      ```

  2. **Create Tools**:
  Define your custom tools with [Instructor](https://github.com/jxnl/instructor):
      ```python
      from agency_swarm.tools import BaseTool
      from pydantic import Field

      class MyCustomTool(BaseTool):
          """
          A brief description of what the custom tool does.
          The docstring should clearly explain the tool's purpose and functionality.
          """

          
          example_field: str = Field(
              ..., description="Description of the example field, explaining its purpose and usage."
          )

          
          

          def run(self):
              """
              The implementation of the run method, where the tool's main functionality is executed.
              This method should utilize the fields defined above to perform its task.
              Doc string description is not required for this method.
              """

              
              do_something(self.example_field)

              
              return "Result of MyCustomTool operation"
      ```

      or convert from OpenAPI schemas:

      ```python
      from agency_swarm.tools import ToolFactory
      
      with open("schemas/your_schema.json") as f:
          tools = ToolFactory.from_openapi_schema(
              f.read(),
          )

      
      tools = ToolFactory.from_openapi_schema(
          requests.get("https://api.example.com/openapi.json").json(),
      )
      ```

  3. **Define Agent Roles**: Start by defining the roles of your agents. For example, a CEO agent for managing tasks and a developer agent for executing tasks.

      ```python
      from agency_swarm import Agent

      ceo = Agent(name="CEO",
                  description="Responsible for client communication, task planning and management.",
                  instructions="You must converse with other agents to ensure complete task execution.", # can be a file like ./instructions.md
                  files_folder="./files", # files to be uploaded to OpenAI
                  schemas_folder="./schemas", # OpenAPI schemas to be converted into tools
                  tools=[MyCustomTool],
                  temperature=0.5, # temperature for the agent
                  max_prompt_tokens=25000, # max tokens in conversation history
                  )
      ```

      Import from existing agents:

     ```bash
     agency-swarm import-agent --name "Devid" --destination "./"
     ```

     This will import Devid (Software Developer) Agent locally, including all source code files, so you have full control over your system. Currently, available agents are: `Devid`, `BrowsingAgent`.



  4. **Define Agency Communication Flows**:
  Establish how your agents will communicate with each other.

      ```python
      from agency_swarm import Agency
      
      from Developer import Developer
      from VirtualAssistant import VirtualAssistant

      dev = Developer()
      va = VirtualAssistant()

      agency = Agency([
             ceo,  # CEO will be the entry point for communication with the user
             [ceo, dev],  # CEO can initiate communication with Developer
             [ceo, va],   # CEO can initiate communication with Virtual Assistant
             [dev, va]    # Developer can initiate communication with Virtual Assistant
           ],
           shared_instructions='agency_manifesto.md', #shared instructions for all agents
           temperature=0.5, # default temperature for all agents
           max_prompt_tokens=25000 # default max tokens in conversation history
      )
      ```

       In Agency Swarm, communication flows are directional, meaning they are established from left to right in the agency_chart definition. For instance, in the example above, the CEO can initiate a chat with the developer (dev), and the developer can respond in this chat. However, the developer cannot initiate a chat with the CEO. The developer can initiate a chat with the virtual assistant (va) and assign new tasks.

  5. **Run Demo**:
  Run the demo to see your agents in action!

      Web interface:

      ```python
      agency.demo_gradio(height=900)
      ```

      Terminal version:

      ```python
      agency.run_demo()
      ```

      Backend version:

      ```python
      completion_output = agency.get_completion("Please create a new website for our client.")
      ```





  The `genesis` command starts the genesis agency in your terminal to help you create new agencies and agents.



  ```bash
  agency-swarm genesis [--openai_key "YOUR_API_KEY"]
  ```

  Make sure to include:
  - Your mission and goals.
  - The agents you want to involve and their communication flows.
  - Which tools or APIs each agent should have access to, if any.



  This CLI command allows you to import existing agents from local files into your agency.



  ```bash
  agency-swarm import-agent --name "AgentName" --destination "/path/to/directory"
  ```

  To check available agents, simply run this command without any arguments.



  This CLI command simplifies the process of creating a structured environment for each agent.



  ```bash
  agency-swarm create-agent-template --name "AgentName" --description "Agent Description" [--path "/path/to/directory"] [--use_txt]
  ```



  When you run the `create-agent-template` command, it creates the following folder structure for your agent:

  ```
  /your-specified-path/
  │
  ├── agency_manifesto.md or .txt # Agency's guiding principles (created if not exists)
  └── AgentName/                  # Directory for the specific agent
      ├── files/                  # Directory for files that will be uploaded to openai
      ├── schemas/                # Directory for OpenAPI schemas to be converted into tools
      ├── tools/                  # Directory for tools to be imported by default.
      ├── AgentName.py            # The main agent class file
      ├── __init__.py             # Initializes the agent folder as a Python package
      ├── instructions.md or .txt # Instruction document for the agent
      └── tools.py                # Custom tools specific to the agent

  ```

  This structure ensures that each agent has its dedicated space with all necessary files to start working on its specific tasks. The `tools.py` can be customized to include tools and functionalities specific to the agent's role.



  1. [x] Creation of agencies that can autonomously create other agencies.
  2. [x] Asynchronous communication and task handling.
  3. [ ] Inter-agency communication for a self-expanding system.



  For details on how to contribute you agents and tools to Agency Swarm, please refer to the [Contributing Guide](CONTRIBUTING.md).



  Agency Swarm is open-source and licensed under [MIT](https://opensource.org/licenses/MIT).





  If you need help creating custom agent swarms for your business, check out our [Agents-as-a-Service](https://agents.vrsen.ai/) subscription, or schedule a consultation with me at https://calendly.com/vrsen/ai-project-consultation

rpm_license:
  MIT License  Copyright (c) 2023 Arsenii Shatokhin  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: e6292ddabbf1d0fb0c836c2fc2354e19fde2150c08ba7c59d1b135ffebacd1a5
name: python-agent-bdi
arch: src
version: 2.5.2
epoch: 0
release: 1
summary: Agent BDI framework
url: https://github.com/mfshiu/abdi.git
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-bdi-2.5.2-1.src.rpm
checksum_type: sha256
description:
  In this study, inspired by the physiological operation of the human body, an efficient and resilient software framework was developed to aid in the integration of mature AI technologies, allowing them to coordinate with one another to accomplish more advanced goals. A navigation system for the visually impaired was then developed to validate the framework, with promising experimental results. This framework can be applied to other types of AI systems.



  1. Install the required packages.
  ````
  pip install -r requirements.txt
  ````
  2. Create config.py, rewite the MQTT settings.
  ````
  cp config.sample.py config.py
  ````
  3. Start the framework.
  ````
  python start.py
  ````



  The class diagram of the integration of agents and coordination. HolonicAgent represents the core, and HeadAgents and BodyAgents represent the collection of head agents and subagents, respectively. MQTT is the fundamental communication protocol for agents in the global circulation system, and MqttClient is a private member of HolonicAgent, which allows the agent to have built-in MQTT connection and reception capabilities.

  All agents inherit from HolonicAgent to form a hierarchical structure, and they use the DDS to achieve neural message transmission depending on their specific behavior. Each super-agent is a DDS domain that publishes or subscribes to related topics with the required QoS, such as the DEADLINE policy to confirm the date of the data or the TRANSPORT_PRIORITY policy to define the transmission priority order, in order to achieve the purpose of a specific agent.
  <figure>
      <img src="https://i.imgur.com/9vIa7JH.png" height=500>
      <figcaption>Class diagram of integration</figcaption>
  </figure>



  According to the sequence diagram depicted in below, the DDS and MQTT serve to transmit messages for the agents. Action 1 entails generating an independent process immediately after the root agent is initialized. Action 2 entails subscribing to or publishing relevant topics within the QoS constraints. Action 3 entails recursively calling all the subagents to initiate the action. The agent main action is performed in a separate process of Action 2 until it is notified of its termination. Finally, Action 4 entails generating a global broadcast with MQTT, with a system termination notification serving as an example in this study.
  <figure>
      <img src="https://i.imgur.com/6lA3w1X.png" height=500>
      <figcaption>Sequence Diagram of Integration</figcaption>
  </figure>


pkgId: 03f08903667dca4310c0e8f9730b5d60a2f74476b890b21a52fae0dbd1c39f15
name: python-agent-connect
arch: src
version: 0.2.0
epoch: 0
release: 1
url: https://agent-network-protocol.com/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-connect-0.2.0-1.src.rpm
checksum_type: sha256
summary:
  An SDK that enables agents to connect with each other, allowing them to perform identity authentication, end-to-end encrypted communication, automatic protocol negotiation based on LLMs, and efficient data exchange.

description:
  [中文版](README.cn.md)



  AgentConnect is an open-source implementation of the [Agent Network Protocol (ANP)](https://github.com/chgaowei/AgentNetworkProtocol).



  In this new era of rapid AI development, we are entering a new epoch of agent networks. Imagine the future: your personal assistant agent seamlessly communicates with restaurant agents when ordering meals; your smart home agent collaborates with energy management agents to optimize power usage; your investment advisor agent exchanges real-time information with global market analysis agents... This is the upcoming era of agent networks.

  However, as Bill Gates mentioned in [a blog post](https://www.gatesnotes.com/AI-agents), there is currently no standard protocol that allows agents to communicate with each other. This is the problem that the Agent Network Protocol (ANP) aims to solve.

  The vision of the Agent Network Protocol (ANP) is to **define how agents connect with each other and build an open, secure, and efficient collaboration network for billions of agents**. Just as the development of Internet standard protocols enabled the information age of the past three decades, we believe that in the near future, billions of agents will build an unprecedented collaboration network through ANP, creating greater value than the existing Internet. Empowered by AI technology and ANP, the agent network will eventually evolve into a **self-organizing, self-negotiating** efficient collaboration network - an incredibly exciting future.



  Agent Network Protocol (ANP) aims to address three major challenges in connectivity:

  - How agents authenticate each other to allow any two agents to connect
  - How agents establish end-to-end encrypted communication to ensure communication security
  - How agents efficiently exchange data to enhance collaboration efficiencynegotiation between agents



  To address these three challenges, the Agent Network Protocol (ANP) is designed as a three-layer architecture, consisting of (from bottom to top) the Identity and Encrypted Communication Layer, Meta-Protocol Layer, and Application Protocol Layer, as shown below:

  <p align="center">
    <img src="/images/protocol-layer-design.png" width="50%" alt="Protocol Layer Design"/>
  </p>



  The technical architecture of AgentConnect is shown in the figure below:

  <p align="center">
    <img src="/images/agent-connect-architecture.png" width="50%" alt="Project Architecture"/>
  </p>

  Corresponding to the three-layer architecture of the Agent Network Protocol, AgentConnect mainly includes the following parts:

  1. **Identity Authentication Module and End-to-End Encryption Module**
     Mainly implements identity authentication and end-to-end encrypted communication based on W3C DID, including the generation, verification, and retrieval of DID documents, as well as the implementation of end-to-end encrypted communication schemes based on DID and ECDHE (Elliptic Curve Diffie-Hellman Ephemeral).

  2. **Meta-Protocol Module**
     The meta-protocol module needs to be implemented based on LLM (Large Language Model) and meta-protocol, mainly including application protocol negotiation, protocol code implementation, protocol debugging, and protocol processing based on the meta-protocol.

  3. **Application Layer Protocol Integration Framework**
     The main purpose is to manage the protocol specification documents and protocol codes for communication with other agents, including application protocol loading, application protocol unloading, application protocol configuration, and application protocol processing. Using this framework, agents can easily and on-demand load the required ready-made protocols, speeding up the agent protocol negotiation process.

  In addition to the above functions, AgentConnect will also focus on performance and multi-platform support in the future:

  - **Performance**: As a basic code library, we hope to provide extreme performance, and the core part of the code will be rewritten in Rust in the future.
  - **Multi-Platform**: Currently supports mac, Linux, and Windows, and will support mobile and browser platforms in the future.



  - email: chgaowei@gmail.com
  - Discord: [https://discord.gg/SuXb2pzqGy](https://discord.gg/SuXb2pzqGy)
  - Official Website: [https://www.agent-network-protocol.com/](https://www.agent-network-protocol.com/)



  Whether it is the protocol or the open-source code implementation, we are advancing step by step in the following order:

  - Build the identity authentication and end-to-end encrypted communication protocol and implementation. This is the foundation and core of our entire project, and the current protocol design and code are basically complete.
  - Design and implement the meta-protocol and meta-protocol code. This will help the agent network evolve into a self-organizing, self-negotiating efficient collaborative network, which is what we are currently working on. This will be an exciting feature, and we expect to release the first version soon.
  - Develop the application layer protocol integration framework. This will help the Agent Network Protocol (ANP) provide services for agents in various scenarios.

  In addition, we will follow the principle of overall first, then details. In the early stages, we will focus on building the overall architecture, constructing an overall outline for each major module, and getting it up and running quickly, rather than building individual exquisite but non-functional modules.

  To promote the Agent Network Protocol (ANP) as an industry standard, we will form the ANP Standardization Committee at an appropriate time, dedicated to promoting ANP as an industry standard recognized by international standardization organizations such as W3C.

  Below are the current development features and progress of AgentConnect:

  - [x] Initial version development completed, supporting single-node mode and hosted mode
  - [ ] Replace the core connection protocol with a binary format instead of the current JSON format to improve transmission efficiency
  - [ ] Support more data formats: files (images, videos, audio), live streaming, real-time communication (RTC), etc.
  - [ ] Design and implement the meta-protocol and layer0 protocol for collaboration between agents based on the Agent Network Protocol
  - [ ] Compatible with DID web methods, W3C Verifiable Credentials (VC), and support transactions between DIDs
  - [ ] Rewrite AgentConnect in Rust to improve performance and support more platforms: macOS, Linux, iOS, Android
  - [ ] Support more encryption algorithms
  - [ ] Explore a fully blockchain-based solution



  ```bash
  pip install agent-connect
  ```



  After installing the agent-connect library, you can run our demo to experience the powerful features of agent-connect. We currently provide two modes: single-node mode and hosted mode.



  In single-node mode, you can complete DID identity verification and encrypted communication without any third-party services.

  You can run the simple_node code in the examples directory. First start Alice's node, then start Bob's node. Bob's node will request Alice's DID document based on Alice's DID, and establish an encrypted connection channel with Alice based on the public key and message service address in the DID document, sending an encrypted message. When Alice's node receives the message, it will decrypt the message and send an encrypted message back to Bob.

  1. Start Alice's node
  ```bash
  python simple_node_alice.py
  ```

  2. Start Bob's node
  ```bash
  python simple_node_bob.py
  ```



  In hosted mode, we provide a DID server to host user's DID documents and forward messages between different DIDs.

  You can run the sample code in the examples directory. First generate the alice and bob's DID documents, and save alice's DID document to the DID server, then bob can connect to alice's DID for end-to-end encrypted communication.

  1. Generate two DID documents alice.json and bob.json, save them to the specified files, and register them to the DID server
  ```bash
  python sample_did.py alice.json
  python sample_did.py bob.json
  ```

  2. Start Alice's demo
  ```bash
  python sample_alice.py alice.json
  ```

  3. Start Bob's demo
  ```bash
  python sample_bob.py bob.json
  ```

  You can see from the logs that Alice and Bob successfully connected and performed end-to-end encrypted communication.




  ```bash
  python setup.py sdist bdist_wheel
  twine upload dist/*
  ```



  Welcome to contribute to this project, detailed information please see [CONTRIBUTING.md](CONTRIBUTING.md).



  This project is open-sourced under the MIT license. For more information, please see the [LICENSE](LICENSE) file.


pkgId: 841af259ec21c2e4dfda8b9aef2fe05e379787ffac901a876a929fd219811766
name: python-agent-protocol
arch: src
version: 1.0.2
epoch: 0
release: 1
summary: API for interacting with Agents that use the Agent Protocol
url: https://agentprotocol.ai/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-protocol-1.0.2-1.src.rpm
checksum_type: sha256
description:
  Reference implementation of the Agent Protocol in Python by the AI Engineers Foundation (AIEF). This SDK allows you to easily wrap your agent in a webserver compatible with the protocol - you only need to define the task and step handlers for your agent.



  ```sh
  pip install agent-protocol
  ```

  Then add the following code to your agent:

  ```python
  from agent_protocol import Agent, Step, Task


  async def task_handler(task: Task) -> None:
      
      await Agent.db.create_step(task.task_id, ...)


  async def step_handler(step: Step) -> Step:
      
      if step.name == "print":
          print(step.input)
          step.is_last = True

      step.output = "Output from the agent"
      return step


  if __name__ == "__main__":
      
      Agent.setup_agent(task_handler, step_handler).start()
  ```





  By default, the SDK stores data in memory. You can customize the database by setting db to your own database object.

  ```python
  Agent.db = your_database
  ```

  The database object must implement the methods from [db.py](./agent_protocol/db.py).



  You can also add your own routes to the server. For example:

  ```python
  from agent_protocol import Agent, router
  from fastapi import APIRouter

  my_router = APIRouter()


  @my_router.get("/hello")
  async def hello():
      return {"hello": "world"}

  my_router.include_router(router)

  task_handler = ...
  step_handler = ...
  Agent.setup_agent(task_handler, step_handler).start(router=my_router)
  ```



  You can test the compliance of your agent using the following script:
  ```bash
  URL=http://127.0.0.1:8000 bash -c "$(curl -fsSL https://agentprotocol.ai/test.sh)"
  ```

  What this does is run a series of GET and POST requests against your agent to verify that it's compliant with the Agent Protocol.



  You can find more info and examples in the [docs](https://agentprotocol.ai/sdks/python).



  If you want to use the agent_protocol package from the cloned repository, you should be able to use poetry to set it up, like below.

  ```bash
  git clone git@github.com:AI-Engineers-Foundation/agent-protocol.git
  cd agent-protocol/sdk/python
  poetry install
  poetry run python examples/minimal.py
  ```

  Feel free to open [an issue](https://github.com/AI-Engineers-Foundation/agent-protocol/issues) if you run into any problems!


pkgId: f05c11646984f2b4f17eb22e878f49ea6ddc843b2d853bb715b8c968d8b38a2a
name: python-agent-protocol-client
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: Agent Communication Protocol Client
url: https://agentprotocol.ai/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-protocol-client-1.1.0-1.src.rpm
checksum_type: sha256
description:
  *AgentApi* | [**create_agent_task**](agent_protocol_client/docs/AgentApi.md#create_agent_task) | **POST** /ap/v1/agent/tasks | Creates a task for the agent.
  *AgentApi* | [**download_agent_task_artifact**](agent_protocol_client/docs/AgentApi.md#download_agent_task_artifact) | **GET** /ap/v1/agent/tasks/{task_id}/artifacts/{artifact_id} | Download a specified artifact.
  *AgentApi* | [**execute_agent_task_step**](agent_protocol_client/docs/AgentApi.md#execute_agent_task_step) | **POST** /ap/v1/agent/tasks/{task_id}/steps | Execute a step in the specified agent task.
  *AgentApi* | [**get_agent_task**](agent_protocol_client/docs/AgentApi.md#get_agent_task) | **GET** /ap/v1/agent/tasks/{task_id} | Get details about a specified agent task.
  *AgentApi* | [**get_agent_task_step**](agent_protocol_client/docs/AgentApi.md#get_agent_task_step) | **GET** /ap/v1/agent/tasks/{task_id}/steps/{step_id} | Get details about a specified task step.
  *AgentApi* | [**list_agent_task_artifacts**](agent_protocol_client/docs/AgentApi.md#list_agent_task_artifacts) | **GET** /ap/v1/agent/tasks/{task_id}/artifacts | List all artifacts that have been created for the given task.
  *AgentApi* | [**list_agent_task_steps**](agent_protocol_client/docs/AgentApi.md#list_agent_task_steps) | **GET** /ap/v1/agent/tasks/{task_id}/steps | List all steps for the specified task.
  *AgentApi* | [**list_agent_tasks**](agent_protocol_client/docs/AgentApi.md#list_agent_tasks) | **GET** /ap/v1/agent/tasks | List all tasks that have been created for the agent.
  *AgentApi* | [**upload_agent_task_artifacts**](agent_protocol_client/docs/AgentApi.md#upload_agent_task_artifacts) | **POST** /ap/v1/agent/tasks/{task_id}/artifacts | Upload an artifact for the specified task.

   - [Artifact](agent_protocol_client/docs/Artifact.md)
   - [GetAgentTask404Response](agent_protocol_client/docs/GetAgentTask404Response.md)
   - [Pagination](agent_protocol_client/docs/Pagination.md)
   - [Step](agent_protocol_client/docs/Step.md)
   - [StepRequestBody](agent_protocol_client/docs/StepRequestBody.md)
   - [Task](agent_protocol_client/docs/Task.md)
   - [TaskArtifactsListResponse](agent_protocol_client/docs/TaskArtifactsListResponse.md)
   - [TaskListResponse](agent_protocol_client/docs/TaskListResponse.md)
   - [TaskRequestBody](agent_protocol_client/docs/TaskRequestBody.md)
   - [TaskStepsListResponse](agent_protocol_client/docs/TaskStepsListResponse.md)


pkgId: 6381e758fa40d0444e26a52aecffeaded2d2ab732fda6b30e42d1402f2ef98e3
name: python-agent-search
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: AgentSearch: An open source framework and dataset for webscale local search.
url: https://pypi.org/project/agent-search/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-search-0.1.0-1.src.rpm
checksum_type: sha256
description:
  ![AgentSearch Banner](https://github.com/SciPhi-AI/agent-search/assets/68796651/8d0424e6-84e3-42f6-9893-3d63f9b2a58d)

  AgentSearch is a framework for powering search agents by seamlessly integrating LLM technologies from various providers with different search engines. This integration enables search agents to perform a wide range of functions through Retrieval-Augmented Generation (RAG), including summarizing search results, generating new queries, and retrieving detailed downstream results.



  - **Search Agent Integration**: Effortlessly build a search agent by connecting any search-specialized LLM, such as [Sensei-7B](https://huggingface.co/SciPhi/Sensei-7B-V1), with a supported search engine.
  - **Customizable Search**: Utilize the [AgentSearch dataset](https://huggingface.co/datasets/SciPhi/AgentSearch-V1) in conjunction with this framework to deploy a customizable local search engine.
  - **API Endpoint Integration**: Seamlessly integrate with a variety of hosted provider APIs for diverse search solutions, offering ease of use and flexibility, including Bing, SERP API, and AgentSearch. Additionally, support is provided for LLMs from SciPhi, HuggingFace, OpenAI, Anthropic, and more.





  ```bash
  pip install agent-search
  ```



  Get your free API key from [SciPhi](https://www.sciphi.ai/signup) and set it in your environment:

  ```bash
  export SCIPHI_API_KEY=$MY_SCIPHI_API_KEY
  ```



  Call a pre-configured search agent endpoint:

  ```python

  from agent_search import SciPhi

  client = SciPhi()


  agent_summary = client.get_search_rag_response(query='latest news', search_provider='bing', llm_model='SciPhi/Sensei-7B-V1')
  print(agent_summary)

  ```

  Standalone searches and from the AgentSearch search engine are supported:

  ```python

  from agent_search import SciPhi

  client = SciPhi()


  search_response = client.search(query='Quantum Field Theory', search_provider='agent-search')

  print(search_response)

  ```

  Code your own custom search agent workflow:

  ```python

  from agent_search import SciPhi

  client = SciPhi()


  instruction = "Your task is to perform retrieval augmented generation (RAG) over the given query and search results. Return your answer in a json format that includes a summary of the search results and a list of related queries."
  query = "What is Fermat's Last Theorem?"


  search_response = client.search(query=query, search_provider='agent-search')
  search_context = "\n\n".join(
        f"{idx + 1}. Title: {item['title']}\nURL: {item['url']}\nText: {item['text']}"
        for idx, item in enumerate(search_response)
  ).encode('utf-8')


  json_response_prefix = '{"summary":'


  formatted_prompt = f"### Instruction:{instruction}\n\nQuery:\n{query}\n\nSearch Results:\n${search_context}\n\nQuery:\n{query}\n### Response:\n{json_response_prefix}",


  completion = json_response_prefix + client.completion(formatted_prompt, llm_model_name="SciPhi/Sensei-7B-V1")

  print(completion)




  ```



  - **Engage with Us:** Join our [Discord community](https://discord.gg/mN4kWbsgRu) for discussions and updates.
  - **Feedback & Inquiries:** Contact us via email for personalized support.



  - Execute commands from the root directory of the AgentSearch project.
  - User Guide coming soon!


pkgId: 5466506cd8520694acec1c9063b870f2e176346b834a45f628ca123b90a3c58f
name: python-agent-torch
arch: src
version: 0.4.0
epoch: 0
release: 1
summary: large population models
url: https://lpm.media.mit.edu/docs
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-agent-torch-0.4.0-1.src.rpm
checksum_type: sha256
description:
  <h1 align="center">
    <a href="https://lpm.media.mit.edu/" target="_blank">
      Large Population Models
    </a>
  </h1>

  <p align="center">
    <strong>making complexity simple</strong><br>
    differentiable learning over millions of autonomous agents
  </p>

  <p align="center">
    <a href="https://github.com/AgentTorch/AgentTorch/blob/master/license.md" target="_blank">
      <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="Released under the MIT license." />
    </a>

    <a href="https://agenttorch.github.io/AgentTorch/" target="_blank">
      <img src="https://img.shields.io/badge/Quick%20Introduction-green" alt="Documentation" />
    </a>
    <a href="https://twitter.com/intent/follow?screen_name=ayushchopra96" target="_blank">
      <img src="https://img.shields.io/twitter/follow/ayushchopra96?style=social&label=Get%20in%20Touch" alt="Get in Touch" />
    </a>
    <a href="https://join.slack.com/t/largepopulationmodels/shared_invite/zt-2jalzf9ki-n9nXG5FryVSMaPmEL7Wm2w" target="_blank">
       <img src="https://img.shields.io/badge/Slack-4A154B?logo=slack&logoColor=white" alt="Join Us"/>
    </a>
  </p>

  Large Population Models (LPMs) help simulate million-size populations by
  designing realistic environments and capturing expressive indvidual behavior.
  Our goal is to "re-invent the census": built entirely in simulation, captured
  passively and used to protect country-scale populations. Our research is early
  but actively making an impact - winning awards at AI conferences and being
  deployed across the world. Learn more about LPMs
  [here](lpm.media.mit.edu/research.pdf).

  AgentTorch LPMs have four design principles:

  - **Scalability**: AgentTorch models can simulate country-size populations in
    seconds on commodity hardware.
  - **Differentiability**: AgentTorch models can differentiate through simulations
    with stochastic dynamics and conditional interventions, enabling
    gradient-based learning.
  - **Composition**: AgentTorch models can compose with deep neural networks (eg:
    LLMs), mechanistic simulators (eg: mitsuba) or other LPMs. This helps describe
    agent behavior using LLMs, calibrate simulation parameters and specify
    expressive interaction rules.
  - **Generalization**: AgentTorch helps simulate diverse ecosystems - humans in
    geospatial worlds, cells in anatomical worlds, autonomous avatars in digital
    worlds.

  AgentTorch is building the future of decision engines - inside the body, around
  us and beyond!

  https://github.com/AgentTorch/AgentTorch/assets/13482350/4c3f9fa9-8bce-4ddb-907c-3ee4d62e7148



  > AgentTorch is meant to be used in a Python 3.9 environment. If you have not
  > installed Python 3.9, please do so first from
  > [python.org/downloads](https://www.python.org/downloads/).

  Install the framework using `pip`, like so:

  ```sh
  > pip install git+https://github.com/agenttorch/agenttorch
  ```

  > Some models require extra dependencies that have to be installed separately.
  > For more information regarding this, as well as the hardware the project has
  > been run on, please see [`docs/install.md`](docs/install.md).



  The following section depicts the usage of existing models and population data
  to run simulations on your machine. It also acts as a showcase of the Agent
  Torch API.

  A Jupyter Notebook containing the below examples can be found
  [here](docs/tutorials/using-models/walkthrough.ipynb).



  ```py

  from agent_torch.models import covid
  from agent_torch.populations import astoria


  from agent_torch.core.executor import Executor
  from agent_torch.core.dataloader import LoadPopulation


  from torch.optim import SGD

  loader = LoadPopulation(astoria)
  simulation = Executor(model=covid, pop_loader=loader)

  simulation.init(SGD)
  simulation.execute()
  ```





  A detailed explanation of the architecture of the Agent Torch framework can be
  found [here](docs/architecture.md).



  A tutorial on how to create a simple predator-prey model can be found in the
  [`tutorials/`](docs/tutorials/) folder.



  Thank you for your interest in contributing! You can contribute by reporting and
  fixing bugs in the framework or models, working on new features for the
  framework, creating new models, or by writing documentation for the project.

  Take a look at the [contributing guide](docs/contributing.md) for instructions
  on how to setup your environment, make changes to the codebase, and contribute
  them back to the project.



  > **AgentTorch models are being deployed across the globe.**

  ![Impact](docs/media/impact.png)


