# packages

pkgId: d14d835cd1d8af31f6c5992ea79dfdeccfeb5ba26f351ae7ba6cb10872974df4
name: python-3
arch: noarch
version: 0.0.0
epoch: 0
release: 1
summary: Hey
url: https://abranhe.com
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a60-1.compass-ci.net
rpm_sourcerpm: python-3-0.0.0-1.src.rpm
location_href: Packages/python-3-0.0.0-1.noarch.rpm
checksum_type: sha256
description:
  |[![Carlos Abraham Logo](https://avatars3.githubusercontent.com/u/21347264?s=50&v=4)](https://19cah.com)|
  | :-: |
  | [Carlos Abraham](https://github.com/abranhe) |


pkgId: ba6a8c98f0bc99aed41ed8261a6cc9bd6736fa5f61233b7daaeddc3b2d0e5007
name: python-310-notebook
arch: noarch
version: 0.1.0
epoch: 0
release: 1
summary: A JupyterLab extension.
url: https://github.com/pooriyapfn/jupyterlab_extension.git
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a31-1.compass-ci.net
rpm_sourcerpm: python-310-notebook-0.1.0-1.src.rpm
location_href: Packages/python-310-notebook-0.1.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Github Actions Status](https://github.com/pooriyapfn/jupyterlab_extension.git/workflows/Build/badge.svg)](https://github.com/pooriyapfn/jupyterlab_extension.git/actions/workflows/build.yml)
  A JupyterLab extension.



  - JupyterLab >= 3.0



  To install the extension, execute:

  ```bash
  pip install 310_notebook
  ```



  To remove the extension, execute:

  ```bash
  pip uninstall 310_notebook
  ```





  Note: You will need NodeJS to build the extension package.

  The `jlpm` command is JupyterLab's pinned version of
  [yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use
  `yarn` or `npm` in lieu of `jlpm` below.

  ```bash



  pip install -e .

  jupyter labextension develop . --overwrite

  jlpm build
  ```

  You can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension.

  ```bash

  jlpm watch

  jupyter lab
  ```

  With the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt).

  By default, the `jlpm build` command generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command:

  ```bash
  jupyter lab build --minimize=False
  ```



  ```bash
  pip uninstall 310_notebook
  ```

  In development mode, you will also need to remove the symlink created by `jupyter labextension develop`
  command. To find its location, you can run `jupyter labextension list` to figure out where the `labextensions`
  folder is located. Then you can remove the symlink named `310_notebook` within that folder.





  This extension is using [Jest](https://jestjs.io/) for JavaScript code testing.

  To execute them, execute:

  ```sh
  jlpm
  jlpm test
  ```



  This extension uses [Playwright](https://playwright.dev/docs/intro/) for the integration tests (aka user level tests).
  More precisely, the JupyterLab helper [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) is used to handle testing the extension in JupyterLab.

  More information are provided within the [ui-tests](./ui-tests/README.md) README.



  See [RELEASE](RELEASE.md)


pkgId: 340955cfe4ea26458d2f7e94ae79e77aa83a948cdd41b69a7aec5247c06c5af4
name: python-AlphaZero-GameEnv
arch: noarch
version: 1.1.4.0
epoch: 0
release: 1
summary: alphazero_game_env
url: https://github.com/Michi-123/AlphaZeroGameEnv
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-AlphaZero-GameEnv-1.1.4.0-1.src.rpm
location_href: Packages/python-AlphaZero-GameEnv-1.1.4.0-1.noarch.rpm
checksum_type: sha256
description:
  ![image](https://github.com/Michi-123/AlphaZeroCode/assets/26673104/3b773129-74d2-4e11-bcab-d39f17c10980)
  https://www.udemy.com/course/alphazero/<br>
  AlphaZeroのためのゲーム環境です。セルフプレイでも使用します。<br>
  <h1>AlphaZeroの意外な構造</h1>
  <h2>またはAlphaGoは如何にして棋譜データの利用を止めて自分の経験に頼るようになったか</h2>
  囲碁AIのAlphaGoから、人の知識なしでゼロから学習に成功した強化学習モデル のゲームＡＩ「AlphaZero」 を、初心者・中級者向けに、イラストなどで解説していきます。AlphaZeroは、将棋ＡＩとしても成果を出しています。<br>

  <pre>
  pip install AlphaZero-GameEnv
  </pre>
  <pre>
  import alphazero_game_env
  </pre>


pkgId: 44eed086b18079a262d8e9d87361452d60b934843d827d9e5a0c635718fcea8c
name: python-Ambit-Stochastics
arch: noarch
version: 1.0.7
epoch: 0
release: 1
summary: A pacakge dedicated to the study of Ambit fields and Trawl processes
url: https://github.com/danleonte/Ambit_Stochastics
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-Ambit-Stochastics-1.0.7-1.src.rpm
location_href: Packages/python-Ambit-Stochastics-1.0.7-1.noarch.rpm
checksum_type: sha256
description:
  A repository dedicated to the study of Ambit fields and Trawl processes. The library can be downloaded from https://pypi.org/project/Ambit-Stochastics/.

  The `Trawl processes example usage` and `Simple ambit field example usage` jupyter notebooks in the git root folder explains the functionality of the library. The full documentation is available at https://danleonte.github.io/Ambit_Stochastics/index.html


pkgId: e4c5b55d004d084ef951c35daa62cd6e3b9d9bc065bbec3abb2644ec93f3ac2c
name: python-AthenaColor
arch: noarch
version: 7.0.2
epoch: 0
release: 1
summary: Package to support full usage of RGB colors in the console
url: https://github.com/DirectiveAthena/AthenaColor
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-AthenaColor-7.0.2-1.src.rpm
location_href: Packages/python-AthenaColor-7.0.2-1.noarch.rpm
checksum_type: sha256
description:
  A *No Dependency* Python package do display text styling in a console.
  - Next to the full ability to use ANSI styling options, commonly used HTML color names are defined as default colors for Fore- and Background color styling
    - The color option are available permitting the console can take advantage of RGB ANSI codes
    - For a full list of all 140 out of the box available colors, go to [the full documentation](https://publish.obsidian.md/directiveathena/Content/Programming/AthenaColor/Documentation/HTML+Named+Colors)
    - By using the `RGB` object, you have access to print any RGB color to the console you desire
  - Uses a similar syntax to Colorama, but also allows for nested function patterns

  - Supported Python versions: **3.7**, **3.8**, **3.9**, **3.10**
    - Other older versions of Python are not currently supported.


pkgId: fe3a028f764facc628af65394e9bac6627a0979fa2a884a7707dccccd601c7ec
name: python-AveyTense
arch: noarch
version: 0.3.30
epoch: 0
release: 1
summary: Library written in Python, includes several extensions for inbuilt Python solutions
url: https://aveyzan.glitch.me/tense/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-AveyTense-0.3.30-1.src.rpm
location_href: Packages/python-AveyTense-0.3.30-1.noarch.rpm
checksum_type: sha256
description:
      It is highly recommended to continuously switch to the latest versions once they are out.
      I documented most of declarations in the files included in this project, and whenever there
      is need in seeing, what changed, there is text file ``./tense/information/changes.txt``, in an
      archive you normally download on `this page <https://aveyzan.glitch.me/tense>`_, but later only text file
      may be downloaded, since I learned, how to update this project on PyPI.

      To begin, do ``pip install AveyTense`` (assuming you have Python 3.9 or greater; if you *don't*
      have recent version, visit this page and specify the version, like ``pip install AveyTense==0.3.29``).
      Last thing is creating a new Python file and writing following ``import`` statement:
      ::

          from tense import * # or "import tense as ts", no matter which way you prefer


      .. note:: If there is no ``discord`` or ``typing_extensions`` module, code of Tense will install them
          both automatically after compilation attempt.

      Enjoy!


      Features:

      - the ``Color`` class for colorizing output text on the console
      - the ``Abstract`` class (equivalent to ``abc.ABCMeta`` metaclass) for creating non-instantiable classes
      - the ``Final`` class (equivalent to ``typing.final()`` decorator) for creating non-inheritable classes
      - the ``Frozen`` class (equivalent to ``dataclasses.dataclass(frozen = True)``) for creating immutable objects
      - the ``abroad()`` function being more developed version of inbuilt function ``range()``
      - the ``reckon()`` function being more developed version of inbuilt function ``len()``
      - the ``ChangeVar`` class for creating sentinels inside ``while`` loops
      - the ``FinalVar`` class for creating final variables (referring to ``typing.Final``)
      - the ``Tense`` class featuring methods extending possibilities of ``abroad()`` function, math methods, time methods,
          and methods for tossing up (randomizing) results


pkgId: 17ac52df70383bde7a5c8cb6c4cfeb516e5633fe2128ef9fc1da03009d36f9a5
name: python-AveyTense
arch: noarch
version: 0.3.31
epoch: 0
release: 1
summary: Library written in Python, includes several extensions for inbuilt Python solutions
url: https://aveyzan.glitch.me/tense/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-AveyTense-0.3.31-1.src.rpm
location_href: Packages/python-AveyTense-0.3.31-1.noarch.rpm
checksum_type: sha256
description:
  **AveyTense** (formally *Tense*) is a library written by Aveyzan using Python, which provides especially extensions to inbuilt Python solutions.




  - the `abroad()` function being extended version of `range()` inbuilt Python function
  - the `reckon()` function being extended version of `len()` inbuilt Python function
  - the `Math` class featuring same and more math methods than `math` inbuilt Python module
  - the `Time` class featuring several time management methods using `datetime` inbuilt Python module
  - the `Tense` class featuring all methods from `Math` and `Time`, as well as `probability()` class method,
    methods for disassembling code, randomizing results, personalized `print()` and `input()` inbuilt functions
    implementations, methods for checking and converting
  - the `Color` class, which colorizes the output and features several font decorations as in ANSI, and supports
    `RGB` and `CMYK` class instances



  - the `tense.constants` submodule featuring some math constants, as well as some from gaming and Tense versions
  - the `tense.fencord` submodule featuring several Discord.py solutions
  - the `tense.games` submodule featuring class `Games`, which has some Tic-Tac-Toe methods and `mcEnchBook()` for
    generating Minecraft `/give enchanted_book` commands
  - the `tense.operators` submodule being extension of `operator` inbuilt Python module
  - the `tense.types_collection` submodule, which contains utility types from `typing`, `enum`, `types`, `inspect`,
    `subprocess` inbuilt Python modules, and from `typing_extensions` PyPi project



  To install AveyTense, you only need to have Python 3.9 or above, and run the following command:

  ```
  pip install AveyTense
  ```

  If you are out-of-date, consider checking out [releases section](https://pypi.org/project/AveyTense/#history), then
  use this command in the following way: `pip install AveyTense==<version>`, like `pip install AveyTense==0.3.31`.

  > [!NOTE]
  > It is highly recommended to install latest final version of AveyTense. Do not rely on alpha, beta releases, and
  > release candidates before their final counterparts are published.

  > [!WARNING]
  > Since AveyTense 0.3.30, archive files will no longer be available on [this page](https://aveyzan.glitch.me/tense),
  > due to expiry of formula after orienting publication of next versions to PyPi. Instead of providing change log via file
  > `./tense/information/changes.txt` normally included in zip/7-zip files, changes will be now provided in [this Google document](https://docs.google.com/document/d/1GC_KAOXML65jNfBZA8GhVViqPnrMoFtbLv_jHvUhBlg/edit?usp=sharing).


pkgId: 939302d9907c475edde005c1f1569973d50fa7c0af205c5770c8557a3ecce67e
name: python-BMKG-earthquake-update
arch: noarch
version: 0.0.1
epoch: 0
release: 1
url: https://github.com/madshopy/latest-indonesia-earthquake/tree/main
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s64p-256g--a82-10.compass-ci.net
rpm_sourcerpm: python-BMKG-earthquake-update-0.0.1-1.src.rpm
location_href: Packages/python-BMKG-earthquake-update-0.0.1-1.noarch.rpm
checksum_type: sha256
summary:
  this package will get the latest earthquake from BMKG -Meteorology, Climatology, and Geophysics Agency

description:
  this package will get the latest earthquake from BMKG -Meteorology, Climatology, and Geophysics Agency



  This package uses beautifllsoup4 and a request which will produce a jSON file output that is ready to be used for web or mobile applications


pkgId: d656df3eb1a22c7d9d3128bd77be2d0c729310364d9ce620f9fb3c29df13b2f5
name: python-BnPreprocessing
arch: noarch
version: 2.9
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/Kowsher/Bangla-NLP/tree/master/Bangla%20Feature%20Extraction
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a32-1.compass-ci.net
rpm_sourcerpm: python-BnPreprocessing-2.9-1.src.rpm
location_href: Packages/python-BnPreprocessing-2.9-1.noarch.rpm
checksum_type: sha256
description:
  This page gives a basic introduction to the package.

  ```
  pip install BnPreprocessing
  ```
  In Python a Bangla Linga is typically written as:

  ```python
  import BnPreprocessing as pp
  s =  "আমরা কাজ করবো কিভাবে!!😦😦 । Document তৈরী করতে আমাদের সবাইকে কি করতে হবে? ৫-৬ জন আমরা, কঠিন হবে :("
  s = pp.remove_punc(s)
  print(s)
  s = pp.remove_digits(s)
  print(s)
  s = pp.remove_nonBangla(s)
  print(s)
  s = pp.remove_emoticons(s)
  print(s)
  s = pp.remove_sw(s)
  print(s)
  ```
  Output:
  ```
  আমরা কাজ করবো কিভাবে  😦😦   Document তৈরী করতে আমাদের সবাইকে কি করতে হবে  ৫ ৬ জন আমরা  কঠিন হবে
  আমরা কাজ করবো কিভাবে  😦😦   Document তৈরী করতে আমাদের সবাইকে কি করতে হবে    জন আমরা  কঠিন হবে
  আমরা কাজ করবো কিভাবে  😦😦    তৈরী করতে আমাদের সবাইকে কি করতে হবে    জন আমরা  কঠিন হবে
  আমরা কাজ করবো কিভাবে      তৈরী করতে আমাদের সবাইকে কি করতে হবে    জন আমরা  কঠিন হবে
  করবো কিভাবে তৈরী সবাইকে কঠিন
  ```
  If you want to do all the preprocessings in one step:

  ```python
  import BnPreprocessing as pp
  s =  "আমরা কাজ করবো কিভাবে!!😦😦 । Document তৈরী করতে আমাদের সবাইকে কি করতে হবে? ৫-৬ জন আমরা, কঠিন হবে :("
  s = pp.remove_noise(s)
  print(s)
  ```
  Output:
  ```
  করবো কিভাবে তৈরী সবাইকে কঠিন
  ```

  ```python
  import BnPreprocessing as pp

  df['Text'] = df['Text'].apply(pp.remove_noise) #use any of the functions above

  df['Text'] = df['Text'].apply(lambda x: pp.remove_noise(str(x)))
  ```


  ```python
  import BnPreprocessing as pp
  s = "2018 এর পরিসংখ্যান অনুযায়ী বাংলাদেশের জনসংখ্যা প্রায় 161.4 মিলিয়ন"
  s = pp.numETB(s)
  print(s)
  ```
  Output:
  ```
  ২০১৮ এর পরিসংখ্যান অনুযায়ী বাংলাদেশের জনসংখ্যা প্রায় ১৬১.৪ মিলিয়ন
  ```

  ```python
  import BnPreprocessing as pp
  s = "২০১৮ এর পরিসংখ্যান অনুযায়ী বাংলাদেশের জনসংখ্যা প্রায় ১৬১.৪ মিলিয়ন"
  s = pp.numBTE(s)
  print(s)
  ```
  Output:
  ```
  2018 এর পরিসংখ্যান অনুযায়ী বাংলাদেশের জনসংখ্যা প্রায় 161.4 মিলিয়ন
  ```


pkgId: 59586162922feeb4024ecf132fe0b3186a760a0f695519b8d14fb82b1c3eacd0
name: python-a816
arch: noarch
version: 1.0.2
epoch: 0
release: 1
summary: 65c816 patching assembler (Super Famicom)
url: https://pypi.org/project/a816/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-a816-1.0.2-1.src.rpm
location_href: Packages/python-a816-1.0.2-1.noarch.rpm
checksum_type: sha256
description:
  Another 65c816 assembler




  ```
  $ a816 --help
  usage: x816 [-h] [--verbose] [-o OUTPUT_FILE] [-f FORMAT] [-m MAPPING] [--copier-header] [--dump-symbols] [-D KEY=VALUE [KEY=VALUE ...]] input_file

  x816 usage

  positional arguments:
    input_file            The asm file to assemble.

  options:
    -h, --help            show this help message and exit
    --verbose             Displays all log levels.
    -o OUTPUT_FILE, --output OUTPUT_FILE
                          Output file
    -f FORMAT             Output format
    -m MAPPING            Address Mapping
    --copier-header       Adds 0x200 address delta corresponding to copier header in ips writer.
    --dump-symbols        Dumps symbol table
    -D KEY=VALUE [KEY=VALUE ...], --defines KEY=VALUE [KEY=VALUE ...]
                          Defines symbols.
  ```

  or directly from python code:



  ```python
  from a816.program import Program

  def build_patch(input, output):
      program = Program()
      program.assemble_as_patch(input, output)
      program.resolver.dump_symbol_map()
  ```





  ```
  adc, and, asl, bcc, bcs, beq, bit, bmi, bne, bpl, bra, brk, brl, bvc, bvs, clc, cld, cli, clv, cmp, cop, cpx, cpy, db, dec, dex, dey, eor, inc, inx, iny, jml, jmp, jsl, jsr, lda, ldx, ldy, lsr, mvn, mvp, nop, ora, pea, pei, per, pha, phb, phd, phk, php, phx, phy, pla, plb, pld, plp, plx, ply, rep, rol, ror, rti, rtl, rts, sbc, sec, sed, sei, sep, sta, stp, stx, sty, stz, tax, tay, tcd, tcs, tdc, trb, tsb, tsc, tsx, txa, txs, txy, tya, tyx, wai, xba, xce
  ```



  ```ca65
  ; define a macro
  .macro test(var_1, var_2) {
      lda.w var_1 << 16 + var_2
  }

  ; use that macro
  test(0x10, 0x10)

  ; should expand that way
  lda.w 0x10 << 16 + 0x10

  ; code generated
  lda.w 0x1010
  ```




  ```ca65
  *=0x008000
      jsr.l _intro
  ```




  ```ca65
  some_address = 0x54
  {
      lda.b some_address
      beq no_action
      ; this label is only visible inside this scope
      no_action:
  }
  ```



  ```ca65
  *=0x009000
  named_scope {
     addr = 0x1234
     youhou_text:
     .text 'youhou'
     .db 0
     yaha_text:
     .text 'yaha'
     .db 0
  }

  *=0x019A52
  	load_system_menu_text_pointer(named_scope.youhou_text)

  *=0x019A80
  	load_system_menu_text_pointer(named_scope.yaha_text)

  ```


pkgId: 99375b2a46db1327332aa13b889231b6eb0b3e087f97bbddc2abcf9d4e113e1f
name: python-aaaa
arch: noarch
version: 1.0
epoch: 0
release: 1
summary: Alphabetize output filenames
url: http://github.com/sgrieve/aaaa
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aaaa-1.0-1.src.rpm
location_href: Packages/python-aaaa-1.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Build Status](https://travis-ci.org/sgrieve/aaaa.svg?branch=master)](https://travis-ci.org/sgrieve/aaaa) [![Coverage](https://img.shields.io/codecov/c/github/sgrieve/aaaa)](https://codecov.io/gh/sgrieve/aaaa) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/aaaa) ![PyPI - License](https://img.shields.io/pypi/l/aaaa)

  Have you ever been creating an animated plot by saving a series of images and joining them together? The obvious way to name these frames would be using numbers:

  ```python
  for i in range(15):
      plt.savefig('{}.png'.format(i))
  ```

  But many operating systems will order these files as follows:

  ```bash
  0.png
  1.png
  10.png
  11.png
  12.png
  13.png
  14.png
  2.png
  3.png
  4.png
  5.png
  6.png
  7.png
  8.png
  9.png
  ```

  Thereby screwing up the order of your animation.

  This is where `aaaa` (pronounced like a scream) comes in! `aaaa` has a single class which creates an iterator that yields an alphabetical sequence `aa`, `ab`, `ac`, etc. So we can change our above example:

  ```python
  from aaaa import aaaa

  fname = aaaa()

  for i in range(15):
      plt.savefig('{}.png'.format(next(fname)))
  ```

  Which will preserve the order of the files in your operating system:

  ```bash
  aa.png
  ab.png
  ac.png
  ad.png
  ae.png
  af.png
  ag.png
  ah.png
  ai.png
  aj.png
  ak.png
  al.png
  am.png
  an.png
  ao.png
  ```

  File sorting can differ between operating systems, sometimes with [serious results](https://arstechnica.com/information-technology/2019/10/chemists-discover-cross-platform-python-scripts-not-so-cross-platform/).




  `aaaa` has no dependences and is tested on Python 3.5 through 3.8 and it can be installed via pip:

  ```bash
  pip install aaaa
  ```



  There are two ways to use `aaaa`. Firstly, you can loop directly over an `aaaa` instance, until there are no items left (in this case the last value of name will be `zz`):

  ```python
  from aaaa import aaaa

  names = aaaa()

  for name in names:
      print(name)

  ```

  Or, you can use the `next()` operator to only get as many values as you need:

  ```python
  from aaaa import aaaa

  names = aaaa()

  for i in range(10):
      print(next(names))

  ```

  The default length of an output from `aaaa` is 2 characters long - this will allow you to order 676 files. If you need a larger or smaller amount of characters you can specify this as an argument to `aaaa`:

  ```python
  from aaaa import aaaa

  names_short = aaaa(1)
  names_long = aaaa(4)

  print(next(names_short), next(names_long))


  ```

  Beyond four or five characters in length, initializing `aaaa` becomes prohibitively slow. Note that four characters gives you **456976** permutations - so you should never need more than this.




  For my purposes this package is feature complete, but if you find a bug, or have a feature request, open an issue, or create a pull request!




  The project is licensed under the MIT license.


pkgId: a14084b512ac01b34f4d39e3833646ec78c02f64e525cc9575b663c44ecd2ced
name: python-aaindex
arch: noarch
version: 1.1.2
epoch: 0
release: 1
url: https://github.com/amckenna41/aaindex
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aaindex-1.1.2-1.src.rpm
location_href: Packages/python-aaindex-1.1.2-1.noarch.rpm
checksum_type: sha256
summary:
  A lightweight Python software package for accessing the data in the various AAIndex databases, which represent the physiochemical, biochemical and structural properties of amino acids as numerical indices.

description:
    * [Introduction](#introduction)
    * [Requirements](#requirements)
    * [Installation](#installation)
    * [Usage](#usage)
    * [Tests](#tests)
    * [Contact](#contact)
    * [License](#license)
    * [References](#References)


pkgId: 5b7d284a7d6903f9d512668b895373d8e1676cff87c2970bddc37b27b2d48c4d
name: python-aalpy
arch: noarch
version: 1.4.2
epoch: 0
release: 1
summary: An active automata learning library
url: https://github.com/DES-Lab/AALpy
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aalpy-1.4.2-1.src.rpm
location_href: Packages/python-aalpy-1.4.2-1.noarch.rpm
checksum_type: sha256
description:
  <div align="center">

  <picture style="align: center; padding-bottom: 3mm;">
    <source media="(prefers-color-scheme: dark)" srcset="./docs/logo_dark.png">
    <img width=70% height=70% alt="AALpy Logo" src="./docs/logo_light.png">
  </picture>

  <br/>
  <br/>

  [![Python application](https://github.com/DES-Lab/AALpy/actions/workflows/python-app.yml/badge.svg)](https://github.com/DES-Lab/AALpy/actions/workflows/python-app.yml)
  [![CodeQL](https://github.com/DES-Lab/AALpy/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/DES-Lab/AALpy/actions/workflows/codeql-analysis.yml)
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/aalpy)

  [![GitHub issues](https://img.shields.io/github/issues/DES-Lab/AALpy)](https://github.com/DES-Lab/AALpy/issues)
  ![GitHub pull requests](https://img.shields.io/github/issues-pr/des-lab/aalpy)
  [![Python 3.6](https://img.shields.io/badge/python-3.6%2B-blue)](https://www.python.org/downloads/release/python-360/)
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/aalpy)
  [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

  </div>
  <hr />

  AALpy is a light-weight automata learning library written in Python.
  You can start learning models of black-box systems with a few lines of code.

  AALpy supports both **active** and **passive** automata learning algorithms that can be used to learn a variety of modeling formalisms, including
  **deterministic**, **non-deterministic**, and **stochastic automata**, as well as **deterministic context-free grammars/pushdown automata**.

  <div align="center">

  | **Automata Type** |                      **Supported Formalisms**                     | **Algorithms**        |                                                       **Features** |
  |-------------------|:-----------------------------------------------------------------:|-----------------------|-------------------------------------------------------------------:|
  | Deterministic     |                 DFAs <br /> Mealy Machines <br /> Moore Machines                 |      L* <br /> KV <br /> RPNI      | Seamless Caching <br /> Counterexample Processing <br /> 13 Equivalence Oracles  |
  | Non-Deterministic |                      ONFSM <br /> Abstracted ONFSM                      |        L*<sub>ONFSM</sub>       |                                 Size Reduction  Trough Abstraction |
  | Stochastic        | Markov Decision Processes <br /> Stochastic Mealy Machines <br /> Markov Chains | L*<sub>MDP</sub> <br /> L*<sub>SMM</sub> <br /> ALERGIA |               Counterexample Processing <br /> Exportable to PRISM format  <br /> Bindings to jALERGIA|
  | Pushdown          |          VPA/SEVPA                                                            | KV<sub>VPA</sub> <br /> PAPNI | Passive learning of VPAs <br /> Exclusive call-return pairs
  </div>



  Use the package manager [pip](https://pip.pypa.io/en/stable/) to install the latest release of AALpy:
  ```bash
  pip install aalpy
  ```
  To install current version of the master branch (it might contain bugfixes and added functionalities between releases):
  ```bash
  pip install https://github.com/DES-Lab/AALpy/archive/master.zip
  ```
  The minimum required version of Python is 3.6.
  Ensure that you have [Graphviz](https://graphviz.org/) installed and added to your path if you want to visualize models.

  For manual installation, clone the repo and install `pydot` (the only dependency).



  If you are interested in automata learning or would like to understand the automata learning process in more detail,
  please check out our **Wiki**. On Wiki, you will find more detailed examples on how to use AALpy.
  - <https://github.com/DES-Lab/AALpy/wiki>

  ***[Examples.py](https://github.com/DES-Lab/AALpy/blob/master/Examples.py)*** contains examples covering almost the whole of AALpy's functionality and its a great starting point.



  All active automata learning procedures follow this high-level approach:
  - [Define the input alphabet and system under learning (SUL)](https://github.com/DES-Lab/AALpy/wiki/SUL-Interface,-or-How-to-Learn-Your-Systems)
  - [Choose the equivalence oracle](https://github.com/DES-Lab/AALpy/wiki/Equivalence-Oracles)
  - [Run the learning algorithm](https://github.com/DES-Lab/AALpy/wiki/Setting-Up-Learning)

  Passive learning algorithm simply require you to provide data in the appropriate format (check Wiki and Examples) and run the learning function.


  <details>
    <summary>Code snipped demonstrating some of AALpy's functionalities</summary>

  The following snippet demonstrates a short example in which an automaton is either [loaded](https://github.com/DES-Lab/AALpy/wiki/Loading,Saving,-Syntax-and-Visualization-of-Automata) or [randomly generated](https://github.com/DES-Lab/AALpy/wiki/Generation-of-Random-Automata) and then [learned](https://github.com/DES-Lab/AALpy/wiki/Setting-Up-Learning).
  ```python
  from aalpy.utils import load_automaton_from_file, generate_random_deterministic_automata
  from aalpy.SULs import AutomatonSUL
  from aalpy.oracles import RandomWalkEqOracle
  from aalpy.learning_algs import run_Lstar, run_KV





  random_dfa = generate_random_deterministic_automata(automaton_type='dfa', num_states=8,
                                                      input_alphabet_size=5, output_alphabet_size=2)


  alphabet = random_dfa.get_input_alphabet()




  sul = AutomatonSUL(random_dfa)


  eq_oracle = RandomWalkEqOracle(alphabet, sul, num_steps=5000, reset_prob=0.09)



  learned_dfa = run_KV(alphabet, sul, eq_oracle, automaton_type='dfa')






  learned_dfa.save()



  learned_dfa.visualize()

  print(learned_dfa)
  ```
  </details>

  To make experiments reproducible, define a random seed at the beginning of your program.
  ```Python
  from random import seed
  seed(2) # all experiments will be reproducible
  ```


  AALpy has been used to:
  - [Learn Models of Bluetooth Low-Energy](https://github.com/apferscher/ble-learning)
  - [Find bugs in VIM text editor](https://github.com/DES-Lab/AALpy/discussions/13)
  - [Learn Input-Output Behavior of RNNs](https://github.com/DES-Lab/Extracting-FSM-From-RNNs)
  - [Learn Models of GIT](https://github.com/taburg/git-learning)
  - [Solve RL Problems](https://github.com/DES-Lab/Learning-Environment-Models-with-Continuous-Stochastic-Dynamics)


  If you use AALpy in your research, please cite us with of the following:
  - [Extended version (preferred)](https://www.researchgate.net/publication/359517046_AALpy_an_active_automata_learning_library/citation/download)
  - [Tool paper](https://dblp.org/rec/conf/atva/MuskardinAPPT21.html?view=bibtex)

  If you have research suggestions or you need specific help concerning your research, feel free to start a [discussion](https://github.com/DES-Lab/AALpy/discussions) or contact [edi.muskardin@silicon-austria.com](mailto:edi.muskardin@silicon-austria.com).
  We are happy to help you and consult you in applying automata learning in various domains.


  Pull requests are welcome. For significant changes, please open an issue first to discuss what you would like to change.
  In case of any questions or possible bugs, please open issues.


pkgId: be6c5d79731b671f5223e2edefdc29dff735a919b2613ca914b786081f0d1323
name: python-abstracttree
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Abstract base classes for tree data structures
url: https://github.com/lverweijen/abstracttree
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a35-0.compass-ci.net
rpm_sourcerpm: python-abstracttree-0.1.1-1.src.rpm
location_href: Packages/python-abstracttree-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  This Python package contains a few abstract base classes for tree data structures.
  Trees are very common data structure that represents a hierarchy of common nodes.
  There are many different ways to represent them.
  This package tries to provide a uniform interface, mixin methods and some utility functions without settling on a concrete tree implementation.



  ```python
  from abstracttree import DownTree, to_mermaid

  to_mermaid(DownTree)
  ```

  ```mermaid
  graph TD;
  Tree[Tree];
  MutableTree[MutableTree];
  DownTree[DownTree];
  Tree[Tree];
  MutableTree[MutableTree];
  MutableDownTree[MutableDownTree];
  MutableTree[MutableTree];
  BinaryDownTree[BinaryDownTree];
  BinaryTree[BinaryTree];
  Tree-->MutableTree;
  DownTree-->Tree;
  DownTree-->MutableDownTree;
  MutableDownTree-->MutableTree;
  DownTree-->BinaryDownTree;
  BinaryDownTree-->BinaryTree;
  Tree-->BinaryTree;
  ```

  A `Downtree` needs to have links to its direct children, but doesn't require a link to its parent.
  A `Tree` needs to have links to both its `children` and its `parent`.

  | ABC               | Inherits from             | Abstract Methods                | Mixin Methods                                                                                                                                                           |
  |-------------------|---------------------------|---------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | `DownTree`        |                           | `children`                      | `nodes`, `nodes.preorder()`, `nodes.postorder()`, `nodes.levelorder()`, `descendants`, `leaves`, `levels`, `levels.zigzag()`, `is_leaf`, `transform()`,  `nid`, `eqv()` |
  | `Tree`            | `DownTree`                | `parent`                        | `root`, `is_root`, `ancestors`, `path`, `siblings`                                                                                                                      |
  | `MutableDownTree` | `DownTree`                | `add_child()`, `remove_child()` | `add_children()`                                                                                                                                                        |
  | `MutableTree`     | `Tree`, `MutableDownTree` |                                 | `detach()`                                                                                                                                                              |
  | `BinaryDownTree`  | `DownTree`                | `left_child`, `right_child`     | `children`, `nodes.inorder()`, `descendants.inorder()`                                                                                                                  |
  | `BinaryTree`      | `BinaryDownTree`, `Tree`  |                                 |                                                                                                                                                                         |

  In your own code, you can inherit from these trees.
  For example, if your tree only has links to children:

  ```python
  import abstracttree
  from abstracttree import print_tree

  class MyTree(abstracttree.DownTree):
      def __init__(self, value, children=()):
          self.value = value
          self._children = children

      def __str__(self):
          return "MyTree " + str(self.value)

      @property
      def children(self):
          return self._children

  tree = MyTree(1, children=[MyTree(2), MyTree(3)])
  print_tree(tree)





  ```



  In practice, not all existing tree data structures implement one of these abstract classes.
  As a bridge, you can use `AbstractTree.convert` to convert these trees to a `Tree` instance.
  However, whenever possible, it's recommended to inherit from `Tree` directly for minimal overhead.

  Examples:

  ```python

  tree = Tree.convert(int)
  tree = Tree.convert(ast.parse("1 + 1 == 2"))
  tree = Tree.convert(pathlib.Path("abstracttree"))


  tree = Tree.convert(anytree.Node('name'))


  tree = Tree.convert([[1, 2, 3], [4, 5, 6]])
  ```

  Or use `astree` if you need a custom function for `parent` or `children`:

  ```python

  data = {"name": "a",
          "children": [
              {"name": "b", "children": []},
              {"name": "c", "children": []}
  ]}
  astree(data, children=operator.itemgetter["children"])


  astree(widget, children=lambda w: w.children(), parent = lambda w: w.parent())


  astree(tree.root, children=lambda nid: tree.children(nid), parent=lambda nid: tree.parent(nid))


  astree(tree, children=iter, parent=lambda t: t.parent)


  inf_binary = astree(0, children=lambda n: (2*n + 1, 2*n + 2))
  ```



  Pretty printing
  ```python
  tree = astree(seq, children=lambda x: [x[:-2], x[1:]] if x else [])
  print_tree(tree)
  print(to_string(tree))








  ```

  Plotting with matplotlib
  ```python
  import matplotlib.pyplot as plt

  expr = ast.parse("y = x*x + 1")
  plot_tree(expr)
  plt.show()
  ```
  ![images/tree_calc_plot.png](images/tree_calc_plot.png)

  Export to various formats
  ```python
  to_dot(tree)
  to_mermaid(tree)
  to_latex(tree)
  to_reportlab(tree)

  to_image(Path('.'), "filetree.png", how="dot")
  to_image(AbstractTree, "class_hierarchy.svg", how="mermaid")
  to_pillow(tree).show()
  ```



  ```python
  import heapq

  from abstracttree import HeapTree, Route

  tree = HeapTree([5, 4, 3, 2, 1])
  heapq.heapify(tree.heap)
  route = Route(tree.left_child, tree.right_child)

  print(f"{route.lca = }")  # => HeapTree([1, 2, 3, 5, 4], 0)
  print(f"{route.nodes.count() = }")  # => 3
  print(f"{route.edges.count() = }")  # => 2
  ```



  - [anytree](https://github.com/c0fec0de/anytree)
  - [treelib](https://github.com/caesar0301/treelib)
  - [bigtree](https://github.com/kayjan/bigtree)
  - [itertree](https://github.com/BR1py/itertree)
  - [dendropy](https://github.com/jeetsukumaran/DendroPy)
  - [ete](https://github.com/etetoolkit/ete)
  - [littletree](https://github.com/lverweijen/littletree) - also by me



  - [PrettyPrintTree](https://github.com/AharonSambol/PrettyPrintTree) - colored terminal output


pkgId: edb38a70051de3584de150aa142e61d24515626e52552c887d55c9ca5f8b1015
name: python-accasim
arch: noarch
version: 1.1.3
epoch: 0
release: 1
summary: An HPC Workload Management Simulator
url: http://accasim.readthedocs.io/en/latest/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-accasim-1.1.3-1.src.rpm
location_href: Packages/python-accasim-1.1.3-1.noarch.rpm
checksum_type: sha256
description:
  *current version:* |version|
  AccaSim is a Workload management [sim]ulator for [H]PC systems, useful for developing dispatchers and conducting controlled experiments in HPC dispatching research. It is scalable and highly customizable, allowing to carry out large experiments across different workload sources, resource settings, and dispatching methods.
  AccaSim enables users to design novel advanced dispatchers by exploiting information regarding the current system status, which can be extended for including custom behaviors such as power consumption and failures of the resources. The researchers can use AccaSim for instance to mimic any real system by setting up the synthetic resources suitably, develop advanced power-aware, fault-resilient dispatching methods, and test them over a wide range of workloads by generating them synthetically or using real workload traces from HPC users.
  For more information please visit the `webpage of AccaSim <http://accasim.readthedocs.io/en/latest/>`_
  ***************
  What's new?
  ***************
  - 23-06-2018 Major improvements. Additional data is executed during Submission, Dispatching and Completion events (before and after).
  - 15-06-2018 Version 1.0 released.
  - 01-06-2018 New version of the dispatchers. The job requests are verified during the scheduling process.
  - 27-05-2018 New version of the resources and resource manager. All simulation methods were improved. Logger is used instead of printing messages.
  - 21-05-2018 Asyncronous file writing to reduce the IO overhead of the simulations.
  - 06-12-2017 A workload generator is available for generating new workloads from existing workloads.
  - 13-11-2017 Simulating distinct dispatchers under the same system and simulator configuration can be managed under the Experimentation class. It also includes the automatic plot generation.
  - 21-08-2017 Automatic plot generation for comparison of multiple workload schedules and benchmark files: Slowdown, Queue sizes, Load ratio, Efficiency, Scalability, Simulation time, Memory Usage.
  - 19-07-2017 Documentation is moved to `http://accasim.readthedocs.io <http://accasim.readthedocs.io/en/latest/>`_
  - 12-07-2017 First version of the package.


pkgId: 7f75627f9e0990786451722fd59145de09fecf7c0cee1aaf94564eff04d10ede
name: python-acceptlang
arch: noarch
version: 0.0.5
epoch: 0
release: 1
summary: A package for parsing Accept-Language tag received from (untrusted) client context.
url: https://github.com/piotrszyma/acceptlang
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-acceptlang-0.0.5-1.src.rpm
location_href: Packages/python-acceptlang-0.0.5-1.noarch.rpm
checksum_type: sha256
description:
  This package can be used in the server environment to parse the Accept-Language
  header.

  Test cases and code copied from Django source code enhanced with typing.

  Purpose of this code is to be able to use a battle-tested Accept-Language
  parsing logic in Python code without need to install Django package.



  You can install the package via pip:

  ```sh
  pip install acceptlang
  ```



  ```python
  from acceptlang import parse_accept_lang_header

  result = parse_accept_lang_header("en-us,en;q=0.5,de;q=0.3")
  assert result == (('en-us', 1.0), ('en',0.5), ('de',0.3))

  result = parse_accept_lang_header("en-us,*;q=0.5")
  assert result == (('en-us', 1.0), ('*',0.5))
  ```

  Check [tests](tests/test_parse.py) for more examples.



  ```sh
  python3 -m venv venv
  . venv/bin/activate
  python3 -m pip install -r requirements.dev.txt
  ```



  ```sh
  python3 -m build --wheel
  twine check dist/**
  twine upload dist/
  ```


pkgId: 1b5648586765acfd1694fc03ca4232a8c50464193c93a1786087d4bda1162ca7
name: python-acpipe-acjson
arch: noarch
version: 0.1.17
epoch: 0
release: 1
url: https://gitlab.com/biotransistor/acpipe_acjson
rpm_license: GPL>=3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-acpipe-acjson-0.1.17-1.src.rpm
location_href: Packages/python-acpipe-acjson-0.1.17-1.noarch.rpm
checksum_type: sha256
summary:
  acpipe_acjson is the python3 acjson base library. acjson - assay coordinate json - is a file format developed to log complicated biological wetlab experiment layouts.

description:
  This is a python3 library to produce and process acjson objects.

  Acjson (assay coordinate java script object notation) is
  in the big picture a json syntax (http://json.org/) compatible file format,
  that was developed to capture the most essential experimental annotations
  of a biological wetlab experiment,
  how ever simple or complicated the layout may be.

  In the guts of this file format is each experimental condition described as a single coordinate.

  Each coordinate is an adaptation of the input-processing-output (IPO) model from software engineering,
  which is used to describe the structure of an information processing program.
  In the biological experiment use-case, these are represented by (SPE) sample, perturbation, and assay endpoints,
  which are represented as three axes.

  Each of this axis can hold as many sample or reagent records as needed to describe the experimental condition.

  This library can produce and process such acjson objects.




  How to install acpipe_acjson?
  ```bash
  pip3 install acpipe_acjson
  ```

  How to load the acpipe_acjson library?
  ```python
  import acpipe_acjson.acjson as ac
  ```

  Howto get reference information about the implemented constants and functions?
  ```python
  import acpipe_acjson.acjson as ac


  ac.ts_ABC
  ac.ts_ACAXIS
  ac.ts_NOTCOOR
  ac.ts_COORSYS
  ac.d_WELL
  ac.d_RECORD
  ac.d_RECORDLONG


  ac.d_SET
  ac.d_EXTERNALID
  ac.d_SAMPLE
  ac.d_MICROSCOPE
  ac.d_PRIMANTIBODY
  ac.d_SECANTIBODY


  ac.leaf
  ac.es_DATAFRAMELEAF


  ac.dii_96A1
  ac.dii_96A2
  ac.dii_96B1
  ac.dii_96B2


  help(ac.retype)
  help(ac.escoor)
  help(ac.icoormax)
  help(ac.ispotmax)
  help(ac.ispot)
  help(ac.xy2icoor)
  help(ac.acrelabel)
  help(ac.acbuild)
  help(ac.acfuseaxisrecord)
  help(ac.acfusewellrecord)
  help(ac.acfuserepeat0011)
  help(ac.acfuserepeat0101)
  help(ac.acfuseobject)
  help(ac.acfuse4to1)
  help(ac.count_record)
  help(ac.record_in_acjson)
  help(ac.list_uniq_record)
  help(ac.max_record)
  help(ac.pop_record)
  help(ac.pop_ac)
  help(ac.xray)
  help(ac.acjson2layouttsv)
  help(ac.acjson2dataframetsv)
  ```


pkgId: a1e4098f668c2f1f73cd721533414f042f1d6a19bd8f9448a628b19900d98127
name: python-acsylla
arch: noarch
version: 0.2.0
epoch: 0
release: 1
summary: A high performance asynchronous Cassandra and ScyllaDB client
url: http://github.com/acsylla/acsylla
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-acsylla-0.2.0-1.src.rpm
location_href: Packages/python-acsylla-0.2.0-1.noarch.rpm
checksum_type: sha256
description:
  [![CI](https://github.com/acsylla/acsylla/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/acsylla/acsylla/actions/workflows/ci.yml)
  [![CI](https://github.com/acsylla/acsylla/actions/workflows/release.yml/badge.svg?branch=v0.1.7a0)](https://github.com/acsylla/acsylla/actions/workflows/release.yml)
  [![PyPI](https://img.shields.io/pypi/v/acsylla.svg)](https://pypi.org/project/acsylla/)
  [![Number of PyPI downloads](https://img.shields.io/pypi/dm/acsylla.svg)](https://pypi.org/project/acsylla/)
  [![Documentation Status](https://readthedocs.org/projects/acsylla/badge/?version=latest)](https://acsylla.readthedocs.io/en/latest/)


  A composition of ***async*** + ***cassandra*** + ***scylla*** words.



  Under the hood **_acsylla_** has modern, feature-rich and shard-aware [C/C++ client](https://github.com/scylladb/cpp-driver) library for [Cassandra](https://cassandra.apache.org) and [ScyllaDB](https://www.scylladb.com).


    * [Features](#features)
    * [Compatibility](#compatibility)
    * [Install](#install)
    * [Cluster](#cluster)
      * [Configuration options](#configuration-options)
      * [Configuration methods](#configuration-methods)
    * [Session](#session)
    * [Statement](#statement)
    * [PreparedStatement](#preparedstatement)
    * [Batch](#batch)
    * [Result](#result)
    * [Row](#row)
    * [Logger](#logger)
    * [Examples](#examples)
      * [Basic usage](#basic-usage)
      * [Binding Parameters](#binding-parameters)
        * [Non Prepared Statement](#non-prepared-statement)
        * [Prepared Statement](#prepared-statement)
      * [Use prepared statement and paging](#use-prepared-statement-and-paging)
      * [Configure Shard-Awareness connection](#configure-shard-awareness-connection-to-scylladb-cluster)
      * [SSL Example](#ssl-example)
      * [Retrieving metadata](#retrieving-metadata)
      * [Configure logging](#configure-logging)
        * [Set log level](#set-log-level)
        * [Set callback for capture log messages](#set-callback-for-capture-log-messages)
      * [Execution profiles](#execution-profiles)
      * [Tracing](#tracing)
      * [Host State Changes](#host-state-changes)
    * [Developing](#developing)




  * Shard-Awareness
  * Asynchronous API
  * Simple, Prepared, and Batch statements
  * Asynchronous I/O, parallel execution, and request pipelining
  * Connection pooling
  * Automatic node discovery
  * Automatic reconnection
  * Configurable load balancing
  * Works with any cluster size
  * Authentication
  * SSL
  * Latency-aware routing
  * Performance metrics
  * Tuples and UDTs
  * Nested collections
  * Retry policies
  * Client-side timestamps
  * Data types
  * Idle connection heartbeats
  * Support for materialized view and secondary index metadata
  * Support for clustering key order, `frozen<>` and Cassandra version metadata
  * Whitelist/blacklist DC, and whitelist/blacklist hosts load balancing policies
  * Custom authenticators
  * Reverse DNS with SSL peer identity verification support
  * Randomized contact points
  * Speculative execution



  This driver works exclusively with the Cassandra Query Language v3 (CQL3) and
  Cassandra's native protocol. The current version works with:

  * Scylla and Scylla Enterprise
  * Apache Cassandra® versions 2.1, 2.2 and 3.0+
  * Python 3.7, 3.8, 3.9, 3.10 and 3.11 for Linux and MacOS



  There is an Beta realease compabitble with Python 3.7, 3.8, 3.9, 3.10 and 3.11 for Linux and MacOS environments uploaded as a Pypi package. Use the following
  command for installing it:

  ```bash
  pip install acsylla
  ```


  You can build your own package for any supported python version for ***x86_64*** and ***aarch64*** Linux.

  Example for build wheel for Python 3.12 ***x86_64*** from master branch
  ```bash
  git clone https://github.com/acsylla/acsylla.git
  cd acsylla
  docker run -v `pwd`:/io -e PYTHON_VERSION=3.12  quay.io/pypa/manylinux_2_28_x86_64  /io/bin/build_manylinux_2_28_wheel.sh
  ```

  Example for build wheel for Python 3.12 ***aarch64*** from master branch
  ```bash
  git clone https://github.com/acsylla/acsylla.git
  cd acsylla
  docker run --platform linux/arm64 -v `pwd`:/io -e PYTHON_VERSION=3.12  quay.io/pypa/manylinux_2_28_aarch64  /io/bin/build_manylinux_2_28_wheel.sh
  ```



  The `Cluster` object describes a Cassandra/ScyllaDB cluster’s configuration.
  The ***default cluster object is good for most clusters*** and only requires a single
  or multiple list of contact points in order to establish a session connection.
  ***For example:***
  `cluster = acsylla.create_cluster('127.0.0.1, 127.0.0.2')`

  Once a session is connected using a cluster object its configuration is constant.

  Modifying the cluster object configuration once a session is established does not alter the session’s configuration.



  List of named arguments to configure cluster with  `acsylla.create_cluster` helper.

  - ***contact_points:*** Sets contact points. This MUST be set. White space is striped from the contact points.
      *Examples:* “127.0.0.1”,  “127.0.0.1,127.0.0.2”, “server1.domain.com”

  - ***port:*** Sets the port.
      *Default:* 9042

  - ***local_address:*** Sets the local address to bind when connecting to the
      cluster, if desired. IP address to bind, or empty string for no
      binding. Only numeric addresses are supported; no resolution is done.

  - ***local_port_range_min:*** Sets the range of outgoing port numbers (ephemeral
      ports) to be used when establishing the shard-aware connections. This
      is applicable when the routing of connection to shard is based on the
      client-side port number.
      When application connects to multiple CassCluster-s it is advised
      to assign mutually non-overlapping port intervals to each. It is assumed
      that the supplied range is allowed by the OS (e.g. it fits inside
      /proc/sys/net/ipv4/ip_local_port_range on *nix systems)
      *Default:* `49152`

  - ***local_port_range_max:*** See `local_port_range_min`
      *Default:* `65535`

  - ***username:*** Set username for plain text authentication.

  - ***password:*** Set password for plain text authentication.

  - ***connect_timeout:*** Sets the timeout for connecting to a node.
      *Default:* `5` seconds

  - ***request_timeout:*** Sets the timeout for waiting for a response from a node.
      Use 0 for no timeout.
      *Default:* `12` seconds

  - ***resolve_timeout:*** Sets the timeout for waiting for DNS name resolution.
      *Default:* `2` seconds

  - ***log_level:*** Sets the log level.
      Available levels:
    - `disabled`
    - `critical`
    - `error`
    - `warn`
    - `info`
    - `debug`
    - `trace`

    *Default:* `warn`

  - ***logging_callback:*** Sets a callback function to catch log messages.
      *Default:* An internal logger with "acsylla" name.
      `logging.getLogger('acsylla')`

  - ***ssl_enable:*** Enable SSL connection
      *Default:* `False`

  - ***ssl_cert:*** Set client-side certificate chain. This is used to authenticate
      the client on the server-side. This should contain the entire
      Certificate chain starting with the certificate itself

  - ***ssl_private_key:*** Set client-side private key. This is used to authenticate
      the client on the server-side.

  - ***ssl_private_key_password:*** Password for `ssl_private_key`

  - ***ssl_trusted_cert:*** Adds a trusted certificate. This is used to verify the
      peer’s certificate.

  - ***ssl_verify_flags:*** Sets verification performed on the peer’s certificate.
      - `NONE` No verification is performed
      - `PEER_CERT` Certificate is present and valid
      - `PEER_IDENTITY` IP address matches the certificate’s common name or one
            of its subject alternative names. This implies the certificate is
            also present.
      - `PEER_IDENTITY_DNS` Hostname matches the certificate’s common name or
            one of its subject alternative names. This implies the certificate
            is also present.
        *Default:* `PEER_CERT`

  - ***protocol_version:*** Sets the protocol version. The driver will automatically
      downgrade to the lowest supported protocol version.
      *Default:* `acsylla.ProtocolVersion.V4` or `acsylla.ProtocolVersion.DSEV1` when
      using the DSE driver with DataStax Enterprise.

  - ***use_beta_protocol_version:*** Use the newest beta protocol version. This
      currently enables the use of protocol version `cyacsylla.ProtocolVersion.V5`
      or `cyacsylla.ProtocolVersion.DSEV2` when using the DSE driver with
      DataStax Enterprise.
      *Default:* `False`

  - ***consistency:*** Sets default consistency level of statement. `acsylla.Consistency`
      *Default:* `LOCAL_ONE`

  - ***serial_consistency:*** Sets default serial consistency level of statement. `acsylla.Consistency`
      *Default:* `ANY`

  - ***queue_size_io:*** Sets the size of the fixed size queue that stores pending
      requests.
      *Default:* `8192`

  - ***num_threads_io:*** Sets the number of IO threads. This is the number of threads that
      will handle query requests.
      *Default:* `1`

  - ***core_connections_per_host:*** Sets the number of connections made to each
      server in each IO thread.
      *Default:* `1`

  - ***constant_reconnect_delay_ms:*** Configures the cluster to use a reconnection
      policy that waits a constant time between each reconnection attempt.
      Time in milliseconds to delay attempting a reconnection; 0 to perform
      a reconnection immediately.
      *Default:* Not set

  - ***exponential_reconnect_base_delay_ms:*** The base delay (in milliseconds) to
      use for scheduling reconnection attempts.
      Configures the cluster to use a reconnection policy that waits
      exponentially longer between each reconnection attempt; however will
      maintain a constant delay once the maximum delay is reached.
      *Note:* A random amount of jitter (+/- 15%) will be added to the pure
      exponential delay value. This helps to prevent situations where
      multiple connections are in the reconnection process at exactly the
      same time. The jitter will never cause the delay to be less than the
      base delay, or more than the max delay.
      *Default:* `2000`

  - ***exponential_reconnect_max_delay_ms:*** The maximum delay to wait between two
      reconnection attempts. See `exponential_reconnect_max_delay_ms`
      *Default:* `60000`

  - ***coalesce_delay_us:*** Sets the amount of time, in microseconds, to wait for
      new requests to coalesce into a single system call. This should be set
      to a value around the latency SLA of your application’s requests while
      also considering the request’s roundtrip time. Larger values should be
      used for throughput bound workloads and lower values should be used for
      latency bound workloads.
      *Default:* `200` us

  - ***new_request_ratio:*** Sets the ratio of time spent processing new requests
      versus handling the I/O and processing of outstanding requests. The
      range of this setting is 1 to 100, where larger values allocate more
      time to processing new requests and smaller values allocate more time
      to processing outstanding requests.
      *Default:* `50`

  - ***max_schema_wait_time_ms:*** Sets the maximum time to wait for schema
      agreement after a schema change is made (e.g. creating, altering,
      dropping a table/keyspace/view/index etc).
      *Default:* `10000` milliseconds

  - ***tracing_max_wait_time_ms:*** Sets the maximum time to wait for tracing data to become available.
      *Default:* `15` milliseconds

  - ***tracing_retry_wait_time_ms:*** Sets the amount of time to wait between attempts to check to see if tracing is available.
      *Default:*  `3` milliseconds

  - ***tracing_consistency:*** Sets the consistency level to use for checking to see if tracing data is available.
      *Default:* `ONE`

  - ***load_balance_round_robin:*** Configures the cluster to use round-robin load
      balancing. The driver discovers all nodes in a cluster and cycles
      through them per request. All are considered local.

  - ***load_balance_dc_aware:*** The primary data center to try first.
      Configures the cluster to use DC-aware load balancing. For each query,
      all live nodes in a primary ‘local’ DC are tried first, followed by any
      node from other DCs.
      *Note:* This is the default, and does not need to be called unless
      switching an existing from another policy or changing settings. Without
      further configuration, a default local_dc is chosen from the first
      connected contact point, and no remote hosts are considered in query
      plans. If relying on this mechanism, be sure to use only contact points
      from the local DC.

  - ***load_balance_rack_aware_dc:*** Configures the cluster to use Rack-aware load
      balancing.
      For each query, all live nodes in a primary 'local' rack are tried first,
      followed by nodes from local DC and then nodes from other DCs.
      With empty local_rack and local_dc,  default local_dc and local_rack
      is chosen from the first connected contact point,
      and no remote hosts are considered in query plans.
      If relying on this mechanism, be sure to use only contact
      points from the local rack.

  - ***load_balance_rack_aware_rack:*** Configures the cluster to use Rack-aware load
      balancing.
      For each query, all live nodes in a primary 'local' rack are tried first,
      followed by nodes from local DC and then nodes from other DCs.
      With empty local_rack and local_dc,  default local_dc and local_rack
      is chosen from the first connected contact point,
      and no remote hosts are considered in query plans.
      If relying on this mechanism, be sure to use only contact
      points from the local rack.

  - ***token_aware_routing:*** Configures the cluster to use token-aware request
      routing or not. This routing policy composes the base routing policy,
      routing requests first to replicas on nodes considered ‘local’ by the
      base load balancing policy.
      *Important:* Token-aware routing depends on keyspace metadata. For this
      reason enabling token-aware routing will also enable retrieving and
      updating keyspace schema metadata.
      *Default:* `True` (enabled).

  - ***token_aware_routing_shuffle_replicas:*** Configures token-aware routing to
      randomly shuffle replicas. This can reduce the effectiveness of
      server-side caching, but it can better distribute load over replicas
      for a given partition key.
      *Note:* Token-aware routing `token_aware_routing` must be enabled for the
      setting to be  applicable.
      *Default:* `True` (enabled).

  - ***latency_aware_routing:*** Configures the cluster to use latency-aware request
      routing or not. This routing policy is a top-level routing policy. It
      uses the base routing policy to determine locality (dc-aware) and/or
      placement (token-aware) before considering the latency.
      *Default:* `False` (disabled).

  - ***latency_aware_routing_settings:*** Configures the settings for latency-aware
      request routing. Instance of `acsylla.LatencyAwareRoutingSettings`
      *Default:*
      - `exclusion_threshold` ***2.0*** *Controls how much worse the latency
                                        be compared to the average latency of
                                        the best performing node before it
                                        penalized.*
      - `scale_ms` ***100 milliseconds*** *Controls the weight given to older
                                        latencies when calculating the average
                                        latency of a node. A bigger scale will
                                        give more weight to older latency
                                        measurements.*
      - `retry_period_ms` ***10,000 milliseconds*** *The amount of time a node is
                                        penalized by the policy before being
                                        given a second chance when the current
                                        average latency exceeds the calculated
                                        threshold (exclusion_threshold *
                                        best_average_latency).*
      - `update_rate_ms` ***100 milliseconds*** *The rate at which the best
                                        average latency is recomputed.*
      - `min_measured` ***50*** *The minimum number of measurements per-host
                                        required to be considered by the policy*

  - ***whitelist_hosts:*** Sets whitelist hosts. The first call sets the whitelist
      hosts and any subsequent calls appends additional hosts. Passing an
      empty string will clear and disable the whitelist. White space is
      striped from the hosts.
      This policy filters requests to all other policies, only allowing
      requests to the hosts contained in the whitelist. Any host not in the
      whitelist will be ignored and a connection will not be established.
      This policy is useful for ensuring that the driver will only connect to
      a predefined set of hosts.
      *Examples*: “127.0.0.1”, “127.0.0.1,127.0.0.2”

  - ***blacklist_hosts:*** Sets blacklist hosts. The first call sets the blacklist
      hosts and any subsequent calls appends additional hosts. Passing an
      empty string will clear and disable the blacklist. White space is
      striped from the hosts.
      This policy filters requests to all other policies, only allowing
      requests to the hosts not contained in the blacklist. Any host in the
      blacklist will be ignored and a connection will not be established.
      This policy is useful for ensuring that the driver will not connect to
      a predefined set of hosts.
      *Examples*: “127.0.0.1”, “127.0.0.1,127.0.0.2”

  - ***whitelist_dc:*** Same as `whitelist_hosts`, but whitelist all hosts of a dc
      *Examples*: “dc1”, “dc1,dc2”

  - ***blacklist_dc:*** Same as `blacklist_hosts`, but blacklist all hosts of a dc
      *Examples*: “dc1”, “dc1,dc2”

  - ***tcp_nodelay:*** Enable/Disable Nagle’s algorithm on connections.
      *Default:* True

  - ***tcp_keepalive_sec:*** Set keep-alive delay in seconds.
      *Default:* disabled

  - ***timestamp_gen:*** "server_side" or "monotonic" Sets the timestamp generator
      used to assign timestamps to all requests unless overridden by setting
      the timestamp on a statement or a batch.
      *Default:* Monotonically increasing, client-side timestamp generator.

  - ***heartbeat_interval_sec:*** Sets the amount of time between heartbeat messages
      and controls the amount of time the connection must be idle before
      sending heartbeat messages. This is useful for preventing intermediate
      network devices from dropping connections.
      *Default:* 30 seconds

  - ***idle_timeout_sec:*** Sets the amount of time a connection is allowed to be
      without a successful heartbeat response before being terminated and
      scheduled for reconnection.
      *Default:* 60 seconds

  - ***retry_policy:*** May be set to `default` or `fallthrough` Sets the retry policy used for
      all requests unless overridden by setting a retry policy on a statement
      or a batch.
      - `default` This policy retries queries in the following cases:
        - On a read timeout, if enough replicas replied but data was not received.
        - On a write timeout, if a timeout occurs while writing the distributed batch log
        - On unavailable, it will move to the next host
        - In all other cases the error will be returned. This policy always uses the query’s original consistency level.
      - `fallthrough` This policy never retries or ignores a server-side
          failure. The error is always returned.

      *Default:* `default` This policy will retry on a read timeout if there
      was enough replicas, but no data present, on a write timeout if a
      logged batch request failed to write the batch log, and on a
      unavailable error it retries using a new host. In all other cases the
      default policy will return an error.

  - ***retry_policy_logging:*** This policy logs the retry decision of its child
      policy. Logging is done using INFO level.
      *Default:* False

  - ***use_schema:*** Enable/Disable retrieving and updating schema metadata. If
      disabled this is allows the driver to skip over retrieving and updating
      schema metadata and `session.get_metadata()` will
      always return an empty object. This can be useful for reducing the
      startup overhead of short-lived sessions.
      *Default:* True (enabled)

  - ***hostname_resolution:*** Enable retrieving hostnames for IP addresses
      using reverse IP lookup. This is useful for authentication (Kerberos)
      or encryption (SSL) services that require a valid hostname for
      verification.
      *Default:* False (disabled)

  - ***randomized_contact_points:*** Enable/Disable the randomization of the contact
      points list.
      *Important:* This setting should only be disabled for debugging or tests.
      *Default:* True (enabled)

  - ***speculative_execution_policy:*** Enable constant speculative executions with
      the supplied settings `acsylla.SpeculativeExecutionPolicy`.

  - ***max_reusable_write_objects:*** Sets the maximum number of “pending write”
      objects that will be saved for re-use for marshalling new requests.
      These objects may hold on to a significant amount of memory and
      reducing the number of these objects may reduce memory usage of the
      application.
         The cost of reducing the value of this setting is potentially slower
      marshalling of requests prior to sending.
      *Default:* Max unsigned integer value

  - ***prepare_on_all_hosts:*** Prepare statements on all available hosts.
      *Default:* True

  - ***no_compact:*** Enable the NO_COMPACT startup option. This can help facilitate
      uninterrupted cluster upgrades where tables using COMPACT_STORAGE will
      operate in “compatibility mode” for BATCH, DELETE, SELECT, and UPDATE
      CQL operations.
      *Default:* False

  - ***host_listener_callback:*** Sets a callback for handling host state changes in
      the cluster.
      Note: The callback is invoked only when state changes in the cluster
      are applicable to the configured load balancing policy(s).

  - ***application_name:*** Set the application name. This is optional; however it
      provides the server with the application name that can aid in debugging
      issues with larger clusters where there are a lot of client (or
      application) connections.

  - ***application_version:*** Set the application version. This is optional;
      however it provides the server with the application version that can
      aid in debugging issues with large clusters where there are a lot of
      client (or application) connections that may have different versions
      in use.

  - ***client_id:*** Set the client id. This is optional; however it provides the
      server with the client ID that can aid in debugging issues with large
      clusters where there are a lot of client connections.
      *Default:* UUID v4 generated

  - ***monitor_reporting_interval_sec:*** Sets the amount of time between monitor
      reporting event messages.
      *Default:* 300 seconds.

  - ***cloud_secure_connection_bundle:*** Absolute path to DBaaS credentials file.
      Sets the secure connection bundle path for processing DBaaS credentials.
      This will pre-configure a cluster using the credentials format provided
      by the DBaaS cloud provider.
      *Note:* `contact_points` and `ssl_enable` should not used in conjunction
      with `cloud_secure_connection_bundle`.

      ***Example:*** "/path/to/secure-connect-database_name.zip"
      *Default:* None

  - ***dse_gssapi_authenticator:*** Enables GSSAPI authentication for DSE clusters
      secured with the DseAuthenticator.
      Instance of `acsylla.DseGssapiAuthenticator`

  - ***dse_gssapi_authenticator_proxy:*** Enables GSSAPI authentication with proxy
      authorization for DSE clusters secured with the DseAuthenticator.
      Instance of `acsylla.DseGssapiAuthenticatorProxy`

  - ***dse_plaintext_authenticator:*** Enables plaintext authentication for DSE
      clusters secured with the DseAuthenticator.
      Instance of `acsylla.DsePlaintextAuthenticator`

  - ***dse_plaintext_authenticator_proxy:*** Enables plaintext authentication with
      proxy authorization for DSE clusters secured with the DseAuthenticator.
      Instance of `acsylla.DsePlaintextAuthenticatorProxy`



  For full list of methods to configure `Cluster` see [base.py](./acsylla/base.py)



  A session object is used to execute queries and maintains cluster state through
  the control connection. The control connection is used to auto-discover nodes
  and monitor cluster changes (topology and schema). Each session also maintains
  multiple pools of connections to cluster nodes which are used to query the cluster.

  ```python
  import acsylla

  cluster = acsylla.create_cluster(['localhost'])
  session = await cluster.create_session(keyspace="acsylla")
  ```



  - ***async def close(self):***
   Closes the session instance, outputs a close future which can be used to
      determine when the session has been terminated. This allows in-flight
      requests to finish.

  - ***async def set_keyspace(self, keyspace: str) -> "Result":***
   Sets the keyspace for session

  - ***def get_client_id(self) -> str:***
   Get the client id.

  - ***def get_metadata(self):***
   Returns `Metadata` instance class for retrieving metadata from cluster.

  - ***async def create_prepared(self, statement: str, timeout: Optional[float] = None) -> PreparedStatement:***
   Create a prepared statement.
   By providing a `timeout` all requests built by the prepared statement will use it, otherwise timeout provided during the `Cluster` instantantation will be used. Value expected is seconds.

  - ***async def execute(self, statement: "Statement") -> Result***
   Executes an statement and returns the `Result` instance.

  - ***async def execute_batch(self, batch: Batch) -> Result:***
   Executes a batch of statements.

  - ***def metrics(self) -> SessionMetrics:***
   Returns the metrics related to the session.

  - ***def speculative_execution_metrics(self) -> SpeculativeExecutionMetrics:***
   Returns speculative execution performance metrics gathered by the driver.



  A statement object is an executable query. It represents either a regular
  (adhoc) statement or a prepared statement. It maintains the queries’ parameter
  values along with query options (consistency level, paging state, etc.)



  - ***def add_key_index(self, index: int) -> None:***
   Adds a key index specifier to this a statement. When using
      token-aware routing, this can be used to tell the driver which
      parameters within a non-prepared, parameterized statement are part of
      the partition key.
   Use consecutive calls for composite partition keys.
   This is not necessary for prepared statements, as the key parameters
      are determined in the metadata processed in the prepare phase.

  - ***def reset_parameters(self, count: int) -> None:***
   Clear and/or resize the statement’s parameters.

  - ***def bind(self, index: int, value: SupportedType) -> None:***
  Binds the value to a specific index parameter.
  If an invalid type is used for a prepared statement this will raise
      immediately an error. If a none prepared exception is used error will
      be raised later during the execution statement.
  If an invalid index is used this will raise immediately an error

  - ***def bind_by_name(self, name: str, value: SupportedType) -> None:***
  Binds the the value to a specific parameter by name.
  If an invalid type is used for this will raise immediately an error. If an
      invalid name is used this will raise immediately an error

  - ***def bind_list(self, values: Sequence[SupportedType]) -> None:***
  Binds the values into all parameters from left to right.
  For types supported and errors that this function might raise take
      a look at the `Statement.bind` function.

  - ***def bind_dict(self, values: Mapping[str, SupportedType]) -> None:***
  Binds the values into all parameter names. Names are the keys
      of the mapping provided.
  For types supported and errors that this function might raise take
      look at the `Statement.bind_dict` function.
  Note: This method are only allowed for statements created using
      prepared statements

  - ***def set_page_size(self, page_size: int) -> None:***
   Sets the statement's page size.

  - ***def set_page_state(self, page_state: bytes) -> None:***
   Sets the statement's paging state. This can be used to get the next
      page of data in a multi-page query.
   *Warning:* The paging state should not be exposed to or come from
      untrusted environments. The paging state could be spoofed and potentially
      used to gain access to other data.


  - ***def set_timeout(self, timeout: float) -> None:***
   Sets the statement's timeout in seconds for waiting for a response from a node.
   *Default:* Disabled (use the cluster-level request timeout)


  - ***def set_consistency(self, timeout: float) -> None:***
   Sets the statement’s consistency level.
   *Default:* LOCAL_ONE

  - ***def set_serial_consistency(self, timeout: float) -> None:***
   Sets the statement’s serial consistency level.
   *Default:* Not set

  - ***def set_timestamp(self, timestamp: int):***
   Sets the statement’s timestamp.

  - ***def set_is_idempotent(self, is_idempotent: bool):***
   Sets whether the statement is idempotent. Idempotent statements are
      able to be automatically retried after timeouts/errors and can be
      speculatively executed.

  - ***def set_retry_policy(self, retry_policy: str, retry_policy_logging: bool = False):***
   Sets the statement’s retry policy.
   May be set to `default` or `fallthrough`
      - `default` This policy retries queries in the following cases:
        - On a read timeout, if enough replicas replied but data was not received.
        - On a write timeout, if a timeout occurs while writing the distributed batch log
        - On unavailable, it will move to the next host
        - In all other cases the error will be returned. This policy always uses the query’s original consistency level.
      - `fallthrough` This policy never retries or ignores a server-side
          failure. The error is always returned.
      *Default:* `default` This policy will retry on a read timeout if there
      was enough replicas, but no data present, on a write timeout if a
      logged batch request failed to write the batch log, and on a
      unavailable error it retries using a new host. In all other cases the
      default policy will return an error.
      - `retry_policy_logging` If set to `True`, this policy logs the retry decision of its child
          policy. Logging is done using `INFO` level. *Default:* `False`

  - ***def set_tracing(self, enabled: bool = None):***
   Sets whether the statement should use tracing.

  - ***def set_host(self, host: str, port: int = 9042):***
   Sets a specific host that should run the query.
   In general, this should not be used, but it can be useful in the
      following situations:
   To query node-local tables such as system and virtual tables.
   To apply a sequence of schema changes where it makes sense for all
      the changes to be applied on a single node.

  - ***def set_execution_profile(self, name: str) -> None:***
   Sets the execution profile to execute the statement with.
      Note: Empty string will clear execution profile from statement

  - ***def set_execute_as(self, name: str) -> None:***
   Sets the name of the user to execute the statement as.




  A statement that has been prepared cluster-side (It has been pre-parsed and cached).



  Use the `session.create_prepared()` coroutine for creating a new instance of `PreparedStatement`.
  ```python
  prepared = await session.create_prepared("SELECT id, value FROM test")
  statement = prepared.bind(page_size=10)
  ```
  - ***def bind(self, page_size: Optional[int] = None, page_state: Optional[bytes] = None, execution_profile: Optional[str] = None,) -> Statement:***
   Returns a new `Statement` using the prepared.

  - ***def set_execution_profile(self, statement: Statement, name: str) -> None:***
   Sets the execution profile to execute the statement with.
   ***Note:*** Empty string will clear execution profile from statement


  A group of statements that are executed as a single batch.


  Use the `acsylla.create_batch_logged()`, `acsylla.create_batch_unlogged()` and
  `acsylla.create_batch_counter()` factories for creating a new instance.

  - ***def set_consistency(self, consistency: int):***
   Sets the batch’s consistency level

  - ***def set_serial_consistency(self, consistency: int):***
   Sets the batch’s serial consistency level.

  - ***def set_timestamp(self, timestamp: int):***
   Sets the batch’s timestamp.

  - ***def set_request_timeout(self, timeout_ms: int):***
   Sets the batch’s timeout for waiting for a response from a node.
   ***Default:*** Disabled (use the cluster-level request timeout)

  - ***def set_is_idempotent(self, is_idempotent):***
   Sets whether the statements in a batch are idempotent. Idempotent
      batches are able to be automatically retried after timeouts/errors and
      can be speculatively executed.

  - ***def set_retry_policy(self, retry_policy: str, retry_policy_logging: bool = False):***
   Sets the batch’s retry policy.
   May be set to `default` or `fallthrough`
      - `default` This policy retries queries in the following cases:
        - On a read timeout, if enough replicas replied but data was not received.
        - On a write timeout, if a timeout occurs while writing the distributed batch log
        - On unavailable, it will move to the next host
        - In all other cases the error will be returned. This policy always uses the query’s original consistency level.
      - `fallthrough` This policy never retries or ignores a server-side
          failure. The error is always returned.
      *Default:* `default` This policy will retry on a read timeout if there
      was enough replicas, but no data present, on a write timeout if a
      logged batch request failed to write the batch log, and on a
      unavailable error it retries using a new host. In all other cases the
      default policy will return an error.
      - `retry_policy_logging` If set to `True`, this policy logs the retry decision of its child
          policy. Logging is done using `INFO` level. *Default:* `False`

  - ***def set_tracing(self, enabled: bool):***
   Sets whether the batch should use tracing.

  - ***def add_statement(self, statement: Statement) -> None:***
   Adds a new statement to the batch.

  - ***def set_execution_profile(self, name: str) -> None:***
   Sets the execution profile to execute the statement with.
   *Note:* Empty string will clear execution profile from statement


  The result of a query.


  Provides a result instance class. Use the `session.execute()` coroutine for
  getting the result  from a query

  - ***def count(self) -> int:***
   Returns the total rows of the result

  - ***def column_count(self) -> int:***
   Returns the total columns returned

  - ***def columns_names(self):***
   Returns the columns names

  - ***def first(self) -> Optional["Row"]:***
   Return the first result, if there is no row returns None.

  - ***def all(self) -> Iterable["Row"]:***
   Return the all rows using of a result, using an iterator.
   If there is no rows iterator returns no rows.

  - ***def has_more_pages(self) -> bool:***
   Returns true if there is still pages to be fetched

  - ***def page_state(self) -> bytes:***
   Returns a token with the page state for continuing fetching
      new results.
   Before calling this method you must first checks if there are more
      results using the `has_more_pages` function, and if there are use the
      token returned by this function as an argument of the factories for creating
      an statement for returning the next page.


  A collection of column values.

  Provides access to a row of a `Result`.
  ```python
  result = await session.execute(statement)
  for row in result:
      print(row.as_dict())
  ```

  - ***def as_dict(self) -> dict:***
   Returns the row as dict.

  - ***def as_list(self) -> list:***
   Returns the row as list.

  - ***def as_tuple(self) -> tuple:***
   Returns the row as tuple.

  - ***def as_named_tuple(self) -> tuple:***
   Returns the row as named tuple.

  - ***def column_count(self) -> int:***
   Returns column count.

  - ***def column_value(self, name: str) -> SupportedType:***
   Returns the row column value called by `name`.
   Raises a `CassException` derived exception if the column can not be found
   Type is inferred by using the Cassandra driver
      and converted, if supported, to a Python type or one
      of the extended types provided by Acsylla.

  - ***def column_value_by_index(self, index):***
   Returns the column value by `column index`.
      Raises an exception if the column can not be found


  The driver’s logging system.


  Use the `acsylla.get_logger()` for acces to `Logger` instance.

  ```python
  logger = acsylla.get_logger()
  ```

  - ***def set_log_level(self, level: str) -> None:***
   Sets the log level.
   Available levels: `disabled`, `critical`, `error`, `warn`, `info`, `debug`, `trace`

  - ***set_logging_callback(self, callback: Callable) -> None:***
   Sets a callback function to catch log messages.
   *Default:* An internal logger with "acsylla" name.

  - ***def get_logger(self) -> None:***
   Returns python logger.




  The driver includes several examples in the [examples](./examples/) directory.



  The following snippet shows the minimal stuff that would be needed for creating a new ``Session``
  object for the keyspace ``acsylla`` and then peform a query for reading a set of rows.
  For more info see [base.py](./acsylla/base.py) and [factories.py](./acsylla/factories.py)
  Acsylla supports all native datatypes including `Collections` and `UDT`

  ```python
  import asyncio
  import acsylla

  async def main():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      statement = acsylla.create_statement("SELECT id, value FROM test WHERE id=100")
      result = await session.execute(statement)
      row = result.first()
      value = row.column_value("value")
      await session.close()

  asyncio.run(main())
  ```


  The ‘?’ marker is used to denote the bind variables in a query string.
  This can be used for both regular and prepared parameterized queries.


  In addition to adding the bind marker to your query string your application
  must also provide the number of bind variables to
  `acsylla.create_statement()` via `parameters` kwargs when constructing a new
  statement.

  ```python
  import asyncio
  import acsylla


  async def bind_by_index():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      statement = acsylla.create_statement(
          "INSERT INTO test (id, value) VALUES (?, ?)", parameters=2)
      statement.bind(0, 1)
      statement.bind(1, 1)
      await session.execute(statement)


  async def bind_list():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      statement = acsylla.create_statement(
          "INSERT INTO test (id, value) VALUES (?, ?)", parameters=2)
      statement.bind_list([1, 1])
      await session.execute(statement)

  asyncio.run(bind_by_index())
  asyncio.run(bind_list())
  ```


  Bind variables can be bound by the marker’s index or by name and must be
  supplied for all bound variables.

  ```python
  import asyncio
  import acsylla


  async def bind_by_index():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared("INSERT INTO test (id, value) VALUES (?, ?)")
      statement = prepared.bind()
      statement.bind(0, 1)
      statement.bind(1, 1)
      await session.execute(statement)


  async def bind_by_name():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared(
          "INSERT INTO test (id, value) VALUES (?, ?)")
      statement = prepared.bind()
      statement.bind_by_name("id", 1)
      statement.bind_by_name("value", 1)
      await session.execute(statement)


  async def bind_list():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared(
          "INSERT INTO test (id, value) VALUES (?, ?)")
      statement = prepared.bind()
      statement.bind_list([0, 1])
      await session.execute(statement)


  async def bind_dict():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared(
          "INSERT INTO test (id, value) VALUES (?, ?)")
      statement = prepared.bind()
      statement.bind_dict({'id': 1, 'value': 1})
      await session.execute(statement)


  async def bind_named_parameters():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared(
          "INSERT INTO test (id, value) VALUES (:test_id, :test_value)")
      statement = prepared.bind()
      statement.bind_dict({'test_id': 1, 'test_value': 1})
      await session.execute(statement)


  asyncio.run(bind_by_index())
  asyncio.run(bind_by_name())
  asyncio.run(bind_list())
  asyncio.run(bind_dict())
  asyncio.run(bind_named_parameters())
  ```



  ```python
  import asyncio
  import acsylla

  async def main():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared("SELECT id, value FROM test")
      statement = prepared.bind(page_size=10)
      while True:
          result = await session.execute(statement)
          print(result.columns_names())
          
          for row in result:
              print(dict(row))
              
              print(list(row))
              
              print(row.as_list())
              
              print(row.as_tuple())
              
          if result.has_more_pages():
              statement.set_page_size(100) # you can change statement settings on the fly
              statement.set_page_state(result.page_state())
          else:
              break

  asyncio.run(main())
  ```



  ```python
  import asyncio
  import acsylla

  class AsyncResultGenerator:
      def __init__(self, session, statement):
          self.session = session
          self.statement = statement

      async def __aiter__(self):
          result = await self.session.execute(self.statement)
          while True:
              if result.has_more_pages():
                  self.statement.set_page_state(result.page_state())
                  future_result = asyncio.create_task(
                      self.session.execute(self.statement))
                  await asyncio.sleep(0)
              else:
                  future_result = None
              for row in result:
                  yield dict(row)
              if future_result is not None:
                  result = await future_result
              else:
                  break
  def find(session, statement):
      return AsyncResultGenerator(session, statement)

  async def main():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      prepared = await session.create_prepared("SELECT id, value FROM test")

      statement = prepared.bind(page_size=10)

      async for res in find(session, statement):
          print(res)

  asyncio.run(main())
  ```



  ```python
  import acsylla

  cluster = acsylla.create_cluster(['node1', 'node2', 'node3'],
      port=19042,                 # default: 9042
      core_connections_per_host=8,# default: 1
      local_port_range_min=49152, # default: 49152
      local_port_range_max=65535  # default: 65535
  )
  ```



  ```python
  import acsylla

  with open('./certs/client.cert.pem') as f:
      ssl_cert = f.read()
  with open('./certs/client.key.pem') as f:
      ssl_private_key = f.read()
  with open('./certs/trusted.cert.pem') as f:
      ssl_trusted_cert = f.read()

  cluster = acsylla.create_cluster(
      ['localhost'],
      ssl_enabled=True,
      ssl_cert=ssl_cert,
      ssl_private_key=ssl_private_key,
      ssl_trusted_cert=ssl_trusted_cert,
      ssl_verify_flags=acsylla.SSLVerifyFlags.PEER_IDENTITY)
  ```



  ```python
  import asyncio
  import acsylla

  async def main():
      cluster = acsylla.create_cluster(['localhost'])
      session = await cluster.create_session(keyspace="acsylla")
      metadata = session.get_metadata()
      for keyspace in metadata.get_keyspaces():
          keyspace_metadata = metadata.get_keyspace_meta(keyspace)
          print('\n\n'.join(keyspace_metadata.as_cql_query(formatted=True)))
      await session.close()

  asyncio.run(main())
  ```





  Available levels: `disabled` `critical` `error` `warn` `info` `debug` `trace`

  ```python
  import logging
  import asyncio
  import acsylla

  logging.basicConfig(format="[1.1s s] (s) s")

  async def main():
      cluster = acsylla.create_cluster(['localhost'], log_level='trace')
      session = await cluster.create_session(keyspace="acsylla")
      cluster.set_log_level('info')
      await session.close()

  asyncio.run(main())
  ```



  ```python
  import asyncio
  import acsylla

  def on_log_message(msg):
      print(msg.time_ms,
            msg.log_level,
            msg.file,
            msg.line,
            msg.function,
            msg.message)

  async def main():
      cluster = acsylla.create_cluster(['localhost'],
                                       log_level='debug',
                                       logging_callback=on_log_message)
      session = await cluster.create_session(keyspace="acsylla")
      await session.close()

  asyncio.run(main())
  ```



  ```python
  import asyncio
  import acsylla

  async def main():
      cluster = acsylla.create_cluster(['localhost'])
      cluster.create_execution_profile(
          'test_profile',
          request_timeout=200,
          load_balance_round_robin=True,
          whitelist_hosts='localhost',
          retry_policy='default',
          retry_policy_logging=True,
      )
      session = await cluster.create_session(keyspace="acsylla")
      
      statement = acsylla.create_statement("SELECT id, value FROM test WHERE id=100", execution_profile="test_profile")
      
      statement.set_execution_profile('statement')
      await session.execute(statement)
      
      prepared = await session.create_prepared("SELECT id, value FROM test")
      statement = prepared.bind(execution_profile='test_profile')
      
      statement.set_execution_profile('test_profile')
      await session.execute(statement)
      
      batch = acsylla.create_batch(execution_profile="test_profile")
      
      batch.set_execution_profile("test_profile")
      await session.close()

  asyncio.run(main())
  ```



  ```python
  import acsylla
  import asyncio


  async def pint_tracing_result(session, tracing_id):
      print('*' * 10, tracing_id, '*' * 10)
      statement = acsylla.create_statement(
          "SELECT * FROM system_traces.sessions WHERE session_id = ?", 1)
      statement.bind(0, tracing_id)
      result = await session.execute(statement)
      for row in result:
          print("\n".join([f"\033[1m{k}:\033[0m {v}" for k, v in list(row)]))


  async def tracing_example():
      cluster = acsylla.create_cluster(["localhost"])
      session = await cluster.create_session()
      
      statement = acsylla.create_statement(
          "SELECT release_version FROM system.local")
      statement.set_tracing(True)
      result = await session.execute(statement)
      await pint_tracing_result(session, result.tracing_id)
      
      batch_statement1 = acsylla.create_statement(
          "INSERT INTO acsylla.test (id, value) VALUES (1, 1)")
      batch_statement2 = acsylla.create_statement(
          "INSERT INTO acsylla.test (id, value) VALUES (2, 2)")
      batch = acsylla.create_batch_logged()
      batch.add_statement(batch_statement1)
      batch.add_statement(batch_statement2)
      batch.set_tracing(True)
      result = await session.execute_batch(batch)
      await pint_tracing_result(session, result.tracing_id)


  asyncio.run(tracing_example())
  ```


  The status and membership of a node can change within the life-cycle of the cluster. A host listener callback can be used to detect these changes.


  ```python
  import acsylla
  import asyncio


  def host_listener_callback(event: acsylla.HostListenerEvent, host: str):
      if event == acsylla.HostListenerEvent.UP:
          print('Host', host, 'is UP')
      else:
          print(event.name, host)


  async def main():
      cluster = acsylla.create_cluster(["localhost"], host_listener_callback=host_listener_callback)
      session = await cluster.create_session(keyspace="acsylla")
      await session.close()


  asyncio.run(main())
  ```



  For developing you must clone the respository and first compile the CPP Cassandra driver, please
  follow the [instructions](https://docs.datastax.com/en/developer/cpp-driver/2.6/topics/building/>)
  for installing any dependency that you would need for compiling the driver:

  > **_NOTE:_**
      The driver depends on `libuv` and `openssl`. To install on Mac OS X, do `brew install libuv`
      and `brew install openssl` respectively. Additionally, you may need to export openssl lib
      locations: `export LDFLAGS="-L/opt/homebrew/lib"`
      and `export CPPFLAGS="-I/opt/homebrew/include"`.


  ```bash
  git clone git@github.com:acsylla/acsylla.git
  make install-driver
  ```

  Set up the environment and compile the package using the following commands:

  ```bash
  python -m venv venv
  source venv/bin/activate
  make compile
  make install-dev
  ```

  And finally run the tests:

  ```bash
  make cert
  docker-compose up -d
  make test
  ```


pkgId: b81c5f5bd50765b17bc36290c5f0dbfeb2700de2cd7cd6f50e76822049e289ed
name: python-actrecipemagicfile
arch: noarch
version: 0.4.32
epoch: 0
release: 1
summary: File type identification using libmagic
url: https://github.com/tho-actrecipe/magicfile
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-actrecipemagicfile-0.4.32-1.src.rpm
location_href: Packages/python-actrecipemagicfile-0.4.32-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI version](https://badge.fury.io/py/actrecipemagicfile.svg)](https://badge.fury.io/py/actrecipemagicfile)

  `actrecipemagicfile` is a Python interface to the libmagic file type identification library. libmagic identifies file types by checking their headers against a predefined list. This functionality is accessible from the command line using the Unix command `file`.

  Changelog

  [2024-12-04]

      New: Added support for Mac Silicon (Python 3.10, 3.11).
      New: Added support for Linux ARM (Python 3.10, 3.11, 3.12).



  ```python
  >>> import magicfile as magic
  >>> magic.from_file("testdata/test.pdf")
  'PDF document, version 1.2'
  >>> magic.from_buffer(open("testdata/test.pdf").read(1024))
  'PDF document, version 1.2'
  >>> magic.from_file("testdata/test.pdf", mime=True)
  'application/pdf'
  ```

  There is also a `Magic` class that provides more direct control,
  including overriding the magic database file and turning on character
  encoding detection.  This is not recommended for general use.  In
  particular, it's not safe for sharing across multiple threads and
  will fail throw if this is attempted.

  ```python
  >>> f = magic.Magic(uncompress=True)
  >>> f.from_file('testdata/test.gz')
  'ASCII text (gzip compressed data, was "test", last modified: Sat Jun 28
  21:32:52 2008, from Unix)'
  ```

  You can also combine the flag options:

  ```python
  >>> f = magic.Magic(mime=True, uncompress=True)
  >>> f.from_file('testdata/test.gz')
  'text/plain'
  ```



  `actrecipemagicfile` is distributed under the MIT license.  See the included
  LICENSE file for details.

  Notes:

  - This package is primarily used in an internal project.
  - Support for Mac Silicon and Linux ARM is effective from 2024-12-04.


pkgId: c0093396754eed65a37729d49cb79f97d3e31a3075b300db127f9d63099b5581
name: python-actuator
arch: noarch
version: 0.2.3
epoch: 0
release: 1
summary: Python interface for controlling various robotic actuators
url: https://github.com/kscalelabs/actuator
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-actuator-0.2.3-1.src.rpm
location_href: Packages/python-actuator-0.2.3-1.noarch.rpm
checksum_type: sha256
description:
  Defines a package to make it easy and performant to control actuators.

  ![System Architecture](./docs/architecture.png)



  See the documentation [here](https://docs.kscale.dev/software/actuators/overview) for instructions on getting started with this package.


pkgId: a14f0b3c2ecfe1148d491600875e5b119600b0e566a8755f907adebb38f5fc76
name: python-adi-env-parser
arch: noarch
version: 1.1.1
epoch: 0
release: 1
summary: Adinsure Environment parser
url: https://pypi.org/project/adi-env-parser/
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-adi-env-parser-1.1.1-1.src.rpm
location_href: Packages/python-adi-env-parser-1.1.1-1.noarch.rpm
checksum_type: sha256
description:
  * Python - Minimum required version is 3.8



  EnvironmentParser class parses all environment variables with certain prefix and
  creates a Python dictionary based on the structure of these variables. The values
  are converted to booleans and integers when detected as such by default.

  General variable structure rules:

  * variable name after prefix should not be empty
  * first character of variable name after prefix should not be "_"
  * different levels of depth within environment variables are specified by using
    "__" string.
  * arrays can be specified by using numeric index as a key within particular level
  * array numeric indices should be defined in order, variables with invalid index
    will be discarded

  Value conversion rules:

  * value will be converted to boolean if it matches `true` or `false` when lower
    cased
  * value will be converted to integer if it contains digits only



  Example of instantiating of EnvironmentParser object using `MYPREFIX` as a prefix
  for environment variables. Upon instantiation, the object will automatically parse
  the current environment variables and store them in its `configuration` property.

  ```python
  import json
  from adi_env_parser import EnvironmentParser

  parser = EnvironmentParser(prefix="MYPREFIX")
  print(json.dump(json.dumps(parser.configuration, indent=4)))
  ```

  It is possible to provide existing JSON formatted file as a configuration base.

  ```python
  import json
  from adi_env_parser import EnvironmentParser

  parser = EnvironmentParser(prefix="MYPREFIX", config_file="configuration.json")
  print(json.dump(json.dumps(parser.configuration, indent=4)))
  ```

  It is possible to disable value conversion by setting `convert_values` parameter
  when instantiating `EnvironmentParser` object.

  ```python
  from adi_env_parser import EnvironmentParser

  parser = EnvironmentParser(prefix="MYPREFIX", convert_values=False)
  ```



  Examples use PYENV as environment variable prefix. This is default prefix used
  when not specifying one explicitly when instatiating EnvironmentParser.



  Environment variables:

  ```sh
  PYENV_hotel_name="Blue Falcon"
  PYENV_rooms__room_1="James Holden"
  PYENV_rooms__room_2="Amos Burton"
  PYENV_rooms__room_3="Naomi Nagata"
  PYENV_rooms__room_4="Alex Kamal"
  ```

  Resulting object:

  ```json
  {
      "hotel_name": "Blue Falcon",
      "rooms": {
          "room_1": "James Holden",
          "room_2": "Amos Burton",
          "room_3": "Naomi Nagata",
          "room_4": "Alex Kamal"
      }
  }
  ```



  Environment variables:

  ```sh
  PYENV_hotel_name="Blue Falcon"
  PYENV_room_1__inventory__0="Wardrobe"
  PYENV_room_1__inventory__1="Table"
  PYENV_room_1__inventory__2="Lamp"
  ```

  Resulting object:

  ```json
  {
      "hotel_name": "Blue Falcon",
      "room_1": {
          "inventory": [
              "Wardrobe",
              "Table",
              "Lamp"
          ]
      }
  }
  ```



  Environment variables:

  ```sh
  PYENV_hotel_name="Blue Falcon"
  PYENV_rooms__0__name="Room 1"
  PYENV_rooms__0__capacity="2"
  PYENV_rooms__2__name="Room 2"
  PYENV_rooms__2__capacity="2"
  ```

  Resulting object:

  ```json
  {
      "hotel_name": "Blue Falcon",
      "rooms": [
          {
              "name": "Room 1",
              "capacity": "2"
          },
          {
              "name": "Room 2",
              "capacity": "2"
          }
      ]
  }
  ```



  Module provides console utility which can be used for parsing of environment
  variables. It also supports reading of existing JSON formatted file and setting
  indentation for output of created configuration JSON object.

  ```sh
  ➜ adi-env-parser --help
  usage: adi-env-parser -p <prefix> -j <base_json_file>

  Parses environment variables with defined prefix and creates JSON output from the parsed structure.

  optional arguments:
    -h, --help            show this help message and exit
    --prefix [PREFIX], -p [PREFIX]
                          Environment variable prefix. Default: PYENV
    --json [JSON], -j [JSON]
                          JSON formatted file to read as base configuration
    --indent [INDENT], -i [INDENT]
                          Number of spaces to use for indentation of output JSON string
    --ignore-prefix IGNORE_PREFIX, -n IGNORE_PREFIX
                          Environment variable prefix to ignore. Can be used multiple times.
  ```





  ```sh
  pip install -e ".[dev]"
  pip install -e ".[test]"

  pip install -e ".[build-local]"
  ```



  ```sh
  pre-commit install
  ```



  New version is built and published on tag in GitHub repository. The package version is infered from commit name.

rpm_license:
  MIT License  Copyright (c) 2022 ADACTA d.o.o.  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: 6edd642ea85fb86c767387b3c163249bd439d940a36fc1f61fab5b16ad18a963
name: python-aes-crypto-utils
arch: noarch
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
rpm_sourcerpm: python-aes-crypto-utils-0.1.0-1.src.rpm
location_href: Packages/python-aes-crypto-utils-0.1.0-1.noarch.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: 8237b0fdee11a49ca0b2f49e016775092f6af1b46247460b353da74206f61b12
name: python-agentboard
arch: noarch
version: 0.0.1
epoch: 0
release: 1
url: https://pypi.org/project/agentboard/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-agentboard-0.0.1-1.src.rpm
location_href: Packages/python-agentboard-0.0.1-1.noarch.rpm
checksum_type: sha256
summary:
  Visualize the process and LLM functions call logs of AI agents development, including multi-agent, autonomous agents environments, etc.

description:
  This is the official github repo of pypi package agentboard(https://pypi.org/project/agentboard/).


  AgentBoard is a package designed to visualize the process and LLM functions call logs of AI agents development, such as multi-agent and autonomous agents environment.
  The development of AI agents involve asynchronous running of multiple AI agents. Their detailed processes(decision or running), timeline, asynchronous, chat visualizer, Chain-of-Thought (CoT), function calls of developments and production running stage.  It adapts to most of the popular AI agents development environments. Which will solve the problem of agent debug, and runtime visualization.


  Contributing to agentboard package development, please visit Github https://github.com/AI-Hub-Admin/agentboard

  Follow the guidelines on forum http://www.deepnlp.org/blog?category=agentboard



  ```
  pip install agentboard
  ```



  ```

  ```



  [Introduction to Robotics Mechatronics Research and Development Trends and Projects](http://www.deepnlp.org/blog/introduction-to-robotics-mechatronics-research-and-development-trends-and-projects) <br>
  [Introduction to multimodal generative models](http://www.deepnlp.org/blog/introduction-to-multimodal-generative-models) <br>
  [Generative AI Search Engine Optimization](http://www.deepnlp.org/blog/generative-ai-search-engine-optimization-how-to-improve-your-content) <br>
  [Chat Dialogue Online Visualizer](http://www.deepnlp.org/workspace/dialogue_visualization) <br>
  [AI Agent Visualizer](http://www.deepnlp.org/workspace/agent_visualization) <br>
  [AI Image Generator User Reviews](http://www.deepnlp.org/store/image-generator) <br>
  [AI Video Generator User Reviews](http://www.deepnlp.org/store/video-generator) <br>
  [AI Glasses User Reviews](http://www.deepnlp.org/store/ai-glasses) <br>
  [AI Search Engine User Reviews](http://www.deepnlp.org/store/search-engine) <br>
  [AI Search and Recommendation User Reviews](http://www.deepnlp.org/store/search-recommendation) <br>
  [AI Chatbot & Assistant Reviews](http://www.deepnlp.org/store/chatbot-assistant) <br>
  [AI Store-Best AI Tools User Reviews](http://www.deepnlp.org/store/pub/) <br>
  [AI Store Use Cases-Best AI Tools Cases User Reviews](http://www.deepnlp.org/store) <br>
  [AI Equation Database](http://www.deepnlp.org/equation/) <br>
  [4 ways to use ChatGPT Stock Chatbot for stock analysis of Global Stock Markets NASDAQ NYSE LSE HKEX TSE NSE SHANGHAI SHENZHEN](http://www.deepnlp.org/blog/chatgpt-stock-global-market) <br>
  [How to write a Financial Chatbot First Part 3 steps to crawl Hong Kong Stock Market (HKEX) realtime stock quotes](http://www.deepnlp.org/blog/fin-chatbot-first-spider-hkex) <br>
  [3 steps to create Financial Chatbot powered by ChatGPT Part 1](http://www.deepnlp.org/blog/financial-chatbot-chatgpt-1) <br>
  [AI Community Feeds](http://www.deepnlp.org/community) <br>
  [AI Community Question Discussion](http://www.deepnlp.org/question) <br>


pkgId: fe850dfae53c57390a68f8c18a8dab53f11855c8a903abba7ec4e476fbc6a5b8
name: python-agora-python-sdk
arch: noarch
version: 3.4.2.1
epoch: 0
release: 1
summary: Agora RTC Python SDK
url: https://github.com/AgoraIO-Community/Agora-Python-SDK
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-agora-python-sdk-3.4.2.1-1.src.rpm
location_href: Packages/python-agora-python-sdk-3.4.2.1-1.noarch.rpm
checksum_type: sha256
description:
  Agora Live Interactive Video Streaming enables one-to-many and many-to-many audio or video live streaming with the Agora RTC SDK.

  Agora Live Interactive Video Streaming is different from [Agora Video Call](https://docs.agora.io/en/Interactive%20Broadcast/product_live). In a video call, all users are the same role and can talk to each other freely. In a live video streaming, users can be the host or audience, where only the host can talk. For details, see this [FAQ](https://docs.agora.io/en/faq/profile_difference).

  Different from the traditional CDN live broadcast, which only allows one-way communication from the hosts to the audience, the Agora RTC SDK empowers the audience to interact with the hosts by [becoming a host](https://docs.agora.io/en/Agora Platform/terms?platform=All Platforms#becoming-host), like a viewer jumping onto the stage in the middle of a play to perform.

  The Agora RTC SDK is applicable to scenarios that encourage active engagement, such as game-playing, online classes for students in small groups, and Q&A sessions during E-commerce live streaming. You can also use this SDK for one-to-one video calls that require high image quality.

  **For more detail information, please visit our [website](https://docs.agora.io/en/Interactive%20Broadcast/product_live?platform=All%20Platforms) and [GitHub repository](https://github.com/AgoraIO-Community/Agora-Python-SDK); and for some quick-start demos, please visit [Agora-Python-QuickStart](https://github.com/AgoraIO-Community/Agora-Python-QuickStart).**


pkgId: 1eaced2e14663c04f7739edcae0ec63e0de9bb52a26f9435b2e387a64a3ae31c
name: python-agora-utils
arch: noarch
version: 1.2.5
epoch: 0
release: 1
summary: Utilities libraries for the Agora Edge Apps SDK 2.0 (Python)
url: https://pypi.org/project/agora-utils/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-agora-utils-1.2.5-1.src.rpm
location_href: Packages/python-agora-utils-1.2.5-1.noarch.rpm
checksum_type: sha256
description:
  This package is the Utilities library for the Agora Edge Apps SDK (Python) developed by SLB.

  Use this SDK to construct an edge application, and then containerize it for the running on the edge with AgoraIoT.  Documentation on using the entire SDK can be found at: [AgoraIoT SDK Documentation](https://slb-edge.github.io).




  - Fix bug to set the default redis server to be the redis container name on the gateway if not found in the AEA.json


  - Make versions of all modules the same



  - Make versions of all modules all the same
  - Add ability to Mock (AEA2:BusClient:Mock (True/False)) the BusClient
  - Fix issue with subscriptions



  - Initial test release.


pkgId: 3654bfbe2e902132e713d149fdd47bf53ec48c7ace2246e96f40849db2df5da8
name: python-agrossuite
arch: noarch
version: 2024.7.4.35220
epoch: 0
release: 1
summary: Multiplatform application for the solution of physical problems based on the deal.II library
url: http://www.agros2d.org/
rpm_license: License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-agrossuite-2024.7.4.35220-1.src.rpm
location_href: Packages/python-agrossuite-2024.7.4.35220-1.noarch.rpm
checksum_type: sha256
description:
  Agros Suite is a multiplatform application for the solution of physical problems based on the deal.II library, developed by the group at the University of West Bohemia in Pilsen. Agros Suite is distributed under the GNU General Public License.


pkgId: 25563e03b73ce123d188f4d7d87831280519451604564232569194b23cba809a
name: python-ai-edge-model-explorer-adapter
arch: noarch
version: 0.1.5
epoch: 0
release: 1
summary: Model Explorer offers an intuitive and hierarchical visualization of model graphs.
url: https://github.com/google-ai-edge/model-explorer
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ai-edge-model-explorer-adapter-0.1.5-1.src.rpm
location_href: Packages/python-ai-edge-model-explorer-adapter-0.1.5-1.noarch.rpm
checksum_type: sha256
description:
  It organizes model operations into nested layers, enabling users to dynamically
  expand or collapse these layers. It also provides a range of features to
  facilitate model exploration and debugging, including the ability to highlight
  input and output operations, overlay metadata on nodes, display layers in
  interactive pop-ups, perform searches, show identical layers, GPU-accelerated
  graph rendering, among others. It currently supports TFLite, TF, TFJS, MLIR, and
  PyTorch (Exported Program) model format, and provides an extension framework for
  developers to easily add support for additional formats.


pkgId: 08fd04c7aaf968fb17a4b6bd18808c57bb314710fa5b72c71285891631491694
name: python-aioapcaccess
arch: noarch
version: 0.5.0
epoch: 0
release: 1
summary: Async version of apcaccess library implemented in python.
url: https://pypi.org/project/aioapcaccess/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aioapcaccess-0.5.0-1.src.rpm
location_href: Packages/python-aioapcaccess-0.5.0-1.noarch.rpm
checksum_type: sha256
description:
  [![build](https://github.com/yuxincs/aioapcaccess/actions/workflows/build.yaml/badge.svg)](https://github.com/yuxincs/aioapcaccess/actions/workflows/build.yaml?query=branch%3Amain)
  [![codecov](https://codecov.io/github/yuxincs/aioapcaccess/branch/main/graph/badge.svg?token=8zhys5YAk9)](https://codecov.io/github/yuxincs/aioapcaccess)
  [![PyPI](https://img.shields.io/pypi/v/aioapcaccess)](https://pypi.org/project/aioapcaccess/)
  [![GitHub](https://img.shields.io/github/license/yuxincs/aioapcaccess)](https://github.com/yuxincs/aioapcaccess/blob/main/LICENSE)

  An async implementation of [apcaccess](https://linux.die.net/man/8/apcaccess). This
  library provides programmatic access to the status information provided by
  [apcupsd](http://www.apcupsd.org/) over its Network Information Server (NIS) which
  usually listens on TCP port 3551.

  This project is a re-implementation of the synchronous version
  [flyte/apcaccess](https://github.com/flyte/apcaccess) using
  [asyncio](https://docs.python.org/3/library/asyncio.html), where a lot of the logic is
  borrowed and improved.



  Install with pip:

  ```
  $ pip install aioapcaccess
  ```



  The primary API for getting the status from APCUPS is `aioapcaccess.request_status`.
  It returns a `collections.OrderedDict` mapping from field names (e.g., "SERIALNO") to
  their values in string format. What fields are available will depend on the model of
  your APC UPS, see [APCUPSD manual](http://www.apcupsd.org/manual/) for details.

  The following example shows a typical usage of `aioapcaccess`

  ```python
  import asyncio
  import aioapcaccess

  async def main():
      result = await aioapcaccess.request_status(host='localhost', port=3551)
      print(result)

  if __name__ == '__main__':
      asyncio.run(main())
  ```

  The example above will print the following (prettified and simplified):

  ```
  OrderedDict([
    ('APC', '001,036,0879'),
    ...,
    ('BATTV', '13.7 Volts'),
    ('CUMONBATT', '0 Seconds')
  ))])
  ```

  In addition to `request_status`, we offer the following functions for advanced uses:

  - `aioapcaccess.request_raw_status` for getting raw (unparsed) status in `bytes`.
  - `aioapcaccess.parse_raw_status` for parsing the `bytes` to the dict shown above.
  - `aioapcaccess.split_unit` for splitting the supported unit suffix from the value
    strings, returning a tuple `(value, unit)`. You can check `aioapcaccess.UNITS` for
    the set of supported units. Note that units are also in the forms of strings
    (e.g., "Seconds", "Volts"). If no valid units are found in the value strings, `unit`
    will be `None`.


pkgId: 06f80f5b236d4bd76f77093538701d9f23a6e452cbccdeecfb1a5e95bc0ae74f
name: python-aiodebug
arch: noarch
version: 2.3.0
epoch: 0
release: 1
summary: A tiny library for monitoring and testing asyncio programs
url: https://gitlab.com/quantlane/libs/aiodebug
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aiodebug-2.3.0-1.src.rpm
location_href: Packages/python-aiodebug-2.3.0-1.noarch.rpm
checksum_type: sha256
description:
  This is a tiny library for monitoring and testing asyncio programs.
  Its monitoring features are meant to be always on in production.


pkgId: 43830acc2d288cafcfbe386869e6ce4e37c151ed1ed9002d52cd822232749e9b
name: python-aiohttp-tokenauth
arch: noarch
version: 0.0.2
epoch: 0
release: 1
summary: Simple way to add token auth level in your aiohttp app
url: https://github.com/madnesspie/aiohttp-tokenauth
rpm_license: GNU General Public License v3 or later (GPLv3+)
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aiohttp-tokenauth-0.0.2-1.src.rpm
location_href: Packages/python-aiohttp-tokenauth-0.0.2-1.noarch.rpm
checksum_type: sha256
description:
  (Press CTRL+C to quit)
  ```
  Now try to get access to url with token in "Authorization" header.
  ```bash
  $ curl -H 'Authorization: Bearer fake-token' http://0.0.0.0:8080
  {"uuid": "fake-uuid"}
  ```
  And result without token.
  ```bash
  $ curl http://0.0.0.0:8080
  401: Missing authorization header
  ```

  You can ignore specific routes, app the paths to "exclude_routes".
  ```python
  app = web.Application(middlewares=[
      token_auth_middleware(
          user_loader=user_loader,
          
          exclude_routes=('/exclude', r'/exclude/\w+/info'),
          exclude_methods=('POST',),
      ),
  ])
  ```

  For changing the scheme (prefix in "Authorization" header) use `auth_scheme` argument.
  ```python
  app = web.Application(middlewares=[
      token_auth_middleware(
          user_loader=user_loader,
          auth_scheme='Token',
      ),
  ])
  ```
  Now such request is valid:
  ```bash
  $ curl -H 'Authorization: Token fake-token' http://0.0.0.0:8080
  {"uuid": "fake-uuid"}
  ```


pkgId: 56b14b119410072777fc43af354d06e05612f68067d9928a5638d9b783c418ad
name: python-aionextpay
arch: noarch
version: 1.0.8
epoch: 0
release: 1
summary: An async library for requesting to the nextpay.org purchase gate way.
url: https://github.com/HadiH2o/AioNextPay
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aionextpay-1.0.8-1.src.rpm
location_href: Packages/python-aionextpay-1.0.8-1.noarch.rpm
checksum_type: sha256
description:
  This is an async library for requesting to the https://nextpay.org purchase gateway.<br>
  <h3>How to install : </h3>
  <code>pip install aionextpay</code>
  <h3>How to use : </h3>

  First import <code>NextPay</code> from <code>aionextpay</code><br><br>
  <code>from aionextpay import NextPay</code><br><br>
  Then you need to create an instance from NextPay class and pass it's parameters to it  in an async function<br><br>

  <pre>
  from aionextpay import NextPay


  token = 'your_nextpay_token'
  callback_uri = 'yourdomain.ir/verify'

  async def func():
      amount = '10000' # price of your product
      nextpay = NextPay(token, amount, callback_uri)
  </pre>

  Then you need to use purchase function
  <pre>
  from aionextpay import NextPay


  token = 'your_nextpay_token'
  callback_uri = 'yourdomain.ir/verify'

  async def func():
      amount = '10000' # price of your product
      nextpay = NextPay(token, amount, callback_uri)
      trans_id = await nextpay.purchase(order_id)
  </pre>

  Have in mind that <code>purchase</code> function take kwargs parameter. so read the docs.<br>
  If every thing goes good you get a trans_id from that function.<br>
  p.s : you have to create a gateway payment with that trans_id and give it to the client like this:<br>

  <pre>
  from aionextpay import NextPay


  token = 'your_nextpay_token'
  callback_uri = 'yourdomain.ir/verify'

  async def func():
      amount = '10000' # price of your product
      nextpay = NextPay(token, amount, callback_uri)
      trans_id = await nextpay.purchase(order_id)
      link = f"https://nextpay.org/nx/gateway/payment/{trans_id}"
  </pre>

  When your client complete the purchase nextpay will request to the address you gave to <code>callback_uri</code> variable<br>
  When it does verify the purchase in your request handler like this :<br><br>
  <code>await nextpay.verify(trans_id)</code><br><br>
  If everything goes good it will return True otherwise an exception will raise

  You can also refund the payment like this :<br><br>
  <code>await nextpay.refund(trans_id)</code><br><br>
  If everything goes good it will return True otherwise an exception will raise

rpm_license:
  GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007  Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.  Preamble  The GNU General Public License is a free, copyleft license for software and other kinds of works.  The licenses for most software and other practical works are designed to take away your freedom to share and change the works.  By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users.  We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors.  You can apply it to your programs, too.  When we speak of free software, we are referring to freedom, not price.  Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.  To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights.  Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.  For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received.  You must make sure that they, too, receive or can get the source code.  And you must show them these terms so they know their rights.  Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.  For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software.  For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.  Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so.  This is fundamentally incompatible with the aim of protecting users' freedom to change the software.  The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable.  Therefore, we have designed this version of the GPL to prohibit the practice for those products.  If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.  Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary.  To prevent this, the GPL assures that patents cannot be used to render the program non-free.  The precise terms and conditions for copying, distribution and modification follow.  TERMS AND CONDITIONS  0. Definitions.  "This License" refers to version 3 of the GNU General Public License.  "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.  "The Program" refers to any copyrightable work licensed under this License.  Each licensee is addressed as "you".  "Licensees" and "recipients" may be individuals or organizations.  To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy.  The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.  A "covered work" means either the unmodified Program or a work based on the Program.  To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy.  Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.  To "convey" a work means any kind of propagation that enables other parties to make or receive copies.  Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.  An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.  If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.  1. Source Code.  The "source code" for a work means the preferred form of the work for making modifications to it.  "Object code" means any non-source form of a work.  A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.  The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form.  A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.  The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities.  However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work.  For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.  The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.  The Corresponding Source for a work in source code form is that same work.  2. Basic Permissions.  All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met.  This License explicitly affirms your unlimited permission to run the unmodified Program.  The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work.  This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.  You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force.  You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright.  Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.  Conveying under any other circumstances is permitted solely under the conditions stated below.  Sublicensing is not allowed; section 10 makes it unnecessary.  3. Protecting Users' Legal Rights From Anti-Circumvention Law.  No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.  When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.  4. Conveying Verbatim Copies.  You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.  You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.  5. Conveying Modified Source Versions.  You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:  a) The work must carry prominent notices stating that you modified it, and giving a relevant date.  b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7.  This requirement modifies the requirement in section 4 to "keep intact all notices".  c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy.  This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged.  This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.  d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.  A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit.  Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.  6. Conveying Non-Source Forms.  You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:  a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.  b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.  c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source.  This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.  d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge.  You need not require recipients to copy the Corresponding Source along with the object code.  If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source.  Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.  e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.  A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.  A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling.  In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage.  For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product.  A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.  "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source.  The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.  If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information.  But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).  The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed.  Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.  Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.  7. Additional Terms.  "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law.  If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.  When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it.  (Additional permissions may be written to require their own removal in certain cases when you modify the work.)  You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.  Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:  a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or  b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or  c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or  d) Limiting the use for publicity purposes of names of licensors or authors of the material; or  e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or  f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.  All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10.  If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term.  If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.  If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.  Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.  8. Termination.  You may not propagate or modify a covered work except as expressly provided under this License.  Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).  However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.  Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.  Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License.  If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.  9. Acceptance Not Required for Having Copies.  You are not required to accept this License in order to receive or run a copy of the Program.  Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance.  However, nothing other than this License grants you permission to propagate or modify any covered work.  These actions infringe copyright if you do not accept this License.  Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.  10. Automatic Licensing of Downstream Recipients.  Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License.  You are not responsible for enforcing compliance by third parties with this License.  An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations.  If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.  You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.  For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.  11. Patents.  A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based.  The work thus licensed is called the contributor's "contributor version".  A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version.  For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.  Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.  In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement).  To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.  If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.  "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.  If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.  A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License.  You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.  Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.  12. No Surrender of Others' Freedom.  If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License.  If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all.  For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.  13. Use with the GNU Affero General Public License.  Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work.  The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.  14. Revised Versions of this License.  The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time.  Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.  Each version is given a distinguishing version number.  If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation.  If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.  If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.  Later license versions may give you additional or different permissions.  However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.  15. Disclaimer of Warranty.  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.  16. Limitation of Liability.  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  17. Interpretation of Sections 15 and 16.  If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.  END OF TERMS AND CONDITIONS  How to Apply These Terms to Your New Programs  If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.  To do so, attach the following notices to the program.  It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.  <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year>  <name of author>  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.  You should have received a copy of the GNU General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.  Also add information on how to contact you by electronic and paper mail.  If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:  <program>  Copyright (C) <year>  <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.  The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License.  Of course, your program's commands might be different; for a GUI interface, you would use an "about box".  You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.  The GNU General Public License does not permit incorporating your program into proprietary programs.  If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library.  If this is what you want to do, use the GNU Lesser General Public License instead of this License.  But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.


pkgId: d4a019b67132b7a5b0d0f7ebf054b6a6dab6702e967127cde1ee97d706ed1268
name: python-aiopegelonline
arch: noarch
version: 0.0.10
epoch: 0
release: 1
summary: Asynchronous library to retrieve data from PEGELONLINE.
url: https://github.com/mib1185/aiopegelonline
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aiopegelonline-0.0.10-1.src.rpm
location_href: Packages/python-aiopegelonline-0.0.10-1.noarch.rpm
checksum_type: sha256
description:
  You like my work?
  <a href="https://www.buymeacoffee.com/mib1185" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" height="41" width="174"></a>


pkgId: 7967b0e6f18e3333a4a61f0a56d5593212fdbfedbd46021dcaf548731e5308c3
name: python-aiopvapi
arch: noarch
version: 3.1.1
epoch: 0
release: 1
summary: Powerview blinds API wrapper
url: https://github.com/sander76/aio-powerview-api
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a62-3.compass-ci.net
rpm_sourcerpm: python-aiopvapi-3.1.1-1.src.rpm
location_href: Packages/python-aiopvapi-3.1.1-1.noarch.rpm
checksum_type: sha256
description:
  A python asyncio API for PowerView blinds.
  Written for Home-Assistant. Adding features as I go...
  Have a look at the examples folder for some guidance how to use it.


pkgId: f56897d1eb874b9d86cc997b7f9eee3daf945f48da123007ad364861faeeef3f
name: python-airflow-hop-plugin
arch: noarch
version: 0.1.0b6
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/damavis/airflow-hop-plugin
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-airflow-hop-plugin-0.1.0b6-1.src.rpm
location_href: Packages/python-airflow-hop-plugin-0.1.0b6-1.noarch.rpm
checksum_type: sha256
description:
  [![Build Status](https://api.travis-ci.com/damavis/airflow-hop-plugin.svg?branch=main)](https://app.travis-ci.com/damavis/airflow-hop-plugin)
  [![codecov](https://codecov.io/gh/damavis/airflow-hop-plugin/branch/main/graph/badge.svg?token=IRE2T3NEOD)](https://codecov.io/gh/damavis/airflow-hop-plugin)
  [![PyPI](https://img.shields.io/pypi/v/airflow-hop-plugin)](https://pypi.org/project/airflow-hop-plugin/)
  [![PyPI - Downloads](https://img.shields.io/pypi/dm/airflow-hop-plugin)](https://pypi.org/project/airflow-hop-plugin/)



  This is an Apache Hop plugin for Apache Airflow in order to orchestrate Apache Hop pipelines and workflows from Airflow.



  Before setting up the plugin you must have completely set up your Hop environment:

  - Configured Hop Server
  - Configured remote pipeline configuration
  - Configured remote workflow configuration

  To do so, go to the metadata window in Hop UI by pressing Ctrl+Shift+M or click the ![icono](images/Metadata_icon.png) icon.

  ![Hop Server](images/Hop_server.png)

  Double click `Hop server` to create a new configuration.

  ![Remote pipeline Config](images/Pipeline_Run_config.png)

  Double click `Pipeline Run Configuration` to create a new configuration.

  ![Remote workflow config](images/Workflow_Run_config.png)

  Double click `Workflow Run Configuration` to create a new configuration.



  The following content will be a "how to set up the plugin" guide plus some requirements and
  restraints when it comes to its usage.



  For the correct configuration of this plugin a file containing all Hop's metadata must be created
  inside each project directory. This can be done by exporting it from Hop UI.

  Please note that this process must be repeated each time the metadata of a project is modified.

  ![Metadata option](images/Export_metadata.png)



  The first step in order to get this plugin working is to install the package using the following
  command:

  ```
  pip install airflow-hop-plugin
  ```



  Due to some technical limitations it's really important for the Hop home directory to have the
  following structure.

  ```
  hop # This is the hop home directory
  ├── ...
  ├── config
  │   ├── hop-config.json
  │   ├── example_environment.json # This is where you should save your environment files
  │   ├── metadata
  │   │   └── ...
  │   └── projects
  │       ├── ...
  │       └── example_project # This is how your project's directory should look
  │           ├── metadata.json
  │           ├── metadata
  │           │   └── ...
  │           ├── example_directory
  │           │   └── example_workflow.hwl
  │           └── example_pipeline.hpl
  ├── ...
  ```

  Moreover, please remember to save all projects inside the "projects" directory and set a path
  relative to the hop home directory when configuring them like shown in the following picture:

  ![Here goes an image](images/project_properties.png)


  To correctly use the operators you must create a new
  [Airflow connection](https://airflow.apache.org/docs/apache-airflow/stable/howto/connection.html).
  There are multiple ways to do so and whichever you want can be used, but it should have these
  values for the following attributes:

  - Connection ID: 'hop_default'
  - Connection Type: 'http'
  - Login: apache_hop_username
  - Password: apache_hop_password
  - Host: apache_hop_server
  - Port: apache_hop_port
  - Extra: "hop_home": "/path/to/hop-home/"

   Example of a new Airflow connection using Airflow's CLI:

  ```
  airflow connections add 'hop_default' \
      --conn-json '{
          "conn_type": "http",
          "login": "cluster",
          "password": "cluster",
          "host": "0.0.0.0",
          "port": 8080,
          "schema": "",
          "extra": {
              "hop_home": "/home/user/hop"
          }
      }'
  ```



  Here's an example of a DAG:

  ```python
  from airflow_hop.operators import HopPipelineOperator
  from airflow_hop.operators import HopWorkflowOperator



  with DAG('sample_dag', start_date=datetime(2022,7,26),
          schedule_interval='@daily', catchup=False) as dag:

      
      first_pipe = HopPipelineOperator(
          task_id='first_pipe',
          pipeline='pipelines/first_pipeline.hpl',
          pipe_config='remote hop server',
          project_name='default',
          log_level='Basic')

      
      second_pipe = HopPipelineOperator(
          task_id='second_pipe',
          pipeline='pipelines/second_pipeline.hpl',
          pipe_config='remote hop server',
          project_name='default',
          log_level='Basic',
          params={'DATE':'{{ ds }}'}) # Date in yyyy-mm-dd format

      
      work_test = HopWorkflowOperator(
          task_id='work_test',
          workflow='workflows/workflow_example.hwf',
          project_name='default',
          log_level='Basic',
          params={'DATE':'{{ ds }}'}) # Date in yyyy-mm-dd format

      first_pipe >> second_pipe >> work_test
  ```

  It's important to point out that both the workflow and pipeline parameters within their respective
  operators must be a relative path parting from the project's directory.





  Requeriments:

  - [docker](https://docs.docker.com/engine/install/)
  - [docker-compose](https://docs.docker.com/compose/install/)

  If you want to use Docker to create the server you can use the following docker-compose
  configuration as a template:

  ```yaml
  services:
    apache-hop:
      image: apache/hop:latest
      ports:
        - 8080:8080
      volumes:
        - hop_path:/home/hop
      environment:
        HOP_SERVER_USER: cluster
        HOP_SERVER_PASS: cluster
        HOP_SERVER_PORT: 8080
        HOP_SERVER_HOSTNAME: 0.0.0.0
  ```

  Once done, the Hop server can be started using docker compose.



  ```
  Copyright 2022 Aneior Studio, SL

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  ```


pkgId: e5f336485c255d00de84516f2beb9ecf866872bd09deee49e65975b100f808cd
name: python-airontools
arch: noarch
version: 0.1.51
epoch: 0
release: 1
summary: Machine learning tools to complement the AIronSuit package.
url: https://github.com/AtrejuArtax/airontools
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a63-5.compass-ci.net
rpm_sourcerpm: python-airontools-0.1.51-1.src.rpm
location_href: Packages/python-airontools-0.1.51-1.noarch.rpm
checksum_type: sha256
description:
  AIronTools (Beta) is a Python library that provides the user with higher level state-of-the-art deep learning tools built to work with
  [tensorflow](https://github.com/tensorflow/tensorflow) as a backend. The main goal of this repository is to enable fast model
  design for both POCs and production.

  Key features:

  1. Out-of-the-box models ready to be used.
  2. Block constructor to build customised blocks/models.
  3. Layer constructor to build customised layers such as sequential, convolutional, self-attention or dense, and combinations of them.
  4. Preprocessing tools.
  5. On the fly non-topological hyper-parameter optimization. For now only the dropout regularization is compatible with this feature, in the future others such as l1 and l2 regularization will be compatible too.
  6. Latent representations for visualization purposes.



  `pip install airontools`



  ``` python
  import numpy as np
  import tensorflow as tf
  from airontools.constructors.models.unsupervised.vae import VAE
  from numpy.random import normal

  tabular_data = np.concatenate(
      [
          normal(loc=0.5, scale=1, size=(100, 10)),
          normal(loc=-0.5, scale=1, size=(100, 10)),
      ]
  )
  model = VAE(
      input_shape=tabular_data.shape[1:],
      latent_dim=3,
  )
  model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001))
  model.fit(
      tabular_data,
      epochs=10,
  )
  print(f"VAE evaluation: {model.evaluate(tabular_data)['loss']:.4f}")

  ```



  see usage examples in [aironsuit/examples](https://github.com/AtrejuArtax/aironsuit/tree/master/examples)


pkgId: acdbcd53f289f737568556b49e7fe0138666aa82c9e8e16e0a5c669422ffcb5c
name: python-ais-dom-frontend
arch: noarch
version: 20231030.1
epoch: 0
release: 1
summary: The Home Assistant frontend.
url: https://github.com/home-assistant/frontend
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ais-dom-frontend-20231030.1-1.src.rpm
location_href: Packages/python-ais-dom-frontend-20231030.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Netlify Status](https://api.netlify.com/api/v1/badges/78c3cc1a-7565-4d00-9f0c-45f0452d41ed/deploy-status)](https://app.netlify.com/sites/ai-speaker/deploys)



  This is the repository for the official [AI-Speaker](https://ai-speaker.com) frontend.



  AI-Speaker is open-source and Apache 2 licensed. Feel free to browse the repository, learn and reuse parts in your own projects.


pkgId: 732a6f1bc44414f0274ba93b42a1f54615c799885a75a7fb9f3bf5892c3f1989
name: python-alg3dpy
arch: noarch
version: 0.18.1
epoch: 0
release: 1
summary: 3D Algebra in Python
url: https://github.com/saullocastro/alg3dpy
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-alg3dpy-0.18.1-1.src.rpm
location_href: Packages/python-alg3dpy-0.18.1-1.noarch.rpm
checksum_type: sha256
description:
  Very useful basic algebra operations with points, vectors, planes:
  - Calculate distances
  - Calculate angles
  - Intersections
  - Projections


pkgId: 4f9289ac8e47f3ec989665ed8266f347e4891342868b4bafe997ea6b7193aeb4
name: python-algorand-python
arch: noarch
version: 2.3.0
epoch: 0
release: 1
summary: API for writing Algorand Python Smart contracts
url: https://pypi.org/project/algorand-python/
rpm_license: AGPL-3.0-or-later
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-algorand-python-2.3.0-1.src.rpm
location_href: Packages/python-algorand-python-2.3.0-1.noarch.rpm
checksum_type: sha256
description:
  The minimum supported Python version for writing Algorand Python smart contracts is 3.12.

  You can install the Algorand Python framework from PyPI into your project virtualenv:
  ```shell
  pip install algorand-python
  ```
  If you're using poetry for dependency and virutalenv management, you can add it that way with
  `poetry add algorand-python`.

  Once you have installed the Algorand Python framework, you can access the type definitions from the `algopy` module, e.g.
  ```python
  from algopy import Contract
  ```

  For more details on using this API and the puyapy compiler see https://algorandfoundation.github.io/puya/



  The Algorand Python API follows [semver](https://semver.org/) principles, however since the compiler is very closely
  coupled with the stubs definition, it's worth noting the interplay.


  An increase in the major version should only occur if existing contracts would fail to type-check
  after the update.

  Some examples of situations that might cause this:
  - Breaking changes to the signature of an existing function, such as a new parameter being added
    to an existing
    method and no default value is provided.
  - Something has been renamed, or moved such that the import path has changed (excluding moving
    between private modules, indicated with a leading underscore).
  - Something has been removed.

  The first two examples would necessitate changes in the compiler itself as well, which should
  also be considered breaking changes, thus there would be a coinciding new major version of the
  compiler.

  The third example may not necessitate a change to the compiler, although it probably would be
  likely there is one to remove the supporting code, but either way, since it will also change
  the behaviour in terms of what version range of the stubs is supported, should also result in a
  new major version of the compiler.

  However, vice versa is not necessarily true: a new major version of the compiler may not require
  a new major version of the stubs. For example:
  - Any breaking change to the compiler that has no changes in the stubs.
  - The default value of a parameter has changed. This changes the meaning of existing code that
    does not supply a default, thus requiring a major version bump of the compiler, but no
    existing contracts will fail to compile.


  When new functionality is added, the minor version should be bumped.

  Example situations:
  - A new high level API has been added.
  - A new parameter has been added to an existing method but a default value has been provided.
  - A new TEAL/AVM version has been released with new low-level op-codes that should be exposed.

  In each of these cases, there should be zero impact on whether existing contracts will compile
  or not. They all would also require a new compiler version to be released. Although the existing
  compiler version could continue to work with new stubs version, provided none of the new
  functionality is used, for simplicity the compiler should be updated to require the new stubs
  version as a minimum.


  When a bug in the stubs themselves is fixed, or a non-functional change is made (such as
  changes to docstrings / documentation), the patch version should be bumped.

  Examples:
  - Docstrings added/removed/updated.
  - Type parameters that were incorrectly specified are fixed
    ([concrete example](https://github.com/algorandfoundation/puya/issues/191)).
  - Adding something that was unintentionally omitted from the stubs, but is otherwise supported by
    the current compiler.
    Generally in these cases, the code would compile if a `# type: ignore[<error-code>]` was added
    ([concrete example](https://github.com/algorandfoundation/puya/issues/200)).

  In each of these cases, the new stubs should functional correctly when paired with the current
  release of the compiler.

  The second example is a slight break from semver principles, since this is not backwards
  compatible, as existing contracts may fail to compile. However, those contracts should not have
  compiled in the first place. The minimum version of stubs supported by the compiler should be
  increased to this new patch release, however this will only take effect on the next release of the
  compiler itself. The current compiler release would detect the new stubs version as supported
  though, and so users can update to that new version of the stubs once it is released.


pkgId: e6434b46759efbc285aa9e7ff69802d8ad7a4b9d0bfa1de3636b0515985cd37d
name: python-alias-free-torch
arch: noarch
version: 0.0.6
epoch: 0
release: 1
summary: alias free torch
url: https://github.com/junjun3518/alias-free-torch
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-alias-free-torch-0.0.6-1.src.rpm
location_href: Packages/python-alias-free-torch-0.0.6-1.noarch.rpm
checksum_type: sha256
description:
  Simple *torch* module implementation of [Alias-Free GAN](https://nvlabs.github.io/alias-free-gan/).

  This repository including
  - Alias-Free GAN style lowpass sinc filter @[filter.py](/src/alias_free_torch/filter.py)

  - Alias-Free GAN style up/downsample @[resample.py](/src/alias_free_torch/resample.py)

  - Alias-Free activation @[act.py](/src/alias_free_torch/act.py)

  - and test codes @[./test](/src/alias_free_torch/test)

  **Note: Since this repository is unofficial, filter and upsample could be different with [official implementation](https://github.com/NVlabs/stylegan3).**

  **Still working! If you notice some error or typo, please open new issue!**
  **v0.0.8 is TESTED**

  **UPDATE: You can download alias-free-torch from [pip](https://pypi.org/project/alias-free-torch/)**
  ```shell
  python -m pip install alias-free-torch
  ```



  Due to `torch.kaiser_window` and `torch.i0` are implemeted after `1.7.0`, our repository need `torch>=1.7.0`.
  - Pytorch>=1.7.0

  For custom torch users, `pip` will not check torch version.


  - [x] 2d sinc filter
  - [x] 2d resample
  - [x] devide 1d and 2d modules
  - [x] pip packaging
  - [x] rewrite upsample
  - [x] Upsample pad size issue
  - [x] \(Upsample\) support calculation for \[B,C,T/(H,W)\] (now only supports \[B,T/(H,W)\] or \[B,1,T/(H,W)\])
  - [x] set filter as register buffer
  - [x] \(Downsample & Filter\) support calculation for \[B,C,T/(H,W)\] (now only supports \[B,T/(H,W)\] or \[B,1,T/(H,W)\])
  - [ ] provide loadable ckpt for lower version of torch
  - [ ] documentation


  | Filter sine              | Filter noise                  |
  | --------------------- | --------------------------- |
  | ![filtersin](asset/filtersin.png) | ![filternoise](asset/filternoise.png) |

  | upsample              | downsample                  |
  | --------------------- | --------------------------- |
  | ![up2](asset/up2.png) | ![down10](asset/down10.png) |
  | ![up256](asset/up256.png) | ![down100](asset/down100.png) |


  | Filter L1 norm sine   | Filter noise                  |
  | --------------------- | --------------------------- |
  | ![filter2dsin](asset/filter2dsin.png) | ![filter2dnoise](asset/filter2dnoise.png) |

  | upsample              | downsample                  |
  | --------------------- | --------------------------- |
  | ![up2d2](asset/up2d2.png) | ![downsample2d2](asset/downsample2d2.png) |
  | ![up2d8](asset/up2d8.png) | ![downsample2d4](asset/downsample2d4.png) |



  - [Alias-Free GAN](https://nvlabs-fi-cdn.nvidia.com/alias-free-gan/alias-free-gan-paper.pdf)
  - [adefossez](https://github.com/adefossez)/[julius](https://github.com/adefossez/julius)
  - A. V. Oppenheim and R. W. Schafer. *Discrete-Time Signal Processing*. Pearson, International Edition, 3rd edition, 2010



  This work is done at [MINDsLab Inc](https://github.com/mindslab-ai).

  Thanks to teammates at MINDsLab Inc.
  - [Hyoungkyu Song](https://github.com/deepkyu)
  - [Kang-wook Kim](https://github.com/wookladin)
  - [Dongho Choi](https://github.com/dhchoi99)
  - [Sang Hoon Woo](https://github.com/tonyswoo)


pkgId: f9cc071aa27bb591d9510ab6088d5152e9ebb6a08a7deb40764973131f3bbdbf
name: python-alice-blue
arch: noarch
version: 2.0.4
epoch: 0
release: 1
summary: Official Python library for Alice Blue APIs
url: https://github.com/krishnavelu/alice_blue
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-alice-blue-2.0.4-1.src.rpm
location_href: Packages/python-alice-blue-2.0.4-1.noarch.rpm
checksum_type: sha256
description:
  The Official Python library for communicating with the Alice Blue APIs.

  Alice Blue Python library provides an easy to use wrapper over the HTTPS APIs.

  The HTTP calls have been converted to methods and JSON responses are wrapped into Python-compatible objects.

  Websocket connections are handled automatically within the library.

  * __Author: [krishnavelu](https://github.com/krishnavelu/)__
  * [Unofficed](https://www.unofficed.com/) is strategic partner of Alice Blue responsible for this git.
  * Alice Blue API trading is free for [Unofficed](https://www.unofficed.com/) members. Follow [this](https://unofficed.com/alice-blue/) to get API free.



  This module is installed via pip:

  ```
  pip install alice_blue
  ```

  To force upgrade existing installations:
  ```
  pip uninstall alice_blue
  pip --no-cache-dir install --upgrade alice_blue
  ```




  There is only one class in the whole library: `AliceBlue`. The `login_and_get_sessionID()` static method is used to retrieve session ID from alice blue server. A session ID is valid for 24 hours.
  With session ID, you can instantiate an AliceBlue object. Ideally you only need to create a session ID once every day. Once the session ID is created new, it'll be stored in a temporary location. Next time, the same session ID will be used.


  The original REST API documentation is available [here](https://v2api.aliceblueonline.com/).




  The whole library is equipped with python's `logging` module for debugging. If more debug information is needed, enable logging using the following code.

  ```python
  import logging
  logging.basicConfig(level=logging.DEBUG)
  ```


  api_secret is unique for each and every account. You need to enable api trading and get api_secret from alice blue.
  1. Login to [developer console](http://developers.aliceblueonline.com).
  1. Click on 'Create New App'.
  1. Enter 'App Name' as you like. Enter 'Redirect URL' and 'Post Back URL' as `https://ant.aliceblueonline.com/plugin/callback`.
  1. Click on 'Save'.
  1. Copy the 'App Code' and 'App Secret'. You will need these to generate a session ID.


  1. Import alice_blue
  ```python
  from alice_blue import *
  ```

  2. Create `session_id` using `login_and_get_sessionID()` function  with your `username`, `password`, `2FA (2fa is now year of birth)`, `app_id` and `api_secret`.
  ```python
  session_id = AliceBlue.login_and_get_sessionID(   username    = "username",
                                                      password    = "password",
                                                      twoFA       = "1993",
                                                      app_id      = "app_id",
                                                      api_secret  = "api_secret")
  ```


  If you are facing problem getting access token, make sure the following are correct.
  1. username.
  1. password.
  1. 2FA.
  1. api secret.
  1. app id.

  Even after verifying all these, if you are facing problem, contact alice customer care. They should enable the API access in their end. Don't create a new issue in this library for OAuth Error.


  Once you have your `session_id`, you can create an AliceBlue object with your `session_id` and `username`.
  ```python
  alice = AliceBlue(username = "username", session_id = session_id)
  ```

  You can run these commands to check your newly created alice blue object.
  1. [Get Balance](#get-balance)
  1. [Get Profile](#get-profile)
  1. [Get Daywise positions](#get-daywise-positions)
  1. [Get Netwise positions](#get-netwise-positions)
  1. [Get Holding positions](#get-holding-positions)


  Code:
  ```python
  print(alice.get_balance()) # get balance / margin limits
  ```
  Sample response
  ```
  [{'symbol': 'ALL', 'cncMarginUsed': '0', 'spanmargin': '159440.00', 'branchAdhoc': '0.000000', 'adhocMargin': '0.000000', 'payoutamount': '0.00', 'cdsSpreadBenefit': '0', 'adhocscripmargin': '0.00', 'exposuremargin': '7774.30', 'scripbasketmargin': '0.00', 'credits': '114028.29', 'segment': 'ALL', 'net': '95012.20', 'turnover': '0.00', 'grossexposurevalue': '0.00', 'mfssAmountUsed': '0.00', 'realizedMtomPrsnt': '-6075.80', 'product': 'ALL', 'stat': 'Ok', 'cncSellCrditPrsnt': '0', 'debits': '243846.09', 'varmargin': '0.00', 'multiplier': '10.00', 'elm': '0.00', 'mfamount': '0.00', 'cashmarginavailable': '119428.29', 'brokeragePrsnt': '355.990260', 'cncRealizedMtomPrsnt': '0', 'notionalCash': '0.000000', 'directcollateralvalue': '0.00', 'cncBrokeragePrsnt': '0', 'valueindelivery': '0', 'nfoSpreadBenefit': '0', 'losslimit': '0', 'subtotal': '243846.09', 'rmsPayInAmnt': '0', 'unrealizedMtomPrsnt': '-0.00', 'coverOrderMarginPrsnt': '0', 'exchange': 'ALL', 'category': 'ABFS-COMMON', 'collateralvalue': '0.00', 'rmsIpoAmnt': '0', 'cncUnrealizedMtomPrsnt': '0', 'premiumPrsnt': '0'}, {'symbol': 'ALL', 'cncMarginUsed': '0', 'spanmargin': '0.00', 'branchAdhoc': '0.000000', 'adhocMargin': '0.000000', 'payoutamount': '0.00', 'cdsSpreadBenefit': '0', 'adhocscripmargin': '0.00', 'exposuremargin': '0.00', 'scripbasketmargin': '0.00', 'credits': '0.00', 'segment': 'COM', 'net': '0.00', 'turnover': '0.00', 'grossexposurevalue': '0.00', 'mfssAmountUsed': '0.00', 'realizedMtomPrsnt': '-0.00', 'product': 'ALL', 'stat': 'Ok', 'cncSellCrditPrsnt': '0', 'debits': '0.00', 'varmargin': '0.00', 'multiplier': '1.00', 'elm': '0.00', 'mfamount': '0.00', 'cashmarginavailable': '0.00', 'brokeragePrsnt': '0', 'cncRealizedMtomPrsnt': '0', 'notionalCash': '0.000000', 'directcollateralvalue': '0.00', 'cncBrokeragePrsnt': '0', 'valueindelivery': '0', 'nfoSpreadBenefit': '0', 'losslimit': '0', 'subtotal': '0.00', 'rmsPayInAmnt': '0', 'unrealizedMtomPrsnt': '-0.00', 'coverOrderMarginPrsnt': '0', 'exchange': 'ALL', 'category': 'NO_VAL', 'collateralvalue': '0.00', 'rmsIpoAmnt': '0', 'cncUnrealizedMtomPrsnt': '0', 'premiumPrsnt': '0'}]
  ```


  Code
  ```python
  print(alice.get_profile()) # get profile
  ```
  Sample response
  ```
  {'accountStatus': 'Activated', 'dpType': 'CDSL', 'accountId': 'SP220xx', 'sBrokerName': 'ALICEBLUE', 'product': ['NRML', 'MIS', 'CNC', 'CO', 'BO'], 'accountName': 'xxxx xxxx', 'cellAddr': 'xxxxxxxxxx', 'emailAddr': 'xxxxxx@xxx.com', 'exchEnabled': 'bcs_fo|mcx_fo|nse_cm|bse_cm|nse_fo'}
  ```


  Code
  ```python
  print(alice.get_daywise_positions()) # get daywise positions
  ```
  Sample response
  ```
  [{'realisedprofitloss': '-7,217.50', 'Fillsellamt': '292,062.50', 'Netqty': '0', 'Symbol': 'EICHERMOT', 'Instname': 'NA', 'Expdate': 'NA', 'LTP': '3,355.10', 'Opttype': 'XX', 'BLQty': 1.0, 'Token': '910', 'Fillbuyamt': '299,280.00', 'Fillsellqty': '87', 'Tsym': 'EICHERMOT-EQ', 'sSqrflg': 'Y', 'unrealisedprofitloss': '0.00', 'Buyavgprc': '3,440.00', 'MtoM': '-7,217.50', 'stat': 'Ok', 's_NetQtyPosConv': 'N', 'Sqty': '87', 'Sellavgprc': '3,357.04', 'PriceDenomenator': '1', 'PriceNumerator': '1', 'actid': 'SP220xx', 'posflag': 'true', 'Pcode': 'MIS', 'Stikeprc': '0', 'Bqty': '87', 'BEP': '0.00', 'Exchange': 'NSE', 'Series': 'EQ', 'GeneralDenomenator': '1', 'Type': 'DAY1', 'Netamt': '-7,217.50', 'companyname': 'EICHER MOTORS LTD', 'Fillbuyqty': '87', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_cm', 'discQty': '10'}, {'realisedprofitloss': '1,141.70', 'Fillsellamt': '298,216.70', 'Netqty': '0', 'Symbol': 'M&M', 'Instname': 'NA', 'Expdate': 'NA', 'LTP': '1,274.65', 'Opttype': 'XX', 'BLQty': 1.0, 'Token': '2031', 'Fillbuyamt': '297,075.00', 'Fillsellqty': '233', 'Tsym': 'M&M-EQ', 'sSqrflg': 'Y', 'unrealisedprofitloss': '0.00', 'Buyavgprc': '1,275.00', 'MtoM': '1,141.70', 'stat': 'Ok', 's_NetQtyPosConv': 'N', 'Sqty': '233', 'Sellavgprc': '1,279.90', 'PriceDenomenator': '1', 'PriceNumerator': '1', 'actid': 'SP220xx', 'posflag': 'true', 'Pcode': 'MIS', 'Stikeprc': '0', 'Bqty': '233', 'BEP': '0.00', 'Exchange': 'NSE', 'Series': 'EQ', 'GeneralDenomenator': '1', 'Type': 'DAY1', 'Netamt': '1,141.70', 'companyname': 'MAHINDRA & MAHINDRA LTD', 'Fillbuyqty': '233', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_cm', 'discQty': '10'}]
  ```


  Code
  ```python
  print(alice.get_netwise_positions()) # get netwise positions
  ```
  Sample response
  ```
  [{'Instname': 'NA', 'Expdate': 'NA', 'CFsellqty': '0', 'Opttype': 'XX', 'Token': '910', 'CFSellavgprc': '0.00', 'sSqrflg': 'Y', 'unrealisedprofitloss': '0.00', 's_NetQtyPosConv': 'N', 'FillbuyamtCF': '0.00', 'Sqty': '87', 'Sellavgprc': '3,357.04', 'actid': 'SP220xx', 'netbuyamt': '299,280.00', 'Pcode': 'MIS', 'Bqty': '87', 'NetBuyavgprc': '3440.0', 'Exchange': 'NSE', 'companyname': 'EICHER MOTORS LTD', 'netbuyqty': '87', 'realisedprofitloss': '-7,217.50', 'Fillsellamt': '292,062.50', 'Netqty': '0', 'Symbol': 'EICHERMOT', 'LTP': '3,355.10', 'BLQty': 1.0, 'Fillbuyamt': '299,280.00', 'Fillsellqty': '87', 'Tsym': 'EICHERMOT-EQ', 'CFbuyqty': '0', 'Buyavgprc': '3,440.00', 'netSellamt': '292,062.50', 'MtoM': '-7,217.50', 'stat': 'Ok', 'FillsellamtCF': '0.00', 'PriceDenomenator': '1', 'netsellqty': '87', 'PriceNumerator': '1', 'posflag': 'true', 'Stikeprc': '0', 'BEP': '0.00', 'Series': 'EQ', 'GeneralDenomenator': '1', 'Type': 'DAY1', 'Netamt': '-7,217.50', 'NetSellavgprc': '3357.04', 'CFBuyavgprc': '0.00', 'Fillbuyqty': '87', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_cm', 'discQty': '10'}, {'Instname': 'NA', 'Expdate': 'NA', 'CFsellqty': '0', 'Opttype': 'XX', 'Token': '2031', 'CFSellavgprc': '0.00', 'sSqrflg': 'Y', 'unrealisedprofitloss': '0.00', 's_NetQtyPosConv': 'N', 'FillbuyamtCF': '0.00', 'Sqty': '233', 'Sellavgprc': '1,279.90', 'actid': 'SP220xx', 'netbuyamt': '297,075.00', 'Pcode': 'MIS', 'Bqty': '233', 'NetBuyavgprc': '1275.0', 'Exchange': 'NSE', 'companyname': 'MAHINDRA & MAHINDRA LTD', 'netbuyqty': '233', 'realisedprofitloss': '1,141.70', 'Fillsellamt': '298,216.70', 'Netqty': '0', 'Symbol': 'M&M', 'LTP': '1,274.65', 'BLQty': 1.0, 'Fillbuyamt': '297,075.00', 'Fillsellqty': '233', 'Tsym': 'M&M-EQ', 'CFbuyqty': '0', 'Buyavgprc': '1,275.00', 'netSellamt': '298,216.70', 'MtoM': '1,141.70', 'stat': 'Ok', 'FillsellamtCF': '0.00', 'PriceDenomenator': '1', 'netsellqty': '233', 'PriceNumerator': '1', 'posflag': 'true', 'Stikeprc': '0', 'BEP': '0.00', 'Series': 'EQ', 'GeneralDenomenator': '1', 'Type': 'DAY1', 'Netamt': '1,141.70', 'NetSellavgprc': '1279.9', 'CFBuyavgprc': '0.00', 'Fillbuyqty': '233', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_cm', 'discQty': '10'}, {'Instname': 'OPTIDX', 'Expdate': '1 Sep, 2022', 'CFsellqty': '0', 'Opttype': 'CE', 'Token': '51698', 'CFSellavgprc': '0.00', 'sSqrflg': 'Y', 'unrealisedprofitloss': '555.00', 's_NetQtyPosConv': 'N', 'FillbuyamtCF': '18,570.00', 'Sqty': '0', 'Sellavgprc': '0.00', 'actid': 'SP220xx', 'netbuyamt': '18,570.00', 'Pcode': 'NRML', 'Bqty': '0', 'NetBuyavgprc': '441.0', 'Exchange': 'NFO', 'companyname': '', 'netbuyqty': '50', 'realisedprofitloss': '0.00', 'Fillsellamt': '0.00', 'Netqty': '50', 'Symbol': 'BANKNIFTY', 'LTP': '382.50', 'BLQty': 25.0, 'Fillbuyamt': '0.00', 'Fillsellqty': '0', 'Tsym': 'BANKNIFTY2290139100CE', 'CFbuyqty': '50', 'Buyavgprc': '0.00', 'netSellamt': '0.00', 'MtoM': '555.00', 'stat': 'Ok', 'FillsellamtCF': '0.00', 'PriceDenomenator': '1', 'netsellqty': '0', 'PriceNumerator': '1', 'posflag': 'false', 'Stikeprc': '39100.0', 'BEP': '371.40', 'Series': 'XX', 'GeneralDenomenator': '1', 'Type': 'NET1', 'Netamt': '-18,570.00', 'NetSellavgprc': '0.00', 'CFBuyavgprc': '441.0', 'Fillbuyqty': '0', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_fo', 'discQty': 'NA'}, {'Instname': 'OPTIDX', 'Expdate': '1 Sep, 2022', 'CFsellqty': '100', 'Opttype': 'CE', 'Token': '51731', 'CFSellavgprc': '128.45', 'sSqrflg': 'Y', 'unrealisedprofitloss': '-150.00', 's_NetQtyPosConv': 'N', 'FillbuyamtCF': '0.00', 'Sqty': '0', 'Sellavgprc': '0.00', 'actid': 'SP220xx', 'netbuyamt': '0.00', 'Pcode': 'NRML', 'Bqty': '0', 'NetBuyavgprc': '0.00', 'Exchange': 'NFO', 'companyname': '', 'netbuyqty': '0', 'realisedprofitloss': '0.00', 'Fillsellamt': '0.00', 'Netqty': '-100', 'Symbol': 'BANKNIFTY', 'LTP': '96.00', 'BLQty': 25.0, 'Fillbuyamt': '0.00', 'Fillsellqty': '0', 'Tsym': 'BANKNIFTY2290139900CE', 'CFbuyqty': '0', 'Buyavgprc': '0.00', 'netSellamt': '9,450.00', 'MtoM': '-150.00', 'stat': 'Ok', 'FillsellamtCF': '9,450.00', 'PriceDenomenator': '1', 'netsellqty': '100', 'PriceNumerator': '1', 'posflag': 'false', 'Stikeprc': '39900.0', 'BEP': '94.50', 'Series': 'XX', 'GeneralDenomenator': '1', 'Type': 'NET1', 'Netamt': '9,450.00', 'NetSellavgprc': '128.45', 'CFBuyavgprc': '0.00', 'Fillbuyqty': '0', 'GeneralNumerator': '1', 'Exchangeseg': 'nse_fo', 'discQty': 'NA'}]
  ```


  Code
  ```python
  print(alice.get_holding_positions()) # get holding positions
  ```
  Sample response
  ```
  {'stat': 'Ok', 'HoldingVal': [{'WCqty': '0', 'BSEHOldingValue': '25700.00', 'hsflag': 'Y', 'Series1': 'A', 'HUqty': '200', 'authQty': '0', 'YSXHOldingValue': '0.00', 'CSEHOldingValue': '0.00', 'Ttrind': 'N', 'DaysMTM': '0', 'csflag': 'Y', 'WHqty': '0', 'Pcode': 'CNC', 'Price': '102.78', 'Exch4': '0', 'BuyQty': '0', 'Bsetsym': 'BANKBARODA', 'Exch5': '0', 'LTcse': '0.00', 'MCXHOldingValue': '0.00', 'Holdqty': '0', 'Exch1': 'nse_cm', 'Exch2': 'bse_cm', 'Exch3': '0', 'LTysx': '0.00', 'Haircut': '0.00', 'Scripcode': '532134', 'LTPValuation': '0', 'NSEHOldingValue': '25660.00', 'Ysxtsym': '0', 'Ltp': '128.50', 'Coltype': '--', 'Btst': '0', 'LTmcxsxcm': '0.00', 'Usedqty': '0', 'poaStatus': 'Y', 'Token5': '0', 'Nsetsym': 'BANKBARODA-EQ', 'CUqty': '0', 'Token2': '532134', 'Token1': '4668', 'Token4': '0', 'Token3': '0', 'SellableQty': '200', 'Mcxsxcmsym': '0', 'Csetsym': '0', 'authFlag': True, 'LTnse': '128.30', 'pdc': '125.9', 'Series': 'EQ', 'Colqty': '0', 'ExchSeg5': None, 'ExchSeg2': 'BSE', 'ExchSeg1': 'NSE', 'LTbse': '128.50', 'ExchSeg4': None, 'ExchSeg3': None, 'isin': 'INE028A01039', 'Tprod': 'NA'}, {'WCqty': '0', 'BSEHOldingValue': '772832.75', 'hsflag': 'Y', 'Series1': 'X', 'HUqty': '19345', 'authQty': '0', 'YSXHOldingValue': '0.00', 'CSEHOldingValue': '0.00', 'Ttrind': 'N', 'DaysMTM': '0', 'csflag': 'Y', 'WHqty': '0', 'Pcode': 'CNC', 'Price': '44.60', 'Exch4': '0', 'BuyQty': '0', 'Bsetsym': 'SMIFS', 'Exch5': '0', 'LTcse': '0.00', 'MCXHOldingValue': '0.00', 'Holdqty': '0', 'Exch1': '0', 'Exch2': 'bse_cm', 'Exch3': '0', 'LTysx': '0.00', 'Haircut': '0.00', 'Scripcode': '508905', 'LTPValuation': '0', 'NSEHOldingValue': '0.00', 'Ysxtsym': '0', 'Ltp': '39.95', 'Coltype': '--', 'Btst': '0', 'LTmcxsxcm': '0.00', 'Usedqty': '0', 'poaStatus': 'Y', 'Token5': '0', 'Nsetsym': '0', 'CUqty': '0', 'Token2': '508905', 'Token1': '0', 'Token4': '0', 'Token3': '0', 'SellableQty': '19345', 'Mcxsxcmsym': '0', 'Csetsym': '0', 'authFlag': True, 'LTnse': '0.00', 'pdc': '41.95', 'Series': '---', 'Colqty': '0', 'ExchSeg5': None, 'ExchSeg2': 'BSE', 'ExchSeg1': None, 'LTbse': '39.95', 'ExchSeg4': None, 'ExchSeg3': None, 'isin': 'INE641A01013', 'Tprod': 'NA'}], 'clientid': 'WBK293', 'Totalval': {'TotalMCXHoldingValue': '0.00', 'TotalCSEHoldingValue': '0.00', 'TotalNSEHoldingValue': '25660.00', 'TotalYSXHoldingValue': '0.00', 'TotalBSEHoldingValue': '798532.75'}}
  ```


  Getting master contracts allow you to search for instruments by symbol name and place orders.
  Master contracts are stored as an OrderedDict by token number and by symbol name in a local file. Whenever you get a trade update, order update, or quote update, the library will check if master contracts are loaded. If they are, it will attach the instrument object directly to the update. By default all master contracts of all enabled exchanges in your personal profile will be downloaded. i.e. If your profile contains the following as enabled exchanges `['NSE', 'BSE', 'MCX', NFO']` all contract notes of all exchanges will be downloaded by default. If you feel it takes too much time to download all exchange, or if you don't need all exchanges to be downloaded, you can specify which exchange to download contract notes while creating the AliceBlue object. Master contracts once downloaded is stored in temp location and reused the subsequent times. Master contracts are downloaded newly once a day (because new master contracts are updated everyday around 8:00am).

  Code
  ```python
  alice = AliceBlue(username = "username", session_id = session_id, master_contracts_to_download=['NSE', 'BSE'])
  ```
  This will reduce a few seconds in object creation time of AliceBlue object.


  Get Scrip info from alice server (this is different from instrument object).
  ```python
  print(alice.get_scrip_info(alice.get_instrument_by_symbol("NSE", "INFY-EQ")))
  ```
  ```
  {'optiontype': 'XX', 'SQty': 55, 'vwapAveragePrice': '1499.38', 'LTQ': '40', 'Ltp': '1511.65', 'LTP': '1511.65', 'DecimalPrecision': 2, 'openPrice': '1488.00', 'BRate': '00.00', 'defmktproval': '3', 'BQty': 0, 'symbolname': 'INFY', 'noMktPro': '0', 'LTT': '09/09/2022 15:59:32', 'mktpro': '1', 'TickSize': '5', 'Multiplier': 1, 'strikeprice': '00.00', 'TotalSell': '55', 'High': '1520.00', 'stat': 'Ok', 'BodLotQty': 1, 'yearlyHighPrice': '1953.90', 'yearlyLowPrice': '1367.15', 'exchFeedTime': '09-Sep-2022 16:18:43', 'PrvClose': '1511.65', 'SRate': '1511.65', 'Change': '00.00', 'Series': 'EQ', 'TotalBuy': 'NA', 'Low': '1480.00', 'UniqueKey': 'INFY', 'PerChange': '00.00', 'companyname': 'INFOSYS LIMITED', 'TradeVolume': '4816910', 'TSymbl': 'INFY-EQ', 'Exp': 'NA', 'LTD': 'NA'}
  ```

  Instruments are represented by instrument objects. These are named-tuples that are created while getting the master contracts. They are used when placing an order and subscribing to a symbol. The structure of an instrument tuple is as follows:

  ```python
  Instrument = namedtuple('Instrument', ['exchange', 'token', 'symbol',
                                        'name', 'expiry', 'lot_size'])
  ```

  All instruments have the fields mentioned above. Wherever a field is not applicable for an instrument (for example, equity instruments don't have strike prices), that value will be `None`.


  Symbols can be retrieved in multiple ways. Once you have the master contract loaded for an exchange, you can get an instrument in many ways.


  Code
  ```python
  tatasteel_nse_eq = alice.get_instrument_by_symbol('NSE', 'TATASTEEL-EQ')
  reliance_nse_eq = alice.get_instrument_by_symbol('NSE', 'RELIANCE-EQ')
  ongc_bse_eq = alice.get_instrument_by_symbol('BSE', 'ONGC-EQ')
  india_vix_nse_index = alice.get_instrument_by_symbol('NSE', 'India VIX')
  sensex_nse_index = alice.get_instrument_by_symbol('BSE', 'SENSEX')
  nifty50_nse_index = alice.get_instrument_by_symbol('NSE', 'NIFTY 50')
  banknifty_nse_index = alice.get_instrument_by_symbol('NSE', 'NIFTY Bank')
  ```


  Code
  ```python
  ongc_bse_eq = alice.get_instrument_by_token('BSE', 500312)
  reliance_bse_eq = alice.get_instrument_by_token('BSE', 500325)
  acc_nse_eq = alice.get_instrument_by_token('NSE', 22)
  ```


  Code
  ```python
  bn_fut = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=True, strike=None, is_CE = False)
  bn_call = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=False, strike=30000, is_CE = True)
  bn_put = alice.get_instrument_for_fno(symbol = 'BANKNIFTY', expiry_date=datetime.date(2019, 6, 27), is_fut=False, strike=30000, is_CE = False)
  ```


  Search for multiple instruments by matching the name. This works case insensitive and returns all instrument which has the name in its symbol.
  Code
  ```python
  all_sensex_scrips = alice.search_instruments('BSE', 'sEnSeX')
  print(all_sensex_scrips)
  ```
  The above code results multiple symbol which has 'sensex' in its symbol.
  Sample response
  ```
  [Instrument(exchange='BSE', token=532985, symbol='KTKSENSEX', name='KOTAK MAHINDRA MUTUAL FUND', expiry=None, lot_size='1'), Instrument(exchange='BSE', token=535276, symbol='SBISENSEX', name='SBI MUTUAL FUND - SBI ETF SENS', expiry=None, lot_size='1'), Instrument(exchange='BSE', token=538683, symbol='SENSEXBEES', name='NIPPON INDIA ETF SENSEX', expiry=None, lot_size='1'), Instrument(exchange='BSE', token=540154, symbol='IDFSENSEXE', name='IDFC Mutual Fund', expiry=None, lot_size='1'), Instrument(exchange='BSE', token=199040, symbol='SENSEXBINAV', name='INAV NIPPO INDIA ETF SENSE', expiry=None, lot_size='1')]
  ```


  Code
  ```python
  multiple_underlying = ["INFY", "SBIN", "BHEL"]
  all_scripts = alice.search_instruments('NFO', multiple_underlying)
  print(all_scripts)
  ```


  Once you have master contracts loaded & a tradable instrument, you can easily subscribe to market feedd/depth data.


  You can subscribe any one type of live data for a given scrip. Using the `LiveFeedType` enum, you can specify what type of live feed you need.
  * `LiveFeedType.TICK_DATA`
  * `LiveFeedType.DEPTH_DATA`

  Please refer to the original documentation [here](https://v2api.aliceblueonline.com/websocket) for more details of different types of live feeds.


  Code
  ```python
  alice.subscribe(alice.get_instrument_by_symbol('NSE', 'TATASTEEL-EQ'), LiveFeedType.TICK_DATA)
  alice.subscribe(alice.get_instrument_by_symbol('BSE', 'RELIANCE-EQ'), LiveFeedType.DEPTH_DATA)
  ```

  Code
  ```python
  alice.subscribe([alice.get_instrument_by_symbol('NSE', 'TATASTEEL-EQ'), alice.get_instrument_by_symbol('NSE', 'ACC-EQ')], LiveFeedType.TICK_DATA)
  ```


  Code
  ```python
  def event_handler_quote_update(message):
      print(f"quote update {message}")

  alice.start_websocket(subscribe_callback=event_handler_quote_update)

  alice.subscribe(alice.get_instrument_by_symbol('NSE', 'ONGC-EQ'), LiveFeedType.TICK_DATA)
  sleep(10)
  ```


  Unsubscribe to an existing live feed.

  Code
  ```python
  alice.unsubscribe(alice.get_instrument_by_symbol('NSE', 'TATASTEEL-EQ'), LiveFeedType.TICK_DATA)
  alice.unsubscribe(alice.get_instrument_by_symbol('BSE', 'RELIANCE-EQ'), LiveFeedType.DEPTH_DATA)
  ```

  Code
  ```python
  alice.unsubscribe([alice.get_instrument_by_symbol('NSE', 'TATASTEEL-EQ'), alice.get_instrument_by_symbol('NSE', 'ACC-EQ')], LiveFeedType.TICK_DATA)
  ```


  Code
  ```python
  alice.get_all_subscriptions() # All
  ```


  Subscribe to market status & Exchange messages coming soon.


  Code
  ```python
  alice.subscribe_market_status_messages()
  ```


  Code
  ```python
  print(alice.get_market_status_messages())
  ```

  Sample Response of `get_market_status_messages()`
  ```
  [{'exchange': 'NSE', 'length_of_market_type': 6, 'market_type': b'NORMAL', 'length_of_status': 31, 'status': b'The Closing Session has closed.'}, {'exchange': 'NFO', 'length_of_market_type': 6, 'market_type': b'NORMAL', 'length_of_status': 45, 'status': b'The Normal market has closed for 22 MAY 2020.'}, {'exchange': 'CDS', 'length_of_market_type': 6, 'market_type': b'NORMAL', 'length_of_status': 45, 'status': b'The Normal market has closed for 22 MAY 2020.'}, {'exchange': 'BSE', 'length_of_market_type': 13, 'market_type': b'OTHER SESSION', 'length_of_status': 0, 'status': b''}]
  ```


  Code
  ```python
  alice.subscribe_exchange_messages()
  ```


  Code
  ```python
  print(alice.get_exchange_messages())
  ```

  Sample Response of `get_exchange_messages()`
  ```
  [{'exchange': 'NSE', 'length': 32, 'message': b'DS : Bulk upload can be started.', 'exchange_time_stamp': 1590148595}, {'exchange': 'NFO', 'length': 200, 'message': b'MARKET WIDE LIMIT FOR VEDL IS 183919959. OPEN POSITIONS IN VEDL HAVE REACHED 84 PERCENT OF THE MARKET WIDE LIMIT.                                                                                       ', 'exchange_time_stamp': 1590146132}, {'exchange': 'CDS', 'length': 54, 'message': b'DS : Regular segment Bhav copy broadcast successfully.', 'exchange_time_stamp': 1590148932}, {'exchange': 'MCX', 'length': 7, 'message': b'.......', 'exchange_time_stamp': 1590196159}]
  ```


  Code
  ```python
  socket_opened = False
  def market_status_messages(message):
      print(f"market status messages {message}")

  def exchange_messages(message):
      print(f"exchange messages {message}")

  alice.start_websocket(market_status_messages_callback=market_status_messages,
                        exchange_messages_callback=exchange_messages)
  alice.subscribe_market_status_messages()
  alice.subscribe_exchange_messages()
  sleep(10)
  ```


  You can place following types of order through this API.
  1. [Limit](#limit-order-intraday-buy)
  1. [Market](#market-order-delivery-sell)
  1. [Stop Loss Limit](#stop-loss-limit-order)
  1. [Stop Loss Market](#stop-loss-market-order)
  1. [Bracket Order](#bracket-order)
  1. [AMO](#after-market-order)


  Code
  ```python
  print(alice.place_order(transaction_type = TransactionType.Buy,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 1,
                          order_type = OrderType.Limit,
                          product_type = ProductType.Intraday,
                          price = 500.0))
  ```
  Sample reponse of place order
  ```python
  [{'stat': 'Ok', 'NOrdNo': '220909000171482'}]
  ```


  ```python
  print(alice.place_order(transaction_type = TransactionType.Sell,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 0,
                          order_type = OrderType.Market,
                          product_type = ProductType.Delivery))
  ```


  ```python
  print(alice.place_order(transaction_type = TransactionType.Sell,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 1,
                          order_type = OrderType.StopLossLimit,
                          product_type = ProductType.Intraday,
                          price = 500.0,
                          trigger_price = 490.0))
  ```

  ```python
  print(alice.place_order(transaction_type = TransactionType.Sell,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 1,
                          order_type = OrderType.StopLossMarket,
                          product_type = ProductType.Intraday,
                          trigger_price = 490.0))
  ```

  ```python
  print(alice.place_order(transaction_type = TransactionType.Sell,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 1,
                          order_type = OrderType.StopLossLimit,
                          product_type = ProductType.Intraday,
                          price = 1464.0,
                          trigger_price = 1466.0,
                          stop_loss = 1450.0,
                          target = 1480.0,
                          trailing_sl = 1.0))
  ```

  Code
  ```python
  print(alice.place_order(transaction_type = TransactionType.Buy,
                          instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                          quantity = 1,
                          order_type = OrderType.AfterMarketOrder,
                          product_type = ProductType.Delivery,
                          price = 500.0))
  ```
  Sample reponse of AMO order
  ```
  [{'stat': 'Ok', 'NOrdNo': '220909000171690-after market order req received'}]
  ```

  ```python
  print(alice.modify_order(   order_id = order_id,
                              transaction_type = TransactionType.Buy,
                              instrument = alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                              quantity = 2,
                              order_type = OrderType.AfterMarketOrder,
                              product_type = ProductType.Delivery,
                              price = 600.0))
  ```
  Sample response of modify order
  ```
  {'stat': 'Ok', 'Result': ' NEST Order Number :220909000171761'}
  ```


  ```python
  order_id = 220909000171761
  print(alice.cancel_order(order_id = order_id))
  ```
  Sample response of cancel order
  ```
  {'stat': 'Ok', 'Result': ' NEST Order Number :220909000171761'}
  ```




  ```python
  print(alice.get_order_history())
  ```
  ```
  [{'Prc': '600.00', 'RequestID': '1', 'Cancelqty': 0, 'discQtyPerc': '10', 'customText': 'NA', 'Mktpro': 'NA', 'defmktproval': '3', 'optionType': 'XX', 'usecs': '078218', 'mpro': '1', 'Qty': 2, 'ordergenerationtype': 'AMO', 'Unfilledsize': 0, 'orderAuthStatus': '', 'Usercomments': 'NA', 'ticksize': '5', 'Prctype': 'AMO', 'Status': 'cancelled after market order', 'Minqty': 0, 'orderCriteria': 'NA', 'Exseg': 'nse_cm', 'Sym': 'INFY', 'multiplier': '1', 'ExchOrdID': 'NA', 'ExchConfrmtime': '--', 'Pcode': 'CNC', 'SyomOrderId': '', 'Dscqty': 0, 'Exchange': 'NSE', 'Ordvaldate': 'NA', 'accountId': 'SP220xx', 'exchangeuserinfo': '111111111111130', 'Avgprc': '00.00', 'Trgprc': '00.00', 'Trantype': 'B', 'bqty': '1', 'Trsym': 'INFY-EQ', 'Fillshares': 0, 'AlgoCategory': 'NA', 'sipindicator': 'N', 'strikePrice': '00.00', 'reporttype': 'NA', 'AlgoID': 'NA', 'noMktPro': '0', 'BrokerClient': '--', 'OrderUserMessage': '', 'decprec': '2', 'ExpDate': 'NA', 'COPercentage': 0.0, 'marketprotectionpercentage': '--', 'Nstordno': '220909000171761', 'ExpSsbDate': 'NA', 'OrderedTime': '09/09/2022 15:47:11', 'RejReason': '--', 'modifiedBy': 'SP220xx', 'Scripname': 'INFOSYS LIMITED', 'stat': 'Ok', 'orderentrytime': '', 'PriceDenomenator': '1', 'panNo': 'NA', 'RefLmtPrice': 0.0, 'PriceNumerator': '1', 'token': '1594', 'ordersource': 'NEST_REST_WEB', 'Validity': None, 'GeneralDenomenator': '1', 'series': 'EQ', 'InstName': '', 'GeneralNumerator': '1', 'user': 'SP220xx', 'remarks': '--', 'iSinceBOE': 1662718631}, {'Prc': '378.50', 'RequestID': '1', 'Cancelqty': 0, 'discQtyPerc': '10', 'customText': 'NA', 'Mktpro': 'NA', 'defmktproval': '3', 'optionType': 'XX', 'usecs': '428162', 'mpro': '1', 'Qty': 704, 'ordergenerationtype': '--', 'Unfilledsize': 0, 'orderAuthStatus': '', 'Usercomments': 'NA', 'ticksize': '5', 'Prctype': 'L', 'Status': 'complete', 'Minqty': 0, 'orderCriteria': 'NA', 'Exseg': 'nse_cm', 'Sym': 'HINDALCO', 'multiplier': '1', 'ExchOrdID': '1100000000211421', 'ExchConfrmtime': '09-Sep-2022 09:07:03', 'Pcode': 'MIS', 'SyomOrderId': '', 'Dscqty': 0, 'Exchange': 'NSE', 'Ordvaldate': 'NA', 'accountId': 'SP220xx', 'exchangeuserinfo': '333333333333100', 'Avgprc': '426.00', 'Trgprc': '00.00', 'Trantype': 'S', 'bqty': '1', 'Trsym': 'HINDALCO-EQ', 'Fillshares': 704, 'AlgoCategory': 'NA', 'sipindicator': 'N', 'strikePrice': '00.00', 'reporttype': 'fill', 'AlgoID': 'NA', 'noMktPro': '0', 'BrokerClient': '--', 'OrderUserMessage': '', 'decprec': '2', 'ExpDate': 'NA', 'COPercentage': 0.0, 'marketprotectionpercentage': '--', 'Nstordno': '220909000001363', 'ExpSsbDate': 'NA', 'OrderedTime': '09/09/2022 09:07:03', 'RejReason': '--', 'modifiedBy': '--', 'Scripname': 'HINDALCO  INDUSTRIES  LTD', 'stat': 'Ok', 'orderentrytime': 'Sep 09 2022 09:06:59', 'PriceDenomenator': '1', 'panNo': 'xxxxx', 'RefLmtPrice': 0.0, 'PriceNumerator': '1', 'token': '1363', 'ordersource': 'NEST_REST_TLAPI', 'Validity': 'DAY', 'GeneralDenomenator': '1', 'series': 'EQ', 'InstName': '', 'GeneralNumerator': '1', 'user': 'SP220xx', 'remarks': '--', 'iSinceBOE': 1662694623}]
  ```


  ```python
  print(alice.get_order_history(220909000171761))
  ```
  Sample Response
  ```
  [{'Prc': '600.00', 'Action': 'B', 'productcode': 'CNC', 'reporttype': 'NA', 'triggerprice': '0.0', 'filledShares': 0, 'disclosedqty': '0', 'exchangetimestamp': '--', 'ExchTimeStamp': '09/09/2022 15:47:11', 'symbolname': 'INFY', 'nestordernumber': '220909000171761', 'duration': None, 'OrderUserMessage': '', 'averageprice': '0.0', 'Qty': 2, 'ordergenerationtype': 'AMO', 'modifiedBy': 'SP220xx', 'filldateandtime': '-- --', 'Status': 'cancelled after market order', 'rejectionreason': '--', 'stat': 'Ok', 'PriceDenomenator': '1', 'exchangeorderid': None, 'PriceNumerator': '1', 'legorderindicator': '', 'customerfirm': 'C', 'ordersource': 'NEST_REST_WEB', 'GeneralDenomenator': '1', 'nestreqid': '1', 'Ordtype': 'AMO', 'unfilledSize': 0, 'scripname': 'INFOSYS LIMITED', 'GeneralNumerator': '1', 'bqty': 1, 'exchange': 'NSE', 'Trsym': 'INFY-EQ'}, {'Prc': '600.00', 'Action': 'B', 'productcode': 'CNC', 'reporttype': 'NA', 'triggerprice': '0.0', 'filledShares': 0, 'disclosedqty': '0', 'exchangetimestamp': '--', 'ExchTimeStamp': '09/09/2022 15:47:10', 'symbolname': 'INFY', 'nestordernumber': '220909000171761', 'duration': None, 'OrderUserMessage': '', 'averageprice': '0.0', 'Qty': 2, 'ordergenerationtype': 'AMO', 'modifiedBy': 'SP220xx', 'filldateandtime': '-- --', 'Status': 'modify after market order req received', 'rejectionreason': '--', 'stat': 'Ok', 'PriceDenomenator': '1', 'exchangeorderid': None, 'PriceNumerator': '1', 'legorderindicator': '', 'customerfirm': 'C', 'ordersource': 'NEST_REST_WEB', 'GeneralDenomenator': '1', 'nestreqid': '1', 'Ordtype': 'AMO', 'unfilledSize': 2, 'scripname': 'INFOSYS LIMITED', 'GeneralNumerator': '1', 'bqty': 1, 'exchange': 'NSE', 'Trsym': 'INFY-EQ'}, {'Prc': '500.00', 'Action': 'B', 'productcode': 'CNC', 'reporttype': 'NA', 'triggerprice': '0.0', 'filledShares': 0, 'disclosedqty': '1', 'exchangetimestamp': '--', 'ExchTimeStamp': '09/09/2022 15:47:09', 'symbolname': 'INFY', 'nestordernumber': '220909000171761', 'duration': 'DAY', 'OrderUserMessage': '', 'averageprice': '0.0', 'Qty': 1, 'ordergenerationtype': 'AMO', 'modifiedBy': '--', 'filldateandtime': '-- --', 'Status': 'after market order req received', 'rejectionreason': '--', 'stat': 'Ok', 'PriceDenomenator': '1', 'exchangeorderid': None, 'PriceNumerator': '1', 'legorderindicator': '', 'customerfirm': 'C', 'ordersource': 'NEST_REST_WEB', 'GeneralDenomenator': '1', 'nestreqid': '1', 'Ordtype': 'AMO', 'unfilledSize': 1, 'scripname': 'INFOSYS LIMITED', 'GeneralNumerator': '1', 'bqty': 1, 'exchange': 'NSE', 'Trsym': 'INFY-EQ'}]
  ```


  ```python
  print(alice.get_trade_book())
  ```
  Sample Response
  ```
  [{'Filltime': '15:10:00', 'usecs': '836064', 'Ordduration': 'DAY', 'ExchordID': '1100000022855645', 'Qty': 201, 'ordergenerationtype': '--', 'strikeprice': '00.00', 'AvgPrice': '1499.52', 'Prctype': 'MKT', 'Minqty': 0, 'Exchseg': 'nse_cm', 'Pcode': 'MIS', 'FillLeg': 1, 'Exchange': 'NSE', 'accountId': 'SP220xx', 'Price': '1499.40', 'Trantype': 'S', 'companyname': 'HDFC BANK LTD', 'Exchtime': '09-Sep-2022 15:10:00', 'bqty': 1, 'Filldate': '09-Sep-2022', 'AlgoCategory': 'NA', 'Custofrm': 'C', 'expdate': 'NA', 'optiontype': 'XX', 'AlgoID': 'NA', 'Symbol': '1333', 'Filledqty': 201, 'Time': '09/09/2022 15:10:00', 'symbolname': 'HDFCBANK', 'BrokerClient': '--', 'NOReqID': '1', 'Tsym': 'HDFCBANK-EQ', 'Nstordno': '220909000161876', 'ReportType': 'fill', 'Expiry': 'NA', 'stat': 'Ok', 'PriceDenomenator': '1', 'panNo': 'xxxxxxxxx', 'PriceNumerator': '1', 'posflag': 'false', 'GeneralDenomenator': '1', 'FillId': '29599427', 'Fillqty': 29, 'series': 'EQ', 'GeneralNumerator': '1', 'user': 'SP220xx', 'remarks': '--', 'iSinceBOE': 1662716400}, {'Filltime': '15:10:00', 'usecs': '835977', 'Ordduration': 'DAY', 'ExchordID': '1100000022855645', 'Qty': 201, 'ordergenerationtype': '--', 'strikeprice': '00.00', 'AvgPrice': '1499.55', 'Prctype': 'MKT', 'Minqty': 0, 'Exchseg': 'nse_cm', 'Pcode': 'MIS', 'FillLeg': 1, 'Exchange': 'NSE', 'accountId': 'SP220xx', 'Price': '1499.55', 'Trantype': 'S', 'companyname': 'HDFC BANK LTD', 'Exchtime': '09-Sep-2022 15:10:00', 'bqty': 1, 'Filldate': '09-Sep-2022', 'AlgoCategory': 'NA', 'Custofrm': 'C', 'expdate': 'NA', 'optiontype': 'XX', 'AlgoID': 'NA', 'Symbol': '1333', 'Filledqty': 162, 'Time': '09/09/2022 15:10:00', 'symbolname': 'HDFCBANK', 'BrokerClient': '--', 'NOReqID': '1', 'Tsym': 'HDFCBANK-EQ', 'Nstordno': '220909000161876', 'ReportType': 'fill', 'Expiry': 'NA', 'stat': 'Ok', 'PriceDenomenator': '1', 'panNo': 'xxxxxxxxx', 'PriceNumerator': '1', 'posflag': 'false', 'GeneralDenomenator': '1', 'FillId': '29599425', 'Fillqty': 162, 'series': 'EQ', 'GeneralNumerator': '1', 'user': 'SP220xx', 'remarks': '--', 'iSinceBOE': 1662716400}, {'Filltime': '15:10:00', 'usecs': '836021', 'Ordduration': 'DAY', 'ExchordID': '1100000022855645', 'Qty': 201, 'ordergenerationtype': '--', 'strikeprice': '00.00', 'AvgPrice': '1499.54', 'Prctype': 'MKT', 'Minqty': 0, 'Exchseg': 'nse_cm', 'Pcode': 'MIS', 'FillLeg': 1, 'Exchange': 'NSE', 'accountId': 'SP220xx', 'Price': '1499.45', 'Trantype': 'S', 'companyname': 'HDFC BANK LTD', 'Exchtime': '09-Sep-2022 15:10:00', 'bqty': 1, 'Filldate': '09-Sep-2022', 'AlgoCategory': 'NA', 'Custofrm': 'C', 'expdate': 'NA', 'optiontype': 'XX', 'AlgoID': 'NA', 'Symbol': '1333', 'Filledqty': 172, 'Time': '09/09/2022 15:10:00', 'symbolname': 'HDFCBANK', 'BrokerClient': '--', 'NOReqID': '1', 'Tsym': 'HDFCBANK-EQ', 'Nstordno': '220909000161876', 'ReportType': 'fill', 'Expiry': 'NA', 'stat': 'Ok', 'PriceDenomenator': '1', 'panNo': 'xxxxxxxxx', 'PriceNumerator': '1', 'posflag': 'false', 'GeneralDenomenator': '1', 'FillId': '29599426', 'Fillqty': 10, 'series': 'EQ', 'GeneralNumerator': '1', 'user': 'SP220xx', 'remarks': '--', 'iSinceBOE': 1662716400}]
  ```


  Order properties such as TransactionType, OrderType, and others have been safely classified as enums so you don't have to write them out as strings.


  Transaction types indicate whether you want to buy or sell. Valid transaction types are of the following:

  * `TransactionType.Buy` - buy
  * `TransactionType.Sell` - sell


  Order type specifies the type of order you want to send. Valid order types include:

  * `OrderType.Market` - Place the order with a market price
  * `OrderType.Limit` - Place the order with a limit price (limit price parameter is mandatory)
  * `OrderType.StopLossLimit` - Place as a stop loss limit order
  * `OrderType.StopLossMarket` - Place as a stop loss market order
  * `OrderType.BracketOrder` - Place as a bracket order
  * `OrderType.AfterMarketOrder` - Place as a after market order


  Product types indicate the complexity of the order you want to place. Valid product types are:

  * `ProductType.Intraday` - Intraday order that will get squared off before market close
  * `ProductType.Delivery` - Delivery order that will be held with you after market close


  [Here](https://gist.github.com/krishnavelu/e0df312ccf5f022edb1823461ff4230e) is an example moving average strategy using alice blue API.
  This strategy generates a buy signal when 5-EMA > 20-EMA (golden cross) or a sell signal when 5-EMA < 20-EMA (death cross).


  Alice Blue now supports downloading historical data for back testing.
  1. Historical data API will be available from 5:30 PM (evening) to 8 AM (Next day morning) on weekdays (Monday to Friday). Historical data will not be available during market hours
  1. Historical data API will be available fully during weekends and holidays.
  1. For NSE segment, 2 years of historical data will be provided.
  1. For NFO, CDS and MCX segments, current expiry data will be provided.

  Code
  ```python
  print(alice.historical_data(alice.get_instrument_by_symbol("NSE", "INFY-EQ"),
                              datetime.datetime.now(),
                              datetime.datetime.now(),
                              HistoricalDataType.Minute))
  ```
  Sample Reponse
  ```
  {'stat': 'Ok', 'result': [{'volume': 130792.0, 'high': 1489.8, 'low': 1483.1, 'time': '2022-09-09 09:15:00', 'close': 1488.8, 'open': 1488.0}, {'volume': 33730.0, 'high': 1488.95, 'low': 1485.35, 'time': '2022-09-09 09:16:00', 'close': 1486.0, 'open': 1488.05}, {'volume': 28446.0, 'high': 1486.5, 'low': 1484.0, 'time': '2022-09-09 09:17:00', 'close': 1484.8, 'open': 1485.65}, {'volume': 33256.0, 'high': 1486.0, 'low': 1484.55, 'time': '2022-09-09 09:18:00', 'close': 1485.45, 'open': 1484.9}], 'message': None}
  ```

  Before creating an issue in this library, please follow the following steps.

  1. Search the problem you are facing is already asked by someone else. There might be some issues already there, either solved/unsolved related to your problem. Go to [issues](https://github.com/krishnavelu/alice_blue/issues) page, use `is:issue` as filter and search your problem. ![image](https://user-images.githubusercontent.com/38440742/85207058-376ee400-b2f4-11ea-91ad-c8fd8a682a12.png)
  2. If you feel your problem is not asked by anyone or no issues are related to your problem, then create a new issue.
  3. Describe your problem in detail while creating the issue. If you don't have time to detail/describe the problem you are facing, assume that I also won't be having time to respond to your problem.
  4. Post a sample code of the problem you are facing. If I copy paste the code directly from issue, I should be able to reproduce the problem you are facing.
  5. Before posting the sample code, test your sample code yourself once. Only sample code should be tested, no other addition should be there while you are testing.
  6. Have some print() function calls to display the values of some variables related to your problem.
  7. Post the results of print() functions also in the issue.
  8. Use the insert code feature of github to inset code and print outputs, so that the code is displayed neat. ![image](https://user-images.githubusercontent.com/38440742/85207234-4dc96f80-b2f5-11ea-990c-df013dd69cf2.png)
  9. If you have multiple lines of code, use triple grave accent ( ``` ) to insert multiple lines of code. [Example:](https://docs.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks) ![image](https://user-images.githubusercontent.com/38440742/89105781-343a3e00-d3f2-11ea-9f86-92dda88aa5bf.png)
  10. [Here](https://github.com/krishnavelu/alice_blue/issues/134#issuecomment-647016659) is an example of what I'm expecting while you are creating an issue.


pkgId: 63a2cdcdf3dafe00fd95999890d31fae4e575f2799b22540ca36102364aa5365
name: python-alignmentrs
arch: noarch
version: 0.9.0
epoch: 0
release: 1
summary: Quickly read and manipulate multiple sequence alignments in Python
url: https://github.com/kentwait/alignmentrs
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-alignmentrs-0.9.0-1.src.rpm
location_href: Packages/python-alignmentrs-0.9.0-1.noarch.rpm
checksum_type: sha256
description:
  Quickly read and manipulate multiple sequence alignments in Python



      pip install alignmentrs




  ```python
  >>> import alignmentrs as rs
  >>> aln = rs.Alignment.from_fasta('hiv.fna', 'HIV_alignment')
  >>> aln
  Alignment(nsamples=10, nsites=120, nmarkers=0)
  >>> aln.sample_ids
  ['sample01', 'sample02', 'sample03', 'sample04', 'sample05', 'sample06'
   'sample07', 'sample08', 'sample09', 'sample10']
  ```


  ```python
  >>> sites_to_remove = [i for i in range(120) if (i-2) % 3 != 0]  # remove 1st and 2nd position in codon triplet
  >>> aln.remove_sites(sites_to_remove, copy=False)  # manipulate inplace, copy=True returns a new copy
  Alignment(nsamples=10, nsites=40, nmarkers=0)
  ```


  ```python
  >>> sites_to_retain = list(range(2, 3, 120))  # third position in codon triplet
  >>> aln.retain_sites(sites_to_retain, copy=False)  # manipulate inplace, copy=True returns a new copy
  Alignment(nsamples=10, nsites=40, nmarkers=0)
  ```


  ```python
  >>> sub_aln = aln.subset(samples=['sample01', 'sample03', 'sample05'], sites=list(range(2, 3, 120)))
  >>> sub_aln
  Alignment(nsamples=3, nsites=40, nmarkers=0)
  ```



  [MIT License](https://github.com/kentwait/alignmentrs/blob/master/LICENSE)


pkgId: ec1d1adb78b7b65e4849853425f3b9e40bcd21fcf31da821568eba3a8e619204
name: python-alphazerocode
arch: noarch
version: 1.10.1.1
epoch: 0
release: 1
summary: AlphaZeroCode
url: https://pypi.org/project/alphazerocode/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-alphazerocode-1.10.1.1-1.src.rpm
location_href: Packages/python-alphazerocode-1.10.1.1-1.noarch.rpm
checksum_type: sha256
description:
  ![image](https://github.com/Michi-123/AlphaZeroCode/assets/26673104/3b773129-74d2-4e11-bcab-d39f17c10980)
  https://www.udemy.com/course/alphazero/<br>
  <h1>AlphaZeroの意外な構造</h1>
  <h2>またはAlphaGoは如何にして棋譜データの利用を止めて自分の経験に頼るようになったか</h2>
  囲碁AIのAlphaGoから、人の知識なしでゼロから学習に成功した強化学習モデル のゲームＡＩ「AlphaZero」 を、初心者・中級者向けに、イラストなどで解説していきます。AlphaZeroは、将棋ＡＩとしても成果を出しています。<br>

  <pre>
  pip install AlphaZeroCode
  </pre>
  <pre>
  import AlphaZeroCode
  </pre>
  You must implement tain code using Udemy recture.


pkgId: 82cad6c465e560e9487480565d478f633c6f4ff6d50f4d8a0cd6275a9849aeb8
name: python-angular-gettext-babel
arch: noarch
version: 0.3
epoch: 0
release: 1
summary: A plugin for babel to work with angular-gettext templates
url: https://github.com/neillc/angular-gettext-babel
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-angular-gettext-babel-0.3-1.src.rpm
location_href: Packages/python-angular-gettext-babel-0.3-1.noarch.rpm
checksum_type: sha256
description:
  A babel extractor for use with angular-gettext (https://angular-gettext.rocketeer.be/)
  This is a very simple extractor that does not attempt to deal with anything but
  html templates that have translate directives embedded in them.


pkgId: a7363f1d2534ca14a8104597404a8568ceda03fa14726304ec51a55ac5126591
name: python-anonupload
arch: noarch
version: 1.3.0
epoch: 0
release: 1
summary: upload and download to anonfiles server
url: https://github.com/jakbin/anonupload
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-anonupload-1.3.0-1.src.rpm
location_href: Packages/python-anonupload-1.3.0-1.noarch.rpm
checksum_type: sha256
description:
  An upload script for anonfiles.com made in python. Supports multiple files.

   [![Publish package](https://github.com/jakbin/anonupload/actions/workflows/publish.yml/badge.svg)](https://github.com/jakbin/anonupload/actions/workflows/publish.yml)
   [![PyPI version](https://badge.fury.io/py/anonupload.svg)](https://pypi.org/project/anonupload/)
   [![Downloads](https://pepy.tech/badge/anonupload/month)](https://pepy.tech/project/anonupload)
   [![Downloads](https://static.pepy.tech/personalized-badge/anonupload?period=total&units=international_system&left_color=green&right_color=blue&left_text=Total%20Downloads)](https://pepy.tech/project/anonupload)
   ![GitHub Contributors](https://img.shields.io/github/contributors/jakbin/anonupload)
   ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/jakbin/anonupload)
   ![GitHub last commit](https://img.shields.io/github/last-commit/jakbin/anonupload)
   ![Python 3.6](https://img.shields.io/badge/python-3.6-yellow.svg)



  - Progress bar
  - upload urls will save in a file.
  - You can change file name before upload on anonfile server




  ```sh
  pip3 install anonupload
  ```


  ```sh
  anon up {path-to-file_1} {path-to-file _2} ...  # upload file to anonfile server
  anon d {url1} {url2} ...              # and upload directly to anonfiles
  ```



  The anonfile-upload client is also usable through an API (for test integration, automation, etc)



  ```py
  from anonupload import upload

  upload(filename)
  ```

  ```py
  from anonupload import changefile_and_upload
  changefile_and_upload([file1, file2])
  ```



  ```py
  from anonupload import download

  download(url)
  ```



  ```py
  from anonupload import downloads

  downloads([url1, url2])
  ```


pkgId: 1da629dffb13aff7bfc9af4b212e9226df15f354de4335a9388f695c8b8d8f39
name: python-ansiplot
arch: noarch
version: 0.1.1
epoch: 0
release: 1
summary: Legible console plotting in Python.
url: https://github.com/maniospas/ansiplot
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s64p-256g--a41-8.compass-ci.net
rpm_sourcerpm: python-ansiplot-0.1.1-1.src.rpm
location_href: Packages/python-ansiplot-0.1.1-1.noarch.rpm
checksum_type: sha256
description:
  A small utility library for legible console plotting
  in Python. Plot differences remain mostly legible,
  even for highly overlapping plots and small canvas
  dimensions. ANSI is used to color console output.



  Install the library with `pip install ansiplot`.
  Then prepare some data for drawing three curves:
  two similar cosine functions that lie very close to
  each other, and a sine function.

  ```python
  import math

  x = [(i - 100) * 0.01 for i in range(200)]
  y1 = [math.cos(value * 10) for value in x]
  y2 = [math.cos(value * 10 + 0.1) for value in x]
  y3 = [math.sin(value * 10) for value in x]
  ```

  Now, import `ansiplot` and create a rectangle
  60x10 canvas. This has specific scaling limits,
  but you can also use a `Scaled` canvas to
  automatically detect those limits.
  For demonstration purposes,
  hide the default axis to add some on specific
  locations at the end with `bar` and `hbar`.
  Those forcefully rewrite entries, whereas other
  plots try to preserve some overwritten information
  from being hidden if they can help it.

  ```python
  import ansiplot

  plot = ansiplot.Rect(60, 10,
       xlimits=(-1, 1),
       ylimits=(-1, 1),
       axis=False)
  plot.plot(x, y1, title="cos")
  plot.plot(x, y2, title="cos offset")
  plot.plot(x, y3, title="cos")

  plot.bar(0, (-1, 1), symbol="▕▎");
  plot.hbar((-1, 1), 0, symbol=Pretty.xaxis, title="x=0 or y=0")

  plot.show()
  ```

  ![Example image](example/example.png)

  You can export the text manually with `plot.text()`.
  Both this and the show method can create
  colorless versions (useful for exporting to
  files) and control whether legends are shown.
  Here is an example for exporting the canvas
  to a file:

  ```python
  with open("example.txt", "w") as file:
      file.write(plot.text(colorless=True, legend=True))
  ```


pkgId: 307f47b94de554c54b97c405f9be15e4882b56ea595e6c0eff2e2bcfe1af54e9
name: python-ansiplot
arch: noarch
version: 0.1.3
epoch: 0
release: 1
summary: Legible console plotting in Python.
url: https://github.com/maniospas/ansiplot
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ansiplot-0.1.3-1.src.rpm
location_href: Packages/python-ansiplot-0.1.3-1.noarch.rpm
checksum_type: sha256
description:
  ![Compatibility](https://github.com/maniospas/ansiplot/actions/workflows/compatibility.yaml/badge.svg)

  <img src="example/example.png" alt="Example image" width="300">

  A small library for legible console plotting in Python.



  Install the library with `pip install ansiplot`.
  Create a canvas of given dimensions
  that scales automatically, and plot on it like so:

  ```python
  import ansiplot

  x = [(i - 100) * 0.01 for i in range(200)]
  square = [value**2 for value in x]

  plot = ansiplot.Scaled(30, 10)
  plot.plot(x, x, title="tautology")
  plot.plot(x, square, title="square")
  plot.show()
  ```

  <img src="example/quickstart.png" alt="Quickstart image" width="200">

  Curve differences remain mostly legible,
  even for overlapping regions and small canvases.
  ANSI is used to color the console output, and any
  numeric iterable -such as numpy arrays- can be given as data.



  [Showcase](example/showcase.md) - see several features in action<br>
  [Documentation](example/docs.md) - available methods


pkgId: 9ff276680ff68a0c5de196c6f6907c55da3a693f87e0f1a252b770baa656f0c0
name: python-ansys-grpc-dpf
arch: noarch
version: 0.8.1
epoch: 0
release: 1
summary: Package for ansys-grpc-dpf python gRPC client
url: https://pypi.org/project/ansys-grpc-dpf/
rpm_license: Ansys Redistribution License
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a32-1.compass-ci.net
rpm_sourcerpm: python-ansys-grpc-dpf-0.8.1-1.src.rpm
location_href: Packages/python-ansys-grpc-dpf-0.8.1-1.noarch.rpm
checksum_type: sha256
description:
  This module contains the python gRPC client for ansys-dpf-gate (dependency of ansys-dpf-core). It communicates directly with the DPF server. It allows backward compatibility with old DPF servers (strictly older than Ansys 2022 R2).


pkgId: b1083c41f3f6626e0a6671f2aa58939243b94e7780913cfcffed5ba4b6fa3cb9
name: python-ant1Interface
arch: noarch
version: 0.0.36
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://code.alipay.com/ai-dls/antnlp/blob/master/adabrain/common/interface/ant1/README.md
rpm_license: Copyright 2022 Ant Group Co., Ltd.
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a35-6.compass-ci.net
rpm_sourcerpm: python-ant1Interface-0.0.36-1.src.rpm
location_href: Packages/python-ant1Interface-0.0.36-1.noarch.rpm
checksum_type: sha256
description:
  前言：
  这个代码库主要是用来实现引擎调用算法模型时，输入输出接口的解析。bot中相应的接口定义详见https://yuque.antfin.com/crtpg4/dp5u2i/ciww6f#qNMmC

  两种import方式：
  1. 如果使用antnlp，参考antnlp/adabrain/common/interface/ant1/demo.py
  2. 如果不使用antnlp, 直接安装pypi包，pip install -i https://test.pypi.org/simple/ ant1
  在代码里面引入包  import ant1
  引入具体包 from ant1 import decoder
  务必在函数每次被调用的时候，进行初始化
  decode_builder = decoder.DecoderParamsBuilder(input_proto_type=INPUT_PROTO_TYPE)

  组件内的解析函数定义使用详见antnlp/adabrain/common/interface/ant1/docs


pkgId: aaaf8a69db019ed11593b265bce69892d4b12d0508c692c12b4b3998f44a9a6a
name: python-antgen
arch: noarch
version: 0.4.1
epoch: 0
release: 1
url: https://gitlab.com/nunovelosa/antgen
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-antgen-0.4.1-1.src.rpm
location_href: Packages/python-antgen-0.4.1-1.noarch.rpm
checksum_type: sha256
summary:
  This tool generates synthetic macroscopic load signatures for their use in conjunction with NILM (load disaggregation) tools.

description:
  This tool generates synthetic macroscopic load signatures for their use in conjunction
  with NILM (load disaggregation) tools. By default, it runs in scripted mode (i.e., with
  no graphical user interface) and processes an input configuration file into a set of CSV
  output files containing power consumption values and the timestamps of their occurrence,
  as well as a file summarizing the events that have occurred during the simulation).

  If you find this tool useful and use it (or parts of it), we ask you to cite the following work in your publications:
  ```bibtex
  @inproceedings{reinhardt20benchmarking,
    author = {Andreas Reinhardt and Christoph Klemenjak},
    title = {How does Load Disaggregation Performance Depend on Data Characteristics? Insights from a Benchmarking Study},
    booktitle = {Proceedings of the 11th ACM International Conference on Future Energy Systems (e-Energy)},
    year = {2020}
  }
  ```



  ANTgen relies on a small number of Python libraries to fully function. Install them by typing:

  ```bash
  pip3 install -r requirements.txt
  ```

  Note: On Windows systems without a C/C++ compiler suite installed, the installation of package requirements may fail,
  reporting that the "Microsoft Visual C++ Build Tools" are missing. To continue, [download and install
  them](https://visualstudio.microsoft.com/visual-cpp-build-tools/), then re-run the above command.

  ANTgen can show an overview plot of its generated data if `matplotlib` is installed.
  So unless you plan to use ANTgen to create data on a headless server, we recommend the installation
  of this library as well.

  ```bash
  pip3 install matplotlib    # (optional, install only if you want to see your data plotted)
  ```



  ```bash
  python3 antgen.py [-o DESTINATION] [-w] [-s SEED] [-a] [-m MAPFILE]
                    [-d DAYS] [-n NOISECONFIG] [-v] [-p] configfile
  ```

  Mandatory argument:

  * `configfile`: The configuration file to process (see next section for format)

  Optional arguments:

  * `-o <dir>` specifies the folder in which the output files shall be saved (`output/` by default)
  * `-w` overwrite output files if they already exist
  * `-s <123123123>` define the seed value for the random number generator
  * `-a` randomly pick an appliance model each time the appliance is being operated (if unset, all operations of appliances of the same type will be exact replicas of each other)
  * `-m <mapping.conf>` defines the mappings between appliances types and their AMBAL models (can be overwritten individually in the `[devices]` section of the configuration file)
  * `-n <C123>` defines if noise shall be added to the aggregate signal. One letter (`C`=constant, `G`=Gaussian) followed by the amplitude in Watt
  * `-d <123>` overrides the number of days for which to generate data (can also be given in the `[GENERAL]` section of the configuration file)
  * `-p` opens a graphical interface to plot the resulting traces after their generation (requires `matplotlib`)
  * `-v` makes ANTgen verbose and outputs more status information



  All ANTgen configuration files are expected to be present in TOML format.
  The core configuration file must feature at least the sections `[GENERAL]` and `[users]`.
  Optionally, specific appliance models to be used can be placed in the `[devices]` section.
  If `[devices]` is not part of the configuration file, a fallback mapping between
  appliance names and the corresponding model dictionary must be provided by means
  of the `-m` option, such as `-m mapping.conf`. This mapping file must contain a section
  named `[devices]` to be processed correctly.

  * In the `[GENERAL]` section, the configuration needs to be provided with a `name` and
  the number of `days` for which data shall be generated. Optionally, the `seed`
  value for the random number generator can be specified to ensure a repeatable
  trace generation. When no seed is provided, the random number generator will
  initialize itself based on the current system time. If the number of days is neither
  specified here nor on the command line (using `-d`), ANTgen will generate one day
  worth of data only.

  * The `[users]` section contains key-value pairs of user handles (only used for debugging)
  and the corresponding user models (see next section for details). In order to allow
  household base loads (refrigerator, etc) to run unattended, they should be added
  as another (virtual) user, e.g., `Home`.

  * An (optional) `[devices]` section can be added to list the appliance model *directories* to
  consider, indexed by the **capitalized** appliance type. It is crucial to keep
  the structure of the path intact, i.e., use exactly two levels of hierarchy, with
  the first-level subdirectory indicating the type of modeled appliance, and
  the second-level subdirectory referring to the individual handle from which
  the data was extracted. The keys for each entry must be upper-case and reflect
  the type of appliance that is being referred to. All AMBAL models must be located
  in the `appliances/` subdirectory.

  An example configuration is shown as follows:
  ```
  [GENERAL]
  name = Sample configuration
  days = 4
  seed = 12345

  [users]
  Home = baseload.conf
  Jack = STUDENT/student_simple.conf

  [devices]
  COOKINGSTOVE = COOKINGSTOVE/dev_D33097
  TV = TV/dev_B80E51
  ```

  This configuration file will create synthetic load signature data for four days, seeding
  the random number generator with the value 12345. There are two users in the generated data,
  one going by the handle "Jack" and following the daily routines specified in `users/STUDENT/student_simple.conf`.
  The second "user" is present to model the household base load, as defined in `users/baseload.conf`.



  To create realistic models, ANTgen relies on user models. All user models are stored in
  the `users/` subdirectory, or subdirectories thereof. User models are stored in TOML
  format, and must feature the `[GENERAL]` and `[presence]` sections, as well as one section
  for each user activity that should be modeled (these ones must start with the string
  `activity_`).

  * In the `[GENERAL]` section, the user model must be provided with a `name`, which is
  also reflected in the graphical user interface and the per-user power consumption output
  file.

  * The `[presence]` section contains key-value pairs of weekdays ("monday" through "sunday";
  all in lower-case) and and the corresponding presence times. Times are specified in
  24hr notation (from 00:00-24:00); multiple time ranges can be concatenated using commas.
  These time frames indicate when a user can start/perform an activity.

  * All activity sections must start with the `activity_` tag, followed by a unique
  identifier (hint: this makes it easy to remove an activity temporarily by making it an
  `inactivity_`). User activities are modeled separately (see below); the link between is
  created by specifying the file name of the activity configuration using the `model` entry.
  The `daily_runs` value states the average number of repetitions of this activity
  throughout each day. There is no guarantee the activity will be scheduled *exactly* this
  often during each simulated day. Lastly, activity occurrences can be time-limited by
  specifying the hours during which the activity can take place for each day of the week,
  using the same notation as for the `presence` tag above.

  An example user model is shown as follows:

  ```
  [GENERAL]
  name = Lucas Lazybone

  [presence]
  monday   = 00:00-08:30, 14:00-24:00
  sunday   = 00:00-24:00

  [activity_breakfast]
  model      = KITCHEN/cooking_quick.conf
  daily_runs = 1
  monday     = 07:30-08:15
  sunday     = 08:30-09:15
  ```

  This configuration models a user who is only at home on mondays and sundays, and cooks
  breakfast once on both days at some (randomly determined) time in the specified time intervals.



  Activities are modeled as state machines, to be executed by the users. All activity
  models must be stored in the `activities/ ` subdirectory, or subdirectories thereof.
  Activity models also use the TOML format.

  As follows, find some notes on the used nomenclature and some general guidelines
  for activity definitions:

  1. The only entry the `[GENERAL]` section of each activity model must contain is the
  `name` field. Enter a descriptive name of the activity, which will also constitute
  the corresponding file name for the power data when written to an output file.

  2. Specify the types of appliances the activity requires in the `[devices]` section. The tool
  will try to find matches for all entries listed there, so any unused leftover entries
  can make the synthesis fail. Use unique numeric keys for listing the devices required. They
  will be later referred to in the state machine (see below).

  3. Activities are modeled in the form of state machines. Each operational state is
  specified in the `[sequence]` table.
  All states must be assigned a numeric identifier (the state machine starts in state `0`) and
  require the specification of the following fields, which are entered in the
  form of a comma-separated list:
      - A short name (primarily for debugging purposes)
      - The minimum and maximum duration (use '0' to fall back to the underlying appliance
      model's default value). If a value greater than 0 is provided, the underlying appliance's activity
      will be scaled linearly in time, i.e., the durations of all its elements will be
      stretched/compressed to meet the requested overall duration.
      - A flag whether the user must be present for a particular state to take place. This
      ensures that an activity is only scheduled when the user is actually at home when needed.
      - A flag whether the state must run to completion before the state machine will progress
      to the next step. If this value is set to 'false', a delay of just 5-10 seconds is introduced
      before moving on to the next state, and the appliance continues to operate in the background.
      - The ID of the device to operate in this state (as per the key specified in the
      `[devices]` section of the activity configuration file).
      - The next state(s) into which the appliance operation can move, as well as the probability
      of the transition there. The state machine will advance into state A with the probability
      specified, and into the state B with the converse probability. Using the same value for states A
      and B, or a probability of 1.0 effectively makes this a linear flow with no variation possible.
      Referring to an undefined state in the state machine will terminate the state machine's flow.

  The state model representation also allows for unattended operation of devices (simply set
  the flag whether it involves the user to false). Similarly, states that involve the user but no appliance (e.g.
  eating) can be modeled by setting the appliance ID to an undefined value (e.g., 0), but specifing a non-zero duration.

  There is no need to add a "start" state, yet an initial state with a duration of 0 seconds
  can be added for the sake of better readability. Likewise, a state relying on an undefined
  appliance (e.g., '0') with non-zero duration can act as a delay in-between states.

  An example activity model for vacuuming the apartment is shown as follows. It assigns ID 1 to the
  VACUUMCLEANER appliance, and runs this appliance as long (or short) as stored in the appliance model.
  The user must be present both during the start of the activity (`involves_user`) as well as throughout
  its operation (`run_to_completion`). After one room has been vaccumed, the user rests for 5-10 minutes,
  before vacuuming another room (at 20% probability) or stopping the activity (at 80% probability).

  ```
  [GENERAL]
  name = vacuuming

  [devices]
  1=VACUUMCLEANER

  [sequence]

  0=vacuum,         0,       0,          true,              true,   1,        1.0,       1,       1
  1=rest,         300,     600,          true,              true,   0,        0.2,       0,       2
  ```


  ANTgen uses the AMBAL format for its appliance models (i.e., XML files). A sample set
  of models is provided in the `appliances/` subdirectory of this repository.
  Newly extracted models can simply be copied into this directory.



  When executed with the `-p` option, a graphical user interface is brought up after the
  trace generation has completed. The user interface shows traces for total power demand
  as well as the demand of power per user, power per activity, and power per appliance.
  To use this feature, the `matplotlib` library must be installed.

  By clicking on the colored lines in the legend boxes (*not* their textual labels),
  the visibility of individual traces can be toggled from the view.



  The distribution of ANTgen ships with a few user, activity, and appliance models.
  Run the following command to create a synthetic trace for one user and a constantly
  running refrigerator, for the duration of 10 days.

  ```bash
  python3 antgen.py -m mapping.conf default.conf
  ```

  During its execution, ANTgen will output some logging information, an excerpt
  of which is shown as follows. Most of it should be self-explanatory.

  ```
             root [I] ANTgen started using 'default.conf' on 14-05-2020 at 14:16:25
             root [I] Output files will be stored in ./output
                  ...
        UserModel [I] User model successfully created for 'Household base load' (1 activity)
        UserModel [I] User model successfully created for 'Grumpy Grandma' (5 activities)
             root [I] ********************************************************************************
                  ...
        UserModel [I] First weekdaynature(s) for activity 1/1 (fridge) for 10 days...
    ActivityModel [I] Synthesis of 'fridge operation' done: 241 scheduled, 5 didn't fit
        UserModel [I] Generating load signature(s) for activity 1/5 (vacuum) for 10 days...
    ActivityModel [I] Synthesis of 'vacuuming' done: 8 runs scheduled
        UserModel [I] Generating load signature(s) for activity 2/5 (dishwashing) for 10 days...
    ActivityModel [I] Synthesis of 'dishwasher operation' done: 1 runs scheduled
        UserModel [I] Generating load signature(s) for activity 3/5 (tv) for 10 days...
    ActivityModel [I] Synthesis of 'watching TV' done: 13 runs scheduled
        UserModel [I] Generating load signature(s) for activity 4/5 (ironing) for 10 days...
    ActivityModel [I] Synthesis of 'ironing clothes' done: 4 runs scheduled
        UserModel [I] Generating load signature(s) for activity 5/5 (laundry) for 10 days...
    ActivityModel [I] Synthesis of 'washing a load of laundry' done: 3 runs scheduled
             root [I] Synthesis completed in 30.926 seconds
                  ...
             root [I] ********************************************************************************
             root [I] Trace duration (days)  :             10
             root [I] First weekday          :         friday
             root [I] # active devices       :             12
             root [I] # appliance operations :            553
             root [I] ---------------------------------------
             root [I]    VACUUMCLEANER #runs :              8
             root [I]   WASHINGMACHINE #runs :              3
             root [I]             IRON #runs :              4
             root [I]     REFRIGERATOR #runs :            241
             root [I]       DISHWASHER #runs :              1
             root [I]               TV #runs :             26
             root [I] ---------------------------------------
             root [I] Max. appl. concurrency :              2
             root [I] Random seed            :     1234567890
             root [I] Added noise            :           none
  ```

  If you have `matplotlib` installed, ANTgen can also provide a plot of the synthesis results.
  Simply invoke it with `-p` on the command line:

  ```bash
  python3 antgen.py -m mapping.conf -p default.conf
  ```

  ![Visualization when synthesizing default.conf](example1.png)

  ANTgen features two ways to make the output data a little harder to disaggregate.
  First, adding noise to the aggregate signal is possible by invoking ANTgen with the
  `-n` option. For example, `-n G200` will add 200 Watts of Gaussian noise (with
  a standard deviation of one tenth of the amplitude, i.e., 20W) to the aggregate signal.
  Second, you can use the `-a` switch to alternate the used appliance model for each activity.
  While all refrigerator cycles followed the exact same power consumption pattern in above
  diagram, a random model for the given appliance will be selected in this case (from the directory
  `appliances/REFRIGERATOR/dev20111228/`) for each operation of the refrigerator.


  ```bash
  python3 antgen.py -m mapping.conf -n G200 -a -d5 -p default.conf
  ```

  ![Visualization when synthesizing default.conf with extended options](example2.png)

  Other configuration files (including the ones that were used to create the synthetic data for
  the aforementioned ACM e-Energy 2020 publication) are located in the `testcases/` directory.



  Copyright (C) 2019-2020  Andreas Reinhardt <reinhardt@ieee.org>, TU Clausthal

  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: 3119d494b4087729d8d34eba6341e0a558bfe61a614589620b27b65c5a0471ce
name: python-antialiased-cnns
arch: noarch
version: 0.3
epoch: 0
release: 1
summary: Antialiased models and pooling layer from Zhang. Making Convnets Shift-Invariant Again. ICML 2019.
url: https://github.com/adobe/antialiased-cnns
rpm_license: Other/Proprietary License
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a62-5.compass-ci.net
rpm_sourcerpm: python-antialiased-cnns-0.3-1.src.rpm
location_href: Packages/python-antialiased-cnns-0.3-1.noarch.rpm
checksum_type: sha256
description:
  <img src='https://richzhang.github.io/antialiased-cnns/resources/gifs2/video_00810.gif' align="right" width=300>

  **Making Convolutional Networks Shift-Invariant Again** <br>
  [Richard Zhang](https://richzhang.github.io/). In [ICML, 2019](https://arxiv.org/abs/1904.11486).



  Run `pip install antialiased-cnns`

  ```python
  import antialiased_cnns
  model = antialiased_cnns.resnet50(pretrained=True)
  ```
  <!-- model.load_state_dict(torch.load('resnet50_lpf4-994b528f.pth.tar')['state_dict']) # load weights; download it beforehand from https://www.dropbox.com/s/zqsudi0oz5ym8w8/resnet50_lpf4-994b528f.pth.tar?dl=0 -->

  <!-- Now you are antialiased! -->

  If you have a model already and want to antialias and continue training, copy your old weights over:

  ``` python
  import torchvision.models as models
  old_model = models.resnet50(pretrained=True) # old (aliased) model
  antialiased_cnns.copy_params_buffers(old_model, model) # copy the weights over
  ```

  If you want to modify your own model, use the BlurPool layer. More information about our provided models and how to use BlurPool is below.

  ```python
  C = 10 # example feature channel size
  blurpool = antialiased_cnns.BlurPool(C, stride=2) # BlurPool layer; use to downsample a feature map
  ex_tens = torch.Tensor(1,C,128,128)
  print(blurpool(ex_tens).shape) # 1xCx64x64 tensor
  ```

  **Updates**
  * **(Oct 2020) Finetune** I initialize the antialiased model with weights from baseline model, and finetune. Before, I was training from scratch. The results are better.
  * **(Oct 2020) Additional models** We now have 23 total model variants. I added variants of vgg, densenet, resnext, wide resnet varieties! The same conclusions hold.
  * **(Sept 2020) Pip install** You can also now `pip install antialiased-cnns` and load models with the `pretrained=True` flag.
  * **(Sept 2020) Kernel 4** I have added kernel size 4 experiments. When downsampling an even sized feature map (e.g., a 128x128-->64x64), this is actually the correct size to use to keep the indices from drifting.



  1. [More information about antialiased models](#1-more-information-loading-an-antialiased-model)<br>
  2. [Instructions for antialiasing your own model](#2-more-information-how-to-antialias-your-own-architecture), using the [`BlurPool`](antialiased_cnns/__init__.py) layer<br>
  3. [ImageNet training and evaluation code](README_IMAGENET.md). Achieving better consistency, while maintaining or improving accuracy, is an open problem. Help improve the results!



  Pip install this package

  - `pip install antialiased-cnns`

  Or clone this repository and install requirements (notably, PyTorch)

  ```bash

  https://github.com/adobe/antialiased-cnns.git
  cd antialiased-cnns
  pip install -r requirements.txt
  ```




  The following loads a pretrained antialiased model, perhaps as a backbone for your application.

  ```python
  import antialiased_cnns
  model = antialiased_cnns.resnet50(pretrained=True, filter_size=4)
  ```

  We also provide weights for antialiased `AlexNet`, `VGG16(bn)`, `Resnet18,34,50,101`, `Densenet121`, and `MobileNetv2` (see [example_usage.py](example_usage.py)).



  The `antialiased_cnns` module contains the `BlurPool` [class](antialiased_cnns/downsample.py), which does blur+subsampling. Run `pip install antialiased-cnns` or copy the `antialiased_cnns` subdirectory.

  **Methodology** The methodology is simple -- first evaluate with stride 1, and then use our `BlurPool` layer to do antialiased downsampling. Make the following architectural changes.

  ```python
  import antialiased_cnns


  baseline = nn.MaxPool2d(kernel_size=2, stride=2)
  antialiased = [nn.MaxPool2d(kernel_size=2, stride=1),
      antialiased_cnns.BlurPool(C, stride=2)]


  baseline = [nn.Conv2d(Cin, C, kernel_size=3, stride=2, padding=1),
      nn.ReLU(inplace=True)]
  antialiased = [nn.Conv2d(Cin, C, kernel_size=3, stride=1, padding=1),
      nn.ReLU(inplace=True),
      antialiased_cnns.BlurPool(C, stride=2)]


  baseline = nn.AvgPool2d(kernel_size=2, stride=2)
  antialiased = antialiased_cnns.BlurPool(C, stride=2)
  ```

  We assume incoming tensor has `C` channels. Computing a layer at stride 1 instead of stride 2 adds memory and run-time. As such, we typically skip antialiasing at the highest-resolution (early in the network), to prevent large increases.

  **Add antialiasing and then continue training** If you already trained a model, and then add antialiasing, you can fine-tune from that old model:

  ``` python
  antialiased_cnns.copy_params_buffers(old_model, antialiased_model)
  ```

  If this doesn't work, you can just copy the parameters (and not buffers). Adding antialiasing doesn't add any parameters, so the parameter lists are identical. (It does add buffers, so some heuristic is used to match the buffers, which may throw an error.)

  ``` python
  antialiased_cnns.copy_params(old_model, antialiased_model)
  ```

  <img src='https://richzhang.github.io/antialiased-cnns/resources/antialias_mod.jpg' width=800><br>



  We observe improvements in both **accuracy** (how often the image is classified correctly) and **consistency** (how often two shifts of the same image are classified the same).

  <img src='plots/plots2_acc.png' align="left" width=750>

  <img src='plots/plots2_con.png' align="left" width=750>

  | ACCURACY | Baseline | Antialiased | Delta |
  | :------: | :------: | :-------: | :-------: |
  | alexnet | 56.55 | 56.94 | +0.39 |
  | vgg11 | 69.02 | 70.51 | +1.49 |
  | vgg13 | 69.93 | 71.52 | +1.59 |
  | vgg16 | 71.59 | 72.96 | +1.37 |
  | vgg19 | 72.38 | 73.54 | +1.16 |
  | vgg11_bn | 70.38 | 72.63 | +2.25 |
  | vgg13_bn | 71.55 | 73.61 | +2.06 |
  | vgg16_bn | 73.36 | 75.13 | +1.77 |
  | vgg19_bn | 74.24 | 75.68 | +1.44 |
  | resnet18 | 69.74 | 71.67 | +1.93 |
  | resnet34 | 73.30 | 74.60 | +1.30 |
  | resnet50 | 76.16 | 77.41 | +1.25 |
  | resnet101 | 77.37 | 78.38 | +1.01 |
  | resnet152 | 78.31 | 79.07 | +0.76 |
  | resnext50_32x4d | 77.62 | 77.93 | +0.31 |
  | resnext101_32x8d | 79.31 | 79.33 | +0.02 |
  | wide_resnet50_2 | 78.47 | 78.70 | +0.23 |
  | wide_resnet101_2 | 78.85 | 78.99 | +0.14 |
  | densenet121 | 74.43 | 75.79 | +1.36 |
  | densenet169 | 75.60 | 76.73 | +1.13 |
  | densenet201 | 76.90 | 77.31 | +0.41 |
  | densenet161 | 77.14 | 77.88 | +0.74 |
  | mobilenet_v2 | 71.88 | 72.72 | +0.84 |

  | CONSISTENCY | Baseline | Antialiased | Delta |
  | :------: | :------: | :-------: | :-------: |
  | alexnet | 78.18 | 83.31 | +5.13 |
  | vgg11 | 86.58 | 90.09 | +3.51 |
  | vgg13 | 86.92 | 90.31 | +3.39 |
  | vgg16 | 88.52 | 90.91 | +2.39 |
  | vgg19 | 89.17 | 91.08 | +1.91 |
  | vgg11_bn | 87.16 | 90.67 | +3.51 |
  | vgg13_bn | 88.03 | 91.09 | +3.06 |
  | vgg16_bn | 89.24 | 91.58 | +2.34 |
  | vgg19_bn | 89.59 | 91.60 | +2.01 |
  | resnet18 | 85.11 | 88.36 | +3.25 |
  | resnet34 | 87.56 | 89.77 | +2.21 |
  | resnet50 | 89.20 | 91.32 | +2.12 |
  | resnet101 | 89.81 | 91.97 | +2.16 |
  | resnet152 | 90.92 | 92.42 | +1.50 |
  | resnext50_32x4d | 90.17 | 91.48 | +1.31 |
  | resnext101_32x8d | 91.33 | 92.67 | +1.34 |
  | wide_resnet50_2 | 90.77 | 92.46 | +1.69 |
  | wide_resnet101_2 | 90.93 | 92.10 | +1.17 |
  | densenet121 | 88.81 | 90.35 | +1.54 |
  | densenet169 | 89.68 | 90.61 | +0.93 |
  | densenet201 | 90.36 | 91.32 | +0.96 |
  | densenet161 | 90.82 | 91.66 | +0.84 |
  | mobilenet_v2 | 86.50 | 87.73 | +1.23 |

  To reduce clutter, extended results (different filter sizes) are [here](README_IMAGENET.md). Help improve the results!



  <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.

  All material is made available under [Creative Commons BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode) license by Adobe Inc. You can **use, redistribute, and adapt** the material for **non-commercial purposes**, as long as you give appropriate credit by **citing our paper** and **indicating any changes** that you've made.

  The repository builds off the PyTorch [examples repository](https://github.com/pytorch/examples) and torchvision [models repository](https://github.com/pytorch/vision/tree/master/torchvision/models). These are [BSD-style licensed](https://github.com/pytorch/examples/blob/master/LICENSE).



  If you find this useful for your research, please consider citing this [bibtex](https://richzhang.github.io/index_files/bibtex_icml2019.txt). Please contact Richard Zhang \<rizhang at adobe dot com\> with any comments or feedback.


pkgId: 9c1c4500e91db9a52da323135b3ab0e45bc5ba11a103a72cc4173492c3e11a1b
name: python-anticaptchaofficial
arch: noarch
version: 1.0.61
epoch: 0
release: 1
summary: Official anti-captcha.com library
url: https://github.com/anti-captcha/anticaptcha-python
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-anticaptchaofficial-1.0.61-1.src.rpm
location_href: Packages/python-anticaptchaofficial-1.0.61-1.noarch.rpm
checksum_type: sha256
description:
  Official https://anti-captcha.com/ library for solving images with text, Recaptcha v2/v3 Enterprise or non-Enterprise, Funcaptcha Arcoselabs, GeeTest and hCaptcha Enterprise or non-Enterprise.
  Anti-Captcha is the most popular and reliable captcha solving service, working since 2007.
  Prices for solving captchas start from $0.0005 per item.
  ```bash
  pip3 install anticaptchaofficial
  ```
  &nbsp;
  Check API key balance before creating tasks:
  ```python
  balance = solver.get_balance()
  if balance <= 0:
      print("too low balance!")
      return
  ```
  &nbsp;
  <br>
  Check subscription credits balance if you have one:
  ```python
  credits = solver.get_credits_balance()
  if credits <= 0:
      print("too low credits balance!")
      return
  ```
  &nbsp;
  Example how to create [Recaptcha V2](https://anti-captcha.com/apidoc/task-types/RecaptchaV2TaskProxyless) task and receive g-response:
  ```python
  from anticaptchaofficial.recaptchav2proxyless import *
  solver = recaptchaV2Proxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_API_KEY")
  solver.set_website_url("https://website.com")
  solver.set_website_key("SITE_KEY")






  solver.set_soft_id(0)
  g_response = solver.solve_and_return_solution()
  if g_response != 0:
      print "g-response: "+g_response
  else:
      print "task finished with error "+solver.error_code
  ```
  Report previosly solved Recaptcha V2/V3/Enterprise as incorrect:
  ```python
  solver.report_incorrect_recaptcha()
  ```
  Report it as correct to improve your quality:
  ```python
  solver.report_correct_recaptcha()
  ```
  ___
  &nbsp;
  Solve [image captcha](https://anti-captcha.com/apidoc/task-types/ImageToTextTask):
  ```python
  from anticaptchaofficial.imagecaptcha import *
  solver = imagecaptcha()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")


  solver.set_soft_id(0)
  captcha_text = solver.solve_and_return_solution("captcha.jpeg")
  if captcha_text != 0:
      print("captcha text "+captcha_text)
  else:
      print("task finished with error "+solver.error_code)
  ```
  Report previosly solved image captcha as incorrect:
  ```python
  solver.report_incorrect_image_captcha()
  ```
  ___
  &nbsp;
  Solve [HCaptcha](https://anti-captcha.com/apidoc/task-types/HCaptchaTask):
  ```python
  from anticaptchaofficial.hcaptchaproxyless import *
  solver = hCaptchaProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_website_url("https://website.com")
  solver.set_website_key("SITE_KEY")
  solver.set_user_agent("YOUR FULL USER AGENT HERE")




  solver.set_soft_id(0)
  g_response = solver.solve_and_return_solution()
  if g_response != 0:
      print("g-response: "+g_response)
      
      print("user-agent: "+solver.get_user_agent())
      print("respkey, if any: ", solver.get_respkey())
  else:
      print("task finished with error "+solver.error_code)
  ```
  Report previosly solved Hcaptcha as incorrect:
  ```python
  solver.report_incorrect_hcaptcha()
  ```
  ___
  &nbsp;
  Solve [Funcaptcha](https://anti-captcha.com/apidoc/task-types/FunCaptchaTaskProxyless) (Arkoselabs):
  ```python
  from anticaptchaofficial.funcaptchaproxyless import *
  solver = funcaptchaProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_website_url("https://website.com")
  solver.set_website_key("XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX")
  token = solver.solve_and_return_solution()
  if token != 0:
      print("result token: "+token)
  else:
      print("task finished with error "+solver.error_code)
  ```
  ___
  &nbsp;
  Solve [GeeTest](https://anti-captcha.com/apidoc/task-types/GeeTestTask) captcha:
  ```python
  from anticaptchaofficial.geetestproxyless import *
  solver = geetestProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_API_KEY")
  solver.set_website_url("https://address.com")
  solver.set_gt_key("CONSTANT_GT_KEY")
  solver.set_challenge_key("VARIABLE_CHALLENGE_KEY")
  token = solver.solve_and_return_solution()
  if token != 0:
      print("result tokens: ")
      print(token)
  else:
      print("task finished with error "+solver.error_code)
  ```
  ___
  &nbsp;
  Solve [GeeTest v4](https://anti-captcha.com/apidoc/task-types/GeeTestTask) captcha:
  ```python
  from anticaptchaofficial.geetestproxyless import *
  solver = geetestProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_API_KEY")
  solver.set_website_url("https://address.com")
  solver.set_version(4)
  solver.set_init_parameters({"riskType": "slide"})
  token = solver.solve_and_return_solution()
  if token != 0:
      print("result tokens: ")
      print(token)
  else:
      print("task finished with error "+solver.error_code)
  ```
  ___
  &nbsp;
  Solve [HCaptcha Enterprise](https://anti-captcha.com/apidoc/task-types/HCaptchaTask):
  ```python
  from anticaptchaofficial.hcaptchaproxyless import *
  solver = hCaptchaProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_website_url("https://website.com")
  solver.set_website_key("SITE_KEY")
  solver.set_user_agent("YOUR FULL USER AGENT HERE")





  solver.set_enterprise_payload({
      "rqdata": "rq data value from target website",
      "sentry": True
  })
  g_response = solver.solve_and_return_solution()
  if g_response != 0:
      print("g-response: "+g_response)
      
      print("user-agent: "+solver.get_user_agent())
      print("respkey, if any: ", solver.get_respkey())
  else:
      print("task finished with error "+solver.error_code)
  ```
  ___
  &nbsp;
  Example how to create [Turnstile](https://anti-captcha.com/apidoc/task-types/TurnstileTaskProxyless) task and receive a token:
  ```python
  from anticaptchaofficial.turnstileproxyless import *
  solver = turnstileProxyless()
  solver.set_verbose(1)
  solver.set_key("YOUR_API_KEY")
  solver.set_website_url("https://website.com")
  solver.set_website_key("SITE_KEY")

  solver.set_action("login")

  solver.set_action("some_custom_token")


  solver.set_soft_id(0)
  token = solver.solve_and_return_solution()
  if token != 0:
      print "token: "+token
  else:
      print "task finished with error "+solver.error_code
  ```
  ___
  &nbsp;
  Solve [AntiGate](https://anti-captcha.com/apidoc/task-types/AntiGateTask) task:
  ```python
  from anticaptchaofficial.antigatetask import *
  solver = antigateTask()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_website_url("http://antigate.com/logintest.php")
  solver.set_template_name("Sign-in and wait for control text")
  solver.set_variables({
      "login_input_css": "#login",
      "login_input_value": "test login",
      "password_input_css": "#password",
      "password_input_value": "test password",
      "control_text": "You have been logged successfully"
  })
  result  = solver.solve_and_return_solution()
  if result != 0:
      cookies, localStorage, fingerprint, url, domain = result["cookies"], result["localStorage"], result["fingerprint"], result["url"], result["domain"]
      print("cookies: ", cookies)
      print("localStorage: ", localStorage)
      print("fingerprint: ", fingerprint)
      print("url: "+url)
      print("domain: "+domain)
  else:
      print("task finished with error "+solver.error_code)
  ```
  ___
  &nbsp;
  Solve [AntiBotCookieTask](https://anti-captcha.com/apidoc/task-types/AntiBotCookieTask) task to bypass Cloudflare, Datadome and others:
  ```python
  from anticaptchaofficial.antibotcookietask import *
  solver = antibotcookieTask()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_website_url("https://www.somewebsite.com/")
  solver.set_proxy_address("1.2.3.4")
  solver.set_proxy_port(3128)
  solver.set_proxy_login("login")
  solver.set_proxy_password("password")
  result = solver.solve_and_return_solution()
  if result == 0:
      print("could not solve task")
      exit()
  print(result)
  cookies, localStorage, fingerprint = result["cookies"], result["localStorage"], result["fingerprint"]
  if len(cookies) == 0:
      print("empty cookies, try again")
      exit()
  cookie_string = '; '.join([f'{key}={value}' for key, value in cookies.items()])
  user_agent = fingerprint['self.navigator.userAgent']
  print(f"use these cookies for requests: {cookie_string}")
  print(f"use this user-agent for requests: {user_agent}")
  s = requests.Session()
  proxies = {
    "http": "http://login:password@1.2.3.4:3128",
    "https": "http://login:password@1.2.3.4:3128"
  }
  s.proxies = proxies
  content = s.get("https://www.somewebsite.com/", headers={
      "Cookie": cookie_string,
      "User-Agent": user_agent
  }).text
  print(content)
  ```
  ___
  &nbsp;
  Get [object coordinates](https://anti-captcha.com/apidoc/task-types/ImageCoordinatesTask) in an image:
  ```python
  from anticaptchaofficial.imagetocoordinates import *
  solver = imagetocoordinates()
  solver.set_verbose(1)
  solver.set_key("YOUR_KEY")
  solver.set_mode("points")
  solver.set_comment("Select in specified order")


  solver.set_soft_id(0)
  coordinates = solver.solve_and_return_solution("coordinates.png")
  if coordinates != 0:
      print("coordinates: ", captcha_text)
  else:
      print("task finished with error "+solver.error_code)
  ```
  Report previosly solved captcha as incorrect:
  ```python
  solver.report_incorrect_image_captcha()
  ```
  ___


pkgId: 8ae86bf829a2f4fa579f258ac9f2c54d4e839a9e7d75d4c389f2cafcb1f7ee0c
name: python-antlib
arch: noarch
version: 1.1b1
epoch: 0
release: 1
summary: A python wrapper for the ant library
url: http://thisisant.com
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-antlib-1.1b1-1.src.rpm
location_href: Packages/python-antlib-1.1b1-1.noarch.rpm
checksum_type: sha256
description:
  Python wrapper for the ANT library to communicate serially with ANT devices. For more information about ANT, see http://thisisant.com/


  Copyright 2019 Garmin Canada, Inc.

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.


  Antlib now supports both 32bit/64bit windows. There is a restriction on using 64bit package which does not support
  communications with USB Interface Board (UIF) boards.


pkgId: 5cc5a97a090050cd9e8f778cdf2ca32b833b6ae0888c6033a6c06b0c1e610475
name: python-appdynamics
arch: noarch
version: 24.7.0.6967
epoch: 0
release: 1
summary: Python Agent for AppDynamics
url: https://www.appdynamics.com/python
rpm_license: See license in package description
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-appdynamics-24.7.0.6967-1.src.rpm
location_href: Packages/python-appdynamics-24.7.0.6967-1.noarch.rpm
checksum_type: sha256
description:
   APPDYNAMICS, INC.
   END USER LICENSE AGREEMENT
   1. SOFTWARE LICENSE.
   1.1 LICENSE GRANT.
   This End User License Agreement (this “Agreement”) between AppDynamics, Inc., a Delaware corporation with its principal place of business located at 303 Second Street, North Tower, 8th Floor, San Francisco, CA 94107 (“AppDynamics”) and the customer set forth in the Order Form (as defined below) (“End User”) is effective as of the date the initial Order Form is executed or the date this Agreement is referenced by the applicable purchase order (the “Effective Date”). This Agreement shall govern each order form, sales quotation, proposal, purchase order or other ordering document that references this Agreement (each an “Order Form”). Each Order Form will form part of this Agreement. Subject to the terms and conditions of this Agreement, AppDynamics hereby grants to End User, during the License Term (as defined below), a non-exclusive, non-transferable, non-sublicensable right and license to use the software-as-a-service and/or on-premises version of AppDynamics’ application intelligence software product, including one Controller, as designated in the Order Forms (the “Software”) for internal business purposes only for the quantity of units in the Order Form. AppDynamics Test & Dev Edition licenses shall only be used in test-only non-production environments. For purposes hereof, the “License Term” begins on the date AppDynamics delivers the Software license keys to End User and extends for the period specified in the applicable Order Form (unless earlier terminated in accordance with this Agreement). For the avoidance of doubt, End User’s affiliates (and employees thereof) shall not use the Software without AppDynamics’ prior written consent. Notwithstanding anything to the contrary herein, this Agreement does not supersede a signed agreement between AppDynamics and End User with respect to the Software.
   1.2 RESTRICTIONS ON USE.
   Except as otherwise expressly provided in this Agreement, End User shall not (and shall not permit any third party to): (a) sublicense, sell, resell, transfer, assign, distribute, share, lease, rent, make any external commercial use of, outsource, use on a timeshare or service bureau, or use in an application service provider or managed service provider environment, or otherwise generate income from the Software; (b) copy the Software onto any public or distributed network, except for an internal and secure cloud computing environment; (c) cause the decompiling, disassembly, or reverse engineering of any portion of the Software, or attempt to discover any source code or other operational mechanisms of the Software (except where such restriction is expressly prohibited by law without the possibility of waiver, and then only upon prior written notice to AppDynamics); (d) modify, adapt, translate or create derivative works based on all or any part of the Software; (e) use any Third Party Software (as defined below) provided with the Software other than with the Software; (f) modify any proprietary rights notices that appear in the Software or components thereof; (g) publish the results of any benchmarking tests run on any Third Party Software; (h) use any Software in violation of any applicable laws and regulations (including any export laws, restrictions, national security controls and regulations) or outside of the license scope set forth in Section 1.1; (i) use the Software in support of any nuclear proliferation, chemical weapon, biological weapon or missile proliferation activity; (j) configure the Software to collect any (1) social security numbers or other government-issued identification numbers, (2) passwords or other authentication credentials, (3) health information, biometric data, genetic data, or payment/financial information, (4) any data relating to a person under the age of 13 years old, or (5) any other data that is subject to regulatory or contractual handling requirements (e.g., PCI, HIPAA, or state and federal data security laws) (collectively, “Prohibited Data”); or (k) use the Software to (1) store, download or transmit infringing, libelous, or otherwise unlawful or tortious material, or malicious code or malware, or (2) engage in phishing, spamming, denial-of-service attacks or other fraudulent or criminal activity, (3) interfere with or disrupt the integrity or performance of third party systems, or the Software or data contained therein, or (4) attempt to gain unauthorized access to the Software or AppDynamics' systems or networks, or (5) perform, or engage any third party to perform, authenticated or unauthenticated penetration testing, vulnerability assessments or other security assessments on the SaaS version of the Software. End User shall not export or re-export, directly or indirectly, any Software or technical data or any copy, portions or direct product thereof (i) in violation of any applicable laws and regulations, (ii) to any country for which the United States or any other government, or any agency thereof, at the time of export requires an export license or other governmental approval, including Cuba, Libya, North Korea, Iran, Iraq, or Rwanda or any other Group D:1 or E:2 country (or to a national or resident thereof) specified in the then current Supplement No. 1 to part 740 of the U.S. Export Administration Regulations (or any successor supplement or regulations, without first obtaining such license or approval) or (ii) to anyone on the U.S. Treasury Department’s list of Specially Designated Nationals or the U.S. Commerce Department’s Table of Denial Orders. End User shall, at its own expense, obtain all necessary customs, import, or other governmental authorizations and approvals.
   1.3 EVALUATION USE.
   If End User accessed the Software pursuant to a no-fee or beta evaluation (“Evaluation Use”), then the License Term is for the period enabled by the license key for the Software provided by AppDynamics. AppDynamics shall have the right to downgrade, limit or otherwise modify the Software provided for Evaluation Use at any time without notice, and no warranty, indemnity, Maintenance or Support obligations of AppDynamics will apply to Evaluation Use. End User may use the number and type of licenses indicated by AppDynamics in writing prior to End User downloading or accessing the Software, which will be enabled by End User’s specific license key. AppDynamics has the right to immediately revoke and terminate any Evaluation Use at any time. End User agrees to provide feedback related to the Software as reasonably requested by AppDynamics. End User grants to AppDynamics, without charge, the fully paid-up, perpetual, sublicensable right to exploit such feedback for any purpose. Evaluation Use is not a guarantee of future product features and should not be relied upon in making any purchasing decisions.
   1.4 UNAUTHORIZED USE.
   End User shall notify AppDynamics promptly of any unauthorized use of any password or account or any other known or suspected breach of security or misuse of the Software. End User is responsible for use of the Software by any and all employees, contractors, or other users that it allows to access the Software.
   1.5 MAINTENANCE AND SUPPORT.
   “Support” is defined as AppDynamics' obligations to respond to support requests as described in Exhibit A (Enterprise Support). “Maintenance” means AppDynamics’ obligations related to error resolution, bug fixes and the provision of updates and upgrades made generally commercially available by AppDynamics in its sole discretion, all as described in Exhibit A. Subject to End User’s payment of the fees set forth in the applicable Order Form(s), AppDynamics will (a) provide Maintenance and Support for the Software, and (b) solely if End User has purchased access to the software-as-a-service version of the Software, make the Software available to End User in accordance with Exhibit B (Availability and Security). For time-limited licenses for the Software (as set forth in an Order Form, “Subscription Licenses”), the fees for Maintenance and Support are included in the fees for the Software. For perpetual licenses, (i) AppDynamics shall invoice End User the applicable fees for Maintenance and Support (“Maintenance and Support Fees”) upon execution of the Order Form, and (ii) subject to payment of the Maintenance and Support Fees, AppDynamics will provide Support for the Maintenance and Support period set forth in the Order Form, as it may be renewed (the “Maintenance and Support Term”). If Maintenance and Support terminates with respect to any perpetual licenses, and End User is in good standing under this Agreement, then End User may reinstate Maintenance and Support on payment of the cumulative Maintenance and Support Fees applicable for the period during which Maintenance and Support lapsed, plus Maintenance and Support Fees for the reinstated Maintenance and Support Term. Notwithstanding anything herein to the contrary, if End User receives Support from an authorized partner of AppDynamics (“Partner”), then the support terms agreed upon by End User and such Partner shall govern in lieu of those set forth in Exhibit A, and AppDynamics shall have no support obligations to End User.
   1.6 SERVICES.
   Subject to the terms hereof (including payment of any applicable fees set forth in the Order Form), AppDynamics will provide the training, enablement and/or other services described in an Order Form (or statement of work referencing this Agreement), if any (“Services”). All Services will be rendered on a time and materials basis. AppDynamics will not exceed the total time purchased without prior written approval from End User. If the Services purchased have been consumed, AppDynamics will stop the Services until additional Services have been purchased. If End User elects not to purchase additional Services, then the Services will be deemed complete. If not used, pre-purchased Services and expenses expire twelve (12) months after the date purchased (unless otherwise set forth in the applicable Order Form). End User agrees to provide reasonable cooperation and information as necessary to permit AppDynamics to perform the Services. End User will reimburse AppDynamics for travel and expenses (at cost) incurred in connection with the Services (if any) by the Invoice Due Date (as defined below). Services will be performed on business days (a business day means Monday through Friday, excluding national holidays, during working hours, in the location where the Services are delivered). Saturday Services, and hours worked during the week that exceed the local working hours in a week, will be charged at the agreed rate x 1.5. Services performed on Sundays or national holidays will be charged at 2 x the agreed rate. If End User cancels or delays any scheduled Services less than ten (10) business days before the start date of such Services, then AppDynamics will deduct from End User's account (or End User will pay for) the amount of Services that were scheduled in any of the ten (10) business days following the date of cancellation (or notification of the delay, as applicable), and End User will fully reimburse AppDynamics for any reasonable travel and expenses incurred by AppDynamics for such Services (and for any Services rescheduled by End User) for which AppDynamics is unable to obtain a refund. During the License Term (for Subscription Licenses) or during the Maintenance and Support Term (for perpetual licenses), and in each case for a period of twelve (12) months thereafter, without AppDynamics’ prior written approval, End User will not solicit for employment or consultancy any AppDynamics’ employees who participated in the performance of Services.
   2. FEES.
   2.1 PRICING.
   End User will be invoiced for those amounts and at those prices set forth in an Order Form (an “Invoice”), provided, however, that, for Evaluation Use, End User shall not be billed unless otherwise specified by AppDynamics in writing prior to End User downloading or accessing (as applicable) the Software. Fees do not include any customization of the Software (nor support for any such customizations, unless otherwise agreed in writing). If End User’s usage of the Software is in excess of those amounts set forth in the Order Form, End User will be billed for those overages at a pro-rated amount for the remainder of the applicable License Term, based on AppDynamics’ then-current standard pricing. If AppDynamics believes in good faith that End User’s usage of the Software exceeds that set forth on the applicable Order Form, End User agrees to allow AppDynamics to audit End User’s use of the Software (not more frequently than twice per calendar year), upon at least twenty-four (24) hours’ notice, to determine the actual Software use, using a commercially reasonable auditing procedure. End User acknowledges that purchases made under this Agreement are neither contingent on the delivery of any future functionality or features nor dependent on any oral or written public comments made by AppDynamics regarding future functionality or features.
   2.2 PAYMENTS.
   End User shall pay Invoices within thirty (30) days of the invoice date (the “Invoice Due Date”). If End User reasonably disputes any Invoice, (i) End User shall provide AppDynamics with written notice of such dispute, including the grounds therefor (a “Dispute Notice”), prior to the Invoice Due Date, (ii) End User and AppDynamics shall, for a period of fifteen (15) days following AppDynamics’ receipt of such Dispute Notice, negotiate in good faith to resolve the dispute and (iii) if such dispute remains unresolved at the end of such period, the parties shall retain all of their respective rights under this Agreement (including, without limitation, any action for non-payment of the fees set forth herein). All payment obligations are non-cancelable and all amounts paid are non-refundable, except (a) for amounts paid in error that are not actually due under this Agreement, and (b) as set forth in Sections 6.1 and 7.1. The fees paid by End User are exclusive of all taxes, levies, or duties imposed by taxing authorities, if any, and End User shall be responsible for payment of all such taxes, levies, or duties, excluding taxes based on AppDynamics’ income. End User represents and warrants that the billing and contact information provided to AppDynamics is complete and accurate, and AppDynamics shall have no responsibility for any Invoices that are not received due to inaccurate or missing information provided by End User. End User shall pay interest on all payments not received by the Invoice Due Date at a rate of one percent (1%) per month or the maximum amount allowed by law, whichever is lesser. All amounts due under this Agreement shall be paid by End User in full without any set-off, counterclaim, deduction or withholding (other than any deduction or withholding of tax as required by law). If requested by AppDynamics, End User will obtain and furnish to AppDynamics tax receipts or other certificates issued by the competent taxation office showing the payments of the withholding tax within a reasonable time after payment. Following written notice, AppDynamics shall be entitled to suspend End User’s access to the Software if payments are not received within thirty (30) days of the Invoice Due Date. Notwithstanding anything herein to the contrary, if End User makes its payments pursuant to this Agreement to a Partner, then the payment terms agreed by End User and such Partner shall govern to the extent anything in this Section 2 conflicts with such Partner payment terms.
   3. CONFIDENTIALITY
   3.1 SCOPE AND RESTRICTIONS.
   “Confidential Information” means all information of a party (“Disclosing Party”) disclosed to the other party (“Receiving Party”) that is designated in writing or identified as confidential at the time of disclosure or should be reasonably known by the Receiving Party to be confidential due to the nature of the information disclosed and the circumstances surrounding the disclosure. The terms of this Agreement, the Software, any technical or other documentation relating to the Software, logins, passwords and other access codes and any and all information regarding AppDynamics’ business, products and services are the Confidential Information of AppDynamics. The Receiving Party will: (i) not use the Disclosing Party’s Confidential Information for any purpose outside of this Agreement; (ii) not disclose such Confidential Information to any person or entity, other than its affiliates, employees, consultants, agents and professional advisers who have a “need to know” for the Receiving Party to exercise its rights or perform its obligations hereunder, provided that such employees, consultants, and agents are bound by agreements or, in the case of professional advisers, ethical duties respecting such Confidential Information in accordance with the terms of this Section 3; and (iii) use reasonable measures to protect the confidentiality of such Confidential Information. If the Receiving Party is required by applicable law or court order to make any disclosure of such Confidential Information, it will first give written notice of such requirement to the Disclosing Party, and, to the extent within its control, permit the Disclosing Party to intervene in any relevant proceedings to protect its interests in its Confidential Information, and provide full cooperation to the Disclosing Party in seeking to obtain such protection. Further, this Section 3 will not apply to information that the Receiving Party can document: (i) was rightfully in its possession or known to it prior to receipt without any restriction on its disclosure; (ii) is or has become public knowledge or publicly available through no fault of the Receiving Party; (iii) is rightfully obtained by the Receiving Party from a third party without breach of any confidentiality obligation; or (iv) is independently developed by employees of the Receiving Party who had no access to such information.
   3.2 EQUITABLE RELIEF.
   The Receiving Party acknowledges that unauthorized disclosure of the Disclosing Party’s Confidential Information could cause substantial harm to the Disclosing Party for which damages alone might not be a sufficient remedy and, therefore, that upon any such disclosure by the Receiving Party the Disclosing Party will be entitled to seek appropriate equitable relief in addition to whatever other remedies it might have at law or equity.
   4. PROPRIETARY RIGHTS. AppDynamics and its suppliers own and shall retain all proprietary rights, including all copyright, patent, trade secret, trademark and all other intellectual property rights, in and to the Software and the results of any Services. End User acknowledges that the rights granted under this Agreement do not provide End User with title to or ownership of the Software. Certain “free” or “open source” based software (the “FOSS Software”) and third party software included with the Software (the “Third Party Software”) is shipped with the Software but is not considered part of the Software hereunder. A list of the FOSS Software and Third Party Software is set forth on the webpage located at https://docs.appdynamics.com/display/DASH/Legal+Notices With respect to Third Party Software included with the Software, such Third Party Software suppliers are third party beneficiaries of this Agreement. End User’s use of such FOSS Software is subject to the terms of the licenses set forth on such webpage. The Software and Third Party Software may only be used by End User as prescribed by the AppDynamics documentation located at http://docs.appdynamics.com (as it may be updated from time to time, the “Documentation”).
   5. TERM AND TERMINATION.
   The term of this Agreement begins on the Effective Date and will remain in effect until all Subscription Licenses (and Maintenance and Support Terms, if applicable) expire or until this Agreement is otherwise terminated in accordance with the terms hereof, whichever occurs first (the “Term”). This Agreement may be renewed at any time by execution of an Order Form referencing this Agreement, and any such renewal will be deemed part of the “Term” hereunder. If either party commits a material breach of this Agreement, and such breach has not been cured within thirty (30) days after receipt of written notice thereof, the non-breaching party may terminate this Agreement, except that AppDynamics may immediately terminate this Agreement and/or End User’s license to the Software upon End User’s breach of Section 1.2. Either party may also terminate this Agreement upon written notice if the other party suspends payment of its debts or experiences any other insolvency or bankruptcy-type event. Upon expiration or termination of this Agreement for any reason, (i) with respect to Subscription Licenses, all rights granted to End User shall terminate and End User shall destroy any copies of the Software and Documentation within End User’s possession and control; (ii) with respect to perpetual licenses, these will survive termination of this Agreement unless AppDynamics terminates the Agreement for End User’s breach of this Agreement in which case all rights granted to End User shall terminate and End User shall destroy any copies of the Software and Documentation within End User’s possession and control; and (iii) each Receiving Party will return or destroy, at the Disclosing Party’s option, the Disclosing Party’s Confidential Information in the Receiving Party’s possession or control. All fees that have accrued as of such expiration or termination, and Sections 1.2, 1.3, 1.4, 2, 3, 4, 5, 6.2 and 7 through 12, will survive any expiration or termination hereof.
   6. WARRANTIES.
   6.1 LIMITED WARRANTY.The limits below will not apply to the extent prohibited by applicable law.
   AppDynamics warrants that during the first thirty (30) days following the date the Software is purchased, the Software will, in all material respects, conform to the functionality described in the then-current Documentation for the applicable Software version. AppDynamics’ sole and exclusive obligation, and End User’s sole and exclusive remedy, for a breach of this warranty shall be that AppDynamics shall be required to use commercially reasonable efforts to repair or replace the Software to conform in all material respects to the Documentation, and if AppDynamics is unable to materially restore such functionality within thirty (30) days from the date of written notice of such breach, End User shall be entitled to terminate the license to the affected Software upon written notice and AppDynamics shall promptly provide a pro-rata refund of the Software license fees (or Maintenance and Support Fees, for perpetual licenses) that have been paid in advance for the remainder of the License Term for the applicable Software (beginning on the date of termination). End User must notify AppDynamics in writing of any warranty breaches within such warranty period, and End User must have installed and configured the Software in accordance with the Documentation to be eligible for the foregoing remedy.
   6.2 WARRANTY DISCLAIMER.
   EXCEPT AS EXPRESSLY PROVIDED IN THIS SECTION 6, ALL SOFTWARE, DOCUMENTATION, MAINTENANCE AND SUPPORT AND SERVICES ARE PROVIDED “AS IS” AND APPDYNAMICS AND ITS SUPPLIERS EXPRESSLY DISCLAIM ANY AND ALL OTHER REPRESENTATIONS AND WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT THERETO, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, OR THE CONTINUOUS, UNINTERRUPTED, ERROR-FREE, VIRUS-FREE, OR SECURE ACCESS TO OR OPERATION OF THE SOFTWARE. APPDYNAMICS EXPRESSLY DISCLAIMS ANY WARRANTY AS TO THE ACCURACY OR COMPLETENESS OF ANY INFORMATION OR DATA ACCESSED OR USED IN CONNECTION WITH THE SOFTWARE, DOCUMENTATION, MAINTENANCE AND SUPPORT, OR SERVICES. AppDynamics is not responsible for any delays, delivery failures, or any other loss or damage resulting from the transfer of data over communications networks and facilities, including the Internet, and End User acknowledges that the Software and Documentation may be subject to limitations, delays and other problems inherent in the use of such communications facilities. The Software is not fault-tolerant and is not designed or intended for use in hazardous environments, including without limitation, in the operation of aircraft or other modes of human mass transportation, nuclear or chemical facilities, life support systems, implantable medical equipment, motor vehicles or weaponry systems, or any other application in which failure of the Software could lead to death or serious bodily injury of a person, or to severe physical or environmental damage (each, a “High Risk Use”). AppDynamics expressly disclaims any express or implied warranty or representation of fitness for High Risk Use. AppDynamics shall not be liable to End User for any loss, damage or harm suffered by End User that is directly or indirectly caused by End User’s unauthorized use of the Software to process Prohibited Data.
   7. INDEMNIFICATION.
   7.1 BY APPDYNAMICS.
   AppDynamics agrees at its expense to defend End User against (or, at AppDynamics’ option, settle), any third party claim to the extent such claim alleges that the Software infringes or misappropriates any patent, copyright, trademark or trade secret of a third party, and AppDynamics shall pay all costs and damages finally awarded against End User by a court of competent jurisdiction as a result of any such claim. In the event that the use of the Software is, or in AppDynamics’ sole opinion is likely to become, subject to such a claim, AppDynamics, at its option and expense, may (a) replace the applicable Software with functionally equivalent non-infringing technology, (b) obtain a license for End User’s continued use of the applicable Software, or (c) terminate the license and provide a pro-rata refund of the Software license fees (or Maintenance and Support Fees, for perpetual licenses) that have been paid in advance for the remainder of the License Term for the applicable Software (beginning on the date of termination). The foregoing indemnification obligation of AppDynamics will not apply: (1) if the Software is modified by End User or its agent; (2) if the Software is combined with other non-AppDynamics products, applications, or processes, but solely to the extent the alleged infringement is caused by such combination; or (3) to any unauthorized use of the Software. The foregoing shall be End User’s sole remedy with respect to any claim of infringement of third party intellectual property rights.
   7.2 BY END USER.
   End User agrees to defend, at its expense, AppDynamics and its affiliates, its suppliers and its resellers against any third party claim to the extent such claim arises from or is made in connection with End User’s breach of Section 1 or End User’s negligence or willful misconduct, and End User shall pay all costs and damages finally awarded against AppDynamics by a court of competent jurisdiction as a result of any such claim.
   7.3 INDEMNIFICATION REQUIREMENTS.
   In connection with any claim for indemnification under this Section 7, the indemnified party must promptly provide the indemnifying party with notice of any claim that the indemnified party believes is within the scope of the obligation to indemnify, provided, however, that the failure to provide such notice shall not relieve the indemnifying party of its obligations under this Section 7, except to the extent that such failure materially prejudices the indemnifying party’s defense of such claim. The indemnified party may, at its own expense, assist in the defense if it so chooses, but the indemnifying party shall control the defense and all negotiations related to the settlement of any such claim. Any such settlement intended to bind either party shall not be final without the other party’s written consent, which consent shall not be unreasonably withheld, conditioned or delayed; provided, however, that End User’s consent shall not be required when AppDynamics is the indemnifying party if the settlement involves only the payment of money by AppDynamics.
   8. LIMITATION OF LIABILITY. The limits below will not apply to the extent prohibited by applicable law.
   8.1 EXCEPT FOR LIABILITY ARISING OUT OF END USER’S BREACH OF SECTION 1.2 (RESTRICTIONS ON USE), IN NO EVENT SHALL EITHER PARTY BE LIABLE UNDER THIS AGREEMENT FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, INCLUDING DAMAGES FOR LOSS OF REVENUES OR PROFITS, LOSS OF USE, BUSINESS INTERRUPTION, OR LOSS OF DATA, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF THE OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
   8.2 EXCEPT FOR LIABILITY ARISING OUT OF END USER’S BREACH OF SECTION 1.2 (RESTRICTIONS ON USE), NEITHER PARTY’S LIABILITY FOR ANY DAMAGES (WHETHER FOR BREACH OF CONTRACT, MISREPRESENTATIONS, NEGLIGENCE, STRICT LIABILITY, OTHER TORTS OR OTHERWISE) UNDER THIS AGREEMENT SHALL EXCEED AN AMOUNT EQUAL TO THE TOTAL FEES PAID (PLUS FEES PAYABLE) TO APPDYNAMICS DURING THE TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE CLAIM GIVING RISE TO SUCH DAMAGES. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY.
   9. FORCE MAJEURE.
   Except for payment obligations, neither party hereto will be liable for defaults or delays due to acts of God, or the public enemy, acts or demands of any government or governmental agency, fires, earthquakes, floods, accidents, or other unforeseeable causes beyond its reasonable control and not due to its fault or negligence.
   10. DATA COLLECTION.
   End User acknowledges that AppDynamics’ application server and machine software agents (the “Agents”) collect metrics that relate to the performance, health and resource of an application, its components (transactions, code libraries) and related infrastructure (nodes, tiers) that service those components. In addition, AppDynamics collects metrics on End Users’ activities, such as web pages visited, length of visit, and which features of the Software an End User uses. If End User provides AppDynamics with any personally identifiable information (“personal data”), End User represents and warrants that such information has been collected by End User in accordance with the provisions of all applicable data protection legislation and that End User has all right and consents necessary to provide such personal data to AppDynamics. End User will indemnify AppDynamics for reasonable costs and other amounts that AppDynamics may incur relating to any breach of this Section.
   11. US GOVERNMENT MATTERS.
   As defined in FAR section 2.101, the Software and Documentation are “commercial items” and according to DFAR section 252.227 7014(a)(1) and (5) are deemed to be “commercial computer software” and “commercial computer software documentation.” Consistent with DFAR section 227.7202 and FAR section 12.212, any use modification, reproduction, release, performance, display, or disclosure of such commercial software or commercial software documentation by the U.S. Government will be governed solely by the terms of this Agreement and will be prohibited except to the extent expressly permitted by the terms of this Agreement.
   12. MISCELLANEOUS.
   This Agreement shall be governed by and construed under the laws of the State of California, U.S.A. The parties consent to the exclusive jurisdiction and venue of the courts located in and serving San Francisco, California. Failure by either Party to exercise any of its rights under, or to enforce any provision of, this Agreement will not be deemed a waiver or forfeiture of such rights or ability to enforce such provision. If any provision of this Agreement is held by a court of competent jurisdiction to be illegal, invalid or unenforceable, such provision will be amended to achieve as nearly as possible the same economic effect of the original provision and the remainder of this Agreement will remain in full force and effect. This Agreement and its exhibits, together with the Order Form(s) and any statements of work incorporating this Agreement, if applicable, represent the entire agreement between the parties and supersede any previous or contemporaneous oral or written agreements or communications regarding the subject matter of this Agreement. The person signing or otherwise accepting this Agreement for End User represents that s/he is duly authorized by all necessary and appropriate corporate action to enter this Agreement on behalf of End User. Any modification to this Agreement must be in writing and signed by a duly authorized agent of both parties. The Uniform Computer Information Transactions Act (UCITA) does not apply to this Agreement. This Agreement shall control over additional or different terms of any purchase order, confirmation, invoice, statement of work or similar document (other than an AppDynamics Order Form, which will take precedence), even if accepted in writing by both parties, and waivers and amendments to this Agreement shall be effective only if made by non-pre-printed agreements clearly understood by both parties to be an amendment or waiver to this Agreement. For purposes of this Agreement, “including” means “including without limitation.” The rights and remedies of the parties hereunder will be deemed cumulative and not exclusive of any other right or remedy conferred by this Agreement or by law or equity. No joint venture, partnership, employment, or agency relationship exists between the parties as a result of this Agreement or use of the Software. AppDynamics reserves the right to perform its obligations from locations and/or through use of affiliates and subcontractors, worldwide, provided that AppDynamics will be responsible for such parties. End User may not assign this Agreement without the prior written approval of AppDynamics and any purported assignment in violation of this section shall be void; AppDynamics may assign, transfer or subcontract this Agreement in whole or in part. Upon any assignment of this Agreement by End User that is approved by AppDynamics, any licenses that contain an “unlimited” aspect will, with respect to End User or the successor entity, as applicable, be capped at the number of authorized Software units in use immediately prior to such assignment. End User agrees that AppDynamics may refer to End User by its trade name and logo, and may briefly describe End User’s business, in AppDynamics’ marketing materials and website. AppDynamics may give notice to End User by electronic mail to End User’s email address on record in End User’s account information, or by written communication sent by first class mail or pre-paid post to End User’s address on record in End User’s account information. End User may give notice to AppDynamics at any time by any letter delivered by nationally recognized overnight delivery service or first class postage prepaid mail to AppDynamics at the following address or such other address as may be notified to End User from time to time: AppDynamics, Inc., 303 Second Street, North Tower, 8th Floor, San Francisco, CA 94107, Attn: Legal Department. Notice under this Agreement shall be deemed given when received, if personally delivered; when receipt is electronically confirmed, if transmitted by email; the day after it is sent, if sent for next day delivery by recognized overnight delivery service; and upon receipt, if sent by certified or registered mail, return receipt requested.
   EXHIBIT A
   ENTERPRISE SUPPORT
   GENERAL REQUIREMENTS.
   AppDynamics will provide access to a ticketing system and email address (help@appdynamics.com), which will be available twenty-four (24) hours per day, seven (7) days per week. The email account will be maintained by qualified support specialists, who shall use commercially reasonable efforts to answer questions and resolve problems regarding the Software.
   HOURS OF OPERATION.
   Support is available twenty-four (24) hours per day, seven (7) days per week.
   ERROR CLASSIFICATION.
   Any reported errors are classified in the following manner, in each case when caused by
   the Software:


pkgId: 7f31c437bf7f712a2ee9c01e40338ffda22e31ae9440c009760fc31f07531aaa
name: python-appmesh
arch: noarch
version: 1.3.9
epoch: 0
release: 1
summary: Client SDK for App Mesh
url: https://github.com/laoshanxi/app-mesh
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s64p-256g--a41-8.compass-ci.net
rpm_sourcerpm: python-appmesh-1.3.9-1.src.rpm
location_href: Packages/python-appmesh-1.3.9-1.noarch.rpm
checksum_type: sha256
description:
  Application management | 1. Manage independent applications with flexible process control (long/short running, periodic, cron schedule, custom timings, error handling) and comprehensive monitoring (start counts, return codes, error messages, health checks) for both native and Docker applications. <br> 2. Run applications on remote hosts using SDK/CLI with sync/async modes and fetch results to the client. <br> 3. Full control over application lifecycle (cgroup resource limitation, specific OS user for execution). <br> 4. Support interactive application start with specific input data via pipe and environment variables. <br> 5. Access all functionalities via [CLI](https://app-mesh.readthedocs.io/en/latest/CLI.html), [REST](https://app-mesh.readthedocs.io/en/latest/Development.html#rest-apis), [SDK](https://github.com/laoshanxi/app-mesh/tree/main/src/sdk) and [WebGUI](https://github.com/laoshanxi/app-mesh-ui) interface.<br>
  Security |  ⚡️ [JWT authentication](https://app-mesh.readthedocs.io/en/latest/JWT.html) for CLI and REST interface <br> ⚡️ [LDAP support](https://app-mesh.readthedocs.io/en/latest/LDAP.html) <br> ⚡️ [Role based permission control](https://app-mesh.readthedocs.io/en/latest/USER_ROLE.html) <br> ⚡️ [Multi-factor authentication](https://app-mesh.readthedocs.io/en/latest/MFA.html)<br> SSL support (ECDH and secure ciphers) for REST http connection  <br> Multi-tenant support
  Cloud native | Schedule cloud-level applications to run on multiple hosts with resource size requests. <br> ⚡️ [Prometheus Exporter (build-in)](https://app-mesh.readthedocs.io/en/latest/PROMETHEUS.html) <br> ⚡️ [Grafana SimpleJson datasource](https://app-mesh.readthedocs.io/en/latest/GrafanaDataSource.html) <br> ⚡️ [Grafana Loki](https://app-mesh.readthedocs.io/en/latest/Loki.html) <br>⚡️ [Dockerfile](https://github.com/laoshanxi/app-mesh/blob/main/Dockerfile)
  Micro service application | ⚡️ [Consul micro-service cluster management](https://app-mesh.readthedocs.io/en/latest/CONSUL.html)
  Extra Features | Collect host/app resource usage <br> Remote shell command execution <br> File upload/download interface <br> Hot-update support `systemctl reload appmesh` <br> Bash completion <br> Reverse proxy <br> [Web GUI](https://github.com/laoshanxi/app-mesh-ui)
  Platform support | X86_64 <br> ARM32 <br> ARM64
  SDK | [Python](https://app-mesh.readthedocs.io/en/latest/api/appmesh_client.html) <br> [Golang](https://github.com/laoshanxi/app-mesh/blob/main/src/sdk/go/appmesh_client.go) <br> [JavaScript](https://www.npmjs.com/package/appmesh) <br> [Java](https://github.com/laoshanxi/app-mesh/packages/2227502) <br> [Swagger OpenAPI Specification](https://petstore.swagger.io/?url=https://raw.githubusercontent.com/laoshanxi/app-mesh/main/src/daemon/rest/openapi.yaml)

  Refer to the [Installation doc](https://app-mesh.readthedocs.io/en/latest/Install.html) to learn how to install App Mesh via Docker Compose or natively and set up an App Mesh cluster.

  - [Read the Docs](https://app-mesh.readthedocs.io/)
  - [REST API](https://app-mesh.readthedocs.io/en/latest/Development.html#rest-apis)
  - [Command lines](https://app-mesh.readthedocs.io/en/latest/CLI.html)
  - [Security](https://app-mesh.readthedocs.io/en/latest/JWT.html)


  | Feature                  | App Mesh | [Supervisor](http://supervisord.org/) | [crontab](https://crontab.guru/) |
  | ------------------------ | -------- | ------------------------------------- | -------------------------------- |
  | Accuracy                 | Seconds  | Seconds                               | Minutes                          |
  | Language                 | C++11    | Python                                | C                                |
  | Web GUI                  | √        | √                                     |
  | Command lines            | √        | √                                     | √                                |
  | SDK                      | √        |                                       |
  | Cron schedule expression | √        |                                       | √                                |
  | Manage daemon process    |          |                                       | √                                |
  | Manage docker app        | √        |                                       |
  | Start check (avoid leak) | √        | √                                     |
  | Session login            |          |                                       |
  | Manage stdout/stderr     | √        | √                                     |
  | Health check             | √        |                                       |
  | Rich control options     | √        |                                       |
  | Authentication           | √        | √                                     |
  | Multi-tenant             | √        |                                       | √                                |

  | Feature           | App Mesh | Kubernetes |
  | ----------------- | -------- | ---------- |
  | Easy deploy       | √        |
  | More features     |          | √          |
  | Non-container app | √        |
  | Service expose    | √        | √          |
  | Scheduler         | √        | √          |
  | Definition file   | YAML     | YAML       |
  | GUI               | √        | √          |
  | Virtual Network   |          | √          |


pkgId: b2913faed2b319c7b616e69fc3159e2992f1669805bab48ed5d3cc69133f16b2
name: python-apt-wrapper
arch: noarch
version: 1.19
epoch: 0
release: 1
summary: A simpler interface to the Debian/Ubuntu APT command-line tools.
url: https://github.com/mixmastamyk/apt-wrapper
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-apt-wrapper-1.19-1.src.rpm
location_href: Packages/python-apt-wrapper-1.19-1.noarch.rpm
checksum_type: sha256
description:
  Note:
      This still works but is deprecated in favor of the spam project,
      by the same developer.
  A shorter, simpler, and slightly saner interactive interface to the
  `Debian/Ubuntu APT <http://en.wikipedia.org/wiki/Advanced_Packaging_Tool>`_
  command-line tools.
  **Note:** This utility is not as useful as it once was because the apt command
  has already incorported its headline features.
  However, it is still more convenient in a number of ways,
  so read on if you'd like.
  ``apt`` may be thought of as a traffic cop
  that directs commands to the appropriate tool,
  automatically elevating itself with sudo if need-be.
  It consolidates all commands from ``apt-get`` and ``apt-cache``,
  and the most common from
  ``aptitude, dpkg, dpkg-query, add-apt-repository``, and ``apt-key``.
  It has a much narrower focus than "kitchen-sink" tools such as ``wajig``.
  Hopefully this micro-project will make your life a tiny bit easier.
  |


pkgId: 5e4dcac8a39782cb528e4a2e72beb6a80428b895fd0ba253cb41a3ae49c95eec
name: python-aptly-api-client
arch: noarch
version: 0.2.4
epoch: 0
release: 1
summary: A Python 3 client for the Aptly API
url: https://pypi.org/project/aptly-api-client/
rpm_license: Mozilla Public License 2.0 (MPL 2.0)
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aptly-api-client-0.2.4-1.src.rpm
location_href: Packages/python-aptly-api-client-0.2.4-1.noarch.rpm
checksum_type: sha256
description:
  This is a thin abstraction layer for interfacing with
  `Aptly's HTTP API <https://www.aptly.info/doc/api/>`__. It's used by
  `GoPythonGo <https://github.com/gopythongo/gopythongo/>`__, but can be used as
  a standalone library from Pypi.
      pip install aptly-api-client


pkgId: 703913ed0f09027b1071dafe8799ae0aee88724c3fd97deaa307bf8f98d41f86
name: python-argparse-color-formatter
arch: noarch
version: 2.0.0.post1
epoch: 0
release: 1
url: https://pypi.org/project/argparse-color-formatter/
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a35-2.compass-ci.net
rpm_sourcerpm: python-argparse-color-formatter-2.0.0.post1-1.src.rpm
location_href: Packages/python-argparse-color-formatter-2.0.0.post1-1.noarch.rpm
checksum_type: sha256
summary:
  A `formatter_class` for `argparse` that deals with ANSI colour escapes. Specifically, this formatter does not count escape characters as displayed characters when wrapping `argparse`'s help text into the terminal.

description:
  A [`formatter_class` for `argparse`](https://docs.python.org/3/library/argparse.html#formatter-class) that deals with ANSI colour escapes. Specifically, this formatter does not count escape characters as displayed characters when wrapping argparse's help text into the terminal.

  ![That script's help text is so cool...](https://docs.arrai.dev/argparse-color-formatter/readme/acf.png "That script's help text is so cool...")

  [![PYPI](https://img.shields.io/pypi/v/argparse-color-formatter?style=for-the-badge)](https://pypi.org/project/argparse-color-formatter/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python312.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python312.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python312/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python311.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python311.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python311/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python310.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python310.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python310/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python39.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python39.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python39/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python38.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python38.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python38/)

  ![Tests](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python37.svg) [![Coverage](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/python37.coverage.svg)](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/htmlcov_python37/)

  ![Flake8](https://docs.arrai.dev/argparse-color-formatter/artifacts/main/flake8.svg)



  ```shell
  $ pip install argparse-color-formatter
  ```



  Pass in `argparse_color_formatter.ColorHelpFormatter` to a new argument parser as `formatter_class`

  ```python
  import argparse
  from argparse_color_formatter import ColorHelpFormatter

  parser = argparse.ArgumentParser(
      formatter_class=ColorHelpFormatter
  )
  ```





  ```shell
  pipenv install --dev
  pre-commit install
  pre-commit install --hook-type commit-msg
  ```



  ```shell
  pipenv run build
  ```



  ```shell
  pipenv run test
  ```


  ANSI colour escapes using this library's new `ColorHelpFormatter`:
  ![after screenshot](https://docs.arrai.dev/argparse-color-formatter/readme/after.png)

  ANSI colour escapes using the default `HelpFormatter`:
  ![before screenshot](https://docs.arrai.dev/argparse-color-formatter/readme/before.png)

rpm_license:
  BSD 3-Clause License  Copyright (c) 2017, Emergence by Design Inc. All rights reserved.  Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.  * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


pkgId: 0680527e522a30bf2271da7c98f3f6e2a92236b77cc755fbdca160bfd738875f
name: python-argparse-helper
arch: noarch
version: 0.9.3
epoch: 0
release: 1
summary: Yet another argparse helper: complex sub-command trees made simple
url: https://github.com/jan-g/{name}
rpm_license: Apache License 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-argparse-helper-0.9.3-1.src.rpm
location_href: Packages/python-argparse-helper-0.9.3-1.noarch.rpm
checksum_type: sha256
description:
  Writing complex subcommand parsers using `argparse` is certainly possible, but it involves a lot
  of laborious repetition.

  This library provides a small wrapper around `argparse` that adds a convenience method. That
  lets you specify a sequence of words that form a command, together with flags - and the
  definitions of those flags are passed at the same time.

      parser = ArgumentParser()
      parser.add_command("foo bar baz --json",
                         func=lambda *args: print("foo-bar-baz"),
                         json=dict(default=False, action="store_true"),
                         )
      parser.add_command("foo bar quux",
                         func=lambda *args: print("foo-bar-quux"),
                         )

  The `func` parameter will be set on the resulting namespace. Note, there is no particular requirement
  for the arguments that must be passed to `func` - this is down to the library user to define.

  Additionally, a new `argparse.Action` subclass is provided, `OptionalOverride`. This supports
  having the *same* flag appear in a global position and be repeated by a subcommand. It works
  well - in as much as defaults set by the global position won't be re-set in the subordinate
  position.

      parser.add_command("--flag", flag=dict(default="foo"))
      parser.add_command("xyzzy --flag", flag=dict(action=OptionalOverride))

  Where a flag is repeated in an `add_command` call, the second and subsequent values receive an
  `OptionalOveride` setting automatically.

      parser.add_command("--glob xyzzy --glob", glob=dict(action=AtMostOnce))
      

  `AtMostOnce` is supplied as an action type; this causes an explicit error (rather than
  just overriding the previous value) if a flag is specified more than once.

  We also have `AppendN(t)` as an action type. It works like `Append`, but the type constructor
  `t` is applied to its collected argument(s) before the result is appended to the list.


pkgId: 1f188e4fb813057a3e0950a1861916a98feea7105b4025d9b86a85b7615727bd
name: python-argsy
arch: noarch
version: 1.0.3
epoch: 0
release: 1
summary: Tiny wrapper for Python's `argparse` package with YAML-based cli configuration.
url: https://pypi.org/project/argsy/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-argsy-1.0.3-1.src.rpm
location_href: Packages/python-argsy-1.0.3-1.noarch.rpm
checksum_type: sha256
description:
  Tiny wrapper for Python's `argparse` package with YAML-based cli configuration.



  The `argsy` package aims to make CLI argument configuration and parsing declarative and simple, while still leveraging Python's `argparse` package to handle the parsing details and user help messaging.

  Configuration supports declarative configuration of:

  1. top-level position args, options / flags
  2. a single tier of subcommands
  3. position args, options / flags for each subcommand
  4. support for setting default values for options / flags
  5. partial `nvars` support for capturing multiple input values
  6. support for the `action` directive (for things like toggling booleans)





  ```sh
  pip install argsy>=1.0.0
  ```



  CLI arguments are define as either:

  1. a YAML file or string, or
  2. a Python `dict` object


  ```yaml



  program:
    name: my_program
    descripton: "About what my_program does."
    args:
      option1:
        cmd_type: option
        flags: '-o|--option1'
        help: "Short text about the option."
        required: true
  ```

  ```python



  from argsy import Argsy

  argsy_parser = Argsy(config_file_name="my_cli_args.yml")
  parsed_args = argsy_parser.parse_args(sys.argv[1:])











  ```



  ```python



  from argsy import Argsy

  CLI_ARGS = """
  program:
    name: my_program
    descripton: "About what my_program does."
    args:
      option1:
        cmd_type: option
        flags: '-o|--option1'
        help: "Short text about the option."
        required: true
  """

  argsy_parser = Argsy(config_str=CLI_ARGS)
  parsed_args = argsy_parser.parse_args(sys.argv[1:])











  ```





  ```python



  from argsy import Argsy

  CLI_ARGS = dict(
      program=dict(
          name='my_program',
          description='About what my_program does.',
          args=dict(
              option1=dict(
                  cmd_type='option',
                  flags='-o|--option1',
                  help='Short text about the option.',
                  required=True
              )
          )
      )
  )

  argsy_parser = Argsy(config_dict=CLI_ARGS)
  parsed_args = argsy_parser.parse_args(sys.argv[1:])











  ```


pkgId: f597a4aa18cce99853e017bc0174078e6e33795bb5337f9273dfd304a209b757
name: python-arn
arch: noarch
version: 0.1.5
epoch: 0
release: 1
summary: A Python library for parsing AWS ARNs
url: https://pypi.org/project/arn/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-arn-0.1.5-1.src.rpm
location_href: Packages/python-arn-0.1.5-1.noarch.rpm
checksum_type: sha256
description:
  A Python library for parsing [AWS ARNs](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).


  To install, just run
  ```bash
  pip install arn
  ```
  or add the library to your `setup.py` / `requirements.txt`.


  Given an ARN for a particular AWS resource, parse it with the appropriate class:
  ```python
  from arn.elbv2 import TargetGroupArn

  target_group_arn_str = "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/foo-bar/abc123"
  target_group_arn = TargetGroupArn(target_group_arn_str)


  assert str(target_group_arn) == target_group_arn_str


  assert target_group_arn.partition == "aws"
  assert target_group_arn.service == "elasticloadbalancing"
  assert target_group_arn.region == "us-east-1"
  assert target_group_arn.account == "123456789012"


  assert target_group_arn.name == "foo-bar"
  assert target_group_arn.id == "abc123"
  ```


pkgId: 6cc5e4eb68f117febe7e46b157b706b37ffdbc47d5cead6079c72e3eaaff4c05
name: python-askedith
arch: noarch
version: 0.31.2
epoch: 0
release: 1
summary: Natural Language Query Engine for Pandas
url: https://askedith.ai
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-askedith-0.31.2-1.src.rpm
location_href: Packages/python-askedith-0.31.2-1.noarch.rpm
checksum_type: sha256
description:
  <p align="center">
      <br>
      <br>
      <br>
      <a href="https://askedith.ai">
          <img
              src="https://media-exp2.licdn.com/dms/image/C560BAQFxV92mCa43Eg/company-logo_200_200/0/1656093924337?e=1665619200&v=beta&t=yY1oHTgLHavsDDV9nALJjuGrVxG-GaiWvuyxgs4ohg4"
              alt="AskEdith logo: AskEdith is a Natural Language Query Engine"
              width="200px"
          >
      </a>
      <br>
      <br>
  </p>

  <p align="center">
      <b>Natural Language Query Engine for Pandas</b>
      <br>
      <br>
      <a href="https://discord.gg/dyPry7j2qs">
          <img
              src="https://img.shields.io/badge/Discord-Join-%237289DA?style=flat-square&logo=appveyor"
              alt="Badge"
          >
      </a>
      <a href="https://pypi.org/project/askedith/">
          <img
              src="https://img.shields.io/badge/Release-0.31.2-blue?style=flat-square&logo=appveyor"
              alt="Badge"
          >
      </a>
      <a href="https://pypi.org/project/askedith/">
          <img
              src="https://img.shields.io/badge/CI%2FCD-passing-green?style=flat-square&logo=appveyor"
              alt="Badge"
          >
      </a>
  </p>

  AskEdith is a data analytics question-answering system that can help you speed up your data analytics workflows. AskEdith converts your natural language questions into SQL queries that are used to return a computed DataFrame.



  1. ETL / Ingress - AskEdith ingresses data and parses schema and metadata.
  2. Semantic Search to relate relevant sections of data to the question.
  3. NLP Language Model to convert natural language to SQL.
  4. Execute on input DataFrame and return results.



  ```bash
  pip install askedith
  ```



  ```python
  import pandas as pd
  import askedith


  df = pd.read_csv("https://figshare.com/ndownloader/files/35259799")


  df = df.askedith.ask("What's the average price for organic avocados?")

  print(df)
  ```



  [![Example](https://i.imgur.com/JVnJiyM.png)](https://i.imgur.com/JVnJiyM.png)
  [![Example](https://i.imgur.com/qHqSBCh.png)](https://i.imgur.com/qHqSBCh.png)


pkgId: 693b66f95607005aaff0d25ac325ecd91cf7627ffbc2d865dd2922760f883531
name: python-ast2000tools
arch: noarch
version: 1.4.0
epoch: 0
release: 1
summary: Tools required for the course AST2000 at the University of Oslo.
url: https://lars-frogner.github.io/ast2000tools/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-ast2000tools-1.4.0-1.src.rpm
location_href: Packages/python-ast2000tools-1.4.0-1.noarch.rpm
checksum_type: sha256
description:
  The ast2000tools package contains tools required for the course AST2000 at the University of Oslo. See the documentation [here](https://lars-frogner.github.io/ast2000tools/).


pkgId: aece74a2c75535112659ab547c44619b1ba2933a73fec054e32513fac1795ee0
name: python-async-files
arch: noarch
version: 0.4
epoch: 0
release: 1
summary: Async Files
url: https://github.com/Niraj-Kamdar/async-files
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-async-files-0.4-1.src.rpm
location_href: Packages/python-async-files-0.4-1.noarch.rpm
checksum_type: sha256
description:
  ![Test Runner](https://github.com/Niraj-Kamdar/async-files/workflows/Test%20Runner/badge.svg)
  [![codecov](https://codecov.io/gh/Niraj-Kamdar/async-files/branch/main/graph/badge.svg?token=cyY0uU5JB5)](https://codecov.io/gh/Niraj-Kamdar/async-files/branch/main)
  [![CodeFactor](https://www.codefactor.io/repository/github/niraj-kamdar/async-files/badge)](https://www.codefactor.io/repository/github/niraj-kamdar/async-files)

  async-files is a fast, lightweight, and extensible asyncio file library, written in pure python and inspired by [aiofiles](https://github.com/Tinche/aiofiles). This works just like aiofiles which delegates file IO operations to a separate thread pool. Although, async-files have been completely re-written from scratch to use modern `async...await...` syntax and with extensibility and flexibility in mind.



  Files can be opened with async context manager or by calling FileIO instance.
  ```python
  async with FileIO("README.md") as f:
      s = await f.read()
      print(s)
  ```
  or
  ```python
  f = await FileIO("README.md")()  # __init__ can't be asynchronous.
  s = await f.read()
  print(s)
  await f.close()
  ```

  Asynchronous iteration is also supported.

  ```python
  async with FileIO("README.md") as f:
      async for line in f:
          print(line, end="")
  ```

  You can also extend functionality of FileIO to support other classes like `tempfile.TemporaryFile` very easily:
  ```python
  from tempfile import TemporaryFile as _TemporaryFile
  from async_files import FileIO

  class TemporaryFile(FileIO):
      OPEN = _TemporaryFile
  ```

  You can do same for any other IO classes like `gzip.GzipFile`, `zipfile.ZipFile`, etc.
  I have added async version of tempfile and gzip modules in the `v0.2`
  since they are commonly used modules and I will add more modules in the future releases.
  You can use these modules just like you use standard library module, only difference is you need to await coroutine methods.
  You can request for support for new modules by [creating new issue](https://github.com/Niraj-Kamdar/async-files/issues/new).

  You can also create coroutine from any blocking function by using async-files's utility function `async_wraps`. For example:
  ```python
  import shutil
  from async_files.utils import async_wraps
  async_rmtree = async_wraps(shutil.rmtree)
  ```
  You can also use `async_wraps` as a decorator for your custom function.
  > Note: Only use `async_wraps` if target function is IO-bound.

  Following are asynchronous attributes of the FileIO object.
  ```python
  close: Callable[[], Awaitable[None]]
  flush: Callable[[], Awaitable[None]]
  isatty: Callable[[], Awaitable[bool]]
  read: Callable[[], Awaitable[Union[str, bytes]]]
  read1: Callable[[], Awaitable[bytes]]
  readinto: Callable[[bytearray], Awaitable[int]]
  readinto1: Callable[[bytearray], Awaitable[int]]
  readline: Callable[[], Awaitable[Union[str, bytes]]]
  readlines: Callable[[], Awaitable[List[Union[str, bytes]]]]
  seek: Callable[[], Awaitable[int]]
  tell: Callable[[], Awaitable[int]]
  truncate: Callable[[], Awaitable[int]]
  write: Callable[[Union[str, bytes]], Awaitable[int]]
  writelines: Callable[[List[Union[str, bytes]]], Awaitable[None]]
  ```
  Other attributes are synchronous just like standard library fileobj.


  Bugs and feature requests can be made via [GitHub issues](https://github.com/Niraj-Kamdar/async-files/issues/new).
  Be aware that these issues are not private, so take care when providing output to make sure you are not disclosing security issues in other products.

  Pull requests are also welcome via git.

  The async-files uses `sourcery`, `restyled` and `code factor` bots to ensure code quality of the PR.


pkgId: fbc46ae901550c8ce2332363deece1c302274aaebb6d383f1dbd62554da27697
name: python-async-tio
arch: noarch
version: 1.3.2
epoch: 0
release: 1
summary: An unoffical API wrapper for tio.run
url: https://github.com/Tom-the-Bomb/async-tio
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s64p-256g--a82-11.compass-ci.net
rpm_sourcerpm: python-async-tio-1.3.2-1.src.rpm
location_href: Packages/python-async-tio-1.3.2-1.noarch.rpm
checksum_type: sha256
description:
  This is a simple unofficial async Api-wrapper for [tio.run](https://tio.run/#)

  **Installation**
  ```bash
  $ py -m pip install async_tio
  ```
  **Install Latest**
  ```bash
  $ py -m pip install git+https://github.com/Tom-the-Bomb/async-tio.git
  ```
  **Example**

  ```py





  tio = async_tio.Tio() # Optional 'loop' and 'session' kwargs etc. if needed


  output = await tio.execute("print('')", language="python3") # pass in other optional kwargs if needed

  print(str(output)) # the formatted output along with the stats
  print(output.stdout) # the output by itself
  print(int(output)) # returns the exit status




  ```


pkgId: 953de3c49bac81f5011f3c582e10985c2eca82dcda0dbb0d287552b61cd861fa
name: python-asyncurban
arch: noarch
version: 0.3.3
epoch: 0
release: 1
summary: An asynchronous wrapper around the UrbanDictionary API.
url: https://github.com/naught0/asyncurban
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-asyncurban-0.3.3-1.src.rpm
location_href: Packages/python-asyncurban-0.3.3-1.noarch.rpm
checksum_type: sha256
description:
  |docs| |pypi|
  Yet another UrbanDictionary API wrapper.
  AsyncUrban is a non-blocking library, using asyncio and aiohttp, which
  can be used to access UrbanDictionary data.


pkgId: 15e2f360dbe429e35f065736f07de9fa21789730bf8ba0ad44dc0def57177004
name: python-atlassian-api-py
arch: noarch
version: 0.5.4
epoch: 0
release: 1
summary: Python Wrapper for Atlassian REST API
url: https://pypi.org/project/atlassian-api-py/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-atlassian-api-py-0.5.4-1.src.rpm
location_href: Packages/python-atlassian-api-py-0.5.4-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/atlassian-api-py)](https://pypi.org/project/atlassian-api-py/)
  [![CodeFactor](https://www.codefactor.io/repository/github/shenxianpeng/atlassian-api-py/badge/main?s=3f5b565625069f5c5ab303a02b120197cd3abdde)](https://www.codefactor.io/repository/github/shenxianpeng/atlassian-api-py/overview/main)
  ![PyPI - Downloads](https://img.shields.io/pypi/dw/atlassian-api-py)
  [![commit-check](https://img.shields.io/badge/commit--check-enabled-brightgreen?logo=Git&logoColor=white)](https://github.com/commit-check/commit-check)



  This is a package wrapper of Atlassian REST API written in Python, currently, it supports JIRA and Bitbucket.

  This package was created to simplify the implementation of integration with JIRA and Bitbucket.





  ```bash

  $ pip install atlassian-api-py


  $ pip install atlassian-api-py --upgrade
  ```



  Connect with username and password

  ```python
  >>> from atlassian import Jira
  >>> jira = Jira(url='https://jira.company.com', username="username", password="password")
  ```

  Or connect with token

  ```python
  >>> from atlassian import Jira
  >>> jira = Jira(url='https://jira.company.com', token="yourToken")
  ```

  Or write your credentials in a configuration file `config.ini`, and get the credential though the configuration file.

  ```markdown
  [jira]
  url = https://jira.company.com
  username = username
  password = password

  token = yourToken
  ```

  ```python
  >>> import configparser
  >>> config = configparser.ConfigParser()
  >>> config.read('config.ini')

  >>> jira_url = config['jira']['url']
  >>> jira_usr = config['jira']['username']
  >>> jira_psw = config['jira']['password']
  >>> jira_token = config['jira']['token']
  ```



  Next, you can get the issue's fields as follow:

  ```python
  >>> issue = jira.issue('TEST-1')
  >>> print(issue.fields.status.name)
  Triage
  >>> print(issue.fields.description)
  this is a demo jira ticket
  >>> print(issue.fields.status.name)
  Triage
  >>> print(issue.fields.issuetype.name)
  Bug
  ```



  ```python
  >>> print(issue.id)
  1684517
  >>> print(issue.key)
  TEST-1
  >>> print(issue.fields.assignee.key)
  xpshen
  >>> print(issue.fields.summary)
  Jira REST API Unit Test Example
  >>> ...
  ```



  Run unittest

  ```bash
  cd tests
  python -m unittest
  ```

  Run coverage

  ```bash
  cd tests
  coverage run -m unittest
  coverage report -m              # to report on the results
  coverage html                   # to get annotated HTML
  ```





  > For Jira I used Jira v8.5.9 and Jira Cloud.
  >
  > For BitBucket I used Bitbucket v5.13.1. not support Bitbucket cloud for now.


pkgId: 3f8bb92ad863944d98aa742db51d48ab3fa0ad4d73971cb5d127fd9c75b7ed09
name: python-atlassian-api-py
arch: noarch
version: 0.5.5
epoch: 0
release: 1
summary: Python Wrapper for Atlassian REST API
url: https://pypi.org/project/atlassian-api-py/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-atlassian-api-py-0.5.5-1.src.rpm
location_href: Packages/python-atlassian-api-py-0.5.5-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/atlassian-api-py)](https://pypi.org/project/atlassian-api-py/)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/atlassian-api-py?style=flat-square)](https://pypi.org/project/atlassian-api-py)
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=shenxianpeng_atlassian-api-py&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=shenxianpeng_atlassian-api-py)
  ![PyPI - Downloads](https://img.shields.io/pypi/dw/atlassian-api-py)
  [![commit-check](https://img.shields.io/badge/commit--check-enabled-brightgreen?logo=Git&logoColor=white)](https://github.com/commit-check/commit-check)



  This package is a Python wrapper for the Atlassian REST API, currently supporting JIRA and Bitbucket. It simplifies the implementation of integration with these tools.



  To install the package, run the following command:

  ```bash
  $ pip install atlassian-api-py
  ```

  To upgrade to the latest version, use:

  ```bash
  $ pip install atlassian-api-py --upgrade
  ```

  **Establish connection**

  You can connect to JIRA using a username and password or a token.

  Using Username and Password

  ```python
  >>> from atlassian import Jira
  >>> jira = Jira(url='https://jira.company.com', username="username", password="password")
  ```

  Using a Token

  ```python
  >>> from atlassian import Jira
  >>> jira = Jira(url='https://jira.company.com', token="yourToken")
  ```

  Using a Configuration File

  Alternatively, you can store your credentials in a `config.ini` file:

  ```markdown
  [jira]
  url = https://jira.company.com
  username = username
  password = password

  token = yourToken
  ```

  Then, you can use the configuration file to establish a connection:

  ```python
  >>> import configparser
  >>> config = configparser.ConfigParser()
  >>> config.read('config.ini')

  >>> jira_url = config['jira']['url']
  >>> jira_usr = config['jira']['username']
  >>> jira_psw = config['jira']['password']
  >>> jira_token = config['jira']['token']
  ```



  Next, you can get the issue's fields as follow:

  ```python
  >>> issue = jira.issue('TEST-1')
  >>> print(issue.fields.status.name)
  Triage
  >>> print(issue.fields.description)
  this is a demo jira ticket
  >>> print(issue.fields.status.name)
  Triage
  >>> print(issue.fields.issuetype.name)
  Bug
  ```



  ```python
  >>> print(issue.id)
  1684517
  >>> print(issue.key)
  TEST-1
  >>> print(issue.fields.assignee.key)
  xpshen
  >>> print(issue.fields.summary)
  Jira REST API Unit Test Example
  >>> ...
  ```



  This project is released under the [MIT License](LICENSE).


pkgId: 1e6d4513c92df89e54bea8b30a9327738c1bfd769399f14f3f75735f4affd3f9
name: python-atsd-client
arch: noarch
version: 3.0.6
epoch: 0
release: 1
summary: Axibase Time Series Database API Client for Python
url: https://github.com/axibase/atsd-api-python
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-atsd-client-3.0.6-1.src.rpm
location_href: Packages/python-atsd-client-3.0.6-1.noarch.rpm
checksum_type: sha256
description:
  The `ATSD API Client for Python <https://github.com/axibase/atsd-api-python>`__ simplifies the
  process of interacting with `Axibase Time Series Database <https://axibase.com/docs/atsd/>`__ through REST API and SQL
  endpoints.


pkgId: b66767de597e6b06e05246f6759c5f1cc8067fab242a7d64ad2157844f948e55
name: python-auto-instr
arch: noarch
version: 0.9.5
epoch: 0
release: 1
summary: Library for automating scientific instruments.
url: https://github.com/arvind0790/auto_instr
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a63-5.compass-ci.net
rpm_sourcerpm: python-auto-instr-0.9.5-1.src.rpm
location_href: Packages/python-auto-instr-0.9.5-1.noarch.rpm
checksum_type: sha256
description:
  - auto-instr is a simple and user-friendly library for automating scientific instruments.
  - It offers quick-set functions for configuring and measuring in a single line of code.
  - It supports all common bench instruments such as power supply, oscilloscope, function generator, source meter, multimeter,temperature controller etc.


pkgId: 226353b949a96e82167435379f9caefe54c68f7cff1eefa42721f4303f07fb2b
name: python-autoclasswrapper
arch: noarch
version: 1.5.1
epoch: 0
release: 1
summary: AutoClassWrapper: a Python wrapper for AutoClass C classification.
url: https://github.com/pierrepo/autoclasswrapper
rpm_license: BSD 3-Clause License
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a63-8.compass-ci.net
rpm_sourcerpm: python-autoclasswrapper-1.5.1-1.src.rpm
location_href: Packages/python-autoclasswrapper-1.5.1-1.noarch.rpm
checksum_type: sha256
description:
  [![License: BSD](https://img.shields.io/badge/License-BSD-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)   [![autoclasswrapper version on PyPI](https://badge.fury.io/py/autoclasswrapper.svg)](https://pypi.python.org/pypi/autoclasswrapper)   [![Build Status](https://travis-ci.org/pierrepo/autoclasswrapper.svg?branch=master)](https://travis-ci.org/pierrepo/autoclasswrapper)
  [![Documentation Status](https://readthedocs.org/projects/autoclasswrapper/badge/?version=latest)](https://autoclasswrapper.readthedocs.io/en/latest/?badge=latest)
  [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pierrepo/autoclasswrapper/master?filepath=notebooks)
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2527059.svg)](https://doi.org/10.5281/zenodo.2527059)


  AutoClass is an unsupervised Bayesian classification system.

  [AutoClass C](https://ti.arc.nasa.gov/tech/rse/synthesis-projects-applications/autoclass/autoclass-c/) is an implementation of the AutoClass algorithm made by the NASA.

  AutoClassWrapper is a Python wrapper to ease the use of Autoclass C.







  AutoClass C can be found [here](https://ti.arc.nasa.gov/tech/rse/synthesis-projects-applications/autoclass/autoclass-c/). The installation process can be achieved with the following commands:
  ```
  $ wget https://ti.arc.nasa.gov/m/project/autoclass/autoclass-c-3-3-6.tar.gz
  $ tar zxvf autoclass-c-3-3-6.tar.gz
  $ rm -f autoclass-c-3-3-6.tar.gz
  $ export PATH=$PATH:$(pwd)/autoclass-c
  ```

  Please note that is you are running a 64-bit operating system, you will also need to install the standard 32-bit libraries. For instance, on a Debian/Ubuntu-like system:
  ```
  $ sudo apt-get install -y libc6-i386
  ```




  Dependencies:

  - **Python 3.6** or above
  - Python libraries: NumPy, Pandas, Scipy, matplotlib, chardet

  AutoClassWrapper is available through the Python Package Index ([PyPI](https://pypi.org/)):

  ```
  $ python3 -m pip install autoclasswrapper
  ```




  Documentation is available on [ReadTheDocs](https://autoclasswrapper.readthedocs.io/en/latest/)




  AutoClassWrapper is free software made available under the BSD 3-clause license. For more details see the [LICENSE](LICENSE.txt) file.




  If you want to report a bug, request a feature, or propose an improvement use the [GitHub issue system](https://github.com/pierrepo/autoclasswrapper/issues/).

  Please, see also the [CONTRIBUTING](CONTRIBUTING.md) file.

  Note that this project is released with a [Contributor Code of
  Conduct](http://contributor-covenant.org/). By participating in this project you
  agree to abide by its terms. See the [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) file.

  **Dev**

  **1.5.1**
  - Create new release for paper in the Journal of Open Source Software

  **1.5.0**
  - Print AutoClass C Version on run
  - Update jinja and urllib3 for security issues
  - Rename input.merge_dataframes() to input.prepare_input_data()
  - Increase documentation


  **1.4.1**
  - Rename marker files to autoclass-run-success and autoclass-run-failure

  **1.4.0**
  - Print columns with missing values one column per line
  - Embed column stats in logging output

  **1.3.0**
  - Redirect run ouput to log files
  - Use f-strings

  **1.2.0**
  - Handle error while checking for autoclass version
  - Fix missing margin in dendrogram picture

  **1.1.0**
  - Rewrite write_dendrogram() method
  - Rename marker files (autoclass_run_*) in snake_case

  **1.0.0**
  - Jump to major release

  **0.2.2**
  - Remove wrap method for results
  - Update list of authorized characters in column names

  **0.2.1**
  - Move function utilities to tools.py
  - Change defaut filename to 'autoclass'

  **0.2.0**
  - Fix error decorator for Sphinx doc generation
  - Use 'class' (instead of 'cluster') for consistency
  - Move get_autoclass_version() out of Run() class
  - Create file marker upon autoclass run success/failure

  **0.1.14**
  - update missing dependencies in setup.cfg
  - improve PEP 8 and PEP 257 compliance
  - add documentation (Sphinx)

  **0.1.13**
  - print Exception content for check_data_type()
  - output class probability for every gene/protein
  - simplify the calculation of cluster stats
  - class/cluster numbering starts at 1 (0-based in autoclass output)
  - add dendrogram of classes
  - add reproducible run option (test only)
  - add tests for Input() class
  - add tests for Output() class
  - add tests for Run() class

  **0.1.12**
  - update write_cluster_stats() methods with mean/std column
  - output data+clusters in clust_data.tsv

  **0.1.11**
  - add nohup while running autoclass script

  **0.1.10**
  - search_autoclass_in_path() returns the PATH

  **0.1.9**
  - check autoclass-c executable is in PATH
  - building and running script are in Run() class

  **0.1.8**
  - add env in Popen()

  **0.1.7**
  - add missing dependencies

  **0.1.6**
  - move distribution package to bdist_wheel

  **0.1.5**
  - move config options to setup.cfg

  **0.1.4**
  - add MANIFEST.in

  **0.1.3**
  - remove tests from Python package

  **0.1.2**
  - add Markdown support for README description

  BSD 3-Clause License

  Copyright (c) 2018, Pierre Poulain
  All rights reserved.

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

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

  * Redistributions in binary form must reproduce the above copyright notice,
    this list of conditions and the following disclaimer in the documentation
    and/or other materials provided with the distribution.

  * Neither the name of the copyright holder nor the names of its
    contributors may be used to endorse or promote products derived from
    this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


pkgId: bd3a44651bcfa2247009a8c04d2077af50d54f896a8f6e5a94c77ca518c4c195
name: python-autocuda
arch: noarch
version: 0.16
epoch: 0
release: 1
url: https://github.com/yangheng95/autocuda
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-autocuda-0.16-1.src.rpm
location_href: Packages/python-autocuda-0.16-1.noarch.rpm
checksum_type: sha256
summary:
  This package provides the function to auto-choose the cuda device hase largest free memory in Pytorch


pkgId: b48a4b04934b8a3f38e011795db10f050e86f6d188dad062074109745c6e20a2
name: python-autopandas
arch: noarch
version: 0.5.1
epoch: 0
release: 1
summary: Process, visualize and use data easily.
url: https://github.com/didayolo/autopandas
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s48p-256g--a62-9.compass-ci.net
rpm_sourcerpm: python-autopandas-0.5.1-1.src.rpm
location_href: Packages/python-autopandas-0.5.1-1.noarch.rpm
checksum_type: sha256
description:
  [![Documentation Status](https://readthedocs.org/projects/autopandas/badge/?version=latest)](https://autopandas.readthedocs.io/en/latest/?badge=latest)

  ![logo](https://raw.githubusercontent.com/Didayolo/autopandas/master/logo_autopandas.png)




  * `pip install autopandas`
  * [Notebook with examples](https://nbviewer.jupyter.org/github/Didayolo/autopandas/blob/master/AutoPandas_workspace.ipynb)
  * [Documentation](https://autopandas.readthedocs.io/en/latest/)


  Forked from [medi-chal project](https://github.com/Didayolo/medi-chal).


pkgId: bdb6fbd35d579bc4a7ccac363161ffac38ff275d3c5624df25d50ca66070600a
name: python-awadb
arch: noarch
version: 0.3.13
epoch: 0
release: 1
url: https://github.com/awa-ai/awadb
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: vm-2p16g.taishan200-2280-2s64p-256g--a41-5.compass-ci.net
rpm_sourcerpm: python-awadb-0.3.13-1.src.rpm
location_href: Packages/python-awadb-0.3.13-1.noarch.rpm
checksum_type: sha256
summary:
  Local lightweight AI Native database for RAG, incluing embedding vectors and text search for LLM generation

description:
  Easily Use - No boring database schema definition. No need to pay attention to vector indexing details.

  Realtime Search - Lock free realtime index keeps new data fresh with millisecond level latency. No wait no manual operation.

  Stability - AwaDB builds upon over 4 years experience at JD.com running production workloads at scale using a system called [Vearch](https://github.com/vearch/vearch), combined with best-of-breed ideas and practices from the community.



  First install awadb:
  ```bash
  pip3 install awadb'
  ```

  Then use as below:
  ```bash
  import awadb

  awadb_client = awadb.Client()


  awadb_client.Create("test_llm1")



  awadb_client.Add([{'embedding_text':'The man is happy'}, {'source' : 'pic1'}])
  awadb_client.Add([{'embedding_text':'The man is very happy'}, {'source' : 'pic2'}])
  awadb_client.Add([{'embedding_text':'The cat is happy'}, {'source' : 'pic3'}])
  awadb_client.Add([{'embedding_text':'The man is eating'}, {'source':'pic4'}])


  query = "The man is happy"
  results = awadb_client.Search(query, 3)


  print(results)
  ```
  Here the text is embedded by SentenceTransformer which is supported by [Hugging Face](https://huggingface.co)
  More detailed python local library usage you can read [here](https://ljeagle.github.io/awadb/)


  If you are on the Windows platform or want a awadb service, you can download and deploy the awadb docker.
  The installation of awadb docker please see [here](https://github.com/awa-ai/awadb/tree/main/docs/deploy.md)

  - Python Usage

  First, Install gRPC and awadb service python client as below:

  ```bash
  pip3 install grpcio
  pip3 install awadb-client
  ```

  A simple example as below:

  ```bash

  from awadb_client import Awa


  client = Awa()


  client.add("example1", {'name':'david', 'feature':[1.3, 2.5, 1.9]})
  client.add("example1", {'name':'jim', 'feature':[1.1, 1.4, 2.3]})


  results = client.search("example1", [1.0, 2.0, 3.0])


  print(results)




  db_name: "default"
  table_name: "example1"
  results {
    total: 2
    msg: "Success"
    result_items {
      score: 0.860000074
      fields {
        name: "_id"
        value: "64ddb69d-6038-4311-9118-605686d758d9"
      }
      fields {
        name: "name"
        value: "jim"
      }
    }
    result_items {
      score: 1.55
      fields {
        name: "_id"
        value: "f9f3035b-faaf-48d4-a947-801416c005b3"
      }
      fields {
        name: "name"
        value: "david"
      }
    }
  }
  result_code: SUCCESS
  ```
  More python sdk for service is [here](https://ljeagle.github.io/awadb/)
  More detailed quick start examples you can find [here](https://github.com/awa-ai/awadb/blob/main/tests/test_awadb_client.py)

  - RESTful Usage
  ```bash

  curl -H "Content-Type: application/json" -X POST -d '{"db":"default", "table":"test", "docs":[{"_id":1, "name":"lj", "age":23 "f":[1,0]},{"_id":2, "name":"david", "age":32, "f":[1,2]}]}' http://localhost:8080/add


  curl -H "Content-Type: application/json" -X POST -d '{"db":"default", "table":"test", "vector_query":{"f":[1, 1]}}' http://localhost:8080/search
  ```
  More detailed RESTful API is [here](https://github.com/awa-ai/awadb/tree/main/docs/restful_tutorial.md)




  Any unstructured data(image/text/audio/video) can be transferred to vectors which are generally understanded by computers through AI(LLMs or other deep neural networks).

  For example, "The man is happy"-this sentence can be transferred to a 384-dimension vector(a list of numbers `[0.23, 1.98, ....]`) by SentenceTransformer language model. This process is called embedding.

  More detailed information about embeddings can be read from [OpenAI](https://platform.openai.com/docs/guides/embeddings/what-are-embeddings)

  Awadb uses [Sentence Transformers](https://huggingface.co/sentence-transformers) to embed the sentence by default, while you can also use OpenAI or other LLMs to do the embeddings according to your needs.



  Examples of combining LLaMa or quantized Alpaca with llama.cpp to do local knowledge database please see [here](./examples/llama.cpp)
  Examples of combining ChatGLM to do local knowledge database please see [here](./examples/chatglm)




  - [Issues and PR](https://github.com/awa-ai/awadb/issues)
  - [Roadmap and Contribution](https://github.com/awa-ai/awadb/blob/main/ROADMAP.md)




  [Apache 2.0](./LICENSE)




  Join the AwaDB community to share any problem, suggestion, or discussion with us:

  - [Discord](https://discord.gg/GP7QxRrDjB)
  - [Slack](https://awadbhq.slack.com)
  - [Reddit](https://www.reddit.com/r/Awadb/)


pkgId: 0e23a600648850235a59b56499b8d4ea61d2181be12f0a3f062052c0f14de81c
name: python-aws-mfa
arch: noarch
version: 0.0.12
epoch: 0
release: 1
summary: Manage AWS MFA Security Credentials
url: https://github.com/broamski/aws-mfa
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aws-mfa-0.0.12-1.src.rpm
location_href: Packages/python-aws-mfa-0.0.12-1.noarch.rpm
checksum_type: sha256
description:
  **aws-mfa** makes it easy to manage your AWS SDK Security Credentials when Multi-Factor Authentication (MFA) is enforced on your AWS account. It automates the process of obtaining temporary credentials from the [AWS Security Token Service](http://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html) and updating your [AWS Credentials](https://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs) file (located at `~/.aws/credentials`). Traditional methods of managing MFA-based credentials requires users to write their own bespoke scripts/wrappers to fetch temporary credentials from STS and often times manually update their AWS credentials file.
  The concept behind **aws-mfa** is that there are 2 types of credentials:
  * `long-term` - Your typcial AWS access keys, consisting of an `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`
  * `short-term` - A temporary set of credentials that are generated by AWS STS using your `long-term` credentials in combination with your MFA device serial number (either a hardware device serial number or virtual device ARN) and one time token code. Your short term credentials are the credentials that are actively utilized by the AWS SDK in use.
  If you haven't yet enabled multi-factor authentication for AWS API access, check out the [AWS article](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) on doing so.


pkgId: deb67df82e547d9b962491121e5c1c575849476c70a8885fc0479e1913af0e21
name: python-aws-quota-checker
arch: noarch
version: 1.12.0
epoch: 0
release: 1
summary: A CLI tool that checks your AWS quota utilization
url: https://pypi.org/project/aws-quota-checker/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-aws-quota-checker-1.12.0-1.src.rpm
location_href: Packages/python-aws-quota-checker-1.12.0-1.noarch.rpm
checksum_type: sha256
description:
  A tool that helps keeping track of your AWS quota utilization. It'll determine the limits of your AWS account and compare them to the number of current resources.

  ![Example output of aws-quota-checker](https://raw.githubusercontent.com/brennerm/aws-quota-checker/master/img/example.png)

  This is especially useful cause today, cloud resources are being created from all kinds of sources, e.g. IaC and Kubernetes operators. This tool will give you a head start for requesting quota increases before you hit a quota limit to prevent being stuck with a production system not being able to scale anymore.

  A usual use case is to add it to your CI pipeline right after applying your IaC or run it on a regular basis. It also comes with a Prometheus exporter mode that allows you to visualize the data with your tool of choice, e.g. Grafana.

  ![Example Grafana dashboard that uses metrics of the Prometheus exporter](https://raw.githubusercontent.com/brennerm/aws-quota-checker/master/img/example-grafana-dashboard.png)





  ```bash
  pip install aws-quota-checker
  ```



  ```bash
  docker run -e AWS_ACCESS_KEY_ID=ABC -e AWS_SECRET_ACCESS_KEY=DEF -e AWS_DEFAULT_REGION=eu-central-1 ghcr.io/brennerm/aws-quota-checker
  ```

  or

  ```bash
  aws configure
  docker run -v ~/.aws/credentials:/home/aqc/.aws/credentials:ro ghcr.io/brennerm/aws-quota-checker
  ```



  ```bash
  git clone git@github.com:brennerm/aws-quota-checker.git
  cd aws-quota-checker
  pip install .
  ```



  Make sure you are logged into your AWS account (`aws configure` or through environment variables) or switch to the one you want to check. This account needs to have read permissions for all supported services. AWS provides a default policy called _ReadOnlyAccess_ that contains the required permissions.

  Check the help page with `aws-quota-checker --help` to see all available command and their documentation.



  ```bash
  $ aws-quota-checker check vpc_count
  AWS profile: default | AWS region: eu-central-1 | Active checks: vpc_count
  VPCs per Region [default/eu-central-1]: 1/5 ✓
  ```



  ```bash
  $ aws-quota-checker check all
  AWS profile: default | AWS region: eu-central-1 | Active checks: route53_traffic_policy_count,vpc_count,ec2_tgw_count,ec2_on_demand_standard_count,route53_health_check_count,cw_alarm_count,iam_attached_policy_per_role,asg_count,elasticbeanstalk_environment_count,s3_bucket_count,iam_attached_policy_per_user,elb_listeners_per_alb,ec2_eip_count,route53resolver_rule_count,iam_policy_version_count,elb_listeners_per_nlb,vpc_subnets_per_vpc,route53_vpcs_per_hosted_zone,cf_stack_count,iam_user_count,elb_listeners_per_clb,ni_count,dyndb_table_count,elasticbeanstalk_application_count,route53_traffic_policy_instance_count,ig_count,elb_clb_count,ec2_vpn_connection_count,route53_reusable_delegation_set_count,ebs_snapshot_count,route53_hosted_zone_count,iam_attached_policy_per_group,eks_count,am_mesh_count,elb_target_group_count,route53resolver_rule_association_count,iam_server_certificate_count,elb_alb_count,vpc_acls_per_vpc,iam_group_count,ec2_spot_standard_count,route53resolver_endpoint_count,iam_policy_count,elb_nlb_count,sg_count,route53_records_per_hosted_zone,lc_count,ecs_count,secretsmanager_secrets_count
  Collecting checks  [####################################]  100%
  Route53 Traffic Policies per Account [default]: 0/50 ✓
  VPCs per Region [default/eu-central-1]: 1/5 ✓
  Transit Gateways per Account [default]: 4/5 !
  Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) EC2 instances [default]: 0/1280 ✓
  Route53 Health Checks per Account [default]: 0/200 ✓
  Number of CloudWatch alarms per Region [default/eu-central-1]: 0/5000 ✓
  Auto Scaling groups per Region [default/eu-central-1]: 0/200 ✓
  Elastic Beanstalk Environments per Account [default]: 0/200 ✓
  Application Load Balancers per Region [default/eu-central-1]: 46/50 X
  ...
  ```



  ```bash
  $ aws-quota-checker check-instance vpc_acls_per_vpc vpc-0123456789
  Network ACLs per VPC [default/eu-central-1/vpc-0123456789]: 0/200
  ```



  The Prometheus exporter requires additional dependencies that you need to install with `pip install aws-quota-checker[prometheus]`.

  ```bash
  $ aws-quota-checker prometheus-exporter all
  AWS profile: default | AWS region: us-east-1 | Active checks: am_mesh_count,asg_count,cf_stack_count,cw_alarm_count,dyndb_table_count,ebs_snapshot_count,ec2_eip_count,ec2_on_demand_f_count,ec2_on_demand_g_count,ec2_on_demand_inf_count,ec2_on_demand_p_count,ec2_on_demand_standard_count,ec2_on_demand_x_count,ec2_spot_f_count,ec2_spot_g_count,ec2_spot_inf_count,ec2_spot_p_count,ec2_spot_standard_count,ec2_spot_x_count,ec2_tgw_count,ec2_vpn_connection_count,ecs_count,eks_count,elasticbeanstalk_application_count,elasticbeanstalk_environment_count,elb_alb_count,elb_clb_count,elb_listeners_per_alb,elb_listeners_per_clb,elb_listeners_per_nlb,elb_nlb_count,elb_target_group_count,iam_attached_policy_per_group,iam_attached_policy_per_role,iam_attached_policy_per_user,iam_group_count,iam_policy_count,iam_policy_version_count,iam_server_certificate_count,iam_user_count,ig_count,lc_count,ni_count,route53_health_check_count,route53_hosted_zone_count,route53_records_per_hosted_zone,route53_reusable_delegation_set_count,route53_traffic_policy_count,route53_traffic_policy_instance_count,route53_vpcs_per_hosted_zone,route53resolver_endpoint_count,route53resolver_rule_association_count,route53resolver_rule_count,s3_bucket_count,secretsmanager_secrets_count,sg_count,sns_pending_subscriptions_count,sns_subscriptions_per_topic,sns_topics_count,vpc_acls_per_vpc,vpc_count,vpc_subnets_per_vpc
  09-Mar-21 20:15:11 [INFO] botocore.credentials - Found credentials in shared credentials file: ~/.aws/credentials
  09-Mar-21 20:15:11 [INFO] aws_quota.prometheus - starting /metrics endpoint on port 8080
  09-Mar-21 20:15:11 [INFO] aws_quota.prometheus - collecting checks
  09-Mar-21 20:15:19 [INFO] aws_quota.prometheus - collected 110 checks
  09-Mar-21 20:15:19 [INFO] aws_quota.prometheus - refreshing limits
  09-Mar-21 20:16:34 [INFO] aws_quota.prometheus - limits refreshed
  09-Mar-21 20:16:34 [INFO] aws_quota.prometheus - refreshing current values
  09-Mar-21 20:18:15 [INFO] aws_quota.prometheus - current values refreshed
  ```

  The exporter will return the following metrics:

  - awsquota_$checkkey: the current value of each quota check
  - awsquota_$checkkey_limit: the limit value of each quota check
  - awsquota_$checkkey_duration_seconds: the time to get the current value of each quota check
  - awsquota_$checkkey_limit_duration_seconds: the time to get the limit value of each quota check
  - awsquota_check_count: the number of quota checks that are being executed
  - awsquota_check_limits_duration_seconds: the number of seconds that was necessary to query all quota limits
  - awsquota_check_currents_duration_seconds: the number of seconds that was necessary to query all current quota values
  - awsquota_info: info gauge that will expose the current AWS account and region as labels

  Depending on the check type, labels for the AWS account, the AWS region and the instance ID will be attached to the metric.

  Below you can find a few example metrics:

  ```


  awsquota_info{account="123456789",region="us-east-1"} 1.0


  awsquota_check_count 110.0


  awsquota_collect_checks_duration_seconds{account="123456789",region="us-east-1"} 7.885610818862915


  awsquota_asg_count_limit{account="123456789",region="us-east-1"} 200.0


  awsquota_ec2_on_demand_standard_count{account="123456789"} 22.0


  awsquota_elb_listeners_per_clb{account="123456789",instance="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",region="us-east-1"} 10.0
  awsquota_elb_listeners_per_clb{account="123456789",instance="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",region="us-east-1"} 2.0
  ```

  As querying all quotas, depending on the number of resources to check, may take some time, the exporter works asynchronously. That means requesting the /metrics endpoint will return cached results and not trigger a recheck of all quotas. Instead all checks will be executed and refreshed in the background. That's why no metrics will be available directly after starting the exporter.

  Hence it doesn't make too much sense to scrape the /metrics every few seconds cause the values will only refresh once in a while. The check intervals of the background jobs can be adjusted to your needs using command line arguments.



  To enable autocompletion for all check keys, sub commands and their options, follow one of the next sections depending on the shell you use.



  Add this to your _~/.bashrc_:

  `eval "$(_AWS_QUOTA_CHECKER_COMPLETE=source_bash aws-quota-checker)"`



  Add this to your _~/.zshrc_:

  `eval "$(_AWS_QUOTA_CHECKER_COMPLETE=source_zsh aws-quota-checker)"`



  Add this to your _~/.config/fish/completions/aws-quota-checker.fish_:

  `eval "$(_AWS_QUOTA_CHECKER_COMPLETE=source_fish aws-quota-checker)"`



  Feel free to create a new issue with the _New Check_ label including a description which quota check you are missing.


pkgId: df492ef38873239dfc414a754f2d2d17c839ae4539079064c6324670147c942d
name: python-azarashi
arch: noarch
version: 0.11.0
epoch: 0
release: 1
summary: QZSS DCR Decoder
url: https://github.com/nbtk/azarashi
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-azarashi-0.11.0-1.src.rpm
location_href: Packages/python-azarashi-0.11.0-1.noarch.rpm
checksum_type: sha256
description:
  [![Downloads](https://static.pepy.tech/personalized-badge/azarashi?period=total&units=none&left_color=grey&right_color=blue&left_text=Downloads)](https://pepy.tech/project/azarashi)

  A QZSS DCR Decoder.

  azarashi は準天頂衛星みちびきが送信する災危通報メッセージのデコーダーです。u-blox と Sony Spresense が出力するメッセージ形式に対応しています。災危通報(災害・危機管理通報サービス)とは、防災機関から発表される地震や津波発生時の災害情報などの危機管理情報を準天頂衛星みちびき経由で送信するサービスです。

  ```shell
  $ pip install azarashi
  ```

  デバイスに災危通報メッセージを出力させるための設定例です。

  UARTを有効にするため、設定ファイルの末尾に `enable_uart=1` を追記します。
  ```shell
  $ sudo vi /boot/firmware/config.txt
  ```
  ```shell
  [all]
  ...


  enable_uart=1
  ```
  再起動して、シリアルデバイスが認識されていることを確認します。
  ```shell
  $ sudo reboot
  ```
  `/dev/ttyS0` の状態を確認しましょう。
  ```shell
  $ stat /dev/ttyS0
  ```
  ```shell
    File: /dev/ttyS0
    Size: 0         	Blocks: 0          IO Block: 4096   character special file
  Device: 5h/5d	Inode: 602         Links: 1     Device type: 4,40
  Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (   20/ dialout)
  ...
  ```
  もし `/dev/ttyS0` が存在しない場合は dmsg コマンドで確認しましょう。ファイル名が異なるか UART ポートを有効化する設定が間違っているか、有効化に失敗していることが考えられます。
  ```shell
  $ sudo dmesg | grep serial
  ```
  ```shell
  [    0.525432] bcm2835-aux-uart fe215040.serial: there is not valid maps for state default
  [    0.527303] fe215040.serial: ttyS0 at MMIO 0xfe215040 (irq = 21, base_baud = 62500000) is a 16550
  ```
  シリアルデバイスに `sudo` コマンドを使わずに読み書きしたいときは、ユーザを `dialout` グループに追加します。
  ```shell
  $ sudo usermod -a -G dialout $USER
  $ logout # then re-login to the machine
  ```
  データシートを参照して直接インストラクションを流し込むか、設定ツールをつかって SFRBX メッセージの出力を有効にしてください。設定ツール ubxtool は下記のようにインストールします。
  ```shell
  $ sudo apt update
  $ sudo apt install gpsd gpsd-clients
  ```
  SFRBX メッセージの出力に関連する設定コマンドの例です。
  ```shell
  $ ubxtool -f /dev/ttyS0 -s 9600 -z CFG-MSGOUT-UBX_RXM_SFRBX_UART1,1,1 # sets 'enable'  to ram
  $ ubxtool -f /dev/ttyS0 -s 9600 -z CFG-MSGOUT-UBX_RXM_SFRBX_UART1,0,1 # sets 'disable' to ram
  $ ubxtool -f /dev/ttyS0 -s 9600 -z CFG-MSGOUT-UBX_RXM_SFRBX_UART1,1,2 # sets 'enable'  to bbr (battery-backed ram)
  $ ubxtool -f /dev/ttyS0 -s 9600 -z CFG-MSGOUT-UBX_RXM_SFRBX_UART1,0,2 # sets 'disable' to bbr (battery-backed ram)
  $ ubxtool -f /dev/ttyS0 -s 9600 -g CFG-MSGOUT-UBX_RXM_SFRBX_UART1 | grep -A3 UBX-CFG-VALGET # gets the state
  ```
  デバイスに通電してから災危通報メッセージを出力し始めるまでしばらく時間がかかります。

  設定ツール [u-center](https://www.u-blox.com/en/product/u-center) をダウンロードし、インストールしてください。

  u-center で SFRBX メッセージを出力するように設定してください。下記は SFRBX メッセージを USB に出力するための参考設定手順です。
  ```
  Open u-center ->
    View -> Configuration View ->
      CFG (Configuration) -> Revert to default configuration -> Send
      MSG (Messages) -> Messages -> 02-13 RXM-SFRBX ->
        Check the "USB" box and type 1 in the "on" box -> Send
      NMEA (NMEA Protocol) -> NMEA Version -> Select 4.11 -> Send
      CFG (Configuration) -> Save current configuration -> Send
  ```
  u-center で QZSS の L1S シグナル受信機能を有効にしてください。下記は GPS と QZSS のメッセージをすべて受信するための参考設定手順です。
  ```
  Open u-center ->
    View -> Generation 9 Configuration View -> GNSS Configuration ->
      Check All the "GPS" and "QZSS" boxes ->
    　　  Check the "RAM" and "Flash" boxes in the "Write to layer" ->
   　　　　   Send Configuration
  ```
  設定は永続化され、他の機器に接続し直しても災危通報メッセージを出力します。デバイスに通電してから災危通報メッセージを出力し始めるまでしばらく時間がかかります。

  [QZSS 災危通報 (QZQSM) の NMEA センテンスを出力するように設定してください。](https://developer.sony.com/develop/spresense/docs/arduino_tutorials_ja.html#_qzss_災危通報を出力する)

  azarashi コマンドをつかうとプログラミングすることなく災危通報メッセージをデコードできます。
  ```shell
  $ echo '$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05' | azarashi nmea
  ```
  オプションは下記のとおりです。
  ```shell
  usage: azarashi [-h] [-f INPUT] [-s] [-u] [-v] {hex,nmea,ublox}

  azarashi CLI

  positional arguments:
    {hex,nmea,ublox}      message type

  options:
    -h, --help            show this help message and exit
    -f INPUT, --input INPUT
                          input device (default: stdin)
    -s, --source          output the source messages (default: False)
    -u, --unique          supress duplicate messages (default: False)
    -v, --verbose         verbose mode (default: False)
  ```

  stty コマンドでデバイスファイルを `raw` に設定し azarashi コマンドのメッセージタイプに `ublox` を指定します。デバイスファイルのパスは適宜変更してください。
  ```shell
  $ stty -F /dev/ttyS0 raw
  ```
  azarashi コマンドに ublox オプションを指定します。
  ```shell
  $ azarashi ublox -f /dev/ttyS0
  ```
  なお、デバイスファイルの読込権限が足りず sudo コマンドを使って python3 インタプリタを実行するとき azarashi モジュールも sudo で実行される python3 環境にインストールされている必要があることに注意してください。あるいは次のように実行しても動作は同じです。
  ```shell
  $ sudo cat /dev/ttyS0 | azarashi ublox
  ```

  azarashi コマンドに nmea オプションを指定します。
  ```shell
  $ azarashi nmea -f /dev/ttyUSB0
  ```

  azarashi コマンドのメッセージタイプに `hex` を指定してください。`hex` はヘッダ、チェックサムを含まない16進数文字列のメッセージ形式です。
  ```shell
  $ echo C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC | azarashi hex
  ```


  ```python
  azarashi.decode(msg, msg_type='nmea')
  ```
  - `msg`: メッセージを渡してください。メッセージは str 型または bytes 型です。
  - `msg_type`: デフォルトは `nmea` 、オプションとして `hex` または `ublox` を指定できます。`nmea` または `hex` を指定したときメッセージは str 型、`ublox` を指定したときメッセージは bytes 型です。

  デコードして得られたレポートオブジェクトを `str()` にわたすとヒューマンリーダブルな災害情報を返します。
  ```python
  >>> import azarashi
  >>> msg = '$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05'
  >>> report = azarashi.decode(msg, 'nmea')
  >>> str(report)
  '防災気象情報(緊急地震速報)(発表)(訓練/試験)\n*** これは訓練です ***\n緊急地震速報\n強い揺れに警戒してください。\n\n発表時刻: 3月10日10時0分\n\n震央地名: 日向震度(上限): 〜程度以上\n島根、岡山、広島、山口、香川、愛媛、高知、福岡、佐賀、長崎、熊本、大分、宮崎、鹿児島、中国、四国、九州'
  ```
  つまりレポートオブジェクトを `print()` にわたせば災害情報を出力します。
  ```python
  >>> print(report)
  ```
  ```
  防災気象情報(緊急地震速報)(発表)(訓練/試験)
  *** これは訓練です ***
  緊急地震速報
  強い揺れに警戒してください。

  発表時刻: 3月10日10時0分

  震央地名: 日向灘
  地震発生時刻: 10日10時0分
  深さ: 10km
  マグニチュード: 7.2
  震度(下限): 震度6弱
  震度(上限): 〜程度以上
  島根、岡山、広島、山口、香川、愛媛、高知、福岡、佐賀、長崎、熊本、大分、宮崎、鹿児島、中国、四国、九州
  ```
  レポートオブジェクトからパラメータを取得するには `get_params()` メソッドを使います。
  ```python
  >>> from pprint import pprint
  >>> pprint(report.get_params())
  ```
  ```python
  {'assumptive': False,
   'depth_of_hypocenter': '10km',
   'depth_of_hypocenter_raw': 10,
   'disaster_category': '緊急地震速報',
   'disaster_category_en': 'Earthquake Early Warning',
   'disaster_category_no': 1,
   'eew_forecast_regions': ['島根', '岡山', '広島', '山口', '香川', '愛媛',
                            '高知', '福岡', '佐賀', '長崎', '熊本', '大分',
                            '宮崎', '鹿児島', '中国', '四国', '九州'],
   'eew_forecast_regions_raw': [37, 38, 39, 40, 42, 43,
                                44, 45, 46, 47, 48, 49,
                                50, 51, 66, 67, 68],
   'information_type': '発表',
   'information_type_en': 'Issue',
   'information_type_no': 0,
   'long_period_ground_motion_lower_limit': None,
   'long_period_ground_motion_lower_limit_raw': 0,
   'long_period_ground_motion_upper_limit': None,
   'long_period_ground_motion_upper_limit_raw': 0,
   'magnitude': '7.2',
   'magnitude_raw': 72,
   'message': b'\xc6\xaf\x89\xa8 \x00\x03$\x00\x00P@\x05H\xc5\xe2\xc0\x00\x00\x00'
              b'\x03\xdf\xf8\x00\x1c\x00\x00\x11\x85D?\xc0',
   'message_header': '$QZQSM',
   'message_type': 'DCR',
   'nmea': '$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05',
   'notifications_on_disaster_prevention': ['強い揺れに警戒してください。'],
   'notifications_on_disaster_prevention_raw': [201],
   'occurrence_time_of_earthquake': datetime.datetime(2024, 3, 10, 1, 0),
   'preamble': 'C',
   'raw': b'\xaf\x89\xa8 \x00\x03$\x00\x00P@\x05H\xc5\xe2\xc0\x00\x00\x00\x03'
          b'\xdf\xf8\x00\x1c\x00\x00\x10',
   'report_classification': '訓練/試験',
   'report_classification_en': 'Training/Test',
   'report_classification_no': 7,
   'report_time': datetime.datetime(2024, 3, 10, 1, 0),
   'satellite_id': 55,
   'satellite_prn': 183,
   'seismic_epicenter': '日向灘',
   'seismic_epicenter_raw': 791,
   'seismic_intensity_lower_limit': '震度6弱',
   'seismic_intensity_lower_limit_raw': 8,
   'seismic_intensity_upper_limit': '〜程度以上',
   'seismic_intensity_upper_limit_raw': 11,
   'sentence': '$QZQSM,55,C6AF89A820000324000050400548C5E2C000000003DFF8001C00001185443FC*05',
   'timestamp': datetime.datetime(2024, 6, 21, 15, 40, 34, 960948),
   'version': 1}
  ```
  重複して受信した同一情報のメッセージかどうかは等価演算子で判別できます。
  ```python
  >>> msg2 = '$QZQSM,55,9AAF89A820000324000050400548C5E2C000000003DFF8001C0000123FB3EB0*03'
  >>> report2 = azarashi.decode(msg2, 'nmea')
  >>> report == report2
  ```
  ```
  True
  ```

  ```python
  azarashi.decode_stream(stream, msg_type='nmea', callback=None, callback_args=(), callback_kwargs={}, unique=False, ignore_dcr=False, ignore_dcx=True)
  ```
  - `stream`: I/Oストリームを渡してください。デバイスファイルを `open()` して渡すときは、事前に stty コマンドで `ublox` なら `raw` モード、`nmea` ならデフォルト設定にしてください。pySerial つかうときは stty コマンドによる設定は不要です。
  - `msg_type`: デフォルトは `nmea` 、オプションとして `hex` または `ublox` を指定できます。
  - `callback`: メッセージをデコードしたあとに実行されるコールバック関数です。`None` の場合 `decode_stream()` はメッセージをデコードするたびに結果を返します。コールバック関数が与えられた場合 `decode_stream()` は例外が発生しない限り繰り返しメッセージをデコードし、そのたびにコールバック関数に結果を渡して実行します。下記はコールバック関数のインタフェースです。
  ```python
  callback(report, *callback_args, **callback_kwargs)
  ```
  - `calback_args`: コールバック関数に渡される引数です。
  - `callback_kwargs`: コールバック関数に渡されるキーワード引数です。
  - `unique`: 重複したメッセージを無視したいときは `True` を指定してください。
  - `ignore_dcr`: DCRメッセージを無視したいときは `True` を指定してください。デフォルトは `False` です。
  - `ignore_dcx`: DCXメッセージを無視したくないときは `False` を指定してください。デフォルトは `True` です。

  指定したデバイスファイルを読み込み、デコードしたレポートオブジェクトを `print()` に渡します。
  ```python
  >>> import azarashi
  >>> f = open('/dev/ttyS0', mode='r')
  >>> azarashi.decode_stream(f, msg_type='ublox', callback=print)
  ```

  この例外クラスは何らかの理由でデコードに失敗したときに送出されます。エラーメッセージを表示すると問題解決の一助となるでしょう。

  `NotImplementedError` を継承した例外クラスです。実験的な配信など、デコーダが対応していないメッセージを受け取ったときに送出されます。配信がはじまると騒々しいのでデバッグ以外ではこの例外を握りつぶしたほうがよいかもしれません。


  例外処理を加えた簡単なプログラムの例です。
  ```python
  import azarashi
  import sys

  def example():
      with open('/dev/ttyS0', mode='r') as f:
          while True:
              try:
                  azarashi.decode_stream(f, msg_type='ublox', callback=print)
              except azarashi.QzssDcrDecoderException as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
              except azarashi.QzssDcrDecoderNotImplementedError as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
              except EOFError as e:
                  print(f'{e}', file=sys.stderr)
                  return 0
              except Exception as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
                  return 1

  exit(example())
  ```

  [pySerial](https://pythonhosted.org/pyserial/) でシリアルポートを `open()` して `decode_stream()` に渡すこともできます。この方法では stty コマンドによる設定は不要です。
  ```python
  import azarashi
  import sys
  import serial
  import pprint

  def handler(report):
      pprint.pprint(report.get_params())

  def example():
      with serial.Serial('/dev/ttyS0', 9600) as ser:
          while True:
              try:
                  azarashi.decode_stream(ser, 'ublox', handler, unique=True)
              except azarashi.QzssDcrDecoderException as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
              except azarashi.QzssDcrDecoderNotImplementedError as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
              except EOFError as e:
                  print(f'{e}', file=sys.stderr)
                  return 0
              except Exception as e:
                  print(f'# [{type(e).__name__}] {e}', file=sys.stderr)
                  return 1

  exit(example())
  ```

  GPS アンテナは屋外や窓際に設置する必要があるため、それが実際にデータを処理する装置の近くとは限りません。そこでデータを UDP パケットに載せて再送するスクリプトを書きました。IPv4/IPv6 両方に対応しています。簡単な実装なので、ソースを参考に改造するベースにもよいと思います。

  送信側のスクリプトです。デフォルトでは IPv6 リンクローカルマルチキャストアドレスにパケットを送信します。宛先アドレスを指定したい場合は -d オプションを使用してください。
  ```shell
  $ python3 -m azarashi.network.transmitter -t ublox -f /dev/ttyS0
  ```
  なお、デバイスファイルの読込権限が足りず sudo コマンドを使って python3 インタプリタを実行するとき azarashi モジュールも sudo で実行される python3 環境にインストールされている必要があることに注意してください。あるいは次のように実行しても動作は同じです。
  ```shell
  $ sudo cat /dev/ttyS0 | python3 -m azarashi.network.transmitter -t ublox
  ```
  オプションは下記のとおりです。
  ```
  usage: transmitter.py [-h] [-d DST_HOST] [-p DST_PORT] [-t {hex,nmea,ublox}] [-f INPUT] [-u]

  azarashi network transmitter

  options:
    -h, --help            show this help message and exit
    -d DST_HOST, --dst-host DST_HOST
                          destination host (default: ff02::1)
    -p DST_PORT, --dst-port DST_PORT
                          destination port (default: 2112)
    -t {hex,nmea,ublox}, --msg-type {hex,nmea,ublox}
                          message type (default: ublox)
    -f INPUT, --input INPUT
                          input device (default: stdin)
    -u, --unique          supress duplicate messages (default: False)
  ```

  受信側のスクリプトです。
  ```shell
  $ python3 -m azarashi.network.receiver
  ```
  オプションは下記のとおりです。
  ```
  usage: receiver.py [-h] [-b BIND_ADDR] [-p BIND_PORT] [-i BIND_IFACE] [-v]

  azarashi network receiver

  optional arguments:
    -h, --help            show this help message and exit
    -b BIND_ADDR, --bind-addr BIND_ADDR
                          address to bind (default: ::)
    -p BIND_PORT, --bind-port BIND_PORT
                          port to bind (default: 2112)
    -i BIND_IFACE, --bind-iface BIND_IFACE
                          iface to bind (default: any)
    -v, --verbose         verbose mode (default: False)
  ```


  azarashi は DCX メッセージのデコードをサポートしています。下記は L-Alert をデコードする例です。
  ```python
  >>> import azarashi
  >>> msg = '$QZQSM,55,53B0604DE19524CDA305B2C1E355B57800000CCC000000000000001022A8188*7E' # l-alert
  >>> report = azarashi.decode(msg, 'nmea')
  >>> print(report)
  ```
  ```

  A1 - Message type: Alert
  A2 - Country/region name: Japan
  A3 - Provider identifier: Foundation for MultiMedia Communications
  A4 - Hazard category and type: MET - Rainfall
  A4 - Hazard definition: Rainfall greater than or equal to 50 mm in past 24 hours. Note: Precise threshold is according to each local standard.
  A5 - Severity: Severe - Significant threat to life or property
  A6A7 - Hazard onset: 2024-06-23 13:00:00
  A8 - Hazard duration: 6H <= Duration < 12H
  A11 - Guidance to react: Keep away from Water area.
  A11 - Guidance to react (ja): 離れろ。水場。
  A12 - Ellipse centre latitude: 35.688
  A13 - Ellipse centre longitude: 139.691
  A14 - Ellipse semi - major axis: 10.933
  A15 - Ellipse semi - minor axis: 5.979
  A16 - Ellipse azimuth: 45.0
  A17 - Specific settings: B1 - Improved Resolution of Main Ellipse
  C1 - Refined latitude of centre of main ellipse: 35.688
  C2 - Refined longitude of centre of main ellipse: 139.691
  C3 - Refined length of semi major axis: 10.933
  C4 - Refined length of semi minor axis: 5.979
  ```
  レポートオブジェクトからパラメータを取得するには `get_params()` メソッドを使います。
  ```python
  >>> from pprint import pprint
  >>> pprint(report.get_params(), sort_dicts=False)
  ```
  ```python
  {'sentence': '$QZQSM,55,53B0604DE19524CDA305B2C1E355B57800000CCC000000000000001022A8188*7E',
   'timestamp': datetime.datetime(2024, 6, 21, 15, 9, 5, 433111),
   'message': b'S\xb0`M\xe1\x95$\xcd\xa3\x05\xb2\xc1\xe3U\xb5x\x00\x00\x0c\xcc'
              b'\x00\x00\x00\x00\x00\x00\x00\x10"\xa8\x18\x80',
   'nmea': '$QZQSM,55,53B0604DE19524CDA305B2C1E355B57800000CCC000000000000001022A8188*7E',
   'message_header': '$QZQSM',
   'satellite_id': 55,
   'satellite_prn': 183,
   'raw': b'M\xe1\x95$\xcd\xa3\x05\xb2\xc1\xe3U\xb5x\x00\x00\x0c\xcc\x00\x00\x00'
          b'\x00\x00\x00\x00\x10',
   'preamble': 'A',
   'message_type': 'DCX',
   'camf': <azarashi.qzss_dcr_lib.decoder.qzss_dcx_decoder.QzssDcxDecoder.decode.<locals>.CAMF object at 0x1023af6a0>,
   'ignore_a12_to_a16': False,
   'ignore_a17_to_a18': False,
   'ignore_ex1': True,
   'ignore_ex2_to_ex7': True,
   'ignore_ex8_to_ex9': True,
   'satellite_designation_mask_type': 'MT44 is for Japan or for use outside Japan',
   'satellite_designation_mask': ['For Japan',
                                  'For Japan',
                                  'For Japan',
                                  'For Japan',
                                  'For Japan',
                                  'For use outside Japan',
                                  'For use outside Japan',
                                  'For Japan',
                                  'For Japan'],
   'dcx_message_type': 'L-Alert',
   'a1_message_type': 'Alert',
   'a2_country_region_name': 'Japan',
   'a3_provider_identifier': 'Foundation for MultiMedia Communications',
   'a4_hazard_category': 'MET',
   'a4_hazard_type': 'Rainfall',
   'a4_hazard_definition': 'Rainfall greater than or equal to 50 mm in past 24 '
                           'hours. Note: Precise threshold is according to each '
                           'local standard.',
   'a5_severity': 'Severe - Significant threat to life or property',
   'a6_hazard_onset_week': 'Current',
   'a7_hazard_onset_time_of_week': 'SUNDAY - 01:00 PM',
   'a6a7_hazard_onset_datetime': datetime.datetime(2024, 6, 23, 13, 0),
   'a8_hazard_duration': '6H <= Duration < 12H',
   'a9_selection_of_library': 'Country/region guidance library',
   'a10_library_version': '#1',
   'a11_japanese_library': 'Keep away from Water area.',
   'a11_japanese_library_ja': '離れろ。水場。',
   'a12_ellipse_centre_latitude': 35.6882581826505,
   'a13_ellipse_centre_longitude': 139.69085457500137,
   'a14_ellipse_semi_major_axis': 10.932758602420911,
   'a15_ellipse_semi_minor_axis': 5.978542029422428,
   'a16_ellipse_azimuth': 45.0,
   'a17_main_subject_for_specific_settings': 'B1 - Improved Resolution of Main '
                                             'Ellipse',
   'c1_refined_latitude_of_centre_of_main_ellipse': 35.6882581826505,
   'c2_refined_longitude_of_centre_of_main_ellipse': 139.69085457500137,
   'c3_refined_length_of_semi_major_axis': 10.932758602420911,
   'c4_refined_length_of_semi_minor_axis': 5.978542029422428,
   'dcx_version': 1}
  ```
  ビットフィールドの値は `report.camf` オブジェクトに格納されています。
  ```python
  print(report.camf.get_params())
  ```
  ```python
  {'sdmt': 0, 'sdm': 96, 'a1': 1, 'a2': 111, 'a3': 1, 'a4': 74, 'a5': 2, 'a6': 0, 'a7': 9421, 'a8': 2, 'a9': 1, 'a10': 0, 'a11': 773, 'a12': 45761, 'a13': 116395, 'a14': 13, 'a15': 11, 'a16': 48, 'a17': 0, 'a18': 0, 'ex1': 13104, 'ex2': 0, 'ex3': 0, 'ex4': 0, 'ex5': 0, 'ex6': 0, 'ex7': 0, 'ex8': 0, 'ex9': 7376896189632872448, 'ex10': 0, 'vn': 1, 'c1': 0, 'c2': 0, 'c3': 0, 'c4': 0}
  ```

  DCX メッセージのデコード結果が格納されるレポートオブジェクトは下記のとおりです。

  CAMF フィールドが空のメッセージです。SD フィールドを監視するために使用します。不要なら無視してください。
  ```python
  class QzssDcxNullMsg(QzssDcXtendedMessageBase)
  ```

  日本国外の機関から発報されたメッセージです。
  ```python
  class QzssDcxOutsideJapan(QzssDcXtendedMessageBase)
  ```

  ```python
  class QzssDcxLAlert(QzssDcXtendedMessageBase)
  ```

  ```python
  class QzssDcxJAlert(QzssDcXtendedMessageBase)
  ```

  ```python
  class QzssDcxMTInfo(QzssDcXtendedMessageBase)
  ```

  日本の未定義の機関から発報されたメッセージです。azarashi はこのメッセージを正確にデコードできないでしょう。デバッグの目的以外では無視してください。
  ```python
  class QzssDcxUnknown(QzssDcXtendedMessageBase)
  ```

  IS-QZSS-DCR-013、IS-QZSS-DCX-002 をサポートしています。


  ```
  [UnicodeDecodeError] 'utf-8' codec can't decode byte 0xNN in position XX: ~
  ```
  GPS モジュールと接続するインタフェースのボーレートが一致せず、壊れたビット列をデコードしようとして失敗していることが考えられます。ボーレートは例えば次のような値です。
  ```
  9600, 19200, 38400, 57600, 115200
  ```
  設定方法は GPS モジュール、stty または pySerial のマニュアルを参照してください。

  CLI でストリームを受けていた azarashi は、書き込み側がクローズすると Encountered EOF と stderr に出力して終了します。これは正常な動作です。その直前までエラーなく動作していたと解釈してください。

  DCX メッセージの SD フィールドを監視する必要があるとき `decode.stream()` メソッドの `unique` オプションは指定しないでください。`unique` オプションを指定したとき、重複した DCX メッセージかどうかを判断するために SD フィールドの差異は考慮されません。SD フィールドが異なるメッセージでも CAMF フィールドが同じメッセージは同一とみなされます。したがって SD フィールドのみが異なるメッセージを取りこぼす可能性があり SD フィールドの変化を正確に監視できません。


  イシュー報告、プルリクエスト、コメント等、なんでもよいのでフィードバックお待ちしています。星をもらうと開発が活発になります。


pkgId: 0bc9495989425c2b6eba814264b41bcad32cd8595c5835340a04e55fcff3a227
name: python-backtrader
arch: noarch
version: 1.9.78.123
epoch: 0
release: 1
summary: BackTesting Engine
url: https://github.com/mementum/backtrader
rpm_license: GPLv3+
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-backtrader-1.9.78.123-1.src.rpm
location_href: Packages/python-backtrader-1.9.78.123-1.noarch.rpm
checksum_type: sha256
description:
  **Yahoo API Note**:
    [2018-11-16] After some testing it would seem that data downloads can be
    again relied upon over the web interface (or API ``v7``)
  **Tickets**
    The ticket system is (was, actually) more often than not abused to ask for
    advice about samples.
  For **feedback/questions/...** use the `Community <https://community.backtrader.com>`_
  Here a snippet of a Simple Moving Average CrossOver. It can be done in several
  different ways. Use the docs (and examples) Luke!
    from datetime import datetime
    import backtrader as bt
    class SmaCross(bt.SignalStrategy):
        def __init__(self):
            sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)
            crossover = bt.ind.CrossOver(sma1, sma2)
            self.signal_add(bt.SIGNAL_LONG, crossover)
    cerebro = bt.Cerebro()
    cerebro.addstrategy(SmaCross)
    data0 = bt.feeds.YahooFinanceData(dataname='MSFT', fromdate=datetime(2011, 1, 1),
                                      todate=datetime(2012, 12, 31))
    cerebro.adddata(data0)
    cerebro.run()
    cerebro.plot()
  Including a full featured chart. Give it a try! This is included in the samples
  as ``sigsmacross/sigsmacross2.py``. Along it is ``sigsmacross.py`` which can be
  parametrized from the command line.


pkgId: 205e208bf993715328fdb2fc2d618af2e913d70c583bbf9479552d5eab8b27fb
name: python-bazel-runfiles
arch: noarch
version: 0.36.0
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://github.com/bazelbuild/rules_python
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-bazel-runfiles-0.36.0-1.src.rpm
location_href: Packages/python-bazel-runfiles-0.36.0-1.noarch.rpm
checksum_type: sha256
description:
  This is a Bazel Runfiles lookup library for Bazel-built Python binaries and tests.

  Learn about runfiles: read [Runfiles guide](https://bazel.build/extending/rules#runfiles)
  or watch [Fabian's BazelCon talk](https://www.youtube.com/watch?v=5NbgUMH1OGo).



  The Runfiles API is available from two sources, a direct Bazel target, and a [pypi](https://pypi.org/) package.



  1. Depend on this runfiles library from your build rule, like you would other third-party libraries:

      ```python
      py_binary(
          name = "my_binary",
          
          deps = ["@rules_python//python/runfiles"],
      )
      ```

  2. Import the runfiles library:

      ```python
          from python.runfiles import Runfiles
      ```



  1. Add the 'bazel-runfiles' dependency along with other third-party dependencies, for example in your `requirements.txt` file.

  2. Depend on this runfiles library from your build rule, like you would other third-party libraries:
      ```python
      load("@pip_deps//:requirements.bzl", "requirement")

      py_binary(
          name = "my_binary",
          ...
          deps = [requirement("bazel-runfiles")],
      )
      ```

  3. Import the runfiles library:
      ```python
      from runfiles import Runfiles
      ```



  Create a `Runfiles` object and use `Rlocation` to look up runfile paths:

  ```python
  r = Runfiles.Create()

  with open(r.Rlocation("my_workspace/path/to/my/data.txt"), "r") as f:
      contents = f.readlines()
      
  ```

  The code above creates a manifest- or directory-based implementation based on the environment variables in `os.environ`. See `Runfiles.Create()` for more info.

  If you want to explicitly create a manifest- or directory-based
  implementation, you can do so as follows:

  ```python
  r1 = Runfiles.CreateManifestBased("path/to/foo.runfiles_manifest")

  r2 = Runfiles.CreateDirectoryBased("path/to/foo.runfiles/")
  ```

  If you want to start subprocesses, and the subprocess can't automatically
  find the correct runfiles directory, you can explicitly set the right
  environment variables for them:

  ```python
  import subprocess
  from python.runfiles import Runfiles

  r = Runfiles.Create()
  env = {}

  env.update(r.EnvVars())
  p = subprocess.run(
      [r.Rlocation("path/to/binary")],
      env=env,
      
  )
  ```


pkgId: ac174c4339f38584b9e412bdc4b76e1965bc0111fc6b975f30524da2b6b6a432
name: python-bctpy
arch: noarch
version: 0.6.1
epoch: 0
release: 1
summary: Brain Connectivity Toolbox for Python
url: https://github.com/aestrivex/bctpy
rpm_license: Visuddhimagga Sutta; GPLv3+
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-bctpy-0.6.1-1.src.rpm
location_href: Packages/python-bctpy-0.6.1-1.noarch.rpm
checksum_type: sha256
description:
  Author: Roan LaPlante <rlaplant@nmr.mgh.harvard.edu>

  Tested against python 3.7+.



  This program strictly observes the tenets of fundamentalist Theravada Mahasi
  style Buddhism.  Any use of this program in violation of these aforementioned
  tenets or in violation of the principles described in the Visuddhimagga Sutta
  is strictly prohibited and punishable by extensive Mahayana style practice.
  By being or not being mindful of the immediate present moment sensations
  involved in the use of this program, you confer your acceptance of these terms
  and conditions.

  Note that the observation of the tenets of fundamentalist Theravada Mahasi
  style Buddhism and the Visuddhimagga Sutta is optional as long as the terms and
  conditions of the GNU GPLv3+ are upheld.



  BCTPY is written in pure python and requires only `scipy` and `numpy`. `scipy` is required for a couple of functions for its statistical and linear algebra
  packages which have some features not available in `numpy` alone. If you don't
  have `scipy`, most functions that do not need `scipy` functionality will still work.

  Note that graphs must be passed in as `numpy.array` rather than `numpy.matrix`. Other constraints/edge cases of the adjacency matrices (e.g. self-loops, negative weights) behave similarly to the matlab functions.

  A small number of functions also depend on networkx. This notably includes Network-Based Statistic, a nonparametric test for differences in undirected weighted graphs from different populations. Ideally this dependency should be removed in the future.

  Nosetests is used for the test suite. The test suite is not complete.



  BCT is a matlab toolbox with many graph theoretical measures off of which `bctpy`
  is based.  I did not write BCT (apart from small bugfixes I have submitted)
  and a quality of life improvements that I have taken liberties to add.
  With few exceptions, `bctpy` is a direct translation of matlab code to python.

  `bctpy` should be considered beta software, with BCT being the gold standard by
  comparison. I did my best to test all functionality in `bctpy`, but much of it is
  arcane math that flies over the head of this humble programmer. There *are*
  bugs lurking in `bctpy`, the question is not whether but how many. If you locate
  bugs, please consider submitting pull requests.

  Many thanks to Stefan Fuertinger for his assistance tracking down a number of
  bugs. Stefan Fuertinger has a similar software package dealing with brain
  network functionality at http://research.mssm.edu/simonyanlab/analytical-tools/

  Many thanks to Chris Barnes for his assistance in documenting a number of issues and facilitating a number of test cases.

  Credit for writing BCT (the matlab version) goes to the following list of
  authors, especially Olaf Sporns and Mika Rubinov.

  - Olaf Sporns
  - Mikail Rubinov
  - Yusuke Adachi
  - Andrea Avena
  - Danielle Bassett
  - Richard Betzel
  - Joaquin Goni
  - Alexandros Goulas
  - Patric Hagmann
  - Christopher Honey
  - Martijn van den Heuvel
  - Rolf Kotter
  - Jonathan Power
  - Murray Shanahan
  - Andrew Zalesky

  In order to be a bit more compact I have removed the accreditations from the
  docstrings each functions. This does not in any way mean that I wish to take
  credit from the individual contributions. I have moved these accreditations
  to the credits file.


pkgId: d9773ea7fb994a5c10676654468b7b90eb60ed75d16f65589740c676c1e4d1e5
name: python-behave-xray
arch: noarch
version: 0.2.2
epoch: 0
release: 1
summary: Behave JIRA XRAY results uploader
url: https://github.com/fundakol/behave-xray
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
rpm_sourcerpm: python-behave-xray-0.2.2-1.src.rpm
location_href: Packages/python-behave-xray-0.2.2-1.noarch.rpm
checksum_type: sha256
description:
  [![PyPi](https://img.shields.io/pypi/v/behave-xray.png)](https://pypi.python.org/pypi/behave-xray)
  [![Build Status](https://github.com/fundakol/behave-xray/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/fundakol/behave-xray/actions?query=workflow?master)
  [![codecov](https://codecov.io/gh/fundakol/behave-xray/branch/master/graph/badge.svg?token=VV1DMT3605)](https://codecov.io/gh/fundakol/behave-xray)




  ```shell
  $ pip install -U behave-xray
  ```

  or from the source:

  ```shell
  $ python setup.py install
  ```


  Add JIRA tags to Gherkin scenario:

  ```gherkin

  @jira.test_plan('JIRA-3')
  Feature: showing off behave
      Feature's description

    @jira.testcase('JIRA-1')
    Scenario: run a simple test
       Given we have behave installed
        When we implement a test
        Then behave will test it for us!

    @jira.testcase('JIRA-2')
    Scenario Outline: Add two numbers in Calc
      Given Calculator is open
      When I add <a> and <b>
      Then result is <result>

    Examples: Sum
        | a | b  | result |
        | 3 | 4  | 7      |
        | 6 | 10 | 18     |
  ```

  This library also supports the feature files [exported from Xray Cucumber tests](https://docs.getxray.app/pages/viewpage.action?pageId=62267221):
  ```gherkin
  Feature: showing off behave
      Feature's description

    @TEST_JIRA-1
    Scenario: run a simple test
       Given we have behave installed
        When we implement a test
        Then behave will test it for us!

    @TEST_JIRA-2
    Scenario Outline: Add two numbers in Calc
      Given Calculator is open
      When I add <a> and <b>
      Then result is <result>

    Examples: Sum
        | a | b  | result |
        | 3 | 4  | 7      |
        | 6 | 10 | 18     |
  ```



  Set Jira server API base URL in system environments:

  ```shell
  $ export XRAY_API_BASE_URL=<jira URL>
  ```

  Set system environments for [basic authentication](https://developer.atlassian.com/server/jira/platform/basic-authentication/):

  ```shell
  $ export XRAY_API_USER=<jria username>
  $ export XRAY_API_PASSWORD=<user password>
  ```
  Set system environments for [Personal Access Tokens](https://confluence.atlassian.com/enterprise/using-personal-access-tokens-1026032365.html) authentication:
  ```shell
  $ export XRAY_TOKEN=<Xray token>
  ```

  Set system environments for Could server authentication with [Client ID and Client Secret](https://docs.getxray.app/display/XRAYCLOUD/Authentication+-+REST+v2):
  ```shell
  $ export XRAY_CLIENT_ID=<Xray client id>
  $ export XRAY_CLIENT_SECRET=<Xray client secret>
  ```



  Run tests against [Jira Xray Server+DC](https://docs.getxray.app/display/XRAY/REST+API):
  ```shell
  $ behave -f behave_xray:XrayFormatter
  ```

  Run tests against [Jira Xray Cloud](https://docs.getxray.app/display/XRAYCLOUD/REST+API) server:
  ```shell
  $ behave -f behave_xray:XrayCloudFormatter
  ```

  You can register formatter in `behave.ini`:
  ```ini

  [behave.formatters]
  xray = behave_xray:XrayCloudFormatter
  ```

  and use with shorter name:
  ```shell
  $ behave --f xray
  ```



  One can implement `scenario_xray_result` hook to update results for a scenario.

  ```python

  from behave.model import Status
  from behave_xray import hookimpl
  from behave_xray.evidence import text

  @hookimpl
  def scenario_xray_result(result, scenario):
      if scenario.status == Status.failed:
          result.evidences.append(text(data='This is scenario evidence', filename=f'{scenario.name}.txt'))
  ```



  Add summary to a report:

  ```shell
  $ behave -f behave_xray:XrayCloudFormatter -D xray.summary='Report generated by behave'
  ```
  or from `behave.ini` file:

  ```ini

  [behave.userdata]
  xray.summary = Report generated by behave
  ```

  Available options:

  * `xray.summary`
  * `xray.user`
  * `xray.version`
  * `xray.revision`


