# packages

pkgId: 7e00822b7f8faf174c4736dbba9421367e45218db760d65be696480e4530b863
name: python-arivo-settings-models
arch: src
version: 1.1.4
epoch: 0
release: 1
summary: Library for arivo parking system settings definitions and models
url: https://gitlab.com/accessio/onegate/settings-models
rpm_license: "GPL-3",
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arivo-settings-models-1.1.4-1.src.rpm
checksum_type: sha256
description:
  This repo contains model definitions for all Arivo settings (settings stored in RPCServer)




  Breaking changes are annotated [here](docs/migrations.md).


pkgId: e4f9f148cddad76c8a7bc8c776f1c9d3bde1a7feaed5a57b0deb0120e88ec7c5
name: python-arize
arch: src
version: 7.26.0
epoch: 0
release: 1
summary: A helper library to interact with Arize AI APIs
url: https://arize.com
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arize-7.26.0-1.src.rpm
checksum_type: sha256
description:
  A helper package to interact with Arize AI APIs.
  Arize is an end-to-end ML & LLM observability and monitoring platform. The platform is designed to help AI & ML engineers and data science practitioners surface and fix issues with ML models in production faster with:
  - LLM tracing
  - Automated ML monitoring and model monitoring
  - Workflows to troubleshoot model performance
  - Real-time visualizations for model performance monitoring, data quality monitoring, and drift monitoring
  - Model prediction cohort analysis
  - Pre-deployment model validation


pkgId: c9e6721fe621388ddfca5574cf1e08f77f537c337aff6c3bd3084ed58f966aa6
name: python-arize-otel
arch: src
version: 0.5.2
epoch: 0
release: 1
summary: Helper package for OTEL setup to send traces to Arize & Phoenix
url: https://pypi.org/project/arize-otel/
rpm_license: BSD
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arize-otel-0.5.2-1.src.rpm
checksum_type: sha256
description:
  The `arize-otel` package is meant to be a very lightweight convenience package to help set up OpenTelemetry for tracing LLM applications
  and send the traces to [Arize](https://arize.com/), [Phoenix](https://phoenix.arize.com/), or custom collectors.

  Install `arize-otel` using `pip`
  ```bash
  pip install arize-otel
  ```

  You only need one import to use this package:
  ```python
  from arize_otel import register_otel, Endpoints
  ```
  The following examples showcase how to use `register_otel` to setup Opentelemetry in order to send traces to a collector. However,
  this is **NOT** the same as [instrumenting](https://docs.arize.com/phoenix/tracing/concepts-tracing/how-does-tracing-work)
  your application. For instance, you can use any of our [OpenInference AutoInstrumentators](https://github.com/Arize-ai/openinference).
  Assuming we use the OpenAI AutoInstrumentation, we need to run `instrument()` _after_ using `register_otel`:
  ```python

  register_otel(
      
  )

  from openinference.instrumentation.openai import OpenAIInstrumentor
  OpenAIInstrumentor().instrument()
  ```
  The above code snippet will yield a fully setup and instrumented application. It is worth noting that this is completely **optional**. The usage of this
  package is for convenience only, you can set up OpenTelemetry and send traces to Arize and Phoenix without installing this or any other package from Arize.
  In the following sections we have examples on how to use the `register_otel` function:

  To send traces to Arize you need to authenticate via the Space ID and API Key. You can find them in the Space Settings page in the Arize platform. In addition,
  you'll need to specify the model ID, an unique name to identify your model in the Arize platform. Optionally, you can set the model version, which serves to
  to group a subset of data, given the same model ID, to compare and track changes.
  ```python
  register_otel(
      endpoints = Endpoints.ARIZE,
      space_id = "your-arize-space-id",
      api_key = "your-arize-api-key",
      model_id = "your-model-id",
      model_version = "your-model-version", # OPTIONAL
  )
  ```

  To send traces to your local Phoenix server you just need to provide the correct endpoint. In the example below we have specified the local Phoenix endpoint,
  but you can specify your own (explained in an example below). Optionally, you can specify a project to send the traces to. A project is a collection of traces that
  are related to a single application or service. You can have multiple projects, each with multiple traces.
  Send traces via HTTP:
  ```python
  register_otel(
      endpoints = Endpoints.LOCAL_PHOENIX_HTTP,
      project_name = "your-project-name", # OPTIONAL
  )
  ```
  Send traces via gRPC:
  ```python
  register_otel(
      endpoints = Endpoints.LOCAL_PHOENIX_GRPC,
      project_name = "your-project-name", # OPTIONAL
  )
  ```

  To send traces to your [Hosted Phoenix](https://docs.arize.com/phoenix/hosted-phoenix), also known as [Llamatrace](https://llamatrace.com/login), you just need to provide the correct endpoint. In the example below we have specified said endpoint, as well as the Phoenix API key required. Optionally, you can specify a project to which to send the traces, exactly as above with a local Phoenix instance.
  ```python
  register_otel(
      endpoints = Endpoints.HOSTED_PHOENIX,
      api_key = "your-hosted-phoenix-api-key",
      project_name = "your-project-name", # OPTIONAL
  )
  ```

  Sending traces to a collector on a custom endpoint is simple, you just need to provide the endpoint. If this endpoint corresponds to an Arize or Phoenix deployment,
  you can add any of the options described in the examples above.
  ```python
  register_otel(
      endpoints = "https://my-custom-endpoint"
      
  )
  ```

  In this example we send traces to the default Arize and Phoenix endpoints, as well as to a third custom one. We also set all the options mentioned until now.
  ```python
  register_otel(
      endpoints = [
          Endpoints.ARIZE,
          Endpoints.PHOENIX_LOCAL,
          "https://my-custom-endpoint",
      ],
      space_id = "your-space-id",
      api_key = "your-api-key",
      model_id = "your-model-id",
      model_version = "your-model-version", # OPTIONAL
      project_name = "your-project-name", # OPTIONAL
  )
  ```

  As you're setting up your tracing, it is helpful to print to console the spans created. You can achieve this by setting `log_to_console=True`.
  ```python
  register_otel(
      
      log_to_console=True
  )
  ```

  We default to using [BatchSpanProcessor](https://opentelemetry.io/docs/languages/js/instrumentation/#picking-the-right-span-processor) from OpenTelemetry because it is non-blocking in case telemetry goes down. In contrast, "SimpleSpanProcessor processes spans as they are created." This can be helpful in development. You can use `SimpleSpanProcessor` with the option `use_batch_processor=False`.
  ```python
  register_otel(
      
      use_batch_processor=False
  )
  ```

  Find us in our [Slack Community](https://join.slack.com/t/arize-ai/shared_invite/zt-1px8dcmlf-fmThhDFD_V_48oU7ALan4Q) or email support@arize.com

  Copyright 2024 Arize AI, Inc. All Rights Reserved.
  This software is licensed under the terms of the 3-Clause BSD License. See [LICENSE](https://github.com/Arize-ai/arize-otel-python/blob/main/LICENSE).


pkgId: 1235a10b6fed3c2510bfd6730cde694df3eea832ce19ee86691583f27e8dc980
name: python-arize-phoenix
arch: src
version: 5.12.0
epoch: 0
release: 1
summary: AI Observability and Evaluation
url: https://pypi.org/project/arize-phoenix/
rpm_license: Elastic-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arize-phoenix-5.12.0-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
      <a target="_blank" href="https://phoenix.arize.com" style="background:none">
          <img alt="phoenix banner" src="https://github.com/Arize-ai/phoenix-assets/blob/main/images/socal/github-large-banner-phoenix.jpg?raw=true" width="auto" height="auto"></img>
      </a>
      <br/>
      <br/>
      <a href="https://docs.arize.com/phoenix/">
          <img src="https://img.shields.io/static/v1?message=Docs&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAG4ElEQVR4nO2d4XHjNhCFcTf+b3ZgdWCmgmMqOKUC0xXYrsBOBVEqsFRB7ApCVRCygrMriFQBM7h5mNlwKBECARLg7jeDscamSQj7sFgsQfBL27ZK4MtXsT1vRADMEQEwRwTAHBEAc0QAzBEBMEcEwBwRAHNEAMwRATBnjAByFGE+MqVUMcYOY24GVUqpb/h8VErVKAf87QNFcEcbd4WSw+D6803njHscO5sATmGEURGBiCj6yUlv1uX2gv91FsDViArbcA2RUKF8QhAV8RQc0b15DcOt0VaTE1oAfWj3dYdCBfGGsmSM0XX5HsP3nEMAXbqCeCdiOERQPx9og5exGJ0S4zRQN9KrUupfpdQWjZciure/YIj7K0bjqwTyAHdovA805iqCOg2xgnB1nZ97IvaoSCURdIPG/IHGjTH/YAz/A8KdJai7lBQzgbpx/0Hg6DT18UzWMXxSjMkDrElPNEmKfAbl6znwI3IMU/OCa0/1nfckwWaSbvWYYDnEsvCMJDNckhqu7GCMKWYOBXp9yPGd5kvqUAKf6rkAk7M2SY9QDXdEr9wEOr9x96EiejMFnixBNteDISsyNw7hHRqc22evWcP4vt39O85bzZH30AKg4+eo8cQRI4bHAJ7hyYM3CNHrG9RrimSXuZmUkZjN/O6nAPpcwCcJNmipAle2QM/1GU3vITCXhvY91u9geN/jOY27VuTnYL1PCeAcRhwh7/Bl8Ai+IuxPiOCShtfX/sPDtY8w+sZjby86dw6dBeoigD7obd/Ko6fI4BF8DA9HnGdrcU0fLt+n4dfE6H5jpjYcVdu2L23b5lpjHoo+18FDbcszddF1rUee/4C6ZiO+80rHZmjDoIQUQLdRtm3brkcKIUPjjqVPBIUHgW1GGN4YfawAL2IqAVB8iEE31tvIelARlCPPVaFOLoIupzY6xVcM4MoRUyHXyHhslH6PaPl5RP1Lh4UsOeKR2e8dzC0Aiuvc2Nx3fwhfxf/hknouUYbWUk5GTAIwmOh5e+H0cor8vEL91hfOdEqINLq1AV+RKImJ6869f9tFIBVc6y7gd3lHfWyNX0LEr7EuDElhRdAlQjig0e/RU31xxDltM4pF7IY3pLIgxAhhgzF/iC2M0Hi4dkOGlyGMd/g7dsMbUlsR9ICe9WhxbA3DjRkSdjiHzQzlBSKNJsCzIcUlYdfI0dcWS8LMkPDkcJ0n/O+Qyy/IAtDkSPnp4Fu4WpthQR/zm2VcoI/51fI28iYld9/HEh4Pf7D0Bm845pwIPnHMUJSf45pT5x68s5T9AW6INzhHDeP1BYcNMew5SghkinWOwVnaBhHGG5ybMn70zBDe8buh8X6DqV0Sa/5tWOIOIbcWQ8KBiGBnMb/P0OuTd/lddCrY5jn/VLm3nL+fY4X4YREuv8vS9wh6HSkAExMs0viKySZRd44iyOH2FzPe98Fll7A7GNMmjay4GF9BAKGXesfCN0sRsDG+YrhP4O2ACFgZXzHdKPL2RMJoxc34ivFOod3AMMNUj5XxFfOtYrUIXvB5MandS+G+V/AzZ+MrEcBPlpoFtUIEwBwRAG+OIgDe1CIA5ogAmCMCYI4IgDkiAOaIAJgjAmCOCIA5IgDmiACYIwJgjgiAOSIA5ogAmCMCYI4IgDkiAOaIAJgjAmCOCIA5IgDmiACYIwJgjgiAOSIA5ogAmCMCYI4IgDkiAOaIAJgjAmDOVYBXvwvxQV8NWJOd0esvJ94babZaz7B5ovldxnlDpYhp0JFr/KTlLKcEMMQKpcDPXIQxGXsYmhZnXAXQh/EWBQrr3bc80mATyyrEvs4+BdBHgbdxFOIhrDkSg1/6Iu2LCS0AyoqI4ftUF00EY/Q3h1fRj2JKAVCMGErmnsH1lfnemEsAlByvgl0z2qx5B8OPCuB8EIMADBlEEOV79j1whNE3c/X2PmISAGUNr7CEmUSUhjfEKgBDAY+QohCiNrwhdgEYzPv7UxkadvBg0RrekMrNoAozh3vLN4DPhc7S/WL52vkoSO1u4BZC+DOCulC0KJ/gqWaP7C8hlSGgjxyCmDuPsEePT/KuasrrAcyr4H+f6fq01yd7Sz1lD0CZ2hs06PVJufs+lrIiyLwufjfBtXYpjvWnWIoHoJSYe4dIK/t4HX1ULFEACkPCm8e8wXFJvZ6y1EWhJkDcWxw7RINzLc74auGrgg8e4oIm9Sh/CA7LwkvHqaIJ9pLI6Lmy1BigDy2EV8tjdzh+8XB6MGSLKH4INsZXDJ8MGhIBK+Mrpo+GnRIBO+MrZjFAFxoTNBwCvj6u4qvSZJiM3iNX4yvmHoA9Sh4PF0QAzBEBMEcEwBwRAHNEAMwRAXBGKfUfr5hKvglRfO4AAAAASUVORK5CYII=&labelColor=grey&color=blue&logoColor=white&label=%20"/>
      </a>
      <a target="_blank" href="https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw">
          <img src="https://img.shields.io/static/v1?message=Community&logo=slack&labelColor=grey&color=blue&logoColor=white&label=%20"/>
      </a>
      <a target="_blank" href="https://twitter.com/ArizePhoenix">
          <img src="https://img.shields.io/badge/-ArizePhoenix-blue.svg?color=blue&labelColor=gray&logo=twitter">
      </a>
      <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
          <img src="https://img.shields.io/pypi/v/arize-phoenix?color=blue">
      </a>
      <a target="_blank" href="https://anaconda.org/conda-forge/arize-phoenix">
          <img src="https://img.shields.io/conda/vn/conda-forge/arize-phoenix.svg?color=blue">
      </a>
      <a target="_blank" href="https://pypi.org/project/arize-phoenix/">
          <img src="https://img.shields.io/pypi/pyversions/arize-phoenix">
      </a>
      <a target="_blank" href="https://hub.docker.com/r/arizephoenix/phoenix/tags">
          <img src="https://img.shields.io/docker/v/arizephoenix/phoenix?sort=semver&logo=docker&label=image&color=blue">
      </a>
  </p>

  Phoenix is an open-source AI observability platform designed for experimentation, evaluation, and troubleshooting. It provides:

  - [**_Tracing_**](https://docs.arize.com/phoenix/tracing/integrations-tracing/llm-traces) - Trace your LLM application's runtime using OpenTelemetry-based instrumentation.
  - [**_Evaluation_**](https://docs.arize.com/phoenix/evaluation/llm-evals) - Leverage LLMs to benchmark your application's performance using response and retrieval evals.
  - [**_Datasets_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets) - Create versioned datasets of examples for experimentation, evaluation, and fine-tuning.
  - [**_Experiments_**](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets#experiments) - Track and evaluate changes to prompts, LLMs, and retrieval.

  Phoenix is vendor and language agnostic with out-of-the-box support for popular frameworks (🦙[LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/llamaindex), 🦜⛓[LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/langchain), [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/haystack), 🧩[DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/dspy)) and LLM providers ([OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/openai), [Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/bedrock), [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/mistralai), [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/vertexai), [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/integrations-tracing/litellm), and more). For details on auto-instrumentation, check out the [OpenInference](https://github.com/Arize-ai/openinference) project.

  Phoenix runs practically anywhere, including your Jupyter notebook, local machine, containerized deployment, or in the cloud.

  <img alt="phoenix_overview.gif" width="100%" src="https://github.com/Arize-ai/phoenix-assets/blob/main/gifs/phoenix_overview.gif?raw=true">



  Install Phoenix via `pip` or `conda`

  ```shell
  pip install arize-phoenix
  ```

  Phoenix container images are available via [Docker Hub](https://hub.docker.com/r/arizephoenix/phoenix) and can be deployed using Docker or Kubernetes.



  | Key Features                                                                                                     | Availability   |
  | ---------------------------------------------------------------------------------------------------------------- | -------------- |
  | [Tracing](https://docs.arize.com/phoenix/tracing/concepts-tracing/what-are-traces)                               | ✅             |
  | [Evaluation](https://docs.arize.com/phoenix/evaluation/llm-evals)                                                | ✅             |
  | [Retrieval (RAG) Analysis](https://docs.arize.com/phoenix/tracing/use-cases-tracing/rag-evaluation)              | ✅             |
  | [Datasets](https://docs.arize.com/phoenix/datasets-and-experiments/overview-datasets)                            | ✅             |
  | [Fine-Tuning Export](https://docs.arize.com/phoenix/datasets-and-experiments/how-to-datasets/exporting-datasets) | ✅             |
  | [Annotations](https://docs.arize.com/phoenix/tracing/concepts-tracing/how-to-annotate-traces)                    | ✅             |
  | [Human Feedback](https://docs.arize.com/phoenix/tracing/how-to-tracing/capture-feedback)                         | ✅             |
  | [Experiments](https://docs.arize.com/phoenix/datasets-and-experiments/how-to-experiments/run-experiments)        | ✅             |
  | [Embeddings Analysis](https://docs.arize.com/phoenix/inferences/phoenix-inferences)                              | ✅             |
  | [Data Export](https://docs.arize.com/phoenix/tracing/how-to-tracing/extract-data-from-spans)                     | ✅             |
  | REST API                                                                                                         | ✅             |
  | GraphQL API                                                                                                      | ✅             |
  | Data Retention                                                                                                   | Customizable   |
  | Authentication                                                                                                   | ✅             |
  | Social Login                                                                                                     | ✅             |
  | RBAC                                                                                                             | ✅             |
  | Projects                                                                                                         | ✅             |
  | [Self-Hosting](https://docs.arize.com/phoenix/deployment)                                                        | ✅             |
  | Jupyter Notebooks                                                                                                | ✅             |
  | [Sessions](https://github.com/Arize-ai/phoenix/issues/2619)                                                      | In Progress 🚧 |
  | [Prompt Playground](https://github.com/Arize-ai/phoenix/issues/3435)                                             | In Progress 🚧 |
  | Prompt Management                                                                                                | Coming soon ⏱️ |



  Phoenix is built on top of OpenTelemetry and is vendor, language, and framework agnostic.

  **Python**
  | Integration | Package | Version Badge |
  |------------------|-----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|
  | [OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai) | `openinference-instrumentation-openai` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-openai.svg)](https://pypi.python.org/pypi/openinference-instrumentation-openai) |
  | [LlamaIndex](https://docs.arize.com/phoenix/tracing/integrations-tracing/llamaindex) | `openinference-instrumentation-llama-index` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-llama-index.svg)](https://pypi.python.org/pypi/openinference-instrumentation-llama-index) |
  | [DSPy](https://docs.arize.com/phoenix/tracing/integrations-tracing/dspy) | `openinference-instrumentation-dspy` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-dspy.svg)](https://pypi.python.org/pypi/openinference-instrumentation-dspy) |
  | [AWS Bedrock](https://docs.arize.com/phoenix/tracing/integrations-tracing/bedrock) | `openinference-instrumentation-bedrock` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-bedrock.svg)](https://pypi.python.org/pypi/openinference-instrumentation-bedrock) |
  | [LangChain](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain) | `openinference-instrumentation-langchain` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-langchain.svg)](https://pypi.python.org/pypi/openinference-instrumentation-langchain) |
  | [MistralAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/mistralai) | `openinference-instrumentation-mistralai` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-mistralai.svg)](https://pypi.python.org/pypi/openinference-instrumentation-mistralai) |
  | [Guardrails](https://docs.arize.com/phoenix/tracing/integrations-tracing/guardrails) | `openinference-instrumentation-guardrails` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-guardrails.svg)](https://pypi.python.org/pypi/openinference-instrumentation-guardrails) |
  | [VertexAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/vertexai) | `openinference-instrumentation-vertexai` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-vertexai.svg)](https://pypi.python.org/pypi/openinference-instrumentation-vertexai) |
  | [CrewAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/crewai) | `openinference-instrumentation-crewai` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-crewai.svg)](https://pypi.python.org/pypi/openinference-instrumentation-crewai) |
  | [Haystack](https://docs.arize.com/phoenix/tracing/integrations-tracing/haystack) | `openinference-instrumentation-haystack` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-haystack.svg)](https://pypi.python.org/pypi/openinference-instrumentation-haystack) |
  | [LiteLLM](https://docs.arize.com/phoenix/tracing/integrations-tracing/litellm) | `openinference-instrumentation-litellm` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-litellm.svg)](https://pypi.python.org/pypi/openinference-instrumentation-litellm) |
  | [Groq](https://docs.arize.com/phoenix/tracing/integrations-tracing/groq) | `openinference-instrumentation-groq` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-groq.svg)](https://pypi.python.org/pypi/openinference-instrumentation-groq) |
  | [Instructor](https://docs.arize.com/phoenix/tracing/integrations-tracing/instructor) | `openinference-instrumentation-instructor` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-instructor.svg)](https://pypi.python.org/pypi/openinference-instrumentation-instructor) |
  | [Anthropic](https://docs.arize.com/phoenix/tracing/integrations-tracing/anthropic) | `openinference-instrumentation-anthropic` | [![PyPI Version](https://img.shields.io/pypi/v/openinference-instrumentation-anthropic.svg)](https://pypi.python.org/pypi/openinference-instrumentation-anthropic) |



  | Integration                                                                                | Package                                            | Version Badge                                                                                                                                                                       |
  | ------------------------------------------------------------------------------------------ | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | [OpenAI](https://docs.arize.com/phoenix/tracing/integrations-tracing/openai-node-sdk)      | `@arizeai/openinference-instrumentation-openai`    | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-instrumentation-openai.svg)](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-openai)       |
  | [LangChain.js](https://docs.arize.com/phoenix/tracing/integrations-tracing/langchain.js)   | `@arizeai/openinference-instrumentation-langchain` | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-instrumentation-langchain.svg)](https://www.npmjs.com/package/@arizeai/openinference-instrumentation-langchain) |
  | [Vercel AI SDK](https://docs.arize.com/phoenix/tracing/integrations-tracing/vercel-ai-sdk) | `@arizeai/openinference-vercel`                    | [![NPM Version](https://img.shields.io/npm/v/@arizeai/openinference-vercel)](https://www.npmjs.com/package/@arizeai/openinference-vercel)                                           |

  For details about tracing integrations and example applications, see the [OpenInference](https://github.com/Arize-ai/openinference) project.



  Join our community to connect with thousands of AI builders.

  - 🌍 Join our [Slack community](https://join.slack.com/t/arize-ai/shared_invite/zt-22vj03k4k-MlrNEwv5WeswapTs0kNCBw).
  - 📚 Read our [documentation](https://docs.arize.com/phoenix).
  - 💡 Ask questions and provide feedback in the _#phoenix-support_ channel.
  - 🌟 Leave a star on our [GitHub](https://github.com/Arize-ai/phoenix).
  - 🐞 Report bugs with [GitHub Issues](https://github.com/Arize-ai/phoenix/issues).
  - 𝕏 Follow us on [𝕏](https://twitter.com/ArizePhoenix).
  - 💌️ Sign up for our [mailing list](https://phoenix.arize.com/#updates).
  - 🗺️ Check out our [roadmap](https://github.com/orgs/Arize-ai/projects/45) to see where we're heading next.



  See the [migration guide](./MIGRATION.md) for a list of breaking changes.



  Copyright 2024 Arize AI, Inc. All Rights Reserved.

  Portions of this code are patent protected by one or more U.S. Patents. See [IP_NOTICE](https://github.com/Arize-ai/phoenix/blob/main/IP_NOTICE).

  This software is licensed under the terms of the Elastic License 2.0 (ELv2). See [LICENSE](https://github.com/Arize-ai/phoenix/blob/main/LICENSE).


pkgId: 70535538c2cc944bdb6646416fe38f2cae8bc1126f53063c7ecde567c1ccb1ae
name: python-arize-phoenix-evals
arch: src
version: 0.17.3
epoch: 0
release: 1
summary: LLM Evaluations
url: https://pypi.org/project/arize-phoenix-evals/
rpm_license: Elastic-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arize-phoenix-evals-0.17.3-1.src.rpm
checksum_type: sha256
description:
  Phoenix provides tooling to evaluate LLM applications, including tools to determine the relevance or irrelevance of documents retrieved by retrieval-augmented generation (RAG) application, whether or not the response is toxic, and much more.

  Phoenix's approach to LLM evals is notable for the following reasons:

  -   Includes pre-tested templates and convenience functions for a set of common Eval “tasks”
  -   Data science rigor applied to the testing of model and template combinations
  -   Designed to run as fast as possible on batches of data
  -   Includes benchmark datasets and tests for each eval function



  Install the arize-phoenix sub-package via `pip`

  ```shell
  pip install arize-phoenix-evals
  ```

  Note you will also have to install the LLM vendor SDK you would like to use with LLM Evals. For example, to use OpenAI's GPT-4, you will need to install the OpenAI Python SDK:

  ```shell
  pip install 'openai>=1.0.0'
  ```



  Here is an example of running the RAG relevance eval on a dataset of Wikipedia questions and answers:

  ```python
  import os
  from phoenix.evals import (
      RAG_RELEVANCY_PROMPT_TEMPLATE,
      RAG_RELEVANCY_PROMPT_RAILS_MAP,
      OpenAIModel,
      download_benchmark_dataset,
      llm_classify,
  )
  from sklearn.metrics import precision_recall_fscore_support, confusion_matrix, ConfusionMatrixDisplay

  os.environ["OPENAI_API_KEY"] = "<your-openai-key>"


  df = download_benchmark_dataset(
      task="binary-relevance-classification", dataset_name="wiki_qa-train"
  )

  df = df.sample(100)
  df = df.rename(
      columns={
          "query_text": "input",
          "document_text": "reference",
      },
  )
  model = OpenAIModel(
      model="gpt-4",
      temperature=0.0,
  )


  rails =list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values())
  df[["eval_relevance"]] = llm_classify(df, model, RAG_RELEVANCY_PROMPT_TEMPLATE, rails)


  y_true = df["relevant"].map({True: "relevant", False: "irrelevant"})
  y_pred = df["eval_relevance"]


  precision, recall, f1, support = precision_recall_fscore_support(y_true, y_pred)
  ```

  To learn more about LLM Evals, see the [LLM Evals documentation](https://docs.arize.com/phoenix/concepts/llm-evals/).


pkgId: 090ca34dc5f41368e088b19c5061ed8292c5d977ed89892ab0e6e5f21292ba77
name: python-arize-phoenix-otel
arch: src
version: 0.5.1
epoch: 0
release: 1
summary: LLM Observability
url: https://pypi.org/project/arize-phoenix-otel/
rpm_license: Elastic-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arize-phoenix-otel-0.5.1-1.src.rpm
checksum_type: sha256
description:
  Provides a lightweight wrapper around OpenTelemetry primitives with Phoenix-aware defaults.

  These defaults are aware of environment variables you may have set to configure Phoenix:
  - `PHOENIX_COLLECTOR_ENDPOINT`
  - `PHOENIX_PROJECT_NAME`
  - `PHOENIX_CLIENT_HEADERS`
  - `PHOENIX_API_KEY`



  The `phoenix.otel` module provides a high-level `register` function to configure OpenTelemetry
  tracing by setting a global `TracerProvider`. The register function can also configure headers
  and whether or not to process spans one by one or by batch.




  ```
  from phoenix.otel import register
  tracer_provider = register()
  ```

  This is all you need to get started using OTel with Phoenix! `register` defaults to sending spans
  to an endpoint at `http://localhost` using gRPC.



  If the `PHOENIX_API_KEY` environment variable is set, `register` will automatically add an
  `authorization` header to each span payload.



  There are two ways to configure the collector endpoint:
  - Using environment variables
  - Using the `endpoint` keyword argument



  If you're setting the `PHOENIX_COLLECTOR_ENDPOINT` environment variable, `register` will
  automatically try to send spans to your Phoenix server using gRPC.

  ```


  from phoenix.otel import register
  tracer_provider = register()
  ```



  When passing in the `endpoint` argument, **you must specify the fully qualified endpoint**. For
  example, in order to export spans via HTTP to localhost, use Pheonix's HTTP collector endpoint:
  `http://localhost:6006/v1/traces`. The gRPC endpoint is different: `http://localhost:4317`.

  ```
  from phoenix.otel import register
  tracer_provider = register(endpoint="http://localhost:6006/v1/traces")
  ```



  `register` can be configured with different keyword arguments:
  - `project_name`: The Phoenix project name (or `PHOENIX_PROJECT_NAME` env. var)
  - `headers`: Headers to send along with each span payload (or `PHOENIX_CLIENT_HEADERS` env. var)
  - `batch`: Whether or not to process spans in batch

  ```
  from phoenix.otel import register
  tracer_provider = register(
      project_name="otel-test", headers={"Authorization": "Bearer TOKEN"}, batch=True
  )
  ```



  For more granular tracing configuration, these wrappers can be used as drop-in replacements for
  OTel primitives:

  ```
  from opentelemetry import trace as trace_api
  from phoenix.otel import HTTPSpanExporter, TracerProvider, SimpleSpanProcessor

  tracer_provider = TracerProvider()
  span_exporter = HTTPSpanExporter(endpoint="http://localhost:6006/v1/traces")
  span_processor = SimpleSpanProcessor(span_exporter=span_exporter)
  tracer_provider.add_span_processor(span_processor)
  trace_api.set_tracer_provider(tracer_provider)
  ```

  Wrappers have Phoenix-aware defaults to greatly simplify the OTel configuration process. A special
  `endpoint` keyword argument can be passed to either a `TracerProvider`, `SimpleSpanProcessor` or
  `BatchSpanProcessor` in order to automatically infer which `SpanExporter` to use to simplify setup.



  ```


  from opentelemetry import trace as trace_api
  from phoenix.otel import TracerProvider

  tracer_provider = TracerProvider()
  trace_api.set_tracer_provider(tracer_provider)
  ```



  ```
  from opentelemetry import trace as trace_api
  from phoenix.otel import TracerProvider

  tracer_provider = TracerProvider(endpoint="http://localhost:4317")
  trace_api.set_tracer_provider(tracer_provider)
  ```



  Users can gradually add OTel components as desired:



  ```


  from opentelemetry import trace as trace_api
  from phoenix.otel import Resource, PROJECT_NAME, TracerProvider

  tracer_provider = TracerProvider(resource=Resource({PROJECT_NAME: "my-project"}))
  trace_api.set_tracer_provider(tracer_provider)
  ```



  ```


  from opentelemetry import trace as trace_api
  from phoenix.otel import TracerProvider, BatchSpanProcessor

  tracer_provider = TracerProvider()
  batch_processor = BatchSpanProcessor()
  tracer_provider.add_span_processor(batch_processor)
  ```



  ```
  from opentelemetry import trace as trace_api
  from phoenix.otel import TracerProvider, BatchSpanProcessor, GRPCSpanExporter

  tracer_provider = TracerProvider()
  batch_processor = BatchSpanProcessor(
      span_exporter=GRPCSpanExporter(endpoint="http://custom-endpoint.com:6789")
  )
  tracer_provider.add_span_processor(batch_processor)
  ```


pkgId: 7ed643f6f565d7f23a00af312f3a17d3032d535de9b4f19879451b029d87f899
name: python-arjun
arch: src
version: 2.2.6
epoch: 0
release: 1
summary: HTTP parameter discovery suite
url: https://github.com/s0md3v/Arjun
rpm_license: GNU General Public License v3 (GPLv3)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arjun-2.2.6-1.src.rpm
checksum_type: sha256
description:
  <h1 align="center">
    <br>
    <a href="https://github.com/s0md3v/Arjun"><img src="https://image.ibb.co/c618nq/arjun.png" alt="Arjun"></a>
    <br>
    Arjun
    <br>
  </h1>

  <h4 align="center">HTTP Parameter Discovery Suite</h4>

  <p align="center">
    <a href="https://github.com/s0md3v/Arjun/releases">
      <img src="https://img.shields.io/github/release/s0md3v/Arjun.svg">
    </a>
    <a href="https://pypi.python.org/pypi/arjun/">
      <img src="https://img.shields.io/pypi/v/arjun.svg">
    </a>
    <a href="https://github.com/s0md3v/Arjun/issues?q=is%3Aissue+is%3Aclosed">
        <img src="https://img.shields.io/github/issues-closed-raw/s0md3v/Arjun?color=dark-green&label=issues%20fixed">
    </a>
    <a href="https://travis-ci.com/s0md3v/Arjun">
        <img src="https://img.shields.io/travis/com/s0md3v/Arjun.svg?color=dark-green&label=tests">
    </a>
  </p>

  ![demo](https://i.ibb.co/p3VKSRJ/arjun-demo.png)



  Arjun can find query parameters for URL endpoints. If you don't get what that means, it's okay, read along.

  Web applications use parameters (or queries) to accept user input, take the following example into consideration

  `http://api.example.com/v1/userinfo?id=751634589`

  This URL seems to load user information for a specific user id, but what if there exists a parameter named `admin` which when set to `True` makes the endpoint provide more information about the user?\
  This is what Arjun does, it finds valid HTTP parameters with a huge default dictionary of 25,890 parameter names.

  The best part? It takes less than 10 seconds to go through this huge list while making just 50-60 requests to the target. [Here's how](https://github.com/s0md3v/Arjun/wiki/How-Arjun-works%3F).



  - Supports `GET/POST/POST-JSON/POST-XML` requests
  - Automatically handles rate limits and timeouts
  - Export results to: BurpSuite, text or JSON file
  - Import targets from: BurpSuite, text file or a raw request file
  - Can passively extract parameters from JS or 3 external sources




  You can install `arjun` with pip as following:
  ```
  pip3 install arjun
  ```

  or, by downloading this repository and running
  ```
  python3 setup.py install
  ```



  A detailed usage guide is available on [Usage](https://github.com/s0md3v/Arjun/wiki/Usage) section of the Wiki.

  Direct links to some basic options are given below:

  - [Scan a single URL](https://github.com/s0md3v/Arjun/wiki/Usage#scan-a-single-url)
  - [Import targets](https://github.com/s0md3v/Arjun/wiki/Usage#import-multiple-targets)
  - [Export results](https://github.com/s0md3v/Arjun/wiki/Usage#save-output-to-a-file)
  - [Use custom HTTP headers](https://github.com/s0md3v/Arjun/wiki/Usage#use-custom-http-headers)

  Optionally, you can use the `--help` argument to explore Arjun on your own.


  The parameter names wordlist is created by extracting top parameter names from [CommonCrawl](http://commoncrawl.org) dataset and merging best words from [SecLists](https://github.com/danielmiessler/SecLists) and [param-miner](https://github.com/PortSwigger/param-miner) wordlists into that.\
  `db/special.json` wordlist is taken from [data-payloads](https://github.com/yehgdotnet/data-payloads).


pkgId: 37caaa88238bf54ca04e913fc5d64e1d47f353ee76c22ebabee09ed971c492b6
name: python-arjuna
arch: src
version: 1.2.24
epoch: 0
release: 1
summary: Arjuna is a Python based test automation framework developed by Rahul Verma (www.rahulverma.net).
url: https://rahulverma.net
rpm_license: Apache License, Version 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arjuna-1.2.24-1.src.rpm
checksum_type: sha256
description:
  ![Arjuna](https://github.com/rahul-verma/arjuna/blob/master/Arjuna.png)

  Arjuna is a **Python based test automation framework** developed by [Rahul Verma](www.rahulverma.net). It is an open source, Apache Licensed software.

  Rahul has implemented smaller variants of features in Arjuna across frameworks and organizations, or given advise around it. However Arjuna being a generic library has the most complete implementation of his ideas, away from project specific contexts and constraints.

  For test execution, Arjuna is implemented as a **[pytest](https://docs.pytest.org/en/latest/)** plugin and provides its own markup over pytest as its underlying test engine. If you like, you can make use of Arjuna with any other test engine or custom frameworks as well.

  You'd need **Python 3.8+** to make use of Arjuna.

  Note: On Linux, the built-in Python3 build has issues with the Python's built-in enum module which is heavily used in Arjuna. One alternative is to install ActiveState Python on linux. Advanced users can go for installing a custom Python build.


  Arjuna documentation is integated with ReadTheDocs.

  * Documentation for the **[last released version](https://arjuna-taf.readthedocs.io/en/stable/index.html)**
      * Release build goes through the existing tests and hence is better for production use than master branch.
  * Documentation for the **[latest master branch](https://arjuna-taf.readthedocs.io)**
      * Please note that the master branch is an active branch and can have untested code.
      * Contains the latest and greatest upcoming features and updates to existing ones.


pkgId: 7c2cde54bce34a9f5c5451a92c2ab6fa1c1ab9d56d6436ab46e4c8f847c478fa
name: python-ark
arch: src
version: 7.7.0
epoch: 0
release: 1
summary: A static website generator for people who enjoy the simpler things in life.
url: https://github.com/dmulholl/ark
rpm_license: Public Domain
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ark-7.7.0-1.src.rpm
checksum_type: sha256
description:
  A static website generator for people who enjoy the simpler things in life.

  * `Github <https://github.com/dmulholl/ark>`_
  * `Documentation <http://www.dmulholl.com/docs/ark/master/>`_
  * `Demo <http://www.dmulholl.com/demos/ark/>`_


pkgId: 83b8cf29d8108ff8372afa16b6179a2a079d406f4df7df0778b1df6b339bca46
name: python-ark-analysis
arch: src
version: 0.7.2
epoch: 0
release: 1
summary: Toolbox for analysis on segmented images from MIBI.
url: https://pypi.org/project/ark-analysis/
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ark-analysis-0.7.2-1.src.rpm
checksum_type: sha256
description:
  <div align="center">

  |         |                                                                                                                            |
  | ------- | -------------------------------------------------------------------------------------------------------------------------- |
  | Status  | [![CI][badge-ci]][link-badge-ci] [![Docs][badge-docs]][link-badge-docs] [![Coverage][badge-coverage]][link-badge-coverage] |
  | Package | [![PyPI - Version][badge-pypi]][link-badge-pypi] [![PyPI - Python Version][badge-python-versions]][link-badge-pypi]        |
  | Meta    | [![License][badge-license]][link-badge-license] [![uv][badge-uv]][link-uv]                                                 |

  <!-- Badges -->

  <!-- Status -->
  [badge-ci]: https://github.com/angelolab/ark-analysis/actions/workflows/ci.yml/badge.svg
  [badge-docs]: https://img.shields.io/readthedocs/ark-analysis?logo=readthedocs
  [badge-coverage]: https://img.shields.io/coverallsCoverage/github/angelolab/ark-analysis?logo=coveralls
  <!-- Package -->
  [badge-pypi]: https://img.shields.io/pypi/v/ark-analysis.svg?logo=pypi&label=PyPI&logoColor=gold
  [badge-python-versions]: https://img.shields.io/pypi/pyversions/ark-analysis.svg?logo=python&label=Python&logoColor=gold
  <!-- Meta / License -->
  [badge-license]: https://img.shields.io/badge/License-MIT-yellow.svg
  [badge-uv]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json
  </div>

  Toolbox for analyzing multiplexed imaging data.

  Full documentation for the project can be found [here](https://ark-analysis.readthedocs.io/en/latest/).


  - [Pipeline Flowchart](#pipeline-flowchart)
  - [Getting Started](#getting-started)
    - [Overview](#overview)
      - [1. Segmentation](#1-segmentation)
      - [2. Pixel clustering with Pixie](#2-pixel-clustering-with-pixie)
      - [3. Cell clustering with Pixie](#3-cell-clustering-with-pixie)
      - [4. Post clustering tasks](#4-post-clustering-tasks)
      - [5. Spatial analysis](#5-spatial-analysis)
    - [Installation Steps.](#installation-steps)
      - [Download the Repo](#download-the-repo)
      - [Running on Windows](#running-on-windows)
      - [Using the Repository](#using-the-repository)
      - [Updating the repo](#updating-the-repo)
  - [External Tools](#external-tools)
    - [Mantis Viewer](#mantis-viewer)
      - [Mantis directory structure](#mantis-directory-structure)
      - [Loading image-specific files](#loading-image-specific-files)
      - [Loading project-wide files](#loading-project-wide-files)
      - [View cell features](#view-cell-features)
    - [External Hard Drives and Google File Stream](#external-hard-drives-and-google-file-stream)
  - [Updating the Repository](#updating-the-repository)
  - [Example Dataset](#example-dataset)
  - [Questions?](#questions)
  - [Want to contribute?](#want-to-contribute)
  - [How to Cite](#how-to-cite)




  ![](docs/_images/ark_processing.png)




  This repo contains tools for analyzing multiplexed imaging data. The assumption is that you've already performed any necessary image processing on your data (such as denoising, background subtraction, autofluorescence correction, etc), and that it is ready to be analyzed. For MIBI data, we recommend using the [toffy](https://github.com/angelolab/toffy) processing pipeline.

  We have recorded workshop talks which complement the repository. [MIBI Workshop Playlist](https://youtube.com/playlist?list=PLjNbkEm4vA26o5YvWKeyHXF8HjTJc7yB0).


  The [**segmentation notebook**](./templates/1_Segment_Image_Data.ipynb) will walk you through the process of using [Mesmer](https://www.nature.com/articles/s41587-021-01094-0) to segment your image data. This includes selecting the appropriate channel(s) for segmentation, running your data through the network, and then extracting single-cell statistics from the resulting segmentation mask. [Workshop Talk - Session V - Part 1: Segmentation](https://youtu.be/4_AJxrxPYlk?t=231)
    - *Note:* It is assumed that the cell table uses the default column names as in `ark/settings.py`. Refer to the [docs](docs/_rtd/data_types.md) to get descriptions of the cell table columns, and methods to adjust them if necessary.
    - If you plan to segment out non-traditional cellular structures such as protein aggregates or cytoplasmic projections often found in brain cells (e.g. microglia, astrocytes, and neuropil), try out the companion notebook [**ezSegmenter**](./templates/ez_segmenter.ipynb) either as a stand-alone or in combination with the above standard cell segmentation process.


  The first step in the [Pixie](https://doi.org/10.1038/s41467-023-40068-5) pipeline is to run the [**pixel clustering notebook**](./templates/2_Pixie_Cluster_Pixels.ipynb). The notebook walks you through the process of generating pixel clusters for your data, and lets you specify what markers to use for the clustering, train a model, use it to classify your entire dataset, and generate pixel cluster overlays. The notebook includes a GUI for manual cluster adjustment and annotation. [Workshop Talk - Session IV - Pixel Level Analysis](https://youtu.be/e7C1NvaPLaY)


  The second step in the [Pixie](https://doi.org/10.1038/s41467-023-40068-5) pipeline is to run the [**cell clustering notebook**](./templates/3_Pixie_Cluster_Cells.ipynb). This notebook will use the pixel clusters generated in the first notebook to cluster the cells in your dataset. The notebook walks you through generating cell clusters for your data and generates cell cluster overlays. The notebook includes a GUI for manual cluster adjustment and annotation. [Workshop Talk - Session V - Cell-level Analysis - Part 2: Cell Clustering](https://youtu.be/4_AJxrxPYlk?t=2704)


  After the Pixie Pipeline, the user can inspect and fine tune their results with the [**post clustering notebook**](./templates/4_Post_Clustering.ipynb). This notebook will go over cleaning up artifacts left from clustering, and working with functional markers.


  [Workshop Talk - Session VI - Spatial Analysis - Part 1: Choosing the Right Analysis Tool](https://youtu.be/HQAkS7kbzH8).

    1. **Pairwise Enrichment Analysis**

       The [**pairwise enrichment notebook**](templates/example_pairwise_spatial_enrichment.ipynb) allows the user to investigate the
       interaction between the phenotypes present in their data. In addition users can
       cluster based on phenotypes around a particular feature such as *artery* or *gland*. [Workshop Talk - Session VI - Spatial Analysis - Part 2: Pairwise Spatial Enrichment](https://youtu.be/HQAkS7kbzH8?t=619).

    2. **K-means Neighborhood Analysis**

       The [**neighborhood analysis notebook**](templates/example_neighborhood_analysis_script.ipynb) sheds light on neighborhoods made of micro-environments which consist of a collection of cell phenotypes. [Workshop Talk - Session VI - Spatial Analysis - Part 3: K-means Neighborhood Analysis](https://youtu.be/HQAkS7kbzH8?t=2117).

    1. **Spatial LDA**

       The [**preprocessing**](templates/LDA_Preprocessing.ipynb) and [**training / inference**](templates/LDA_Training_and_Inference.ipynb) draws from language analysis, specifically topic modelling. Spatial LDA overlays a probability distribution on cells belonging to a any particular micro-environment. [Workshop Talk - Session VI - Spatial Analysis - Part 4: Spatial LDA](https://youtu.be/HQAkS7kbzH8?t=3087).







  You can install the latest version of `ark` with:

  ```sh
  pip install ark-analysis
  ```

  However, the repository will still need to be cloned if you wish to use the Jupyter Notebooks.



  You can find all the versions available in the [Releases Section](https://github.com/angelolab/ark-analysis/releases).
  Open terminal and navigate to where you want the code stored.


  If you would like to use the latest version of `ark` simply clone the project and create the Conda environment.

  ```sh
  git clone -b v0.7.2 https://github.com/angelolab/ark-analysis.git
  cd ark-analysis
  conda env create -f environment.yml
  ```




  Our repo runs best on Linux-based systems (including MacOS). If you need to run on Windows, please consult our [Windows guide](https://ark-analysis.readthedocs.io/en/latest/_rtd/windows_setup.html) for additional instructions.



  First, activate the `conda` environment inside the root of the `ark-analysis` folder:

  ```sh
  conda activate ark_env
  ```

  Once activated, notebooks can be used via this command for Windows:

  ```sh
  start_jupyter.sh
  ```

  or this command for macOS:

  ```sh
  ./start_jupyter.sh
  ```

  This will automatically open your browser with a link to our Jupyter notebooks.

  Be sure to keep this terminal open.  **Do not exit the terminal or enter `control-c` until you are finished with the notebooks**.

  You can shut down the notebooks and close docker by entering `control-c` in the terminal window.

  **REMEMBER TO DUPLICATE AND RENAME NOTEBOOKS**

  If you didn't change the name of the notebooks within the `templates` folder, they will be overwritten when you decide to update the repo. Read about updating Ark [here](#updating-the-repository)



  The `ark-analysis` repo is constantly being updated. In order to get those changes to your version, you'll need to tell git to update with the following command:

  ```
  git pull
  ```

  After performing the above command, you will sometimes need to update your environment:

  ```shell
  conda remove --name ark_env --all
  conda env create -f environment.yml
  ```

  To update the notebooks, run this command for Windows:

  ```shell
  start_jupyter.sh -u
  ```

  or this command for macOS:

  ```shell
  ./start_jupyter.sh -u
  ```




  [Mantis](https://mantis.parkerici.org/) is a multiplexed image viewer developed by the Parker Institute. It has built in functionality for easily
  viewing multichannel images, creating overlays, and concurrently displaying image features alongisde raw channels. We have found it to be extremely useful for analying the output of our analysis pipeline. There are detailed instructions on
  their [download page](https://github.com/ParkerICI/mantis-viewer/releases) for how to install and use the tool. Below are some details specifically related to how we use it in `ark`. [Workshop Talk - Session V - Cell-level Analysis - Part 3: Assessing Accuracy with Mantis Viewer](https://youtu.be/4_AJxrxPYlk?t=4639).


  Mantis expects image data to have a specific organization in order to display it. It is quite similar to how MIBI data is already stored,
  with a unique folder for each FOV and all channels as individual tifs within that folder. Any notebooks that suggest using Mantis Viewer to inspect results
  will automatically format the data in the format shown below.


  ```sh
  mantis
  │
  ├── fov0
  │   ├── cell_segmentation.tiff
  │   ├── chan0.tiff
  │   ├── chan1.tiff
  │   ├── chan2.tiff
  │   ├── ...
  │   ├── population_mask.csv
  │   └── population_mask.tiff
  ├── fov1
  │   ├── cell_segmentation.tiff
  │   ├── chan0.tiff
  │   ├── chan1.tiff
  │   ├── chan2.tiff
  │   ├── ...
  │   ├── population_mask.csv
  │   └── population_mask.tiff
  └── marker_counts.csv

  ```


  In addition to the images, there are additional files in the directory structure which can be read into mantis.

  `cell_segmentation`: This file contains the predicted segmentation for each cell in the image, and allows mantis to identify individual cells.

  `population_pixel_mask`: This file maps the individual pixel clusters generated by Pixie in the [pixel clustering notebook](link) to the image data.

  `population_cell_mask`: Same as above, but for cell clusters instead of pixel clusters

  These files should be specified when first initializing a project in mantis as indicated below:

  ![](docs/_images/mantis_loading.png)


  When inspecting the output of the clustering notebooks, it is often useful to add project-wide .csv files, such as `marker_counts.csv`. These files contain
  information, such as the average expression of a given marker, across all the cells in the project. Project-wide files can either be loaded at project initialization, as shown below:

  ![](docs/_images/mantis_feature_file.png)

  Or they can be loaded into an existing project via Import -> Segment Features -> For project from CSV



  Once you have loaded the project-wide files into Mantis, you'll need to decide which of the features you want to view.
  Click on `Show Plot Plane` at the bottom right, then select the marker you want to assess. This will then allow you to view
  the cell expression of that marker when you mouse over the cell in Mantis.

  ![](docs/_images/mantis_feature_view.png)



  To configure external hard drive (or google file stream) access, you will have to add this to Dockers file paths in the Preferences menu.

  On Docker for macOS, this can be found in Preferences -> Resources -> File Sharing.  Adding `/Volumes` will allow docker to see external drives

  On Docker for Windows with the WSL2 backend, no paths need to be added.  However, if using the Hyper-V backend, these paths will need to be added as in the macOS case.

  ![](docs/_images/docker_preferences.png)

  Once the path is added, you can run:
  ```
  bash start_docker.sh --external 'path/added/to/preferences'
  ```
  or
  ```
  bash start_docker.sh -e 'path/added/to/preferences'
  ```

  to mount the drive into the virtual `/data/external` path inside the docker.



  This project is still under development, and we are making frequent changes and improvements. If you want to update the version on your computer to have the latest changes, perform the following steps. Otherwise, we recommend waiting for new releases.

  First, get the latest version of the repository.

  ```sh
  git pull
  ```

  Then, run the command below to update the Jupyter notebooks to the latest version
  ```sh
  ./start_docker.sh --update
  ```
  or
  ```sh
  ./start_docker.sh -u
  ```

  If you have made changes to these notebooks that you would like to keep (specific file paths, settings, custom routines, etc), rename them before updating!

  For example, rename your existing copy of `1_Segment_Image_Data.ipynb` to `1_Segment_Image_Data_old.ipynb`. Then, after running the update command, a new version of `1_Segment_Image_Data.ipynb` will be created with the newest code, and your old copy will exist with the new name that you gave it.

  After updating, you can copy over any important paths or modifications from the old notebooks into the new notebook.



  If you would like to test out the pipeline, then we have incorporated an example dataset within the notebooks. Currently the dataset contains 11 FOVs with 22 channels (CD3, CD4, CD8, CD14, CD20, CD31, CD45, CD68, CD163, CK17, Collagen1, ECAD, Fibronectin, GLUT1, H3K9ac, H3K27me3, HLADR, IDO, Ki67, PD1, SMA, Vim), and intermediate data necessary for each notebook in the pipeline.

  The dataset is split into several smaller components, with each Jupyter Notebook using a combination of those components. We utilize [**Hugging Face**](https://huggingface.co) for storing the dataset and using their API's for creating these configurations. You can view the [dataset](https://huggingface.co/datasets/angelolab/ark_example)'s repository as well.



  **Image Data:** This compartment stores the tiff files for each channel, for every FOV.
  ```sh
  image_data/
  ├── fov0/
  │  ├── CD3.tiff
  │  ├── ...
  │  └── Vim.tiff
  ├── fov1/
  │  ├── CD3.tiff
  │  ├── ...
  │  └── Vim.tiff
  ├── .../
  ```

  **Cell Table:** This compartment stores the various cell tables which get generated by Notebook 1.

  ```sh
  segmentation/cell_table/
  ├── cell_table_arcsinh_transformed.csv
  ├── cell_table_size_normalized.csv
  └── cell_table_size_normalized_cell_labels.csv
  ```

  **Deepcell Output:** This compartment stores the segmentation images after running deepcell.
  ```sh
  segmentation/deepcell_output/
  ├── fov0_whole_cell.tiff
  ├── fov0_nuclear.tiff
  ├── ...
  ├── fov10_whole_cell.tiff
  └── fov10_nuclear.tiff
  ```

  **Example Pixel Output:** This compartment stores feather files, csvs and pixel masks generated by pixel clustering.

  ```sh
  segmentation/example_pixel_output_dir/
  ├── cell_clustering_params.json
  ├── channel_norm.feather
  ├── channel_norm_post_rowsum.feather
  ├── pixel_thresh.feather
  ├── pixel_channel_avg_meta_cluster.csv
  ├── pixel_channel_avg_som_cluster.csv
  ├── pixel_masks/
  │  ├── fov0_pixel_mask.tiff
  │  └── fov1_pixel_mask.tiff
  ├── pixel_mat_data/
  │  ├── fov0.feather
  │  ├── ...
  │  └── fov10.feather
  ├── pixel_mat_subset/
  │  ├── fov0.feather
  │  ├── ...
  │  └── fov10.feather
  ├── pixel_meta_cluster_mapping.csv
  └── pixel_som_weights.feather
  ```

  **Example Cell Output:** This compartment stores feather files, csvs and cell masks generated by cell clustering.

  ```sh
  segmentation/example_cell_output_dir/
  ├── cell_masks/
  │  ├── fov0_cell_mask.tiff
  │  └── fov1_cell_mask.tiff
  ├── cell_meta_cluster_channel_avg.csv
  ├── cell_meta_cluster_count_avg.csv
  ├── cell_meta_cluster_mapping.csv
  ├── cell_som_cluster_channel_avg.csv
  ├── cell_som_cluster_count_avg.csv
  ├── cell_som_weights.feather
  ├── cluster_counts.feather
  ├── cluster_counts_size_norm.feather
  └── weighted_cell_channel.csv
  ```



  * **1 - Segment Image Data:**
    * Image Data
  * **2 - Pixie Cluster Pixels:**
    * Image Data
    * Cell Table
    * Deepcell Output
  * **3 - Pixie Cluster Cells:**
    * Image Data
    * Cell Table
    * Deepcell Output
    * Example Pixel Output
  * **4 - Post Clustering:**
    * Image Data
    * Cell Table
    * Deepcell Output
    * Example Cell Output



  If you have a general question or are having trouble with part of the repo, you can refer to our [FAQ](https://ark-analysis.readthedocs.io/en/latest/_rtd/faq.html) or head to the [discussions](https://github.com/angelolab/ark-analysis/discussions) tab to get help. If you've found a bug with the codebase, first make sure there's not already an [open issue][issue-tracker], and if not, you can then [open an issue](https://github.com/angelolab/ark-analysis/issues/new/choose) describing the bug.




  If you would like to help make `ark` better, please take a look at our [contributing guidelines](https://ark-analysis.readthedocs.io/en/latest/_rtd/contributing.html).


  Please directly cite the `ark` repo (https://github.com/angelolab/ark-analysis) if it was a part of your analysis. In addition, please cite the relevant paper(s) below where applicable to your study.

  1. [Greenwald, Miller et al. Whole-cell segmentation of tissue images with human-level performance using large-scale data annotation and deep learning [2021]](https://www.nature.com/articles/s41587-021-01094-0)
  2. [Liu et al. Robust phenotyping of highly multiplexed tissue imaging data using pixel-level clustering [2023]](https://doi.org/10.1038/s41467-023-40068-5)


  <!-- Links -->

  <!-- Badges -->

  <!-- Status -->
  [link-badge-ci]: https://github.com/angelolab/ark-analysis/actions/workflows/ci.yml
  [link-badge-docs]: https://ark-analysis.readthedocs.io
  [link-badge-coverage]: https://coveralls.io/github/angelolab/ark-analysis?branch=main

  <!-- Package  -->
  [link-badge-pypi]: https://pypi.org/project/ark-analysis


  <!-- Meta / License -->
  [link-badge-license]: https://opensource.org/licenses/MIT
  [link-uv]: https://github.com/astral-sh/uv

  <!-- Other -->

  [issue-tracker]: https://github.com/angelolab/ark-analysis/issues

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


pkgId: 4bead4074d5deb622d98b3e184f52cde9c81ba0002316d6175b31fca022825fe
name: python-arkas
arch: src
version: 0.0.1a0
epoch: 0
release: 1
summary: Library to evaluate ML model performances
url: https://github.com/durandtibo/arkas
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkas-0.0.1a0-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
      <a href="https://github.com/durandtibo/arkas/actions">
          <img alt="CI" src="https://github.com/durandtibo/arkas/workflows/CI/badge.svg">
      </a>
      <a href="https://github.com/durandtibo/arkas/actions">
          <img alt="Nightly Tests" src="https://github.com/durandtibo/arkas/workflows/Nightly%20Tests/badge.svg">
      </a>
      <a href="https://github.com/durandtibo/arkas/actions">
          <img alt="Nightly Package Tests" src="https://github.com/durandtibo/arkas/workflows/Nightly%20Package%20Tests/badge.svg">
      </a>
      <br/>
      <a href="https://durandtibo.github.io/arkas/">
          <img alt="Documentation" src="https://github.com/durandtibo/arkas/workflows/Documentation%20(stable)/badge.svg">
      </a>
      <a href="https://durandtibo.github.io/arkas/dev/">
          <img alt="Documentation" src="https://github.com/durandtibo/arkas/workflows/Documentation%20(unstable)/badge.svg">
      </a>
      <br/>
      <a href="https://codecov.io/gh/durandtibo/arkas">
          <img alt="Codecov" src="https://codecov.io/gh/durandtibo/arkas/branch/main/graph/badge.svg">
      </a>
      <a href="https://codeclimate.com/github/durandtibo/arkas/maintainability">
          <img src="https://api.codeclimate.com/v1/badges/bc15147bbdd318137184/maintainability" />
      </a>
      <a href="https://codeclimate.com/github/durandtibo/arkas/test_coverage">
          <img src="https://api.codeclimate.com/v1/badges/bc15147bbdd318137184/test_coverage" />
      </a>
      <br/>
      <a href="https://github.com/psf/black">
          <img  alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
      </a>
      <a href="https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings">
          <img  alt="Doc style: google" src="https://img.shields.io/badge/%20style-google-3666d6.svg">
      </a>
      <a href="https://github.com/astral-sh/ruff">
          <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;">
      </a>
      <a href="https://github.com/guilatrova/tryceratops">
          <img  alt="Doc style: google" src="https://img.shields.io/badge/try%2Fexcept%20style-tryceratops%20%F0%9F%A6%96%E2%9C%A8-black">
      </a>
      <br/>
      <a href="https://pypi.org/project/arkas/">
          <img alt="PYPI version" src="https://img.shields.io/pypi/v/arkas">
      </a>
      <a href="https://pypi.org/project/arkas/">
          <img alt="Python" src="https://img.shields.io/pypi/pyversions/arkas.svg">
      </a>
      <a href="https://opensource.org/licenses/BSD-3-Clause">
          <img alt="BSD-3-Clause" src="https://img.shields.io/pypi/l/arkas">
      </a>
      <br/>
      <a href="https://pepy.tech/project/arkas">
          <img  alt="Downloads" src="https://static.pepy.tech/badge/arkas">
      </a>
      <a href="https://pepy.tech/project/arkas">
          <img  alt="Monthly downloads" src="https://static.pepy.tech/badge/arkas/month">
      </a>
      <br/>
  </p>



  `arkas` is a simple Python library to evaluate ML model performances.



  We highly recommend installing
  a [virtual environment](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/).
  `arkas` can be installed from pip using the following command:

  ```shell
  pip install arkas
  ```

  To make the package as slim as possible, only the minimal packages required to use `arkas` are
  installed.
  To include all the dependencies, you can use the following command:

  ```shell
  pip install arkas[all]
  ```

  Please check the [get started page](https://durandtibo.github.io/arkas/get_started) to see how to
  install only some specific dependencies or other alternatives to install the library.
  The following is the corresponding `arkas` versions and tested dependencies.

  | `arkas` | `coola`        | `grizz`        | `iden`         | `matplotlib` | `numpy`       | `objectory`  | `polars`     | `scikit-learn` | `python`      |
  |---------|----------------|----------------|----------------|--------------|---------------|--------------|--------------|----------------|---------------|
  | `main`  | `>=0.8.2,<1.0` | `>=0.0.5,<1.0` | `>=0.0.4,<1.0` | `>=3.6,<4.0` | `>=1.22,<2.0` | `>=0.1,<1.0` | `>=1.0,<2.0` | `>=1.3,<2.0`   | `>=3.9,<3.12` |

  | `arkas` | `colorlog`<sup>*</sup> | `hya`<sup>*</sup> | `markdown`<sup>*</sup> | `tqdm`<sup>*</sup> |
  |---------|------------------------|-------------------|------------------------|--------------------|
  | `main`  | `>=6.7,<7.0`           | `>=0.2,<1.0`      | `>=3.4,<4.0`           | `>=4.65,<5.0`      |

  <sup>*</sup> indicates an optional dependency



  Please check the instructions in [CONTRIBUTING.md](.github/CONTRIBUTING.md).



  Everyone is welcome to contribute to the community.
  If you have any questions or suggestions, you can
  submit [Github Issues](https://github.com/durandtibo/arkas/issues).
  We will reply to you as soon as possible. Thank you very much.



  :warning: While `arkas` is in development stage, no API is guaranteed to be stable from one
  release to the next.
  In fact, it is very likely that the API will change multiple times before a stable 1.0.0 release.
  In practice, this means that upgrading `arkas` to a new version will possibly break any code that
  was using the old version of `arkas`.



  `arkas` is licensed under BSD 3-Clause "New" or "Revised" license available in [LICENSE](LICENSE)
  file.


pkgId: d7eec4f9c39c2c883407b80a40cab1d896b336df2c646ae1959bbc356f6434c3
name: python-arkcclient
arch: src
version: 0.3.1
epoch: 0
release: 1
summary: A lightweight proxy designed to be proof to IP blocking measures
url: https://arkc.org
rpm_license: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkcclient-0.3.1-1.src.rpm
checksum_type: sha256
description:
  ArkC is a lightweight proxy designed to be proof to IP blocking measures
  and offer high proxy speed via multi-connection transmission and
  swapping connections.
  ArkC-Client is the client-side utility. In a LAN environment, it either
  works with UPnP-enabled routers or requires NAT configuration if the
  client is behind a router.
  Note: ArkC 0.3 is not compatible with 0.2 or earlier versions.
  `(中文)快速入门教程 <https://github.com/projectarkc/arkc-client/wiki/ArkC-VPS%E7%89%88-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B%E6%95%99%E7%A8%8B>`__


pkgId: 18e3d74dc3e982ed28941dcfa5463999f56f3e2100863cacfcc7ec669880b076
name: python-arkcloud
arch: src
version: 0.0.21
epoch: 0
release: 1
summary: This application accesses the Ark system.
url: https://github.com/GameServerGurus/Ark-Cloud
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkcloud-0.0.21-1.src.rpm
checksum_type: sha256
description:
  To run this make sure you have python 3.10 installed and run this executable:
  ```
  Ark-Driver/pywin32-304.win-amd64-py3.10.exe
  ```

  To run this make sure you have python 3.9 installed and run this executable:
  ```
  Ark-Driver/pywin32-304.win32-py3.9.exe
  ```


  Pick which terminal you'll be running the bot:

  - [Linux Terminal](#linux-terminal)
  - [Window Terminal](#windows-terminal)



  Install the arkdriver.
  ```shell
  pip3 install arkdriver
  ```

  Run your python environment.
  ```shell
  python3
  ```

  In your python environment enter the following:
  ```python
  from arkdriver import run
  run()
  ```

  You're running the bot now. Now go to the [Final Steps](#final-steps)


  Install the arkdriver.
  ```shell
  pip install arkdriver
  ```

  Run your python environment.
  ```shell
  python
  ```

  In your python environment enter the following:
  ```python
  from arkdriver import run
  run()
  ```

  You're running the bot now. Now go to the [Final Steps](#final-steps)


  Hop into your server and activate GCM (aka Admin mode).
  Go into the Ark-API and submit a command. The bot should
  have received the command if done correctly.


pkgId: b9d8f33e36036d7a922de40c9857eae0336d61ec3c75cd55de837975ed92d7f8
name: python-arkhos
arch: src
version: 0.0.9
epoch: 0
release: 1
summary: Python framework for deploying small apps
url: https://getArkhos.com
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkhos-0.0.9-1.src.rpm
checksum_type: sha256
description:
  [Arkhos](https://www.getArkhos.com>) is a Python framework for easily deploying small Python apps.

  ```python

  def arkhos_handler(request):
      return arkhos.json({
          "greeting": f"Hello {request.GET.get("name")}!"
      })

  ```

  ```bash
  $ git add main.py
  $ git push arkhos
  $ curl "https://my-first-app.arkhosapp.com?name=Wally"
  {
    "greeting": "Hello Wally!"
  }
  ```


  See the full [Arkhos Docs](https://getarkhos.com/docs) and [Getting started guide](https://getarkhos.com/guides/python-hello-world)
  |**Arkhos Requests**|**Description**|
  |-|-|
  |request.method|GET, POST, INTERVAL, EMAIL, ….|
  |request.GET<br>request.GET["some_key"]|Request GET parameters, *dictionary*<br> eg. ?favorite_project=arkhos|
  |request.body|Request body, *string*|
  |request.json|Request body parsed as json into *dictionary*|
  |request.headers|Request headers, *dictionary*|
  |request.path|The url path, *string*, <br>eg. "/about"|
  |&nbsp;||
  |**Arkhos Responses**<br>All responses also accept headers={} and status=200,404||
  |return arkhos.json(<br>&nbsp;&nbsp;&nbsp;&nbsp;{"key":"value"}<br>)|Return JSON|
  |return arkhos.http(<br>&lt;h1&gt;some html&lt;/h1&gt;<br>)|Return HTML|
  |return arkhos.render(<br>&nbsp;&nbsp;&nbsp;&nbsp;"path/to/file.html",<br>&nbsp;&nbsp;&nbsp;&nbsp;{"name": "Lucille"}<br>)|Return the html with the variables in the dict.<br> Uses [jinja](https://jinja.palletsprojects.com/en/3.1.x/templates/#variables) templating. Eg. in your HTML `{{ name }}`|
  |&nbsp;||
  |**Static files (.js, .css, .jpg)**||
  |Any files in /static folder are available at &lt;my-app&gt;.arkhosapp.com/static/||
  |&nbsp;||
  |**Key/Value and Storage**||
  |arkhos.set(key, value)|Store a key, value. key should be a *string*. value can be *string,int,float,* or *boolean*|
  |arkhos.get(key)|Get a key|
  |&nbsp;||
  |**Communicate**||
  |arkhos.email(to_email, subject, message)|Send an email|
  |arkhos.sms(phone_number, message)|Send an sms|
  |&nbsp;||
  |**Environment Variables**||
  |arkhos.env(environment_variable)|Not implemented|


pkgId: a8f9511eee08104ca7468bc69b559f834cb0d98ddad76fb7016a8b924f39a65c
name: python-arkindex-base-worker
arch: src
version: 0.3.7.post1
epoch: 0
release: 1
summary: Base Worker to easily build Arkindex ML workflows
url: https://workers.arkindex.org
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkindex-base-worker-0.3.7.post1-1.src.rpm
checksum_type: sha256
description:
  An easy to use Python 3 high level API client, to build ML tasks.

  This is an open-source project, licensed using [the MIT license](https://opensource.org/license/mit/).



  The [documentation](https://workers.arkindex.org/) is made with [Material for MkDocs](https://github.com/squidfunk/mkdocs-material) and is hosted by [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/).



  ```shell
  pip install --user cookiecutter
  cookiecutter git@gitlab.teklia.com:workers/base-worker.git
  ```

rpm_license:
  MIT License  Copyright (c) 2023 Teklia  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: fa5d1f33163e1e48eaf8ddf6dc9935175ef412bc2435e1d799236a4d4eae97b1
name: python-arkitekt
arch: src
version: 0.7.8
epoch: 0
release: 1
summary: client for the arkitekt platform
url: https://pypi.org/project/arkitekt/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkitekt-0.7.8-1.src.rpm
checksum_type: sha256
description:
  [![codecov](https://codecov.io/gh/jhnnsrs/arkitekt/branch/master/graph/badge.svg?token=UGXEA2THBV)](https://codecov.io/gh/jhnnsrs/arkitekt)
  [![PyPI version](https://badge.fury.io/py/arkitekt.svg)](https://pypi.org/project/arkitekt/)
  [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://pypi.org/project/arkitekt/)
  ![Maintainer](https://img.shields.io/badge/maintainer-jhnnsrs-blue)
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/arkitekt.svg)](https://pypi.python.org/pypi/arkitekt/)
  [![PyPI status](https://img.shields.io/pypi/status/arkitekt.svg)](https://pypi.python.org/pypi/arkitekt/)

  streaming analysis for mikroscopy



  arkitekt is the python client for the arkitekt platform. It allows you to utilize the full extent of the platform from your python code.
  To understand the idea behind arkitekt, you need to understand the idea behind the arkitekt platform.
  (More on this in the [documentation](https://arkitekt.live))



  - Host your python functions and make them to your team
  - Use functions from your team in your code
  - Interact with and store data in a secure and scalable way on the platform
  - Use the platform as a central storage for your data



  ```bash
  pip install arkitekt[all]
  ```

  This installs all dependencies for the arkitekt platform, inlcuding the arkitekt CLI, which can be used to develop and create apps, containerize them and deploy t


  arkitekt is relying heavily on asyncio patters and therfore supports python 3.8 and above. It also relies on the pydantic stack for serialization.




  You can use the cli to create python based apps for the arkitekt platform, profiting from a battery of features like easy GUI creation based on
  type annotations, orchestration of real-time (in memoery) workflows, data hosting,  easy packaging and distribution in docker containers, etc...

  To get started create a directory and run

  ```bash
  arkitekt init
  ```

  Which will lead you throught an app creation process.
  Apps can simply registered functions, through the register decorator

  ```python
  from arkitekt import register

  @register()
  def rpc_function(x: int, name: str) -> str
      """
      A rpc function that we can
      simple call from anywhere

      ""

  ```

  And then connected to a local or remote server by running

  Run example:

  ```bash
  arkitekt run dev
  ```


  For more details on how to create an app follow the tutorials on https://arkitekt.live.



  Arkitekt takes care of serialization and documentation of standard python datastructures

  - str
  - bool
  - int
  - float
  - Enum
  - Dict
  - List

  To increase performance and reduce latency it is not possible to serialize complex python objects like numpy arrays into the messages. These are best transformed into immutable objects on a centrally accessible storage and then only the reference is passed.

  Arkitekt does not impose any rules on how you handle this storage (see mikro for ideas), it provides however a simple api.

  ```python

  class ComplexStructure:
      id: str # A reference for this structure on central storage

      async def shrink(self):
          return self.id

      @classmethod
      async def expand(cls, value):
          return cls.load_from_server(value)


  ```

  by providing two functions:

  - shrink
  - expand

  You can now use this Structure with simple typehints and arkitekt will automaticall shrink (serialize) and expand (deserialize) the structure on calling.

  ```python

  def complex_call(x: ComplexStrucuture) -> int:
      return x.max()

  ```



  Check out the arkitekt [documentation](https://arkitekt.live) for usage of this libary


pkgId: 03c40caa5656557d39b58dad7ff191f07f3a1e0418041fc64269958a43a9cc2d
name: python-arkitekt-next
arch: src
version: 0.8.31
epoch: 0
release: 1
summary: client for the arkitekt_next platform
url: https://pypi.org/project/arkitekt-next/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkitekt-next-0.8.31-1.src.rpm
checksum_type: sha256
description:
  [![codecov](https://codecov.io/gh/jhnnsrs/arkitekt_next/branch/master/graph/badge.svg?token=UGXEA2THBV)](https://codecov.io/gh/jhnnsrs/arkitekt_next)
  [![PyPI version](https://badge.fury.io/py/arkitekt_next.svg)](https://pypi.org/project/arkitekt_next/)
  [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://pypi.org/project/arkitekt_next/)
  ![Maintainer](https://img.shields.io/badge/maintainer-jhnnsrs-blue)
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/arkitekt_next.svg)](https://pypi.python.org/pypi/arkitekt_next/)
  [![PyPI status](https://img.shields.io/pypi/status/arkitekt_next.svg)](https://pypi.python.org/pypi/arkitekt_next/)

  streaming analysis for mikroscopy



  arkitekt_next is the python client for the arkitekt_next platform. It allows you to utilize the full extent of the platform from your python code.
  To understand the idea behind arkitekt_next, you need to understand the idea behind the arkitekt_next platform.
  (More on this in the [documentation](https://arkitekt.live))



  - Host your python functions and make them to your team
  - Use functions from your team in your code
  - Interact with and store data in a secure and scalable way on the platform
  - Use the platform as a central storage for your data



  ```bash
  pip install arkitekt-next[all]
  ```

  This installs all dependencies for the arkitekt_next platform, inlcuding the arkitekt_next CLI, which can be used to develop and create apps, containerize them and deploy t

  arkitekt_next is relying heavily on asyncio patters and therfore supports python 3.8 and above. It also relies on the pydantic stack for serialization.



  You can use the cli to create python based apps for the arkitekt_next platform, profiting from a battery of features like easy GUI creation based on
  type annotations, orchestration of real-time (in memoery) workflows, data hosting, easy packaging and distribution in docker containers, etc...

  To get started create a directory and run

  ```bash
  arkitekt-next init
  ```

  Which will lead you throught an app creation process.
  Apps can simply registered functions, through the register decorator

  ```python
  from arkitekt_next import register

  @register()
  def rpc_function(x: int, name: str) -> str
      """
      A rpc function that we can
      simple call from anywhere

      ""

  ```

  And then connected to a local or remote server by running

  Run example:

  ```bash
  arkitekt-next run dev
  ```

  For more details on how to create an app follow the tutorials on https://arkitekt.live.



  ArkitektNext takes care of serialization and documentation of standard python datastructures

  - str
  - bool
  - int
  - float
  - Enum
  - Dict
  - List

  To increase performance and reduce latency it is not possible to serialize complex python objects like numpy arrays into the messages. These are best transformed into immutable objects on a centrally accessible storage and then only the reference is passed.

  ArkitektNext does not impose any rules on how you handle this storage (see mikro for ideas), it provides however a simple api.

  ```python

  class ComplexStructure:
      id: str # A reference for this structure on central storage

      async def shrink(self):
          return self.id

      @classmethod
      async def expand(cls, value):
          return cls.load_from_server(value)


  ```

  by providing two functions:

  - shrink
  - expand

  You can now use this Structure with simple typehints and arkitekt_next will automaticall shrink (serialize) and expand (deserialize) the structure on calling.

  ```python

  def complex_call(x: ComplexStrucuture) -> int:
      return x.max()

  ```

  Check out the arkitekt_next [documentation](https://arkitekt.live) for usage of this libary


pkgId: 941f86cb2b5eda386b7455c9da981c70aeead373077e8948d68d670700a42de7
name: python-arkivist
arch: src
version: 1.3.4
epoch: 0
release: 1
summary: Arkivist, a Python Dictionary wrapper for JSON files.
url: https://github.com/rmaniego/arkivist
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arkivist-1.3.4-1.src.rpm
checksum_type: sha256
description:
  ![](/media/banner.png)


  Arkivist is Python Dictionary wrapper for JSON files.

  Other behaviors are similar to native Python dictionaries, the tutorial below only covers add-on feature specific to Arkivist.


  **Arkivist** can now be used on your Python projects through PyPi by running pip command on a Python-ready environment.

  `pip install arkivist --upgrade`

  Current version is 1.2.\*, but more updates are coming soon. Installing it will also install required packages including *requests*.

  This is compatible with Python 3.9+ and is already used in various personal projects.


  **1.** Need a lightweight data storage with zero application installations.
  **2.** The project is for personal or hobby with low number of users who simultaneously access the data storage.
  **3.** The project requires a data storage that has a fast learning curve due to resource or time constraints.


  **1. Import Package**
  ```python
  from arkivist import Arkivist
  ```

  **2. Cast Python Dictionary to Arkivist object**
  Create a new file if not yet existing.
  ```python
  message = Arkivist({"hello": "world"})

  data = {"a": "Ant", "b": "Bug", "c": "Cat"}
  animals = Arkivist(data, filepath="animals.json", mode="w+")
  ```

  **3. Instantiate data from existing JSON file**
  > By default, autosave is set to True. To optimize, set autosave to False and perform manual saving after completely performing operations.
  ```python
  storage = Arkivist("storage.json")
  ```

  **4. Set JSON File indentation**
  ```python

  storage = Arkivist("storage.json", indent=2)
  ```

  **5. Customize sorting options**
  ```python
  storage = Arkivist("storage.json", autosort=True, reverse=False)
  ```

  **6. Disable Autosave**
  ```python
  storage = Arkivist("storage.json", autosave=False)
  storage.save()
  storage.save(save_as="storage-copy.json")
  ```

  **7. Add new entry**
  ```python
  places= Arkivist("data/places.json")
  places.set(1, "Sun")
  places.set(2, "Earth")
  places.set(3, "Moon")


  people = Arkivist("data/people.json")
  people.update({"juan": {"name": "Juan Dela Cruz"}})
  people.update({"maria": {"name": "Maria Dela Cruz"}})
  ```

  **8. Get dictionary object**
  Set to read mode only, show an error if file does not exists.
  ```python
  places = Arkivist("data/places.json", mode="r")
  print(places.show())
  ```

  **9. Generate JSON-compliant string**
  ```python
  places = Arkivist("data/places.json")
  print(places.string())
  ```

  **10. Clear dictionary data**
  ```python
  places = Arkivist("data/places.json", autosave=False)
  places.reset()
  ```

  **11. Replace all contents**
  ```python

  people = Arkivist("data/people.json")
  friends = {"friend": {"name": "Friend"}, "enemy": {"name": "Enemy"}}
  people.load(friends)


  anons = "{\"robot\": {\"name\": \"Robot\"}, \"ghost\": {\"name\": \"Ghost\"}}"
  people.load(anons)
  ```

  **12. Check if empty or not**
  ```python

  people = Arkivist("data/people.json").reset()
  print("Count:", people.count(), "; Is empty: ", people.is_empty())
  ```

  **13. Flatten the nested dictionary**
  ```python
  people = Arkivist("data/people.json")
  people.set("juan", {"name": "Juan Dela Cruz"})
  people.set("maria", {"name": "Maria Dela Cruz"})
  print(people.flatten())
  ```

  **14. Fetch from a web API**
  ```python
  todos = Arkivist() # autosave = False, data is only in memory
  todos.fetch("https://jsonplaceholder.typicode.com/todos/1")
  print(todos.show())
  ```

  **15. Get random key-value pair**
  ```python
  names = Arkivist("names.json").reset()
  names.set("abc", {"name": "Abc"})
  names.set("dog", {"name": "Doggy"})
  names.set("juan", {"names": "Juan"})
  print("Random item:", names.random())
  ```

  **16. Double check if expected key value is correct**
  ```python
  numbers = Arkivist("numbers.json").reset()
  numbers.set("one": 1)
  print("Doublecheck (1):", numbers.doublecheck("one", 1))
  print("Doublecheck (2):", numbers.doublecheck("one", 2))
  ```

  **16. Perform shallow queries**
  ```python
  names = Arkivist("names.json")
  names.set("abc", {"name": "Abc"})
  names.set("dog", {"name": "Doggy"})
  names.set("juan", {"name": "Juan"})


  for name, data in names.where("name", "Abc").query():
      print(name, data)


  for name, data in names.where("name", "a", exact=False).query():
      print(name, data)


  for name, data in names.where("name", "a", exact=False, sensitivity=False).query():
      print(name, data)


  for name, data in names.where("name").exclude("Abc").query():
      print(name, data)


  for name, data in names.where("name").exclude("a", exact=False).query():
      print(name, data)


  for name, data in names.where("name").exclude("A", exact=False, sensitivity=False).query():
      print(name, data)
  ```

  **17. Find child of parent**
  ```python
  names = Arkivist("names.json").reset()
  names.set("names", {})
  names.find("names").set("maria", 1)
  print("Maria:", names.find("names").get("maria", 0))
  print("Pedro:", names.find("names").get("pedro", 0))
  ```

  **18. Append/Extend/Remove items in list**
  ```python
  test = Arkivist("tests.json").reset()

  test.append_in("colors", "red")
  test.append_in("colors", "orange")
  test.append_in("colors", "yellow")
  test.append_in("colors", ("blue", "green"), unique=True, sort=True)
  test.remove_in("colors", "yellow")
  test.remove_in("colors", ("blue", "purple"))

  test.set("numbers", {})
  test.find("numbers").append_in("odd", 1)
  test.find("numbers").append_in("odd", (1, 3, 5, [7]))
  ```

  **19. Encrypt JSON file**
  > NOTE: Copy and securely store the auto-generated authetication file to maintain access to the JSON file. Otherwise, the actual data from the JSON file can no longer be accessed. Without the secure key, reading, writing, and decryption will not be allowed. If the authfile is invalid or not set, check for the filename of the auto-generated file and rename as needed and update the filename to your program source code to access the JSON file again.
  ```python


  weather = Arkivist("temp/encrypted.json", authfile="secret-key.txt")


  weather.encrypt()


  weather.set("weather", {})
  weather.find("weather").set("2022-04-14", "Cloudy")
  weather.find("weather").set("2022-04-15", "Sunny")


  weather.encrypt(False)
  ```


  Arkivist is an ongoing project and new features will be added in the future. In the future, it aims to add complex querying and also add a security layer to protect data from unauthorized access.


  Arkivist allows you to build your Python apps with a lightweight data storage, this can come handy especially when you are doing personal and hobby projects that handles simple data.


  Arkivist is a play on the word Archive, which means a collection of historical documents or records. Arkivist is like your digital librarian that manages your important data for a lightweight and organized data storage.


pkgId: dc25f6e90dda2d0f4a54104c46dc31fda1195021633483ef34eafdd90d40d8e2
name: python-arknights-mower
arch: src
version: 3.4.4
epoch: 0
release: 1
summary: Arknights Helper based on ADB and Python
url: https://github.com/Konano/arknights-mower
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arknights-mower-3.4.4-1.src.rpm
checksum_type: sha256
description:
  <div align="center">

  ![logo](https://github.com/ArkMowers/arknights-mower/raw/main/logo.png)



  [![GitHub License](https://img.shields.io/github/license/ArkMowers/arknights-mower?style=flat-square)](https://github.com/ArkMowers/arknights-mower/blob/master/LICENSE)
  [![PyPI](https://img.shields.io/pypi/v/arknights-mower?style=flat-square)](https://pypi.org/project/arknights-mower/)
  [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/arknights-mower?style=flat-square)](https://pypi.org/project/arknights-mower/)
  [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/ArkMowers/arknights-mower/Upload%20PyPI?style=flat-square)](https://github.com/ArkMowers/arknights-mower/actions/workflows/python-publish.yml)
  ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/ArkMowers/arknights-mower/main?style=flat-square)
  [![Code Climate maintainability](https://img.shields.io/codeclimate/maintainability/ArkMowers/arknights-mower?style=flat-square)](https://codeclimate.com/github/ArkMowers/arknights-mower)

  7\*24 小时不间断长草，让你忘掉这个游戏！

  </div>



  - 本程序不支持国服以外的明日方舟区服，支持官服和 Bilibili 服。
  - 原理上，使用本程序没有任何被判定为作弊并被封号的风险，但是作者不对使用此程序造成的任何损失负责。
  - 开发组人数稀少，有时不太能及时反馈和修复 Bug，见谅一下。也欢迎更多有能力有意向的朋友参与。
  - 本软件目前仅支持 1920\*1080 分辨率，使用夜神模拟器可以解决大部分问题



  - 自动打开《明日方舟》，支持官服和 Bilibili 服
  - 自动登录
    - 账户密码需要手动输入
  - 读取基建心情，根据排班表**_动态换班_**力求最高工休比
  - 支持**_跑单操作_**，可设置仅跑单模式
  - 支持调用 maa 执行除基建外的长草活动
  - 支持邮件提醒
  - 自动使用菲亚梅塔恢复指定房间心情最低干员的心情并重回岗位（工作位置不变以避免重新暖机） [[参考使用场景](https://www.bilibili.com/video/BV1mZ4y1z7wx)]



  在 [Releases](https://github.com/ArkMowers/arknights-mower/releases) 下载 Windows 可执行文件版本。
  在 [action](https://github.com/ArkMowers/arknights-mower/actions/workflows/pyinstaller-win-shawn.yml) 产物下载最新测试版本
  或进入下方 qq 群文件领取，目前软件迭代速度较快，进入群内可获取一手版本



  - 下载安装后，打开软件
  - 设置 adb 地址（如 127.0.0.1:5555）
  - 配置排班表[[配置方法](https://www.bilibili.com/video/BV1KT411s7Ar)]或前往 qq 群寻找现成的排班表导入
  - 点击开始执行
  - 详细配置内容请参考[[功能文档](https://arkmowers.github.io/arknights-mower/)]

  欢迎大家提交 Pull requests 增加更多的功能！



  如果你在使用过程中遇到问题，欢迎通过提交 Issue 的方式报错或者提问。报告 Issue 时建议附上调试信息以便定位问题。

  也欢迎加入交流群讨论：

  - [Telegram Group](https://t.me/ark_mover)
  - [QQ Group](https://jq.qq.com/?_wv=1027&k=4gWboTVI): 239200680



  <div align="center">

  [![Star History Chart](https://api.star-history.com/svg?repos=ArkMowers/arknights-mower&type=Date)](https://star-history.com/#ArkMowers/arknights-mower&Date)

  </div>


pkgId: 3fe8cdb7da0d9d018836753287073151f147c28c69a6ad46047d8bc7e470020c
name: python-arlas-cli
arch: src
version: 26.0.0
epoch: 0
release: 1
summary: ARLAS Command line for ARLAS Management
url: https://pypi.org/project/arlas-cli/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlas-cli-26.0.0-1.src.rpm
checksum_type: sha256
description:
  ```
  python3 -m arlas.cli.cli  --help

   Usage: python -m arlas.cli.cli [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config-file                       TEXT  Path to the configuration file if you do not want to use the default one: .arlas/cli/configuration.yaml. [default: None]          │
  │ --print-curl     --no-print-curl          Print curl command [default: no-print-curl]                                                                                       │
  │ --version                                 Print command line version                                                                                                        │
  │ --help                                    Show this message and exit.                                                                                                       │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ collections                                                                                                                                                                 │
  │ confs                                                                                                                                                                       │
  │ iam                                                                                                                                                                         │
  │ indices                                                                                                                                                                     │
  │ persist                                                                                                                                                                     │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on collections:

  ```
  python3 -m arlas.cli.cli collections --help

   Usage: python -m arlas.cli.cli collections [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ *  --config        TEXT  Name of the ARLAS configuration to use from your configuration file (/Users/gaudan/.arlas/cli/configuration.yaml). [default: None] [required]      │
  │    --help                Show this message and exit.                                                                                                                        │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ count               Count the number of hits within a collection (or all collection if not provided)                                                                        │
  │ create              Create a collection                                                                                                                                     │
  │ delete              Delete a collection                                                                                                                                     │
  │ describe            Describe a collection                                                                                                                                   │
  │ list                List collections                                                                                                                                        │
  │ name                Set the collection display name                                                                                                                         │
  │ private             Set collection visibility to private                                                                                                                    │
  │ public              Set collection visibility to public                                                                                                                     │
  │ sample              Display a sample of a collection                                                                                                                        │
  │ set_alias           Set the collection display name                                                                                                                         │
  │ share               Share the collection with the organisation                                                                                                              │
  │ unshare             Share the collection with the organisation                                                                                                              │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on indices:

  ```
  python3 -m arlas.cli.cli indices --help

   Usage: python -m arlas.cli.cli indices [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ *  --config        TEXT  Name of the ARLAS configuration to use from your configuration file (/Users/gaudan/.arlas/cli/configuration.yaml). [default: None] [required]      │
  │    --help                Show this message and exit.                                                                                                                        │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ create                            Create an index                                                                                                                           │
  │ data                              Index data                                                                                                                                │
  │ delete                            Delete an index                                                                                                                           │
  │ describe                          Describe an index                                                                                                                         │
  │ list                              List indices                                                                                                                              │
  │ mapping                           Generate the mapping based on the data                                                                                                    │
  │ sample                            Display a sample of an index                                                                                                              │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on configurations:

  ```
  python3 -m arlas.cli.cli confs --help

   Usage: python -m arlas.cli.cli confs [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --help          Show this message and exit.                                                                                                                                 │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ create                                         Add a configuration                                                                                                          │
  │ delete                                         Delete a configuration                                                                                                       │
  │ describe                                       Describe a configuration                                                                                                     │
  │ list                                           List configurations                                                                                                          │
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```


pkgId: df52e1469a5ddafe74dea42eae33b6da44bc5fe963750dfeac41b214570bd392
name: python-arlas-cli
arch: src
version: 26.2.1
epoch: 0
release: 1
summary: ARLAS Command line for ARLAS Management
url: https://pypi.org/project/arlas-cli/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlas-cli-26.2.1-1.src.rpm
checksum_type: sha256
description:
  ```
  python3 -m arlas.cli.cli  --help

   Usage: python -m arlas.cli.cli [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config-file                       TEXT  Path to the configuration file if you do not want to use the default one:                │
  │                                           .arlas/cli/configuration.yaml.                                                           │
  │                                           [default: None]                                                                          │
  │ --print-curl     --no-print-curl          Print curl command [default: no-print-curl]                                              │
  │ --version                                 Print command line version                                                               │
  │ --help                                    Show this message and exit.                                                              │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ collections                                                                                                                        │
  │ confs                                                                                                                              │
  │ iam                                                                                                                                │
  │ indices                                                                                                                            │
  │ persist                                                                                                                            │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on collections:

  ```
  python3 -m arlas.cli.cli collections --help

   Usage: python -m arlas.cli.cli collections [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config        TEXT  Name of the ARLAS configuration to use from your configuration file                                          │
  │                       (/Users/gaudan/.arlas/cli/configuration.yaml).                                                               │
  │                       [default: None]                                                                                              │
  │ --help                Show this message and exit.                                                                                  │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ count           Count the number of hits within a collection (or all collection if not provided)                                   │
  │ create          Create a collection                                                                                                │
  │ delete          Delete a collection                                                                                                │
  │ describe        Describe a collection                                                                                              │
  │ list            List collections                                                                                                   │
  │ name            Set the collection display name                                                                                    │
  │ private         Set collection visibility to private                                                                               │
  │ public          Set collection visibility to public                                                                                │
  │ sample          Display a sample of a collection                                                                                   │
  │ set_alias       Set the field display name                                                                                         │
  │ share           Share the collection with the organisation                                                                         │
  │ unshare         Unshare the collection with the organisation                                                                       │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on indices:

  ```
  python3 -m arlas.cli.cli indices --help

   Usage: python -m arlas.cli.cli indices [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config        TEXT  Name of the ARLAS configuration to use from your configuration file                                          │
  │                       (/Users/gaudan/.arlas/cli/configuration.yaml).                                                               │
  │                       [default: None]                                                                                              │
  │ --help                Show this message and exit.                                                                                  │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ clone          Clone an index and set its name                                                                                     │
  │ create         Create an index                                                                                                     │
  │ data           Index data                                                                                                          │
  │ delete         Delete an index                                                                                                     │
  │ describe       Describe an index                                                                                                   │
  │ list           List indices                                                                                                        │
  │ mapping        Generate the mapping based on the data                                                                              │
  │ migrate        Migrate an index on another arlas configuration, and set the target index name                                      │
  │ sample         Display a sample of an index                                                                                        │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on configurations:

  ```
  python3 -m arlas.cli.cli confs --help

   Usage: python -m arlas.cli.cli confs [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --help          Show this message and exit.                                                                                        │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ create                     Add a configuration                                                                                     │
  │ delete                     Delete a configuration                                                                                  │
  │ describe                   Describe a configuration                                                                                │
  │ list                       List configurations                                                                                     │
  │ login                      Add a configuration for ARLAS Cloud                                                                     │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```


pkgId: 42c3351bcd2db041c90adfa9e4df96aec9fbaaffb1e4146b73823dfa83e2be15
name: python-arlas-cli
arch: src
version: 26.2.2
epoch: 0
release: 1
summary: ARLAS Command line for ARLAS Management
url: https://pypi.org/project/arlas-cli/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlas-cli-26.2.2-1.src.rpm
checksum_type: sha256
description:
  ```
  python3 -m arlas.cli.cli  --help

   Usage: python -m arlas.cli.cli [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config-file                       TEXT  Path to the configuration file if you do not want to use the default one: .arlas/cli/configuration.yaml. [default: None]                                     │
  │ --print-curl     --no-print-curl          Print curl command [default: no-print-curl]                                                                                                                  │
  │ --version                                 Print command line version                                                                                                                                   │
  │ --help                                    Show this message and exit.                                                                                                                                  │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ collections                                                                                                                                                                                            │
  │ confs                                                                                                                                                                                                  │
  │ iam                                                                                                                                                                                                    │
  │ indices                                                                                                                                                                                                │
  │ persist                                                                                                                                                                                                │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on collections:

  ```
  python3 -m arlas.cli.cli collections --help

   Usage: python -m arlas.cli.cli collections [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config        TEXT  Name of the ARLAS configuration to use from your configuration file (/Users/gaudan/.arlas/cli/configuration.yaml). [default: None]                                               │
  │ --help                Show this message and exit.                                                                                                                                                      │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ count                  Count the number of hits within a collection (or all collection if not provided)                                                                                                │
  │ create                 Create a collection                                                                                                                                                             │
  │ delete                 Delete a collection                                                                                                                                                             │
  │ describe               Describe a collection                                                                                                                                                           │
  │ list                   List collections                                                                                                                                                                │
  │ name                   Set the collection display name                                                                                                                                                 │
  │ private                Set collection visibility to private                                                                                                                                            │
  │ public                 Set collection visibility to public                                                                                                                                             │
  │ sample                 Display a sample of a collection                                                                                                                                                │
  │ set_alias              Set the field display name                                                                                                                                                      │
  │ share                  Share the collection with the organisation                                                                                                                                      │
  │ unshare                Unshare the collection with the organisation                                                                                                                                    │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on indices:

  ```
  python3 -m arlas.cli.cli indices --help

   Usage: python -m arlas.cli.cli indices [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --config        TEXT  Name of the ARLAS configuration to use from your configuration file (/Users/gaudan/.arlas/cli/configuration.yaml). [default: None]                                               │
  │ --help                Show this message and exit.                                                                                                                                                      │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ clone                 Clone an index and set its name                                                                                                                                                  │
  │ create                Create an index                                                                                                                                                                  │
  │ data                  Index data                                                                                                                                                                       │
  │ delete                Delete an index                                                                                                                                                                  │
  │ describe              Describe an index                                                                                                                                                                │
  │ list                  List indices                                                                                                                                                                     │
  │ mapping               Generate the mapping based on the data                                                                                                                                           │
  │ migrate               Migrate an index on another arlas configuration, and set the target index name                                                                                                   │
  │ sample                Display a sample of an index                                                                                                                                                     │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```

  Actions on configurations:

  ```
  python3 -m arlas.cli.cli confs --help

   Usage: python -m arlas.cli.cli confs [OPTIONS] COMMAND [ARGS]...

  ╭─ Options ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ --help          Show this message and exit.                                                                                                                                                            │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Commands ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ create                                   Add a configuration                                                                                                                                           │
  │ delete                                   Delete a configuration                                                                                                                                        │
  │ describe                                 Describe a configuration                                                                                                                                      │
  │ list                                     List configurations                                                                                                                                           │
  │ login                                    Add a configuration for ARLAS Cloud                                                                                                                           │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

  ```


pkgId: eb70e9dc22e24e564810a95f44100b79b612542251949f7c14c3e7b367848f8f
name: python-arlas-cli
arch: src
version: 26.2.3
epoch: 0
release: 1
summary: ARLAS Command line for ARLAS Management
url: https://pypi.org/project/arlas-cli/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlas-cli-26.2.3-1.src.rpm
checksum_type: sha256
description:
  ```
  python3 -m arlas.cli.cli  --help
  Usage: python -m arlas.cli.cli [OPTIONS] COMMAND [ARGS]...

  Options:
    --config-file TEXT              Path to the configuration file if you do not
                                    want to use the default one:
                                    .arlas/cli/configuration.yaml.
    --print-curl / --no-print-curl  Print curl command  [default: no-print-curl]
    --version                       Print command line version
    --help                          Show this message and exit.

  Commands:
    collections
    confs
    iam
    indices
    persist
  ```

  Actions on collections:

  ```
  python3 -m arlas.cli.cli collections --help
  Usage: python -m arlas.cli.cli collections [OPTIONS] COMMAND [ARGS]...

  Options:
    --config TEXT  Name of the ARLAS configuration to use from your
                   configuration file (/root/.arlas/cli/configuration.yaml).
    --help         Show this message and exit.

  Commands:
    count      Count the number of hits within a collection (or all...
    create     Create a collection
    delete     Delete a collection
    describe   Describe a collection
    list       List collections
    name       Set the collection display name
    private    Set collection visibility to private
    public     Set collection visibility to public
    sample     Display a sample of a collection
    set_alias  Set the field display name
    share      Share the collection with the organisation
    unshare    Unshare the collection with the organisation
  ```

  Actions on indices:

  ```
  python3 -m arlas.cli.cli indices --help
  Usage: python -m arlas.cli.cli indices [OPTIONS] COMMAND [ARGS]...

  Options:
    --config TEXT  Name of the ARLAS configuration to use from your
                   configuration file (/root/.arlas/cli/configuration.yaml).
    --help         Show this message and exit.

  Commands:
    clone     Clone an index and set its name
    create    Create an index
    data      Index data
    delete    Delete an index
    describe  Describe an index
    list      List indices
    mapping   Generate the mapping based on the data
    migrate   Migrate an index on another arlas configuration, and set the...
    sample    Display a sample of an index
  ```

  Actions on configurations:

  ```
  python3 -m arlas.cli.cli confs --help
  Usage: python -m arlas.cli.cli confs [OPTIONS] COMMAND [ARGS]...

  Options:
    --help  Show this message and exit.

  Commands:
    create    Add a configuration
    delete    Delete a configuration
    describe  Describe a configuration
    list      List configurations
    login     Add a configuration for ARLAS Cloud
  ```


pkgId: 85fe225975b2c14d22434bd95d22921fd21dc41da092a30eac8091e8af57dc20
name: python-arlo
arch: src
version: 1.2.64
epoch: 0
release: 1
url: https://github.com/jeffreydwalter/arlo
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlo-1.2.64-1.src.rpm
checksum_type: sha256
summary:
  Python Arlo is a library written in Python 2.7/3x which exposes the Netgear Arlo cameras via the apis that are consumed by their website.

description:
  Check out the [API DOCS](https://github.com/jeffreydwalter/arlo/tree/master/docs)
  **IMPORTANT:** There is a regression in `sseclient 0.0.24` that breaks this package. Please ensure you have `seeclient 0.0.22` installed.
  **IMPORTANT:** Please ensure you don't have ANY other `sseclient` packages installed in addition to `sseclient 0.0.22`! This may cause this package to fail in unexpected ways. A common one that is known to cause issues is the `sseclient-py 1.7` package. If you have a hard requirement to have more than one, please let me know and we can look into making that work.
  **IMPORTANT:** my.arlo.com requires TLS 1.2 for their API. So, if you're getting ssl errors, it's most likely related to your version of openssl. You may need to upgrade your openssl library.


pkgId: 7004a69f50b68e14e6380fd4cb3e2bedb0c081968e4d14b8e89d94de1da0736e
name: python-arlpy
arch: src
version: 1.9.1
epoch: 0
release: 1
summary: ARL Python Tools
url: https://github.com/org-arl/arlpy
rpm_license: BSD (3-clause)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlpy-1.9.1-1.src.rpm
checksum_type: sha256
description:
  [![CI](https://github.com/org-arl/arlpy/workflows/CI/badge.svg)](https://github.com/org-arl/arlpy/actions)

  Packages such as `numpy` and `scipy` provide excellent mathematical tools for
  scientists and engineers using Python. However, these packages are still young
  and evolving, and understandably have some gaps, especially when it comes to
  domain-specific requirements. The `arlpy` package aims to fill in some of the
  gaps in the areas of underwater acoustics, signal processing, and communication.
  Additionally, `arlpy` also includes some commonly needed utilities and plotting
  routines based on `bokeh`.



  The following modules are general and are likely to be of interest to researchers
  and developers working on signal processing, communication and underwater acoustics:

  * Signal processing (`arlpy.signal`)
  * Communications (`arlpy.comms`)
  * Beamforming and array processing (`arlpy.bf`)
  * Stable distributions (`arlpy.stable`)
  * Geographical coordinates (`arlpy.geo`)
  * Underwater acoustics (`arlpy.uwa`)
  * Underwater acoustic propagation modeling (`arlpy.uwapm`)
  * Plotting utilities (`arlpy.plot`)
  * Common utilities (`arlpy.utils`)



  The following modules are specific to tools available at the ARL and may not be of
  general interest to others:

  * Digital Towed Array (`arlpy.dtla`)
  * ROMANIS (`arlpy.romanis`)
  * HiDAQ (`arlpy.hidaq`)
  * UNET (`arlpy.unet`)



  Installation::
  ```
  pip install arlpy
  ```

  To import all general modules::
  ```
  import arlpy
  ```



  Png export of bokeh plots requires `selenium`, `pillow` and `phantomjs`. These are not
  installed as automatic depdendencies, since they are optional and only required
  for png export. These should be installed manually, if desired.



  * [arlpy home](https://github.com/org-arl/arlpy)
  * [arlpy documentation](https://arlpy.readthedocs.io/en/latest/)


pkgId: d6f44b137e0fa65e82a58b0c3c62f885c70b6b213cced4019c1ecba4070a2e2e
name: python-arlulacore
arch: src
version: 4.0.1
epoch: 0
release: 1
summary: A package to facilitate access to the Arlula Imagery Marketplace API
url: https://github.com/Arlula/python-core-sdk.git
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlulacore-4.0.1-1.src.rpm
checksum_type: sha256
description:
  This package provides a core interface for interacting with the [Arlula API](https://www.arlula.com/documentation/).
  This package can be found on [PyPI](https://pypi.org/project/arlulacore/).
  Documentation for this package can be found below, but for extensive documentation see the [wiki](https://github.com/Arlula/python-core-sdk/wiki).


  This package requires an active Arlula account and access to the API credentials. If you don't have an account, you can create one at [api.arlula.com/signup](https://api.arlula.com/signup).


  ```bash
  pip install arlulacore
  ```

  Instantiate a Session object using your API credentials as below. This will validate your credentials and store them for the remainder of the session. This can be re-used for numerous requests or be instantiated numerous times with different API account credentials for concurrent access to different sessions.
  ```python
  import arlulacore

  """opening a session"""
  arlula_session = arlulacore.Session(key, secret)
  ```


  This package contains methods for each of the supported API endpoints, namespaced by API namespace. Each namespace inherits the session defined above



  The Archive API provides the ability to search and order from Arlula and its supplier's historic imagery archives.

  ```python
  api = arlulacore.ArlulaAPI(arlula_session)

  archive = api.archiveAPI()



  search_result = archive.search(
      arlulacore.SearchRequest(
          start=date(2020, 1, 1),
          gsd=10,
      )
      .set_point_of_interest(-33.8688, 151.2093)
      .set_end(date(2020, 2, 1))
  )




  order_result = archive.order(
      arlulacore.ArchiveOrderRequest(
          id="eyJhb...AYTqwM",
          eula="Supplier's EULA",
          bundle_key="default",
      )
      .set_emails(["john.smith@gmail.com", "jane.doe@gmail.com"])
  )
  ```



  The Tasking API provides the ability to search and order future capturing opportunities from Arlula and it's suppliers.

  ```python
  tasking = api.taskingAPI()



  search_result = tasking.search(
      arlulacore.TaskingSearchRequest(
          datetime.datetime.now(datetime.timezone.utc),
          datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(days=30),
          1,
          30,
      )
      .set_point_of_interest(-33.8688, 151.2093)
  )




  order_result = tasking.order(
      arlulacore.TaskingOrderRequest(
          id="eyJhb...AYTqwM",
          eula="Supplier's EULA",
          bundle_key="default",
          priority="priority",
          cloud=30,
      )
      .set_emails(["john.smith@gmail.com", "jane.doe@gmail.com"])
  )
  ```



  The Orders API provides the ability to list and get entities within Arlula's Orders system.
  These include Orders, Datasets, Campaigns, and Resources.

  ```python
  ordersAPI = api.ordersAPI()


  orders = ordersAPI.list_orders()


  campaigns = ordersAPI.list_campaigns_for_order("cade11f4-8b4d-43e1-8cb1-3bce85111a01")


  datasets = ordersAPI.list_datasets_for_order("cade11f4-8b4d-43e1-8cb1-3bce85111a01")


  order = ordersAPI.get_order("cade11f4-8b4d-43e1-8cb1-3bce85111a01")


  datasets = ordersAPI.list_datasets()



  with ordersAPI.download_resource_as_file("b7adb198-3e6e-4217-9e67-fb26eb355cc4", filepath="downloads/thumbnail.jpg") as f:
      f.read()




  b = ordersAPI.download_resource_as_memory("b7adb198-3e6e-4217-9e67-fb26eb355cc4")

  ```


pkgId: b3f6b7a63b64fd2aae41aff810a109c1fb7e4624ab74fb29df6f60f7d6b95df8
name: python-arlunio
arch: src
version: 0.10.0
epoch: 0
release: 1
summary: Drawing and animating with a blend of Python and mathematics.
url: https://pypi.org/project/arlunio/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arlunio-0.10.0-1.src.rpm
checksum_type: sha256
description:
  ![MIT License](https://img.shields.io/github/license/alcarney/arlunio.svg) [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
  |   | **Stable** | **Snapshot** |
  |:-------------:|----|----|
  | **Docs** | | [![Documentation Status](https://github.com/swyddfa/arlunio/workflows/Docs%20Build/badge.svg?branch=develop)](https://www.arlun.io/docs/)|
  | **Code** | [![Build Status](https://github.com/swyddfa/arlunio/workflows/Python%20Release/badge.svg?branch=master)](https://github.com/swyddfa/arlunio/workflows/Python%20Release/badge.svg?branch=master) [![codecov](https://codecov.io/gh/swyddfa/arlunio/branch/master/graph/badge.svg)](https://codecov.io/gh/swyddfa/arlunio)| [![Build Status](https://github.com/swyddfa/arlunio/workflows/Python%20Release/badge.svg?branch=develop)](https://github.com/swyddfa/arlunio/workflows/Python%20Release/badge.svg?branch=develop)[![codecov](https://codecov.io/gh/swyddfa/arlunio/branch/develop/graph/badge.svg)](https://codecov.io/gh/swyddfa/arlunio)|
  | **PyPi** | [![PyPi Version](https://img.shields.io/pypi/v/arlunio.svg)](https://pypi.org/project/arlunio) [![PyPi Supported Versions](https://img.shields.io/pypi/pyversions/arlunio.svg)](https://pypi.org/project/arlunio)|


  **Arlunio is in early development, while it is useable we cannot make any
  stability guarantees.**

  Arlunio is a Python library that allows you to create images and animations
  powered by your imagination and a little mathematics. While mathematics is very
  much at the core you do not have to be a mathematician to use it!


  ```python
  import arlunio as ar


  ```



  Arlunio is available for Python 3.6+ and can be installed using Pip:

  ```sh
  $ pip install arlunio
  ```

  Be sure to check out the [documentation](https://www.arlun.io/docs/)
  (under construction) for details on how to get started with arlunio.



  Contributions are welcome! Just bear with us while contribution guidelines are
  written up


pkgId: cccabf9a41ae749422cf13136e9604c4037b459be48928083143d178653af906
name: python-arm-gdb
arch: src
version: 0.9.10
epoch: 0
release: 1
summary: Python module for GDB to analyze ARM core registers
url: https://github.com/pengi/arm_gdb
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arm-gdb-0.9.10-1.src.rpm
checksum_type: sha256
description:
  Tools for inspecting ARM Cortex-M registers within GDB
  Currently supported:
  * SCB - System Control Block
  * SysTick
  * NVIC - Nested Vectored Interrupt Controller

rpm_license:
  Copyright (c) 2023 Max Sikström  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: 44079ba8961c67f7b67f0834fb4dc67d9c9ff00377121f320f390c7f83803e18
name: python-arm-mango
arch: src
version: 1.5.1
epoch: 0
release: 1
summary: parallel bayesian optimization over complex search spaces
url: https://github.com/ARM-software/mango
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arm-mango-1.5.1-1.src.rpm
checksum_type: sha256
description:
  **Mango** is a python library to find the optimal hyperparameters for machine learning classifiers.
  Mango enables parallel optimization over complex search spaces of continuous/discrete/categorical values.

  **Check out the quick 12 seconds demo** of Mango approximating a complex decision boundary of SVM

  [![AirSim Drone Demo Video](documents/demo_video.png)](https://youtu.be/hFmSdDLLUfY)

  Mango has the following salient features:
  - Easily define complex search spaces compatible with the scikit-learn.
  - A novel state-of-the-art gradient-free optimizer for continuous/discrete/categorical values.
  - Modular design to schedule objective function on local, cluster,  or cloud infrastructure.
  - Failure detection in the application layer for scalability on commodity hardware.
  - New features are continuously added due to the testing and usage in production settings.



  1. [Installation](#setup)
  2. [Getting started ](#getting-started)
  3. [Hyperparameter tuning example ](#knnexample)
  4. [Search space definitions](#DomainSpace)
  5. [Scheduler](#scheduler)
  6. [Optional configurations](#MangoConfigurations)
  7. [Additional features](#AdditionalFeatures)
  8. [CASH feature](#CASHFeature)
  9. [Platform-aware neural architecture search](https://github.com/ARM-software/mango/tree/master/examples/THIN-Bayes)
  10. [Mango introduction slides](https://github.com/ARM-software/mango/blob/master/documents/Mango_github_slides.pdf) & [Mango production usage slides](https://github.com/ARM-software/mango/blob/master/documents/Mango_cogml_slides.pdf).
  11. [Core Mango research papers to cite](#CorePapers) and [novel applications built over Mango](#ApplicationPapers)

  <!--
  11. [Mango paper (ICASSP 2020)](https://arxiv.org/pdf/2005.11394.pdf) & [Mango paper (CogMI 2021)](https://github.com/ARM-software/mango/blob/master/documents/Mango_CogMI_paper.pdf).
  -->

  <!--
  7. [Schedule Objective Function on Celery](#Celery)
  8. [Algorithms](#mangoAlgorithms)
  9. [ Tune Hyperparameters of Facebook Prophet ](https://github.com/ARM-software/mango/blob/master/examples/Prophet_Classifier.ipynb)
  10. [ Tune Hyperparameters of xgboost XGBRegressor ](https://github.com/ARM-software/mango/blob/master/examples/Xgboost_Example.ipynb)
  11. [ Tune Hyperparameters of xgboost XGBClassifier ](https://github.com/ARM-software/mango/blob/master/examples/Xgboost_XGBClassifier.ipynb)
  12. [Tune Hyperparameters of SVM](https://github.com/ARM-software/mango/blob/master/examples/SVM_Example.ipynb)
  13. [ More Examples](https://github.com/ARM-software/mango/tree/master/examples)
  14. [ Contact & Questions ](#contactDetails)
  -->

  <a name="setup"></a>

  Using `pip`:
  ```
  pip install arm-mango
  ```
  From source:
  ```
  $ git clone https://github.com/ARM-software/mango.git
  $ cd mango
  $ pip3 install .
  ```

  <!--
  - Mango requires scikit-learn and is developed for python 3, some other packages are installed which required to optimize xgboost classifiers and fbprophet.
  !-->


  <a name="getting-started"></a>

  Mango is straightforward to use. Following example minimizes the quadratic function whose input is an integer between -10 and 10.

  ```python
  from mango import scheduler, Tuner


  param_space = dict(x=range(-10,10))


  @scheduler.serial
  def objective(x):
      return x * x


  tuner = Tuner(param_space, objective)
  results = tuner.minimize()

  print(f'Optimal value of parameters: {results["best_params"]} and objective: {results["best_objective"]}')```

  ```

  <a name="knnexample"></a>


  ```python
  from sklearn import datasets
  from sklearn.neighbors import KNeighborsClassifier
  from sklearn.model_selection import cross_val_score

  from mango import Tuner, scheduler



  param_space = dict(n_neighbors=range(1, 50),
                     algorithm=['auto', 'ball_tree', 'kd_tree', 'brute'])


  @scheduler.serial
  def objective(**params):
      X, y = datasets.load_breast_cancer(return_X_y=True)
      clf = KNeighborsClassifier(**params)
      score = cross_val_score(clf, X, y, scoring='accuracy').mean()
      return score


  tuner = Tuner(param_space, objective)
  results = tuner.maximize()
  print('best parameters:', results['best_params'])
  print('best accuracy:', results['best_objective'])


  ```
  Note that best parameters may be different but accuracy should be ~ 0.93. More examples are available
  in the `examples` directory ([Facebook's Prophet](https://github.com/ARM-software/mango/blob/master/examples/Prophet_Classifier.ipynb),
  [XGBoost](https://github.com/ARM-software/mango/blob/master/examples/Xgboost_XGBClassifier.ipynb), [SVM](https://github.com/ARM-software/mango/blob/master/examples/SVM_Example.ipynb)).


  <a name="DomainSpace"></a>

  The search space defines the range and distribution of input parameters to the objective function.
  Mango search space is compatible with scikit-learn's parameter space definitions used in
  [RandomizedSearchCV](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html)
   or [GridSearchCV](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html).
  The search space is defined as a dictionary with keys being the parameter names (string) and values being
  list of discreet choices, range of integers or the distributions.

  > [!NOTE]
  > Mango does not scale or normalize the search space parameters by default. Users should use their judgement on whether input space needs to be normalized.

  Example of some common search spaces are:


  Following space defines `x` as an integer parameters with values in `range(-10, 11)` (11 is not included):
  ```python
  param_space = dict(x=range(-10, 11)) #=> -10, -9, ..., 10

  param_space = dict(x=range(0, 101, 10)) #=> 0, 10, 20, ..., 100
  ```
  Integers are uniformly sampled from the given range and are assumed to be ordered and treated as continuous variables.


  Discreet categories can be defined as lists. For example:
  ```python

  param_space = dict(color=['red', 'blue', 'green'])

  param_space = dict(v=[0.2, 0.1, 0.3])

  param_space = dict(max_features=['auto', 0.2, 0.3])
  ```
  Lists are uniformly sampled and are assumed to be unordered. They are one-hot encoded internally.


  All the distributions, including multivariate, supported by [`scipy.stats`](https://docs.scipy.org/doc/scipy/reference/stats.html) are supported.
  In general, distributions must provide a `rvs` method for sampling.


  Using `uniform(loc, scale)` one obtains the uniform distribution on `[loc, loc + scale]`.
  ```python
  from scipy.stats import uniform


  param_space = dict(a=uniform(-1, 2))
  ```


  We have added [loguniform](https://github.com/ARM-software/mango/blob/master/mango/domain/distribution.py) distribution by extending the `scipy.stats.distributions` constructs.
  Using `loguniform(loc, scale)` one obtains the loguniform distribution on <code>[10<sup>loc</sup>, 10<sup>loc + scale</sup>]</code>.
  ```python
  from mango.domain.distribution import loguniform


  param_space = dict(learning_rate=loguniform(-3, 2))
  ```



  Example hyperparameter search space for [Random Forest Classifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html):
  ```python
  param_space =  dict(
      max_features=['sqrt', 'log2', .1, .3, .5, .7, .9],
      n_estimators=range(10, 1000, 50), # 10 to 1000 in steps of 50
      bootstrap=[True, False],
      max_depth=range(1, 20),
      min_samples_leaf=range(1, 10)
  )
  ```


  Example search space for [XGBoost Classifier](https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier):
  ```python
  from scipy.stats import uniform
  from mango.domain.distribution import loguniform

  param_space = {
      'n_estimators': range(10, 2001, 100), # 10 to 2000 in steps of 100
      'max_depth': range(1, 15), # 1 to 14
      'reg_alpha': loguniform(-3, 6),  # 10^-3 to 10^3
      'booster': ['gbtree', 'gblinear'],
      'colsample_bylevel': uniform(0.05, 0.95), # 0.05 to 1.0
      'colsample_bytree': uniform(0.05, 0.95), # 0.05 to 1.0
      'learning_rate': loguniform(-3, 3),  # 0.001 to 1
      'reg_lambda': loguniform(-3, 6),  # 10^-3 to 10^3
      'min_child_weight': loguniform(0, 2), # 1 to 100
      'subsample': uniform(0.1, 0.89) # 0.1 to 0.99
  }
  ```

  Example search space for [SVM](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html):
  ```python
  from scipy.stats import uniform
  from mango.domain.distribution import loguniform

  param_dict = {
      'kernel': ['rbf', 'sigmoid'],
      'gamma': uniform(0.1, 4), # 0.1 to 4.1
      'C': loguniform(-7, 8) # 10^-7 to 10
  }
  ```

  <a name="scheduler"></a>


  Mango is designed to take advantage of distributed computing. The objective function can be scheduled to
  run locally or on a cluster with parallel evaluations. Mango is designed to allow the use of any distributed
  computing framework (like Celery or Kubernetes). The `scheduler` module comes with some pre-defined
  schedulers.


  Serial scheduler runs locally with one objective function evaluation at a time
  ```python
  from mango import scheduler

  @scheduler.serial
  def objective(x):
      return x * x
  ```


  Parallel scheduler runs locally and uses `joblib` to evaluate the objective functions in parallel
  ```python
  from mango import scheduler

  @scheduler.parallel(n_jobs=2)
  def objective(x):
      return x * x
  ```
  `n_jobs` specifies the number of parallel evaluations. `n_jobs = -1` uses all the available cpu cores
  on the machine. See [simple_parallel](https://github.com/ARM-software/mango/tree/master/examples/simple_parallel.py)
  for full working example.


  Users can define their own distribution strategies using `custom` scheduler. To do so, users need to define
  an objective function that takes a list of parameters and returns the list of results:
  ```python
  from mango import scheduler

  @scheduler.custom(n_jobs=4)
  def objective(params_batch):
      """ Template for custom distributed objective function
      Args:
          params_batch (list): Batch of parameter dictionaries to be evaluated in parallel

      Returns:
          list: Values of objective function at given parameters
      """
      
      ...
      return results
  ```

  For example the following snippet uses [Celery](http://www.celeryproject.org/):
  ```python
  import celery
  from mango import Tuner, scheduler


  app = celery.Celery('simple_celery', backend='rpc://')


  @app.task
  def remote_objective(x):
      return x * x

  @scheduler.custom(n_jobs=4)
  def objective(params_batch):
      jobs = celery.group(remote_objective.s(params['x']) for params in params_batch)()
      return jobs.get()

  param_space = dict(x=range(-10, 10))

  tuner = Tuner(param_space, objective)
  results = tuner.minimize()
  ```
  A working example to tune hyperparameters of KNN using Celery is [here](https://github.com/ARM-software/mango/tree/master/examples/knn_celery.py).

  <!--
  <a name="ObjectiveFunction"></a>

  The serial objective function has the following structure.

  ```python
  def objective_function(params_list):
      evaluations = []
      for hyper_par in params_list:
          result =  evaluate_function_on_hyper_par
          evaluations.append(result)
      return evaluations
  ```
  The objective function is called with the input list of hyper parameters. Each element of the list is the dictionary which is a sample drawn from the domain space of variables. Mango expects the objective function to return the list of
  evaluations which has the same size as the args_list. Each value of the evaluations list is the function evaluated at hyperparameters
  of params_list in the same order. A rich set of objective functions are shown in the [examples](https://github.com/ARM-software/mango/tree/master/examples). The size of the params_list is controlled by the batch_size configuration parameter of Mango. By default,
  batch_size is 1. The configuration parameters of Mango are explained in the [Mango Configurations](#MangoConfigurations) section.

  The sample skeleton of the Celery based parallel objective function in Mango is as following.

  ```python
  def objective_celery(params_list):
      process_queue = []
      for par in params_list:
          process = train_clf.delay(par)
          process_queue.append((process, par))
      evals = []
      params = []
      for process, par in process_queue:
          result = process.get()
          evals.append(result)
          params.append(par)
      return params, evals
  ```
  -->

  <a name="MangoConfigurations"></a>


  The default configuration parameters used by the Mango as below:
  ```python
  {'param_dict': ...,
   'userObjective': ...,
   'domain_size': 5000,
   'initial_random': 1,
   'num_iteration': 20,
   'batch_size': 1}
  ```
  The configuration parameters are:
  - *domain_size*: The size which is explored in each iteration by the gaussian process. Generally, a larger size is preferred if higher dimensional functions are optimized. More on this will be added with details about the internals of bayesian optimization.
  - *initial_random*: The number of random samples tried. Note: Mango returns all the random samples together. Users can exploit this to parallelize the random runs without any constraint.
  - *num_iteration*: The total number of iterations used by Mango to find the optimal value.
  - *batch_size*: The size of args_list passed to the objective function for parallel evaluation. For larger batch sizes, Mango internally uses intelligent sampling to decide the optimal samples to evaluate.
  - *early_stopping*: A Callable to specify custom stopping criteria. The callback has the following signature:
     ```python
    def early_stopping(results):
        '''
            results is the same as dict returned by tuner
            keys available: params_tries, objective_values,
                best_objective, best_params
        '''
        ...
        return True/False
    ```
      Early stopping is one of Mango's important features that allow to early terminate the current parallel search
      based on the custom user-designed criteria, such as the total optimization time spent, current validation accuracy
      achieved, or improvements in the past few iterations. For usage see early stopping examples [notebook](https://github.com/ARM-software/mango/blob/master/examples/EarlyStopping.ipynb).
  - *constraint*: A callable to specify constraints on parameter space. It has the following
    signature:
    ```python
    def constraint(samples: List[dict]) -> List[bool]:
      '''
          Given a list of samples (each sample is a dict with parameter names as keys)
          Returns a list of True/False elements indicating whether the corresponding sample
          satisfies the constraints or not
      '''
    ```
    See [this](<examples/Test functions for constrained optimization.ipynb>) notebook for an example.
  - *initial_custom*: A list of initial evaluation points to warm up the optimizer instead of random sampling.
  It can be either:
    - A list of dict with parameters. For example, for a search space with two parameters `x1` and `x2` the input could be:
    `[{'x1': 10, 'x2': -5}, {'x1': 0, 'x2': 10}]`.
    - A list of tuple with parameters and objective function values. For example, if the objective function is to add
    `x1` and `x2` the input could be:
    `[({'x1': 10, 'x2': -5}, 5), ({'x1': 0, 'x2': 10}, 10)]`.

    This allows the user to customize the initial evaluation points and therefore guide the optimization process.
  It also enables starting the optimizer from the results of a previous tuner run (see [this](<examples/warmup.ipynb>) notebook for a working example).
  Note that if `initial_custom` option is given then `initial_random` is ignored.
  - *scale_params*: `True` or `False` (default: `False`). Scales the search space parameter space using `MinMaxScaler`. Can be useful when the range of parameters is not comparable like below:
  ```python
  {
      'x': uniform(-1, 2), # -1 to 1
      'y': uniform(-1000, 2000) # -1000 to 1000
  }
  ```
  However, use this option with caution as it could have unintended consequences.



  The configuration options can be modified, as shown below:
  ```python
  conf_dict = dict(num_iteration=40, domain_size=10000, initial_random=3)

  tuner = Tuner(param_dict, objective, conf_dict)
  ```

  <a name="AdditionalFeatures"></a>


  At runtime, failed evaluations are widespread in production deployments. Mango abstractions enable users to make progress even in the presence of failures by only using the correct evaluations. The syntax can return the successful evaluation, and the user can flexibly keep track of failures, for example, using timeouts. Examples showing the usage of Mango in the presence of failures: [serial execution](https://github.com/ARM-software/mango/blob/master/examples/Failure_Handling.ipynb) and [parallel execution](https://github.com/ARM-software/mango/blob/master/examples/Failure_Handling_Parallel.ipynb)


  Mango can also do an efficient neural architecture search. An example on the MNIST dataset to search for optimal filter sizes, the number of filters, etc., is [available](https://github.com/ARM-software/mango/blob/master/examples/NAS_Mnist.ipynb).

  More extensive examples are available in the [THIN-Bayes](https://github.com/ARM-software/mango/tree/master/examples/THIN-Bayes) folder doing *Neural Architecture Search* for a class of neural networks and classical models for different regression and classification tasks.

  <!--
  <a name="Celery"></a>

  User-defined objective function can be scheduled on local, cluster or cloud infrastructure. The objective function scheduler
  is entirely independent of the Mango. This design was chosen to enable the scheduling of varied resource objective function according to developer needs. We have included examples using [Celery](http://www.celeryproject.org/). In the sample
  examples, celery workers are used to evaluate the objective function in parallel. These examples assume celery is installed, and workers
  are running. Default celery configurations can be modified in the [file](https://github.com/ARM-software/mango/blob/master/examples/classifiers/celery.py).

  - [KNN example using celery workers](https://github.com/ARM-software/mango/blob/master/examples/KNN_Celery.ipynb)
  - [Prophet example using celery workers](https://github.com/ARM-software/mango/blob/master/examples/Prophet_Celery.ipynb)

  More examples will be included to show the scheduling of objective function using local threads/processes. By default examples schedule
  the objective function on the local machine itself.

  <a name ="mangoAlgorithms"></a>

  The optimization algorithms in Mango are based on widely used Bayesian optimization techniques, extended to sample a batch of configurations in parallel. Currently, Mango provides two parallel optimization algorithms that use the upper confidence bound as the acquisition function. The first algorithm uses hallucination combined with exponential rescaling of the surrogate function to select a batch. In the second algorithm, we create clusters of acquisition function in spatially distinct search spaces, and select the maximum value within each cluster to create the batch.

  <a name="contactDetails"></a>

  Details about specifying parameter/variable domain space, user objective function, and internals of Mango will be added.
  Please stay tuned.
  -->

  <a name="CASHFeature"></a>

  Mango now provides a novel functionality of combined classifier selection and optimization. It allows developers to directly specify a set of classifiers along with their different hyperparameter spaces. Mango internally finds the best classifier along with the optimal parameters with the least possible number of overall iterations. The examples are  available [here](https://github.com/ARM-software/mango/tree/master/benchmarking/MetaTuner_Examples)

  The important parts in the skeletion code are as below.

  ```python
  from mango import MetaTuner



  param_space_list = [param_space1, param_space2, param_space3, param_space4, ..]
  objective_list = [objective_1, objective_2, objective_3, objective_4, ..]

  metatuner = MetaTuner(param_space_list, objective_list)

  results = metatuner.run()

  print('best_objective:',results['best_objective'])
  print('best_params:',results['best_params'])
  print('best_objective_fid:',results['best_objective_fid'])

  ```



  <a name="CorePapers"></a>


  More technical details are available in the [Mango paper-1 (ICASSP 2020)](https://arxiv.org/pdf/2005.11394.pdf) and [Mango paper-2 (CogMI 2021)](https://drive.google.com/file/d/1uzcTUfLM3JSc47RLQJin-YzybwNl6BZO/view)
  Please cite them as:
  ```
  @inproceedings{sandha2020mango,
    title={Mango: A Python Library for Parallel Hyperparameter Tuning},
    author={Sandha, Sandeep Singh and Aggarwal, Mohit and Fedorov, Igor and Srivastava, Mani},
    booktitle={ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
    pages={3987--3991},
    year={2020},
    organization={IEEE}
  }
  ```
  ```
  @inproceedings{sandha2021mango,
    title={Enabling Hyperparameter Tuning of Machine Learning Classifiers in Production},
    author={Sandha, Sandeep Singh and Aggarwal, Mohit and Saha, Swapnil Sayan and Srivastava, Mani},
    booktitle={CogMI 2021, IEEE International Conference on Cognitive Machine Intelligence},
    year={2021},
    organization={IEEE}
  }
  ```

  <a name="ApplicationPapers"></a>

  ```
  @article{saha2022auritus,
    title={Auritus: An open-source optimization toolkit for training and development of human movement models and filters using earables},
    author={Saha, Swapnil Sayan and Sandha, Sandeep Singh and Pei, Siyou and Jain, Vivek and Wang, Ziqi and Li, Yuchen and Sarker, Ankur and Srivastava, Mani},
    journal={Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies},
    volume={6},
    number={2},
    pages={1--34},
    year={2022},
    publisher={ACM New York, NY, USA}
  }
  ```
  ```
  @article{saha2022tinyodom,
    title={Tinyodom: Hardware-aware efficient neural inertial navigation},
    author={Saha, Swapnil Sayan and Sandha, Sandeep Singh and Garcia, Luis Antonio and Srivastava, Mani},
    journal={Proceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies},
    volume={6},
    number={2},
    pages={1--32},
    year={2022},
    publisher={ACM New York, NY, USA}
  }
  ```
  ```
  @article{saha2022thin,
    title={THIN-Bayes: Platform-Aware Machine Learning for Low-End IoT Devices},
    author={Saha, Swapnil Sayan and Sandha, Sandeep Singh and Aggarwal, Mohit and Srivastava, Mani},
    year={2022}
  }
  ```




  Slides explaining Mango abstractions and design choices are available. [Mango Slides-1](https://github.com/ARM-software/mango/blob/master/documents/Mango_github_slides.pdf), [Mango Slides-2](https://drive.google.com/file/d/1_sUOnbW-LkHMMcjq_WgzabN7IQ-wBRgn/view).



  Please take a look at [open issues](https://github.com/ARM-software/mango/issues) if you are looking for areas to contribute to.



  For any questions feel free to reach out by creating an issue [here](https://github.com/ARM-software/mango/issues/new).


pkgId: ed16cba1c351a9ab875e0123c9f0e3bf9f6fa72855d41a446508fa5a1d4841fe
name: python-arm-pytorch-utilities
arch: src
version: 0.4.3
epoch: 0
release: 1
summary: Utilities for working with pytorch
url: https://github.com/UM-ARM-Lab/arm_pytorch_utilities
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arm-pytorch-utilities-0.4.3-1.src.rpm
checksum_type: sha256
description:
  - PyTorch (1.0+)
  - python 3


  ```shell
  pip install arm-pytorch-utilities
  ```
  You can also install in editable mode with `python3 -m pip install -e .` so that modifications
  in the repository are automatically synced with the installed library


  Install `pytest` if you don't have it, then run
  ```
  py.test
  ```

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


pkgId: f0745ef57a4e290b0de0f77ca740ab93d1e834f36f944351a2fad5f30aa79087
name: python-arm-test-data
arch: src
version: 0.0.13
epoch: 0
release: 1
summary: Provides utility functions for accessing data repository for ARM data examples/notebooks
url: https://pypi.org/project/arm-test-data/
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arm-test-data-0.0.13-1.src.rpm
checksum_type: sha256
description:
  [![CI](https://github.com/ARM-DOE/arm-test-data/actions/workflows/ci.yaml/badge.svg)](https://github.com/ARM-DOE/arm-test-data/actions/workflows/ci.yaml)
  [![PyPI Version](https://img.shields.io/pypi/v/arm-test-data.svg)](https://pypi.python.org/pypi/arm-test-data)
  [![Conda Version](https://img.shields.io/conda/vn/conda-forge/arm-test-data.svg)](https://anaconda.org/conda-forge/arm-test-data)

  A place to share atmospheric data with the community, shared throughout the Atmospheric Radiation Measurement user facility and beyond!



  These files are used as sample data in openradar examples/notebooks and are downloaded by `arm-test-data` package:

  - `201509021500.bi`
  - `AAFNAV_COR_20181104_R0.ict`
  - `NEON.D18.BARR.DP1.00002.001.000.010.001.SAAT_1min.2022-10.expanded.20221107T205629Z.csv`
  - `NEON.D18.BARR.DP1.00002.001.sensor_positions.20221107T205629Z.csv`
  - `NEON.D18.BARR.DP1.00002.001.variables.20221201T110553Z.csv`
  - `anltwr_mar19met.data`
  - `ayp22199.21m`
  - `ayp22200.00m`
  - `brw21001.dat`
  - `brw_12_2020_hour.dat`
  - `brw_CCl4_Day.dat`
  - `co2_brw_surface-insitu_1_ccgg_MonthlyData.txt`
  - `ctd21125.15w`
  - `ctd22187.00t.txt`
  - `enametC1.b1.20221109.000000.cdf`
  - `gucmetM1.b1.20230301.000000.cdf`
  - `list_of_files.txt`
  - `maraosmetM1.a1.20180201.000000.nc`
  - `marirtsstM1.b1.20190320.000000.nc`
  - `marnavM1.a1.20180201.000000.nc`
  - `met_brw_insitu_1_obop_hour_2020.txt`
  - `met_lcl.nc`
  - `mosaossp2M1.00.20191216.000601.raw.20191216000000.ini`
  - `mosaossp2M1.00.20191216.130601.raw.20191216x193.sp2b`
  - `mosaossp2auxM1.00.20191217.010801.raw.20191216000000.hk`
  - `nsacloudphaseC1.c1.20180601.000000.nc`
  - `nsasurfspecalb1mlawerC1.c1.20160609.080000.nc`
  - `sgp30ebbrE13.b1.20190601.000000.nc`
  - `sgp30ebbrE32.b1.20191125.000000.nc`
  - `sgp30ebbrE32.b1.20191130.000000.nc`
  - `sgp30ecorE14.b1.20190601.000000.cdf`
  - `sgpaerich1C1.b1.20190501.000342.nc`
  - `sgpaosacsmE13.b2.20230420.000109.nc`
  - `sgpaosccn2colaE13.b1.20170903.000000.nc`
  - `sgpbrsC1.b1.20190705.000000.cdf`
  - `sgpceilC1.b1.20190101.000000.nc`
  - `sgpco2flx4mC1.b1.20201007.001500.nc`
  - `sgpdlppiC1.b1.20191015.120023.cdf`
  - `sgpdlppiC1.b1.20191015.121506.cdf`
  - `sgpirt25m20sC1.a0.20190601.000000.cdf`
  - `sgpmetE13.b1.20190101.000000.cdf`
  - `sgpmetE13.b1.20190102.000000.cdf`
  - `sgpmetE13.b1.20190103.000000.cdf`
  - `sgpmetE13.b1.20190104.000000.cdf`
  - `sgpmetE13.b1.20190105.000000.cdf`
  - `sgpmetE13.b1.20190106.000000.cdf`
  - `sgpmetE13.b1.20190107.000000.cdf`
  - `sgpmetE13.b1.20190508.000000.cdf`
  - `sgpmetE13.b1.20210401.000000.csv`
  - `sgpmetE13.b1.yaml`
  - `sgpmetE15.b1.20190508.000000.cdf`
  - `sgpmetE31.b1.20190508.000000.cdf`
  - `sgpmetE32.b1.20190508.000000.cdf`
  - `sgpmetE33.b1.20190508.000000.cdf`
  - `sgpmetE34.b1.20190508.000000.cdf`
  - `sgpmetE35.b1.20190508.000000.cdf`
  - `sgpmetE36.b1.20190508.000000.cdf`
  - `sgpmetE37.b1.20190508.000000.cdf`
  - `sgpmetE38.b1.20190508.000000.cdf`
  - `sgpmetE39.b1.20190508.000000.cdf`
  - `sgpmetE40.b1.20190508.000000.cdf`
  - `sgpmetE9.b1.20190508.000000.cdf`
  - `sgpmet_no_time.nc`
  - `sgpmet_test_time.nc`
  - `sgpmfrsr7nchE11.b1.20210329.070000.nc`
  - `sgpmmcrC1.b1.1.cdf`
  - `sgpmmcrC1.b1.2.cdf`
  - `sgpmplpolfsC1.b1.20190502.000000.cdf`
  - `sgprlC1.a0.20160131.000000.nc`
  - `sgpsebsE14.b1.20190601.000000.cdf`
  - `sgpsirsE13.b1.20190101.000000.cdf`
  - `sgpsondewnpnC1.b1.20190101.053200.cdf`
  - `sgpstampE13.b1.20200101.000000.nc`
  - `sgpstampE31.b1.20200101.000000.nc`
  - `sgpstampE32.b1.20200101.000000.nc`
  - `sgpstampE33.b1.20200101.000000.nc`
  - `sgpstampE34.b1.20200101.000000.nc`
  - `sgpstampE9.b1.20200101.000000.nc`
  - `sodar.20230404.mnd`
  - `twpsondewnpnC3.b1.20060119.050300.custom.cdf`
  - `twpsondewnpnC3.b1.20060119.112000.custom.cdf`
  - `twpsondewnpnC3.b1.20060119.163300.custom.cdf`
  - `twpsondewnpnC3.b1.20060119.231600.custom.cdf`
  - `twpsondewnpnC3.b1.20060120.043800.custom.cdf`
  - `twpsondewnpnC3.b1.20060120.111900.custom.cdf`
  - `twpsondewnpnC3.b1.20060120.170800.custom.cdf`
  - `twpsondewnpnC3.b1.20060120.231500.custom.cdf`
  - `twpsondewnpnC3.b1.20060121.051500.custom.cdf`
  - `twpsondewnpnC3.b1.20060121.111600.custom.cdf`
  - `twpsondewnpnC3.b1.20060121.171600.custom.cdf`
  - `twpsondewnpnC3.b1.20060121.231600.custom.cdf`
  - `twpsondewnpnC3.b1.20060122.052600.custom.cdf`
  - `twpsondewnpnC3.b1.20060122.111500.custom.cdf`
  - `twpsondewnpnC3.b1.20060122.171800.custom.cdf`
  - `twpsondewnpnC3.b1.20060122.232600.custom.cdf`
  - `twpsondewnpnC3.b1.20060123.052500.custom.cdf`
  - `twpsondewnpnC3.b1.20060123.111700.custom.cdf`
  - `twpsondewnpnC3.b1.20060123.171600.custom.cdf`
  - `twpsondewnpnC3.b1.20060123.231500.custom.cdf`
  - `twpsondewnpnC3.b1.20060124.051500.custom.cdf`
  - `twpsondewnpnC3.b1.20060124.111800.custom.cdf`
  - `twpsondewnpnC3.b1.20060124.171700.custom.cdf`
  - `twpsondewnpnC3.b1.20060124.231500.custom.cdf`
  - `twpvisstgridirtemp.c1.20050705.002500.nc`
  - `vdis.b1`



  To add a new dataset file, please follow these steps:

  1. Add the dataset file to the `data/` directory
  2. From the command line, run `python make_registry.py` script to update the registry file residing in `arm-test-data/registry.txt`
  3. Commit and push your changes to GitHub



  - Ensure the `arm-test-data` package is installed in your environment

    ```bash
    python -m pip install arm-test-data

    

    python -m pip install git+https://github.com/ARM-DOE/arm-test-data

    

    conda install -c conda-forge arm-test-data
    ```

  - Import `DATASETS` and inspect the registry to find out which datasets are available

    ```python
    In [1]: from arm_test_data import DATASETS

    In [2]: DATASETS.registry_files
    Out[2]: ['sample_file.nc`]
    ```

  - To fetch a data file of interest, use the `.fetch` method and provide the filename of the data file. This will

    - download and cache the file if it doesn't exist already.
    - retrieve and return the local path

    ```python
    In [4]: filepath = DATASETS.fetch('sample_data.nc')

    In [5]: filepath
    Out[5]: '/Users/mgrover/Library/Caches/arm-test-data/sample_sgp_data.nc'
    ```

  - Once you have access to the local filepath, you can then use it to load your dataset into pandas or xarray or your package of choice:

    ```python
    In [6]: radar = pyart.io.read(filepath)
    ```



  The default cache location (where the data are saved on your local system) is dependent on the operating system. You can use the `locate()` method to identify it:

  ```python
  from arm_test_data import locate
  locate()
  ```

  The location can be overwritten by the `ACT_TEST_DATA_DIR` environment
  variable to the desired destination.

rpm_license:
  MIT License  Copyright (c) 2023 ARM User Facility  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: 12ec4efb2b824eeb5c61688a19f24628e19c8d35018dcb9e3da13f97834be9b8
name: python-arm64-tester
arch: src
version: 1.2.4
epoch: 0
release: 1
summary: please add a summary manually as the author left a blank one
url: https://pypi.org/project/arm64-tester/
rpm_license: MIT License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arm64-tester-1.2.4-1.src.rpm
checksum_type: sha256
description:
  - [1. Installation](#1-installation)
  - [2. Running](#2-running)
  - [3. Usage](#3-usage)
  - [4. File syntax and structure](#4-file-syntax-and-structure)
    - [4.1. Available data types](#41-available-data-types)
      - [4.1.1. Primitive data types](#411-primitive-data-types)
      - [4.1.2. Array data types](#412-array-data-types)
    - [4.2. subroutines.yaml](#42-subroutinesyaml)
    - [4.3. tests.yaml](#43-testsyaml)
    - [4.4. submission.zip](#44-submissionzip)
  - [5. Results](#5-results)

  Using Docker:
  ```bash
  $ docker pull luist188/mast-tool
  ```

  1. Place the input files inside any directory.
  2. Run the image with a shared volume pointing to the input directory: `docker run -v input:destination -it luist188/mast-tool` (you can learn more about `docker run` usage [here](https://docs.docker.com/engine/reference/run/))
  3. Run the alias command (assure you are using `/bin/bash`) `mast` or run `python main.py` in the tool's source.

  ```console
  $ mast [-h] -sr SR -t T -sm SM [SM ...] [-gfd GFD] [-ffd FFD] [-grf GRF] [-tout TOUT] [-fpre FPRE]
  $ mast [args]
  Options:
    --help, -h                Show help                                         [boolean]
    -sr <subroutines.yaml>    .yaml file containing subroutine declaration      [required] [string]
    -t <tests.yaml>           .yaml file containing the test cases              [required] [string]
    -sm <submission.zip...>   .zip files containing user submission             [required] [string array]
    -gfd <directory>          path to the directory to store temporary files
      (e.g., compiled binaries)                                                 [default:grading] [string]
    -ffd <directory>          path to the directory to store the grading for
      each submission                                                           [default:feedback] [string]
    -tout <timeout>           float timeout value                               [default:2.0] [float]
    -fpre <precision>         floating point threshold for comparing floating
      points in test cases                                                      [default:1e-6] [float]
  ```



  - `int`
  - `long`
  - `float`
  - `double`
  - `char`

  - `char*/string`
  - `array int`
  - `array long`
  - `array float`
  - `array double`
  - `array char`

  The input file for the subroutine declaration has to follow a specific structure and syntax described as follows:
  ```yaml
  foo:
    params:
      - int
      - array char
      - array int
      - array int
    return:
      - int
      - array int
  bar:
    params:
      - long
    return:
      - long
  ```
  The subroutine name has to match the `.s` to test and is case insensitive. Thus, the subroutine `foo` or `bar` is going to check any `.s` file that matches its name case insensitive. All subroutines must contain an array of parameters, `params`, and an array of returns, `return`.

  The input file for the test cases declaration has to follow a specific structure and syntax described as follows:
  ```yaml
  bar:
    - inputs:
      - 6
      outputs:
      - 36
      weight: 0.5
    - inputs:
      - 5
      outputs:
      - 25
      weight: 0.5
  ```
  The root declaration of a test case must match the name declared in the `subroutines.yaml` file. Test cases have an array of inputs that has a list of outputs and a test weight. The sum of the test weights must be 1.0.

  The submission `zip` file must contain a `.s` file in its root. For example, for the subroutine `foo` and `bar` the `zip` structure should be as follows:
  ```tree
  submission.zip
  ├── foo.s
  └── bar.s
  ```

  For each submission file a `.json` file is created in the feedback directory with the same name of the `.zip` file. The file contains all information about compilation status and test cases. In addition, a simplified version of the result of all submissions is created in a `result.json`. The content of the files look as follows:
  File **submission.json**
  ```json
  [
      {
          "name": "foo",
          "compiled": true,
          "ok": true,
          "passed_count": 2,
          "test_count": 2,
          "score": 1,
          "tests": [
              {
                  "weight": 1,
                  "run": true,
                  "input": [
                      6,
                      ["-", "+", "+", "-", "-", "+"],
                      [1, 2, 3, 0, 1, -25],
                      [13, 2, 8, 4, 5, 25]
                  ],
                  "output": [
                      "0",
                      ["12", "4", "11", "4", "4", "0"]
                  ],
                  "passed": true
              }
          ]
      },
      {
          "name": "bar",
          "compiled": true,
          "ok": true,
          "passed_count": 2,
          "test_count": 2,
          "score": 1,
          "tests": [
              {
                  "weight": 0.5,
                  "run": true,
                  "input": [
                      6
                  ],
                  "output": [
                      "36"
                  ],
                  "passed": true
              },
              {
                  "weight": 0.5,
                  "run": true,
                  "input": [
                      5
                  ],
                  "output": [
                      "25"
                  ],
                  "passed": true
              }
          ]
      }
  ]
  ```
  File **result.json**
  ```json
  [
      {
          "submission_name": "submission",
          "subroutines": [
              {
                  "name": "foo",
                  "score": 0
              },
              {
                  "name": "bar",
                  "score": 0.5
              }
          ]
      },
      {
          "submission_name": "submission2",
          "subroutines": [
              {
                  "name": "foo",
                  "score": 1
              },
              {
                  "name": "bar",
                  "score": 1
              }
          ]
      }
  ]
  ```

  [MIT](https://choosealicense.com/licenses/mit/)


pkgId: bbca0ceb3613ca9d4d12f835d4e3caafb48e09694e0b37f31a9612580ad2feb0
name: python-armilla-watsonx
arch: src
version: 0.0.1
epoch: 0
release: 1
summary: Integration between Watsonx.ai and Armilla AI
url: https://github.com/pypa/sampleproject
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armilla-watsonx-0.0.1-1.src.rpm
checksum_type: sha256
description:
  ArmillaWatsonX is a Python wrapper around the watsonx_ai API that simplifies API calls and monitors via Loggly.


  1. Setup your watsonx.ai account and obtain the necessary credentials. You can find the official IBM Watsonx documentation for API keys [here](https://cloud.ibm.com/docs/account?topic=account-userapikey&interface=ui).
  2. Clone this repository and run `pip install -r requirements.txt`
  3. Retrieve a Loggly customer token from Armilla and set the env variable as `CUSTOMER_TOKEN='<customer-token>'`
  4. You can optionally set LOGGER_TYPE="LOCAL" to print detailed logs to the console


  Import the necessary libraries and they are ready to use.


  ```python
  from Armilla_AI import ArmillaAPIClient as APIClient
  from Armilla_AI import ArmillaPromptTemplate as PromptTemplate
  from Armilla_AI import ArmillaSequentialChain as SequentialChain
  from Armilla_AI import ArmillaWatsonxLLM as WatsonxLLM
  ```


  We will be following the LangChain demo outlined by IBM [here](https://github.com/IBM/watson-machine-learning-samples/blob/master/cloud/notebooks/python_sdk/deployments/foundation_models/Use%20watsonx%2C%20and%20LangChain%20to%20make%20a%20series%20of%20calls%20to%20a%20language%20model.ipynb)


  Ensure the correct packages and version are installed
  ```python
  !pip install "langchain_ibm==0.1.12" | tail -n 1
  !pip install "langchain==0.2.16" | tail -n 1
  !pip install "pydantic>=1.10.0" | tail -n 1
  ```


  Obtain your watsonx API key, URL, and project id and set them as environment variables. You will need to create a [Watson Machine Learning Service](https://cloud.ibm.com/catalog/services/watson-machine-learning) instance first. Documentation can be found [here](https://dataplatform.cloud.ibm.com/docs/content/wsj/getting-started/wml-plans.html?context=wx&audience=wdp). You can optionally deploy your model in a deployment space. You will need a space_id and steps can be found [here](https://www.ibm.com/docs/en/watsonx/saas?topic=spaces-creating-deployment).
  ```
  export API_KEY="<insert apikey>"
  export PROJECT_ID="<insert project id>"
  export SPACE_ID="<insert space id>"
  export CUSTOMER_TOKEN="<insert customer token>"
  ```


  Set the model parameters
  ```python
  from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
  from ibm_watsonx_ai.foundation_models.utils.enums import DecodingMethods

  api_key = os.getenv('API_KEY')
  project_id = os.getenv('PROJECT_ID')

  credentials = {
      "apikey": api_key,
      "url": "https://us-south.ml.cloud.ibm.com"
  }

  parameters = {
      GenParams.DECODING_METHOD: DecodingMethods.SAMPLE.value,
      GenParams.MAX_NEW_TOKENS: 100,
      GenParams.MIN_NEW_TOKENS: 1,
      GenParams.TEMPERATURE: 0.5,
      GenParams.TOP_K: 50,
      GenParams.TOP_P: 1
  }

  ai_params = {
      "url": credentials["apikey"],
      "apikey": api_key,
      "project_id": project_id,
      "generation_parameters": parameters
  }
  ```


  Import functions from Armilla_AI and LangChain to create the chain
  ```python
  def chain_text_generator(params=ai_params):

      from ibm_watsonx_ai.foundation_models.utils.enums import ModelTypes
      from langchain.chains import LLMChain
      from Armilla_AI import ArmillaPromptTemplate as PromptTemplate
      from Armilla_AI import ArmillaSequentialChain as SequentialChain
      from Armilla_AI import ArmillaWatsonxLLM as WatsonxLLM

      url = params["url"]
      apikey = params["apikey"]
      project_id = params['project_id']
      parameters = params['generation_parameters']
      flan_ul2_llm = WatsonxLLM(model_id=ModelTypes.FLAN_UL2.value, url=url, apikey=apikey, project_id=project_id, params=parameters)
      flan_t5_llm = WatsonxLLM(model_id=ModelTypes.FLAN_T5_XXL.value, url=url, apikey=apikey, project_id=project_id)
      prompt_1 = PromptTemplate(input_variables=["topic"], template="Generate a random question about {topic}: Question: ")
      prompt_2 = PromptTemplate(input_variables=["question"], template="Answer the following question: {question}")
      prompt_to_flan_ul2 = LLMChain(llm=flan_ul2_llm, prompt=prompt_1, output_key='question')
      flan_to_t5 = LLMChain(llm=flan_t5_llm, prompt=prompt_2, output_key='answer')
      chain = SequentialChain(chains=[prompt_to_flan_ul2, flan_to_t5], input_variables=["topic"], output_variables=['question', 'answer'])

      def score(payload):
          answer = chain.invoke({"topic": payload["input_data"][0]['values'][0][0]})
          return {'predictions': [{'fields': ['topic', 'question', 'answer'], 'values': [answer['topic'], answer['question'], answer['answer']]}]}

      return score
  ```


  Run a sample test locally before deploying
  ```python
  sample_payload = {
      "input_data": [
          {
              "fields": ["topic"],
              "values": [["life"]]
          }
      ]
  }

  inference = chain_text_generator()
  inference(sample_payload)
  ```



  ```python
  config_yml =\
  """
  name: python311
  channels:
    - empty
  dependencies:
    - pip:
      - langchain_ibm==0.1.12
      - langchain==0.2.16
      - pydantic>=1.10.0
  prefix: /opt/anaconda3/envs/python311
  """

  with open("config.yaml", "w", encoding="utf-8") as f:
      f.write(config_yml)
  ```

  We need to import ArmillaAPIClient to store the new package extension.
  ```python
  from Armilla_AI import ArmillaAPIClient as APIClient

  client = APIClient(credentials)
  space_id = os.getenv('SPACE_ID')
  client.set.default_space(space_id)
  base_sw_spec_id = client.software_specifications.get_id_by_name("runtime-24.1-py3.11")
  meta_prop_pkg_extn = {
      client.package_extensions.ConfigurationMetaNames.NAME: "langchain watsonx.ai env",
      client.package_extensions.ConfigurationMetaNames.DESCRIPTION: "Environment with langchain",
      client.package_extensions.ConfigurationMetaNames.TYPE: "conda_yml"
  }

  pkg_extn_details = client.package_extensions.store(meta_props=meta_prop_pkg_extn, file_path="config.yaml")
  pkg_extn_id = client.package_extensions.get_id(pkg_extn_details)
  pkg_extn_url = client.package_extensions.get_href(pkg_extn_details)
  ```

  ```python
  meta_prop_sw_spec = {
      client.software_specifications.ConfigurationMetaNames.NAME: "langchain watsonx.ai custom software specification",
      client.software_specifications.ConfigurationMetaNames.DESCRIPTION: "Software specification for statsmodels",
      client.software_specifications.ConfigurationMetaNames.BASE_SOFTWARE_SPECIFICATION: {"guid": base_sw_spec_id}
  }

  sw_spec_details = client.software_specifications.store(meta_props=meta_prop_sw_spec)
  sw_spec_id = client.software_specifications.get_id(sw_spec_details)
  client.software_specifications.add_package_extension(sw_spec_id, pkg_extn_id)
  ```


  ```python
  meta_props = {
      client.repository.FunctionMetaNames.NAME: "SequenceChain LLM function",
      client.repository.FunctionMetaNames.SOFTWARE_SPEC_ID: sw_spec_id
  }

  function_details = client.repository.store_function(meta_props=meta_props, function=chain_text_generator)
  function_id = client.repository.get_function_id(function_details)
  ```


  ```python
  metadata = {
      client.deployments.ConfigurationMetaNames.NAME: "Deployment of LLMs chain function",
      client.deployments.ConfigurationMetaNames.ONLINE: {}
  }

  function_deployment = client.deployments.create(function_id, meta_props=metadata)
  ```


  Generate the text custom inference endpoint
  ```python
  deployment_id = client.deployments.get_id(function_deployment)
  client.deployments.score(deployment_id, sample_payload)
  ```

  And that's it!


pkgId: c16291f8231105ef71d60a6221de358803e2e973cdcefce3d145092d6c7ea0cb
name: python-armonik
arch: src
version: 3.21.0
epoch: 0
release: 1
summary: GRPC python binding for the ArmoniK orchestrator API
url: https://github.com/aneoconsulting/ArmoniK.Api
rpm_license: Apache v2.0 LICENSE
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armonik-3.21.0-1.src.rpm
checksum_type: sha256
description:
  This folder contains the necessary scripts to generate the ArmoniK.Api Python package. Please note that while the package generation is platform dependent, the generated package *should* be compatible with Linux and Windows.


  At each release, we provide a prepackaged version of ArmoniK.Api available on PyPI here : [https://pypi.org/project/armonik](https://pypi.org/project/armonik).
  To install the package to your current Python environment, you can use pip :
  ```
  pip install armonik
  ```




  Requirements :
  - Python >= 3.7
  - Python3-venv
  - Pip3
  - Bash

  If the python command doesn't link to python3 on your system, you may be able to install the package python-is-python3, which links python to python3.

  To generate the package from sources, run the [proto2python.sh](proto2python.sh) script from its folder. You need to specify a directory where the virtual environment used for the build will be located. For example the following command will generate the packages and will create the build environment "pyvenv" in the current user's home directory:

  ```bash
  ./proto2python.sh ~/pyvenv
  ```

  3 folders will be created :
  - generated : contains the source files used to create the package
  - build : contains the source files used to create the wheel package
  - pkg : contains the sdist and wheel packages

  Instead of running the script you can install the armonik package in "editable" mode, allowing you to make changes to the source code, and the changes will be reflected immediately without reinstalling the package.

   ```bash
   pip install -e ./packages/python
   ```


  From this directory, use the following command:
  ```code
  pip install pkg/armonik*.whl
  ```
  The generated package will be installed to your current python environment


  Coming soon





  Before running tests, ensure the following setup steps are completed:

  1. Install Dependencies:

  ```bash
  sudo apt install dotnet-sdk-6.0 jq
  ```

  2. Launch the Mock Server:

  Verify that port 5000 is available (Armonik and the mock server communicate on the same port, uninstall armonik if necessary):

  ```bash
  lsof -i :5000
  ```

  3. Launch the server from the project's root directory in a separate terminal:

  ```bash
  cd packages/csharp/ArmoniK.Api.Mock
  dotnet run
  ```



  The test environment utilizes a mock endpoint to assert if the ArmoniK service has been triggered. It leverages the requests library to query the /calls.json endpoint, examining the JSON response to validate the count of remote procedure calls made to specific services and methods

  ```bash
  curl localhost:5000/calls.json | jq
  ```





  Starting from gRPC version 1.57 and onward, it is necessary to explicitly specify the default authority when creating the gRPC channel. [more details](https://github.com/grpc/grpc/issues/34305)


pkgId: 322c4d0512dcbd2ef18f12c784a55302b27a3b61f3da8ab3e2c9894244cb4a93
name: python-armonik
arch: src
version: 3.22.0
epoch: 0
release: 1
summary: GRPC python binding for the ArmoniK orchestrator API
url: https://github.com/aneoconsulting/ArmoniK.Api
rpm_license: Apache v2.0 LICENSE
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armonik-3.22.0-1.src.rpm
checksum_type: sha256
description:
  This folder contains the necessary scripts to generate the ArmoniK.Api Python package. Please note that while the package generation is platform dependent, the generated package *should* be compatible with Linux and Windows.


  At each release, we provide a prepackaged version of ArmoniK.Api available on PyPI here : [https://pypi.org/project/armonik](https://pypi.org/project/armonik).
  To install the package to your current Python environment, you can use pip :
  ```
  pip install armonik
  ```




  Requirements :
  - Python >= 3.7
  - Python3-venv
  - Pip3
  - Bash

  If the python command doesn't link to python3 on your system, you may be able to install the package python-is-python3, which links python to python3.

  To generate the package from sources, run the [proto2python.sh](proto2python.sh) script from its folder. You need to specify a directory where the virtual environment used for the build will be located. For example the following command will generate the packages and will create the build environment "pyvenv" in the current user's home directory:

  ```bash
  ./proto2python.sh ~/pyvenv
  ```

  3 folders will be created :
  - generated : contains the source files used to create the package
  - build : contains the source files used to create the wheel package
  - pkg : contains the sdist and wheel packages

  Instead of running the script you can install the armonik package in "editable" mode, allowing you to make changes to the source code, and the changes will be reflected immediately without reinstalling the package.

   ```bash
   pip install -e ./packages/python
   ```


  From this directory, use the following command:
  ```code
  pip install pkg/armonik*.whl
  ```
  The generated package will be installed to your current python environment


  Coming soon





  Before running tests, ensure the following setup steps are completed:

  1. Install Dependencies:

  ```bash
  sudo apt install dotnet-sdk-6.0 jq
  ```

  2. Launch the Mock Server:

  Verify that port 5000 is available (Armonik and the mock server communicate on the same port, uninstall armonik if necessary):

  ```bash
  lsof -i :5000
  ```

  3. Launch the server from the project's root directory in a separate terminal:

  ```bash
  cd packages/csharp/ArmoniK.Api.Mock
  dotnet run
  ```



  The test environment utilizes a mock endpoint to assert if the ArmoniK service has been triggered. It leverages the requests library to query the /calls.json endpoint, examining the JSON response to validate the count of remote procedure calls made to specific services and methods

  ```bash
  curl localhost:5000/calls.json | jq
  ```

  In prevision of the API test, run the following command:

  ```bash
  curl localhost:5000/calls.json | jq '.Tasks'
  ```

  You should have as output:

  ```json
  {
    "GetTask": 0,
    "ListTasks": 0,
    "GetResultIds": 0,
    "CancelTasks": 0,
    "CountTasksByStatus": 0,
    "ListTasksDetailed": 0,
    "SubmitTasks": 0
  }
  ```



  Once the endpoint runs, you can initiate a gRPC channel to it with a Python client.

  Below is an example using a Tasks client and calling the `list_tasks` method:

  ```python
  import grpc
  import armonik.client
  with grpc.insecure_channel("localhost:5001") as channel:
      tasks_client = ArmoniKTasks(channel)
      tasks.client.list_tasks()
  ```

  Port `5001` is actually ArmoniK's control-plane endpoint.

  For the sake of simplicity, the example gRPC channel here is an insecure one. **You should never do that in production environment.**



  Execute the Python code snippet above and re-run command:

  ```bash
  curl localhost:5000/calls.json | jq '.Tasks'
  ```

  You should have as output:

  ```json
  {
    "GetTask": 0,
    "ListTasks": 0,
    "GetResultIds": 0,
    "CancelTasks": 0,
    "CountTasksByStatus": 0,
    "ListTasksDetailed": 1,
    "SubmitTasks": 0
  }
  ```

  You can see that attribute `ListTasksDetailed` was incremented, meaning that the API effectively handled your call !





  Starting from gRPC version 1.57 and onward, it is necessary to explicitly specify the default authority when creating the gRPC channel. [more details](https://github.com/grpc/grpc/issues/34305)


pkgId: f7b5c5fb2b72f6691cdac84dbbf9dd2cc5f0aa53ad451d5e3908fbf51d004f52
name: python-armorblox-sdk
arch: src
version: 0.1.4
epoch: 0
release: 1
summary: Armorblox SDK for Python
url: https://github.com/armorblox/armorblox-python-sdk
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armorblox-sdk-0.1.4-1.src.rpm
checksum_type: sha256
description:
  <img src="https://assets.armorblox.com/f/52352/775x159/8fa6246e47/logo_color.svg" width=387 alt="Armorblox logo">



  [![PyPI version](https://badge.fury.io/py/armorblox-sdk.svg)](https://badge.fury.io/py/armorblox-sdk)
  [![Apache-2 License](https://img.shields.io/badge/license-Apache2-blueviolet)](https://www.apache.org/licenses/LICENSE-2.0)

  This is an alpha version of the SDK with limited documentation and no support.



  Python 3.5+



  ```
  pip install armorblox-sdk
  ```



  ```
  from armorblox import client


  c = client.Client(api_key='your-api-key-here', instance_name='yourtenantname')


  incident_analysis = c.incidents.analysis(78143)


  incident_senders = c.incidents.senders(78143)



  incident_object = c.incidents.mail('d72c07bc789c30cb4d63d78ee2861f94add695f9c812e30cfb081b20d3e7e5e7')


  update_details = c.incidents.update(78143, body = {
                    "policyActionType": "DELETE",
                    "addSenderToException": False,
                    "actionProfileId": ""
                  })



  threat_incidents, next_page_token, total_incident_count = c.threats.list()


  incident = c.threats.get(44006)



  abuse_incidents, next_page_token, total_incident_count = c.abuse_incidents.list()


  abuse_incident = c.abuse_incidents.get(44200)



  dlp_incidents, next_page_token, total_incident_count = c.dlp_incidents.list()


  dlp_incident = c.dlp_incidents.get(44010)



  eac_incidents, next_page_token, total_incident_count = c.eac_incidents.list()


  eac_incident = c.eac_incidents.get(67)



  graymail_incidents, next_page_token, total_incident_count = c.graymail_incidents.list()


  graymail_incident = c.graymail_incidents.get(2627)



  next_page_token = None
  incidents = []
  while True:
      threats, next_page_token, total_incident_count = c.threats.list(page_token=next_page_token)
      incidents.extend(threats)
      if not next_page_token:
          break
  ```



  * Install [Poetry](https://python-poetry.org)
  * Clone the SDK repo & `cd` into it
  ```
  git clone https://github.com/armorblox/armorblox-python-sdk
  cd armorblox-python-sdk
  ```
  * Run `poetry install` to install the dependencies
  * Run `tox` to run the tests





  One-time setup
  ```
  poetry config repositories.test-pypi https://test.pypi.org/legacy/
  poetry config pypi-token.test-pypi <your-TestPyPI-token>
  ```

  Publishing
  ```
  poetry publish --build -r test-pypi
  ```

  Use
  ```
  pip install --index-url https://test.pypi.org/simple/ --no-deps armorblox-sdk
  ```
  to make sure the installation works correctly.



  One-time setup
  ```
  poetry config pypi-token.pypi <your-PyPI-token>
  ```

  Publishing
  ```
  poetry publish --build
  ```


pkgId: 70b458f8f2cd09b4c8ed7dd57e7aabc44b16050759ebb0d72757290e8883e2e5
name: python-armstrong.core.arm_wells
arch: src
version: 1.10.0
epoch: 0
release: 1
summary: Provides the basic well objects
url: http://github.com/armstrong/armstrong.core.arm_wells/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armstrong.core.arm_wells-1.10.0-1.src.rpm
checksum_type: sha256
description:
  Provides the basic content well code necessary for scheduling and arranging
  models inside Armstrong.
  You can use wells to change the order of content.  They are meant to be
  combined with querysets to allow your users to control what appears first in a
  list of content.
     out into real documentation.


pkgId: 707e169693009fe3a84d865a86c8d677b13aa89c3bef46883344eabe7b80312c
name: python-armulator
arch: src
version: 1.1.3
epoch: 0
release: 1
summary: A pure Python ARM processor emulator
url: https://github.com/matan1008/armulator
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-armulator-1.1.3-1.src.rpm
checksum_type: sha256
description:
  A pure python ARM emulator



  Install the last released version using `pip`:

  ```shell
  python3 -m pip install --user -U armulator
  ```


  Or install the latest version from sources:

  ```shell
  git clone git@github.com:matan1008/armulator.git
  cd pyiosbackup
  python3 -m pip install --user -U -e .
  ```



  To create a processor object, you need to import it first:
  ```python
  from armulator.armv6.arm_v6 import ArmV6
  ```

  Then you can just create it:

  ```python
  arm = ArmV6()
  ```
  Getting familiar with the Memory controller concept is crucial for using the processor.
  In short, there is one "hub" to which you can connect several controllers.
  A "Memory Controller" can be a stick of RAM, Memory mapped LCD screen or whatever you wish.

  For example, let's create a RAM controller:

  ```python
  from armulator.armv6.memory_types import RAM
  from armulator.armv6.memory_controller_hub import MemoryController

  mem = RAM(0x100)
  mc = MemoryController(mem, 0xF0000000, 0xF0000100)
  arm.mem.memories.append(mc)
  ```

  Now, trying to access a memory between 0xF0000000 and 0xF0000100, will access the `mem` object.
  You can also change the memory manually:

  ```python
  mem.write(0, 2, "\xfe\xe7")
  ```

  Another useful feature is playing with the memory protection or management unit,
  for example cancelling memory protection will look like:
  ```python
  arm.registers.sctlr.m = 0
  arm.take_reset()
  ```
  Please note that after changing internal features it is recommended to reset the processor.

  When running the armulator, you will probably want to start from a defined address, so:
  ```python

  arm.registers.branch_to(0x100)
  ```

  The last thing we need to do is to really run the processor, which can be done with:
  ```python
  arm.emulate_cycle()
  ```




  Running the tests can be done easily with pytest:

  ```shell
  python3 -m pytest tests -vv
  ```



  * At first, I did it to learn the ARM architecture better. I guess I was carried away.
  * Feel free to report bugs.
  * Feel free to ask for more features.


pkgId: e06012fa2cda2a3678c43b344d06eac36032b711286c9a6a2ea353d11a409dbf
name: python-arn
arch: src
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
location_href: Packages/python-arn-0.1.5-1.src.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: ce72dbeac84198afcad0e74ff7620706b2ce0e0762cb1762645bc1a938a6bdc4
name: python-arneso-pypitemplate-instance
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: Arneso Pypitemplate Instance
url: https://github.com/arneso-ssb/arneso-pypitemplate-instance
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arneso-pypitemplate-instance-0.1.0-1.src.rpm
checksum_type: sha256
description:
  [![PyPI](https://img.shields.io/pypi/v/arneso-pypitemplate-instance.svg)][pypi status]
  [![Status](https://img.shields.io/pypi/status/arneso-pypitemplate-instance.svg)][pypi status]
  [![Python Version](https://img.shields.io/pypi/pyversions/arneso-pypitemplate-instance)][pypi status]
  [![License](https://img.shields.io/pypi/l/arneso-pypitemplate-instance)][license]

  [![Documentation](https://github.com/arneso-ssb/arneso-pypitemplate-instance/actions/workflows/docs.yml/badge.svg)][documentation]
  [![Tests](https://github.com/arneso-ssb/arneso-pypitemplate-instance/actions/workflows/tests.yml/badge.svg)][tests]
  [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=arneso-ssb_arneso-pypitemplate-instance&metric=coverage)][sonarcov]
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=arneso-ssb_arneso-pypitemplate-instance&metric=alert_status)][sonarquality]

  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)][pre-commit]
  [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)][black]
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
  [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)][poetry]

  [pypi status]: https://pypi.org/project/arneso-pypitemplate-instance/
  [documentation]: https://arneso-ssb.github.io/arneso-pypitemplate-instance
  [tests]: https://github.com/arneso-ssb/arneso-pypitemplate-instance/actions?workflow=Tests

  [sonarcov]: https://sonarcloud.io/summary/overall?id=arneso-ssb_arneso-pypitemplate-instance
  [sonarquality]: https://sonarcloud.io/summary/overall?id=arneso-ssb_arneso-pypitemplate-instance
  [pre-commit]: https://github.com/pre-commit/pre-commit
  [black]: https://github.com/psf/black
  [poetry]: https://python-poetry.org/



  - TODO



  - TODO



  You can install _Arneso Pypitemplate Instance_ via [pip] from [PyPI]:

  ```console
  pip install arneso-pypitemplate-instance
  ```



  Please see the [Reference Guide] for details.



  Contributions are very welcome.
  To learn more, see the [Contributor Guide].



  Distributed under the terms of the [MIT license][license],
  _Arneso Pypitemplate Instance_ is free and open source software.



  If you encounter any problems,
  please [file an issue] along with a detailed description.



  This project was generated from [Statistics Norway]'s [SSB PyPI Template].

  [statistics norway]: https://www.ssb.no/en
  [pypi]: https://pypi.org/
  [ssb pypi template]: https://github.com/statisticsnorway/ssb-pypitemplate
  [file an issue]: https://github.com/arneso-ssb/arneso-pypitemplate-instance/issues
  [pip]: https://pip.pypa.io/

  <!-- github-only -->

  [license]: https://github.com/arneso-ssb/arneso-pypitemplate-instance/blob/main/LICENSE
  [contributor guide]: https://github.com/arneso-ssb/arneso-pypitemplate-instance/blob/main/CONTRIBUTING.md
  [reference guide]: https://arneso-ssb.github.io/arneso-pypitemplate-instance/reference.html


pkgId: 5376f569870f259804784c5ae7f1dd2c0e0d5ccab550aa05b2f0262982705042
name: python-arnie
arch: src
version: 0.2.1
epoch: 0
release: 1
url: https://github.com/DasLab/arnie
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arnie-0.2.1-1.src.rpm
checksum_type: sha256
summary:
  A Python utility library to estimate, compare, and reweight RNA energetics across many secondary structure algorithms.

description:
  Python API to compute RNA energetics and do structure prediction across multiple secondary structure packages.


  [See our full docs.](https://daslab.github.io/arnie)


  `arnie` is [available on PyPI](https://pypi.org/project/arnie/).

  `pip install arnie`



  `src/arnie`: source code for the arnie package.

  `docs`: docsify-based markdown documentation for the arnie package.

  `tests`: unit tests

  `notebooks`: example jupyter notebooks with usage.

  `scripts`: scripts for processing sequences in batch.

  `parameter_files`: dir of various parameter files for packages, put here out of convenience.


  (c) 2024 Leland Stanford Jr University
  Authors:
  Hannah Wayment-Steele


pkgId: fc2a18ce4914e1b0d49c0cdffea8ffa9f69f9449b248cbd801fced94b2039960
name: python-arnoldpaperboy
arch: src
version: 0.1.13
epoch: 0
release: 1
summary: Deliver to stackdriver
url: https://gitlab.com/satelligence/arnoldpaperboy
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arnoldpaperboy-0.1.13-1.src.rpm
checksum_type: sha256
description:
  Delivers the Daily Slab. As a python package, it also facilitates
  logging from python in kubernetes to stackdriver.
  Arnoldpaperboy is developed by Satelligence ("S11") to aid proper logging to Stackdriver from python
  processes running in Kubernetes. With as little influence on existing code as possible.


pkgId: 58a6cf84d5dca586159fcfe38bc0fccee6edfe95ece3690f5af783525eedb590
name: python-arnparse
arch: src
version: 0.0.2
epoch: 0
release: 1
summary: Parse ARNs using Python
url: https://github.com/PokaInc/arnparse
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arnparse-0.0.2-1.src.rpm
checksum_type: sha256
description:
  Parse ARNs using Python
  [![Build Status](https://travis-ci.org/PokaInc/arnparse.svg?branch=master)](https://travis-ci.org/PokaInc/arnparse)


pkgId: 07ce94dda491350d94a025db3b8022b8340296b1e2080387758aa85871790467
name: python-aroma
arch: src
version: 0.0.0a7
epoch: 0
release: 1
summary: A library to prepare asynchronous time series datasets
url: https://github.com/durandtibo/aroma
rpm_license: BSD-3-Clause
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-aroma-0.0.0a7-1.src.rpm
checksum_type: sha256
description:
  <p align="center">
      <a href="https://github.com/durandtibo/aroma/actions">
          <img alt="CI" src="https://github.com/durandtibo/aroma/workflows/CI/badge.svg?event=push&branch=main">
      </a>
      <a href="https://durandtibo.github.io/aroma/">
          <img alt="CI" src="https://github.com/durandtibo/aroma/workflows/Documentation/badge.svg?event=push&branch=main">
      </a>
      <a href="https://codecov.io/gh/durandtibo/aroma">
          <img alt="Codecov" src="https://codecov.io/gh/durandtibo/aroma/branch/main/graph/badge.svg">
      </a>
      <a href="https://codeclimate.com/github/durandtibo/aroma/maintainability">
          <img src="https://api.codeclimate.com/v1/badges/14fed84cba9e0c2ad206/maintainability" />
      </a>
      <a href="https://codeclimate.com/github/durandtibo/aroma/test_coverage">
          <img src="https://api.codeclimate.com/v1/badges/14fed84cba9e0c2ad206/test_coverage" />
      </a>
      <br/>
      <a href="https://pypi.org/project/aroma/">
          <img alt="PYPI version" src="https://img.shields.io/pypi/v/aroma">
      </a>
      <a href="https://pypi.org/project/aroma/">
          <img alt="Python" src="https://img.shields.io/pypi/pyversions/aroma.svg">
      </a>
      <a href="https://opensource.org/licenses/BSD-3-Clause">
          <img alt="BSD-3-Clause" src="https://img.shields.io/pypi/l/aroma">
      </a>
      <a href="https://github.com/psf/black">
          <img  alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg">
      </a>
      <a href="https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings">
          <img  alt="Doc style: google" src="https://img.shields.io/badge/%20style-google-3666d6.svg">
      </a>
      <br/>
      <a href="https://pepy.tech/project/aroma">
          <img  alt="Downloads" src="https://static.pepy.tech/badge/aroma">
      </a>
      <a href="https://pepy.tech/project/aroma">
          <img  alt="Monthly downloads" src="https://static.pepy.tech/badge/aroma/month">
      </a>
      <br/>
  </p>



  A python library to prepare asynchronous time series datasets


pkgId: b749f9d9b2adc7cc57407ffa0346dc8d6ec6ebb680ebc472dc63996978f75f41
name: python-arora
arch: src
version: 1.1.0
epoch: 0
release: 1
summary: A tool for sleep researcher to preprocess, work, analyze and visualize data
url: https://pypi.org/project/arora/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arora-1.1.0-1.src.rpm
checksum_type: sha256
description:
  Arora is a package for working with sleep diagnostic data. The package is currently still in early development.

  To install the package run the command: `pip install arora`

  It provides essential features for EDF file processing of sleep data such as
  - Segmenting measurements
  - Analyzing data through plots and graphs
  - Processing data with various mathematical functions

  The package is a part of a B. Sc. project in Computer Science for Reykjavik University. The project is done in collaboration with Sleep Revolution which is a research project funded by the European Union, focused on researching Obstructive Sleep Apnea, its diagnostics, and its treatment.

  For more information about how to use the package check out the offical documentation: https://sleep-revolution-sleepy.readthedocs-hosted.com/en/latest/.


pkgId: f7da8250b68a10d45662ca9ddfe123abe8bc5c4277d394b29f5f40c0f8231dea
name: python-arouteserver
arch: src
version: 1.23.1
epoch: 0
release: 1
summary: A Python tool to automatically build (and test) configurations for BGP route servers.
url: https://github.com/pierky/arouteserver
rpm_license: GPLv3
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arouteserver-1.23.1-1.src.rpm
checksum_type: sha256
description:
  |Documentation| |Build Status| |Unique test cases| |PYPI Version| |Python Versions|
  A Python tool to automatically build (and test) feature-rich configurations for BGP route servers.


pkgId: a12d7e38c8ba059de10c9e833ea406aa9024b15672c43f87a3dd1f19b26d3251
name: python-arpa
arch: src
version: 0.1.0b4
epoch: 0
release: 1
summary: Library for reading ARPA n-gram models.
url: https://github.com/sfischer13/python-arpa
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arpa-0.1.0b4-1.src.rpm
checksum_type: sha256
description:
  Python library for reading ARPA n-gram models.
  -   [Documentation](https://arpa.readthedocs.io/en/latest/) is available.
  -   [Changes](https://github.com/sfischer13/python-arpa/blob/master/HISTORY.md) between releases are documented.
  -   [Bugs](https://github.com/sfischer13/python-arpa/issues) can be reported on the issue tracker.
  -   [Questions](mailto:sfischer13@ymail.com) can be asked via e-mail.
  -   [Source code](https://github.com/sfischer13/python-arpa) is tracked on GitHub.


pkgId: c31819e516e7f8bce5c4c558af710098afe696408f7ff7384e26e2d52c9197ad
name: python-arps
arch: src
version: 0.0.6
epoch: 0
release: 1
url: https://gitlab.com/arps/arps
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arps-0.0.6-1.src.rpm
checksum_type: sha256
summary:
  Multi-Agent System (MAS) Framework for managing resource;It also providers a discrete event simulator component to evaluate agents before deploying them

description:
  ARPS is an acronym that comes from the simplest definition of an
  software agent is:
  * Autonomous: ability to run without human interaction
  * Reflexive: ability to act upon events
  * Proactive: ability to make its own decisions
  * Social: ability to interact with other agents to better achieve its
    objectives

  ARPS is a framework to create Multi-Agent System (MAS). It provides a
  Discreve Event Simulation component for evaluation of the agents
  behaviour before deployment on a real environment.


pkgId: 13777fd6a28ac6862c8331f8605ed9eba5a1eebbc1387baf4906611d78d7a421
name: python-arpy
arch: src
version: 2.3.0
epoch: 0
release: 1
summary: Library for accessing "ar" files
url: https://github.com/viraptor/arpy
rpm_license: Simplified BSD
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arpy-2.3.0-1.src.rpm
checksum_type: sha256
description:
  'arpy' is a library for accessing the archive files and reading the contents. It supports extended long filenames in both GNU and BSD format. Right now it does not support the symbol tables, but can ignore them gracefully.

  Usage instructions are included in the module docstring. Works with python >=3.5, as well as pypy3. (for python 2.x see versions 1.*)


pkgId: df94e66d3e6a22087e0f1629b3ee55417a59ce938af3e0c63945cb8e55ce8a6f
name: python-arpys
arch: src
version: 1.0.0
epoch: 0
release: 1
summary: Python tools and scripts for ARPES data analysis
url: https://github.com/kuadrat/arpys.git
rpm_license: GNU General Public License v3 or later (GPLv3+)
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arpys-1.0.0-1.src.rpm
checksum_type: sha256
description:
  Library-like module that contains functions to process ARPES data, like
  normalizations, bg subtractions, derivative methods, etc.


pkgId: 8ac9578cbf98dafe1356cb3708f1a80233711a12ee3a7601e54207e443193d3c
name: python-arq
arch: src
version: 0.26.1
epoch: 0
release: 1
summary: Job queues in python with asyncio and redis
url: https://github.com/samuelcolvin/arq
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arq-0.26.1-1.src.rpm
checksum_type: sha256
description:
  [![CI](https://img.shields.io/github/actions/workflow/status/samuelcolvin/arq/ci.yml?branch=main&logo=github&label=CI)](https://github.com/samuelcolvin/arq/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)
  [![Coverage](https://codecov.io/gh/samuelcolvin/arq/branch/main/graph/badge.svg)](https://codecov.io/gh/samuelcolvin/arq)
  [![downloads](https://static.pepy.tech/badge/arq/month)](https://pepy.tech/project/arq)
  [![pypi](https://img.shields.io/pypi/v/arq.svg)](https://pypi.python.org/pypi/arq)
  [![versions](https://img.shields.io/pypi/pyversions/arq.svg)](https://github.com/samuelcolvin/arq)
  [![license](https://img.shields.io/github/license/samuelcolvin/arq.svg)](https://github.com/samuelcolvin/arq/blob/main/LICENSE)

  Job queues in python with asyncio and redis.

  See [documentation](https://arq-docs.helpmanual.io/) for more details.


pkgId: 068a6920306f6f33a9833babf8b54996729706054a137d65a2a302e1fb1765b1
name: python-arq-prometheus
arch: src
version: 0.3.0
epoch: 0
release: 1
summary: Prometheus metrics for arq job queues
url: https://pypi.org/project/arq-prometheus/
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arq-prometheus-0.3.0-1.src.rpm
checksum_type: sha256
description:
  ![Build status](https://github.com/kpn/arq-prometheus/actions/workflows/test.yaml/badge.svg)
  [![PyPI Package latest release](https://img.shields.io/pypi/v/arq-prometheus.svg?style=flat-square)](https://pypi.org/project/arq-prometheus/)
  [![PyPI Package download count (per month)](https://img.shields.io/pypi/dm/arq-prometheus?style=flat-square)](https://pypi.org/project/arq-prometheus/)
  [![Supported versions](https://img.shields.io/pypi/pyversions/arq-prometheus.svg?style=flat-square)](https://pypi.org/project/arq-prometheus/)
  [![Codecov](https://img.shields.io/codecov/c/github/kpn/arq-prometheus.svg?style=flat-square)](https://codecov.io/gh/kpn/arq-prometheus)


  Prometheus metrics for [arq](https://github.com/samuelcolvin/arq)

  ⚠️ WARNING! This is a project in alpha phase ⚠️



  [Pip](https://pip.pypa.io/en/stable/)

  ```sh
  pip install -U arq-prometheus
  ```

  [Poetry](https://python-poetry.org/)

  ```sh
  poetry add arq-prometheus
  ```



  The metrics exposed are the same as the health check.

  | Metric name             | Description                      |
  | ----------------------- | -------------------------------- |
  | `arq_jobs_completed`    | The number of jobs completed     |
  | `arq_jobs_failed`       | The total number of errored jobs |
  | `arq_jobs_retried`      | The total number of retried jobs |
  | `arq_ongoing_jobs`      | The number of jobs in progress   |
  | `arq_queued_inprogress` | The number of jobs in progress   |

  When working with `arq` I found some limitations, it was specially hard to get access to
  the worker in order to retrieve information like the `queue_name` or `health_check_key`.
  The startup and shutdown functions only make available a `ctx` with the redis connection.
  This means that if you provide a custom `queue_name` or `health_check_key`, you will
  also have to provide them to `ArqPrometheusMetrics`.



  ````python

  from arq_prometheus import ArqPrometheusMetrics

  async def startup(ctx):
      arq_prometheus = ArqPrometheusMetrics(ctx, delay=delay)
      ctx["arq_prometheus"] = await arq_prometheus.start()

  async def shutdown(ctx):
      await ctx["arq_prometheus"].stop()

  class WorkerSettings:
      on_startup = startup
      on_shutdown = shutdown
      function = []  # your arq jobs
      ... # other settings

  ````

  Start your arq worker,

  ```sh
  arq example_worker.WorkerSettings
  ```

  Make request to `localhost:8081` (or open in browser).

  ```sh
  curl localhost:8081
  ```




  - `ctx: dict`: arq context
  - `queue_name: str = default_queue_name`: name of the arq queue
  - `health_check_key: Optional[str] = None`: arq health key
  - `delay: datetime.timedelta = datetime.timedelta(seconds=5)`: a datetime.timedelta
  - `enable_webserver: bool = True`: set to True if you want a web server exposing the metrics
  - `addr: str = "0.0.0.0"`: webserver address
  - `port: int = 8081`: webserver port
  - `registry: prom.CollectorRegistry = prom.REGISTRY`: the prometheus registry, usually you do not have to override this


pkgId: 64afc8c2f35d5f392696c1baca39b8ffb7347dffc7f78bc728e2f5428b6e0e88
name: python-array-api-compat
arch: src
version: 1.8
epoch: 0
release: 1
url: https://data-apis.org/array-api-compat/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-array-api-compat-1.8-1.src.rpm
checksum_type: sha256
summary:
  A wrapper around NumPy and other array libraries to make them compatible with the Array API standard

description:
  This is a small wrapper around common array libraries that is compatible with
  the [Array API standard](https://data-apis.org/array-api/latest/). Currently,
  NumPy, CuPy, PyTorch, Dask, JAX, ndonnx and `sparse` are supported. If you want
  support for other array libraries, or if you encounter any issues, please [open
  an issue](https://github.com/data-apis/array-api-compat/issues).

  See the documentation for more details https://data-apis.org/array-api-compat/


pkgId: 60312ad54df1f903a947534279e8d62bf475b4d4201aa25357599519d13f0c17
name: python-array-api-extra
arch: src
version: 0.3.3
epoch: 0
release: 1
summary: Extra array functions built on top of the array API standard.
url: https://github.com/data-apis/array-api-extra
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-array-api-extra-0.3.3-1.src.rpm
checksum_type: sha256
description:
  [![Actions Status][actions-badge]][actions-link]
  [![docs - here!][docs-badge]][docs-link]
  [![Pixi Badge](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)
  [![All Contributors](https://img.shields.io/github/all-contributors/data-apis/array-api-extra?color=ee8449&style=flat-square)](#contributors)
  [![Scientific Python Ecosystem Coordination](https://img.shields.io/badge/SPEC-0-green?labelColor=%23004811&color=%235CA038)](https://scientific-python.org/specs/)
  [![codecov](https://codecov.io/github/data-apis/array-api-extra/graph/badge.svg)](https://codecov.io/github/data-apis/array-api-extra)

  [![PyPI version][pypi-version]][pypi-link]
  [![Conda-Forge][conda-badge]][conda-link]
  [![PyPI platforms][pypi-platforms]][pypi-link]

  <!-- SPHINX-START -->

  <!-- prettier-ignore-start -->
  [actions-badge]:            https://github.com/data-apis/array-api-extra/workflows/CI/badge.svg
  [actions-link]:             https://github.com/data-apis/array-api-extra/actions
  [conda-badge]:              https://img.shields.io/conda/vn/conda-forge/array-api-extra
  [conda-link]:               https://github.com/conda-forge/array-api-extra-feedstock
  [github-discussions-badge]: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
  [github-discussions-link]:  https://github.com/data-apis/array-api-extra/discussions
  [pypi-link]:                https://pypi.org/project/array-api-extra/
  [pypi-platforms]:           https://img.shields.io/pypi/pyversions/array-api-extra
  [pypi-version]:             https://img.shields.io/pypi/v/array-api-extra
  [docs-badge]:               https://img.shields.io/badge/docs-here!-2ea44f
  [docs-link]:                https://data-apis.org/array-api-extra/index.html

  <!-- prettier-ignore-end -->

  Extra array functions built on top of the array API standard.

  Used by:

  - [SciPy](https://github.com/scipy/scipy) - Fundamental algorithms for
    scientific computing.
  - ...



  This project exists thanks to the following contributors
  ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
  <!-- prettier-ignore-start -->
  <!-- markdownlint-disable -->
  <table>
    <tbody>
      <tr>
        <td align="center" valign="top" width="14.28%"><a href="https://lucascolley.github.io/"><img src="https://avatars.githubusercontent.com/u/51488791?v=4?s=100" width="100px;" alt="Lucas Colley"/><br /><sub><b>Lucas Colley</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=lucascolley" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=lucascolley" title="Documentation">📖</a> <a href="#example-lucascolley" title="Examples">💡</a> <a href="#ideas-lucascolley" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-lucascolley" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-lucascolley" title="Maintenance">🚧</a> <a href="#tool-lucascolley" title="Tools">🔧</a> <a href="https://github.com/data-apis/array-api-extra/commits?author=lucascolley" title="Tests">⚠️</a> <a href="https://github.com/data-apis/array-api-extra/issues?q=author%3Alucascolley" title="Bug reports">🐛</a> <a href="#platform-lucascolley" title="Packaging/porting to new platform">📦</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/mdhaber"><img src="https://avatars.githubusercontent.com/u/6570539?v=4?s=100" width="100px;" alt="Matt Haberland"/><br /><sub><b>Matt Haberland</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=mdhaber" title="Code">💻</a> <a href="#ideas-mdhaber" title="Ideas, Planning, & Feedback">🤔</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/j-bowhay"><img src="https://avatars.githubusercontent.com/u/60778417?v=4?s=100" width="100px;" alt="Jake Bowhay"/><br /><sub><b>Jake Bowhay</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=j-bowhay" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Aj-bowhay" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/asmeurer"><img src="https://avatars.githubusercontent.com/u/71486?v=4?s=100" width="100px;" alt="Aaron Meurer"/><br /><sub><b>Aaron Meurer</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Aasmeurer" title="Reviewed Pull Requests">👀</a> <a href="#ideas-asmeurer" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-asmeurer" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/betatim"><img src="https://avatars.githubusercontent.com/u/1448859?v=4?s=100" width="100px;" alt="Tim Head"/><br /><sub><b>Tim Head</b></sub></a><br /><a href="#ideas-betatim" title="Ideas, Planning, & Feedback">🤔</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/stdlib-js/stdlib"><img src="https://avatars.githubusercontent.com/u/2643044?v=4?s=100" width="100px;" alt="Athan"/><br /><sub><b>Athan</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Akgryte" title="Reviewed Pull Requests">👀</a> <a href="#ideas-kgryte" title="Ideas, Planning, & Feedback">🤔</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/vnmabus"><img src="https://avatars.githubusercontent.com/u/2364173?v=4?s=100" width="100px;" alt="Carlos Ramos Carreño"/><br /><sub><b>Carlos Ramos Carreño</b></sub></a><br /><a href="#ideas-vnmabus" title="Ideas, Planning, & Feedback">🤔</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/rgommers/"><img src="https://avatars.githubusercontent.com/u/98330?v=4?s=100" width="100px;" alt="Ralf Gommers"/><br /><sub><b>Ralf Gommers</b></sub></a><br /><a href="#ideas-rgommers" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-rgommers" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Argommers" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/jorenham"><img src="https://avatars.githubusercontent.com/u/6208662?v=4?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajorenham" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://www.thomasjpfan.com/"><img src="https://avatars.githubusercontent.com/u/5402633?v=4?s=100" width="100px;" alt="Thomas J. Fan"/><br /><sub><b>Thomas J. Fan</b></sub></a><br /><a href="#ideas-thomasjpfan" title="Ideas, Planning, & Feedback">🤔</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/izaid"><img src="https://avatars.githubusercontent.com/u/482179?v=4?s=100" width="100px;" alt="Irwin Zaid"/><br /><sub><b>Irwin Zaid</b></sub></a><br /><a href="#ideas-izaid" title="Ideas, Planning, & Feedback">🤔</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/jakirkham"><img src="https://avatars.githubusercontent.com/u/3019665?v=4?s=100" width="100px;" alt="jakirkham"/><br /><sub><b>jakirkham</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=jakirkham" title="Code">💻</a> <a href="https://github.com/data-apis/array-api-extra/pulls?q=is%3Apr+reviewed-by%3Ajakirkham" title="Reviewed Pull Requests">👀</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/tupui"><img src="https://avatars.githubusercontent.com/u/23188539?v=4?s=100" width="100px;" alt="Pamphile Roy"/><br /><sub><b>Pamphile Roy</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=tupui" title="Code">💻</a></td>
        <td align="center" valign="top" width="14.28%"><a href="https://github.com/OmarManzoor"><img src="https://avatars.githubusercontent.com/u/17495884?v=4?s=100" width="100px;" alt="Omar Salman"/><br /><sub><b>Omar Salman</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=OmarManzoor" title="Code">💻</a></td>
      </tr>
      <tr>
        <td align="center" valign="top" width="14.28%"><a href="https://ogrisel.com"><img src="https://avatars.githubusercontent.com/u/89061?v=4?s=100" width="100px;" alt="Olivier Grisel"/><br /><sub><b>Olivier Grisel</b></sub></a><br /><a href="https://github.com/data-apis/array-api-extra/commits?author=ogrisel" title="Code">💻</a></td>
      </tr>
    </tbody>
  </table>

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

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

  We follow the
  [all-contributors](https://github.com/all-contributors/all-contributors)
  specification. Contributions of any kind welcome!

rpm_license:
  MIT License  Copyright (c) 2024 Consortium for Python Data API Standards  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: f220332fe27717279472926ac336dae07cf62f5dac552216b9ea118bb176af88
name: python-array-api-strict
arch: src
version: 2.0.1
epoch: 0
release: 1
summary: A strict, minimal implementation of the Python array API standard.
url: https://data-apis.org/array-api-strict/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-array-api-strict-2.0.1-1.src.rpm
checksum_type: sha256
description:
  `array_api_strict` is a strict, minimal implementation of the [Python array
  API](https://data-apis.org/array-api/latest/).

  The purpose of array-api-strict is to provide an implementation of the array
  API for consuming libraries to test against so they can be completely sure
  their usage of the array API is portable.

  It is *not* intended to be used by end-users. End-users of the array API
  should just use their favorite array library (NumPy, CuPy, PyTorch, etc.) as
  usual. It is also not intended to be used as a dependency by consuming
  libraries. Consuming library code should use the
  [array-api-compat](https://data-apis.org/array-api-compat/) package to
  support the array API. Rather, it is intended to be used in the test suites of
  consuming libraries to test their array API usage.

  array-api-strict currently supports the 2022.12 version of the standard.
  2023.12 support is planned and is tracked by [this
  issue](https://github.com/data-apis/array-api-strict/issues/25).

  See the documentation for more details https://data-apis.org/array-api-strict/


pkgId: 27eda96d2ff07cfcae463b8322dccb1c8957d978a047911acff9750e1f9e731b
name: python-array-api-strict
arch: src
version: 2.2
epoch: 0
release: 1
summary: A strict, minimal implementation of the Python array API standard.
url: https://data-apis.org/array-api-strict/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-array-api-strict-2.2-1.src.rpm
checksum_type: sha256
description:
  `array_api_strict` is a strict, minimal implementation of the [Python array
  API](https://data-apis.org/array-api/latest/).

  The purpose of array-api-strict is to provide an implementation of the array
  API for consuming libraries to test against so they can be completely sure
  their usage of the array API is portable.

  It is *not* intended to be used by end-users. End-users of the array API
  should just use their favorite array library (NumPy, CuPy, PyTorch, etc.) as
  usual. It is also not intended to be used as a dependency by consuming
  libraries. Consuming library code should use the
  [array-api-compat](https://data-apis.org/array-api-compat/) package to
  support the array API. Rather, it is intended to be used in the test suites of
  consuming libraries to test their array API usage.

  See the documentation for more details https://data-apis.org/array-api-strict/


pkgId: 20465c1d970b7d4056386a75a2915b4bd395ab4d89c2ee589fd6c30ec59cf90f
name: python-array-subarray-utils
arch: src
version: 0.1.0
epoch: 0
release: 1
summary: A library for calculating subarray sums for arrays and circular arrays
url: https://pypi.org/project/array-subarray-utils/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-array-subarray-utils-0.1.0-1.src.rpm
checksum_type: sha256
description:
  A Python library to compute subarray sums efficiently.


  - **Maximum Subarray Sum**: Finds the largest sum of a contiguous subarray.
  - **Minimum Subarray Sum**: Finds the smallest sum of a contiguous subarray.
  - **Maximum Circular Subarray Sum**: Handles circular arrays for the largest sum.
  - **Minimum Circular Subarray Sum**: Handles circular arrays for the smallest sum.


  ```bash
  pip install array-subarray-utils


pkgId: 9ea24dca81b72fcac31141aebf61d9d57354c5cec386d6e7baca465e58e831fe
name: python-arrayed-degradation-assay
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: Analyse the data for RNA stability assay
url: https://pypi.org/project/arrayed-degradation-assay/
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrayed-degradation-assay-0.1.3-1.src.rpm
checksum_type: sha256
description:
  This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE.txt) file for details.


pkgId: 70214ab6235b9c9fe90985a4df0717297f28633fb7aff6f54f38a46926505de9
name: python-arrayfire
arch: src
version: 3.8.0
epoch: 0
release: 1
summary: Python bindings for ArrayFire
url: http://arrayfire.com
rpm_license: UNKNOWN
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrayfire-3.8.0-1.src.rpm
checksum_type: sha256
description:
  [ArrayFire](https://github.com/arrayfire/arrayfire) is a high performance library for parallel computing with an easy-to-use API. It enables users to write scientific computing code that is portable across CUDA, OpenCL and CPU devices. This project provides Python bindings for the ArrayFire library.



  Documentation for this project can be found [over here](http://arrayfire.org/arrayfire-python/).



  ```python

  def calc_pi_device(samples):
      
      
      x = af.randu(samples)
      y = af.randu(samples)
      
      
      within_unit_circle = (x * x + y * y) < 1
      
      return 4 * af.count(within_unit_circle) / samples
  ```


  Choosing a particular backend can be done using `af.set_backend(name)`  where name is either "_cuda_", "_opencl_", or "_cpu_". The default device is chosen in the same order of preference.


  ArrayFire can be installed from a variety of sources. [Pre-built wheels](https://repo.arrayfire.com/python/wheels/3.8.0/) are available for a number of systems and toolkits. These will include a distribution of the ArrayFire libraries. Currently, only the python wrapper is available on PyPI. Wrapper-only installations will require a separate installation of the ArrayFire C/C++ libraries.
  You can get the ArrayFire C/C++ library from the following sources:

  - [Download and install binaries](https://arrayfire.com/download)
  - [Build and install from source](https://github.com/arrayfire/arrayfire)


  **Install the last stable version of python wrapper:**
  ```
  pip install arrayfire
  ```

  **Install a pre-built wheel for a specific CUDA toolkit version:**
  ```
  pip install arrayfire==3.8.0+cu112 -f https://repo.arrayfire.com/python/wheels/3.8.0/

  ```

  **Install the development source distribution:**

  ```
  pip install git+git://github.com/arrayfire/arrayfire-python.git@master
  ```

  **Installing offline:**

  ```
  cd path/to/arrayfire-python
  python setup.py install
  ```
  Rather than installing and building ArrayFire elsewhere in the system, you can also build directly through python by first setting the `AF_BUILD_LOCAL_LIBS=1` environment variable. Additional setup will be required to build ArrayFire, including satisfying dependencies and further CMake configuration. Details on how to pass additional arguments to the build systems can be found in the [scikit-build documentation.](https://scikit-build.readthedocs.io/en/latest/)

  **Post Installation:**

  If you are not using one of the pre-built wheels, you may need to ensure arrayfire-python can find the installed arrayfire libraries. Please follow [these instructions](https://github.com/arrayfire/arrayfire-python/wiki) to ensure that arrayfire-python can find the arrayfire libraries.

  To run arrayfire tests, you can run the following command from command line.

  ```
  python -m arrayfire.tests
  ```



  * [Slack Chat](https://join.slack.com/t/arrayfire-org/shared_invite/MjI4MjIzMDMzMTczLTE1MDI5ODg4NzYtN2QwNGE3ODA5OQ)
  * [Google Groups](https://groups.google.com/forum/#!forum/arrayfire-users)



  The ArrayFire library is written by developers at [ArrayFire](http://arrayfire.com) LLC
  with [contributions from several individuals](https://github.com/arrayfire/arrayfire_python/graphs/contributors).

  The developers at ArrayFire LLC have received partial financial support
  from several grants and institutions. Those that wish to receive public
  acknowledgement are listed below:

  <!--
  The following section contains acknowledgements for grant funding. In most
  circumstances, the specific phrasing of the text is mandated by the grant
  provider. Thus these acknowledgements must remain intact without modification.
  -->



  This material is based upon work supported by the DARPA SBIR Program Office
  under Contract Numbers W31P4Q-14-C-0012 and W31P4Q-15-C-0008.
  Any opinions, findings and conclusions or recommendations expressed in this
  material are those of the author(s) and do not necessarily reflect the views of
  the DARPA SBIR Program Office.


pkgId: e49027ec927321728ed123a3ceba84864fa3dc2cc5505d70e25201eb24f1b602
name: python-arraylias
arch: src
version: 0.1.1
epoch: 0
release: 1
summary: A Python package for aliased function dispatching to multiple array libraries
url: https://github.com/Qiskit/arraylias
rpm_license: Apache 2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arraylias-0.1.1-1.src.rpm
checksum_type: sha256
description:
  [![License](https://img.shields.io/github/license/Qiskit/arraylias.svg?style=popout-square)](https://opensource.org/licenses/Apache-2.0)

  **This repo is still in the early stages of development, there will be breaking API changes**

  Arraylias is an open-source Python library providing single-dispatching tools centred around the
  construction of an aliased module. Aliased modules are built by initially registering "libraries"
  consisting of a collection of types, then registering different versions of a given function in the
  aliased module for each underlying type library. When using the aliased module, function calls are
  automatically dispatched to version of the function for the correct library based on the type of the
  first argument.

  Arraylias contains default pre-built aliased versions of both
  [NumPy](https://github.com/numpy/numpy) and [Scipy](https://github.com/scipy/scipy), with additional
  registration of the [JAX](https://github.com/google/jax) and
  [Tensorflow](https://github.com/tensorflow) array libraries. This enables writing
  [NumPy](https://github.com/numpy/numpy) and [Scipy](https://github.com/scipy/scipy) like code that
  will execute on [NumPy](https://github.com/numpy/numpy),
  [JAX](https://github.com/google/jax), and [Tensorflow](https://github.com/tensorflow) array objects
  as if it had been written in the respective native libraries. If necessary, these default aliases
  can be further extended to fit the needs of the application.

  Reference documentation may be found [here](https://qiskit-extensions.github.io/arraylias/), including
  [tutorials](https://qiskit-extensions.github.io/arraylias/tutorials/index.html),
  [user guide](https://qiskit-extensions.github.io/arraylias/userguide/index.html), and
  [API reference](https://qiskit-extensions.github.io/arraylias/apidocs/index.html).



  Arraylias is installed by using `pip`:

  ```
  pip install arraylias
  ```



  If you'd like to contribute to Arraylias, please take a look at our
  [contribution guidelines](CONTRIBUTING.md). This project adheres to Qiskit's
  [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.

  We use [GitHub issues](https://github.com/Qiskit-Extensions/arraylias/issues) for tracking
  requests and bugs. For questions that are more suited for a forum we use the Qiskit tag in the
  [Stack Exchange](https://quantumcomputing.stackexchange.com/questions/tagged/qiskit).





  [Apache License 2.0](LICENSE.txt)


pkgId: 9842b95be403e6b56801d6c73e0112b93d259ccf9d3c26cb7f50bd4e21404298
name: python-arrayterator
arch: src
version: 1.0.1
epoch: 0
release: 1
summary: Buffered iterator for big arrays.
url: http://bitbucket.org/robertodealmeida/arrayterator/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrayterator-1.0.1-1.src.rpm
checksum_type: sha256
description:
  This class creates a buffered iterator for reading big arrays in small
  contiguous blocks. The class is useful for objects stored in the
  filesystem. It allows iteration over the object *without* reading
  everything in memory; instead, small blocks are read and iterated over.

  The class can be used with any object that supports multidimensional
  slices, like variables from Scientific.IO.NetCDF, pynetcdf and ndarrays.

  Changelog:
      1.0.1 - Implemented the array interface.

  The latest version is available in a `Subversion repository
  <http://pydap.googlecode.com/svn/trunk/arrayterator#egg=arrayterator-dev>`_.


pkgId: e9194ad81d5aed5c9c2910c9131e289f3bf5e1796b2fa809020731c1e1275357
name: python-arrotechtools
arch: src
version: 1.9
epoch: 0
release: 1
summary: Library with most of the useful methods in the world of programming
url: https://pypi.org/project/arrotechtools/
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrotechtools-1.9-1.src.rpm
checksum_type: sha256
description:
  Install the latest version:

      pip install arrotechtools

  To install a specific version:

      pip install arrotechtools==1.6



  After installation, you can immediately start using the library.

  Importing a class, an object, or a method is straight forward.

  Let simulate an import.

      from arrotechtools import Serializer, Validate, ErrorHandler, admin_required



  Supported validation inputs include:

  1. Email
  2. Password
  3. Integer
  4. Name
  5. Phone:   `phone, airtel, safaricom, orange, equitel`

  | method        | input type | sample |
  | --------------|-----------|----------|
  | email         | String    | test@gmail.com |
  | password      | String    | HeuliaI!djvb24628 |
  | integer       | Integer   | 23 `+ or -` are also accepted i.e `+25` or `-22` |
  | name          | String    | John doe |
  | phone, airtel, safaricom, orange, equitel | String | +254712345678 |



  Lets begin with validating an email provided by a user.

      from arrotechtools import Validate, Serializer, ErrorHandler

      email = "your@gmail.com"

      if not Validate.email(email):
          return ErrorHandler.raise_error("invalid email format", 400)
      else:
          ...

  Here, we are checking if the input is a valid email.



  Seriale data.

      from arrotechtools import Serializer

      
      response = Users().get_users()
      ...
      if response:
          return Serializer.serialize(response, "Success", 200)
      else:
          ...

  Here, we get records from the database and storing the data in a variable. Then we serialize the data into json object or an array.
  The `serialize` object can serialize any different types data into json object(s). That includes `lists, dictionaries, or arrays`.



  Serialize errored responses:

      from arrotechtools import ErrorHandler, Validate

      name = "jane doe"
      ...
      if not Validate().name(name):
          return ErrorHandler.raise_error("Name is invalid", 400)
      else:
          ...



  Lets a look at how we can capture errors at the entry point of a flask application.

      from flask import Flask
      from arrotechtools import Serializer

      app = Flask(__name__)
      ...

      
      app.register_error_handler(400, Serializer.bad_request)
      app.register_error_handler(404, Serializer.page_not_found)
      app.register_error_handler(405, Serializer.method_not_allowed)
      app.register_error_handler(500, Serializer.internal_server_error)

  This is a straight forward way of handling errors in flask.



  This is a function that takes an array of users as an argument and checks if the role is an admin.
  If that isn't the case, the function returns an unauthorized status code and message.
  Otherwise, the user is permitted to use the function.



      from arrotechtools import admin_required

      @jwt_required
      @admin_required(users)
      def signup():
          ...

  The decorator takes a list of `users` as an argument.



      Email: arrotechdesign@gmail.com
      Phone: +254 711 371 265



      Harun Gachanja G.


pkgId: 45d16ca4bfce2b2a4d28a407a6e551f79c21d925e94e7fd5eb484c81846fd4f7
name: python-arrow-mssql
arch: src
version: 0.0.87
epoch: 0
release: 1
url: https://pypi.org/project/arrow-mssql/
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrow-mssql-0.0.87-1.src.rpm
checksum_type: sha256
summary:
  Arrow-mssql exporta tabela ou consulta para .parquet ou .csv, e também faz a leitura de .parquet ou .csv para tabela do sql server

description:
  [![PyPI](https://img.shields.io/pypi/v/arrow-mssql.svg)](https://pypi.org/project/arrow-mssql/)



  É um projeto que recebe uma tabela ou consulta do `SQL SERVER`
  e faz a exportação para um arquivo *.parquet* ou *.csv*,
  utilizando a solução [arrow](https://arrow.apache.org/docs/index.html) que é uma tecnologia com
  foco em análise e desempenho na memória.

  Também é possível importar um arquivo *.parquet* para uma tabela do sql server ou arquivo *.csv*.



  ```bash
  pip install arrow-mssql
  ```



  Para se conectar ao sql server o driver padrão
  é o `pyodbc` é preciso fornecedor uma string de conexao

  > somente a string de conexão é permitida


  ```python
  DRIVER = (
      'Driver={ODBC Driver 18 for Sql Server};'
      'Server=seu_servidor;'
      'Database=seu_banco_de_dados;'
      'TrustServerCertificate=Yes;'
      'Authentication=ActiveDirectoryIntegrated;'
  )
  ```



  Tanto uma tabela ou consulta pode ser exportada

  > a exportacao é feita de forma incrimental por lotes de dados

  ```python

  to_csv(
      DRIVER,
      'NOME_TABELA',
      schema='dbo',
      database='seu_banco',
      path='destino.csv'
  )


  to_parquet(
      DRIVER,
      'SELECT N1, N2 FROM NOME_TABELA WHERE N1 = 0',
      schema='dbo',
      database='seu_banco',
      path='destino.parquet'
  )
  ```

  É possivel importar arquivos csv ou parquet, definir um limite de linhas
  e colunas no processo.

  ```python


  with write_parquet(
      DRIVER,
      '##teste',
      path='origem.parquet'
  ) as C:

      ...



  with write_parquet(
      DRIVER,
      '##teste',
      path='origem.parquet',
      limit=100,
      columns=['col1', 'col2']
  ) as C:

      ...
  ```


pkgId: e2bd1a5a60ae90831d8849c55bba0780a3e38f550472d1e4174da0ebf0b8ac92
name: python-arrow-pd-parser
arch: src
version: 2.2.0
epoch: 0
release: 1
summary: MoJ arrow-pd-parser
url: https://github.com/moj-analytical-services/mojap-arrow-pd-parser
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrow-pd-parser-2.2.0-1.src.rpm
checksum_type: sha256
description:
  Using pyArrow/Pandas to read CSV, JSONL and Parquet ensuring that you get the best representation of the column types in the resulting Pandas dataframe. Also ensures data type conformance by maintaining column types when reading and writing data back into Pandas (even when round tripping across multiple data types).

  This package also can read in data given an [MoJ-Metadata](https://github.com/moj-analytical-services/mojap-metadata) schema again to result in a Pandas dataframe that best represents the provided schema.

  Can also be used to write data back to supported formats using Pandas (for CSV/JSONL) and PyArrow (for Parquet).



  ```
  pip install arrow-pd-parser
  ```

  or via GitHub

  ```
  pip install arrow-pd-parser @ git+https://github.com/moj-analytical-services/mojap-arrow-pd-parser
  ```



  This package uses `PyArrow` and/or `Pandas` to parse CSVs, JSONL and Parquet files and convert them to a Pandas Dataframe that are the best representation of those datatypes and ensure conformance between them. Also can write data back into the above formats to still maintain conformance to the provided schema.

  ```python
  from arrow_pd_parser import reader, writer

  df1 = reader.read("tests/data/all_types.csv")
  df1.dtypes









  df2 = reader.read("tests/data/all_types.jsonl")
  df2.dtypes # Note that Pandas struggles with nullable booleans when it reads JSONL (hence it is an Int64)




  writer.write(df1, "new_output.snappy.parquet")
  ```

  Note that the default behavior of this package is to utilise the new pandas datatypes for Integers, Booleans and Strings that represent Nulls as `pd.NA()`. Dates are returned as nullable objects of `datetime.date()` type and timestamps are `datetime.datetime()`. By default we enforce these types instead of the native pandas timestamp as the indexing for the Pandas timestamp is nanoseconds and can cause dates to be out of bounds. See the [timestamps](#timestamps) section for more details.

  The `reader.read()` method will infer what the file format is based on the extension of your filepath failing that it will take the format from your metadata if provided. By default the reader.read() will use the following readers for the prescribed file format.

  | Data Type | Reader | Writer |
  |-----------|--------|--------|
  | CSV       | Pandas | Pandas |
  | JSONL     | Pandas | Pandas |
  | Parquet   | Arrow  | Arrow  |

  You can also specify the file format in the reader and writer function or specify the reader type:

  ```python
  from arrow_pd_parser import reader, writer




  df1 = reader.read("tests/data/all_types.csv", file_format="csv")
  df2 = reader.csv.read("tests/data/all_types.csv")


  df3 = reader.csv.read("tests/data/all_types.csv", nrows = 2)


  writer.write(df1, file_format="parquet")
  writer.parquet.write(df1)
  ```



  The main usefulness of this repo comes from specifying metadata for the data you want. We are going to focus on CSV and JSONL in this section as Parquet becomes a bit more nuanced as it encodes data types (unlike CSV and JSONL that can be more vague).

  When reading and writing you can specify metadata (using our [metadata schema definitions](https://github.com/moj-analytical-services/mojap-metadata)) to ensure the data read into pandas conforms.

  ```python
  from arrow_pd_parser import reader


  df1 = reader.read("tests/data/all_types.csv")
  df1.dtypes










  meta = {
      "columns": [
          {"name": "my_bool", "type": "string"},
          {"name": "my_nullable_bool", "type": "bool"},
          {"name": "my_date", "type": "string"},
          {"name": "my_datetime", "type": "string"},
          {"name": "my_int", "type": "float64"},
          {"name": "my_string", "type": "string"}
      ]
  }
  df2 = reader.read("tests/data/all_types.csv", metadata=meta)
  df2.dtypes









  df3 = reader.read("tests/data/all_types.jsonl", metadata=meta)
  df3.dtypes

  assert df2.dtypes.to_list() == df3.dtypes.to_list()
  ```

  As of the v1 release we expect the API for reading and writing will remain the same but will still be lacking in how the caster works (what is called under the hood when casting the data to the prescribed metadata). The caster should improve with subsequent releases.





  When using the `reader.read()` or `writer.write()` it pulls the default method with their default settings. However, if you want to customise your reader/writer you can do.




  You can pass arguments to the underlying reader that is used to read data in. In the example below we use the nrows arg in pd.`pd.read_csv` that is used for our underlying reader.

  ```python
  from arrow_pd_parser import reader


  df = reader.csv.read("tests/data/all_types.jsonl", nrows=1000)
  ```



  The readers and writers have some settings that you can use to configure how it reads/writes data. One of the main settings is how we deal with Pandas types. We default to the new pandas Series types: `StringDtype` for `string`, `BooleanDtype` for `bool` and `Int64Dtype` for `integer`. We also force dates and timestamps to be a series of objects (see the Timestamp section below)[#Reader-Pandas-Timestamps]. To change what pandas types to use you can change the reader settings:

  ```python
  from arrow_pd_parser.reader import csv
  from io import StringIO

  csv.pd_integer = False
  csv.pd_string = False
  csv.bool_map = {"Yes": True, "No": False}

  data = """
  int_col,str_col,bool_col
  1,"Hello, mate",Yes
  2,Hi,No
  """
  meta = {
      "columns": [
          {"name": "int_col", "type": "int64"},
          {"name": "str_col", "type": "string"},
          {"name": "bool_col", "type": "bool"},
      ]
  }
  f = StringIO(data)
  df = csv.read(f, metadata = meta)
  df.dtypes



  ```



  If you wanted to create your own instance of a reader that wasn't the default provided you can.

  ```python
  from arrow_pd_parser.reader import PandasCsvReader, csv



  specific_csv = PandasCsvReader(
      pd_integer = False,
      pd_string = False,
      bool_map = {"Yes": True, "No": False}
  )


  df1 = csv.read("tests/data/all_types.csv") # default reader
  df2 = specific_csv.read("tests/data/all_types.csv")
  ```



  The default parquet reader and writer uses Arrow under the hood. This also means it uses a different method for casting datatypes (it is done in Arrow not with Pandas). Because parquet is stricter, most likely if there is a deviation from your metadata it will fail to cast. When you provide metadata to the reader and writer, the API forces the data to that metadata. This makes sense for CSV and JSONL, but may make less sense for parquet. Therefore when using the parquet reader and writer you might want to consider if you want to provide your metadata. This may still be advantagous to check that the parquet matches metadata schema you have for the data.

  In some cases (see [this issue](https://github.com/apache/arrow/issues/15032)) pyarrow will silently convert some data types when writing a parquet file, overriding the provided metadata. The `writer` will raise a warning if this happens, and you may wish to update your metdata so it matches the type that arrow expects.

  ```python
  from arrow_pd_parser import reader, writer


  df = reader.parquet.read("s3://bucket/in.snappy.parquet")
  writer.parquet.write("s3://bucket/out.snappy.parquet")

  print(writer.parquet.compression, writer.parquet.version)



  writer.parquet.write("s3://bucket/out.parquet", compression=None, version='1.0')
  ```



  When metadata is provided (or for all Arrow Readers without metadata) we default to dates and datetimes as a series of objects rather than the Pandas timestamps this is because Pandas timestamps (currently) only support nanosecond resolution which is not ideal for a lot of timestamps as the range can be often too small.

  ```python
  import pandas as pd
  pd.Timestamp.min # Timestamp('1677-09-22 00:12:43.145225')

  pd.Timestamp.max # Timestamp('2262-04-11 23:47:16.854775807')
  ```

  Whereas Spark 3.0 (for example) allows timestamps from `0001-01-01 00:00:00` to `9999-12-31 23:59:59.999999` ([source](https://databricks.com/blog/2020/07/22/a-comprehensive-look-at-dates-and-timestamps-in-apache-spark-3-0.html)). By default we do not allow Timestamps for this reason instead we use the python native datetime class as default for our types (wrapped in a Pandas object column type). Users can specify other Pandas date/timestamp using the `pd_timestamp_type` parameter which can either be `object` (default), `pd_timestamp` or `pd_period`.

  When setting `pd_timestamp_type=pd_period` pd_arrow_parser will identify the correct pandas period resolution based on the arrow column type.

  ```python
  from arrow_pd_parser.reader import csv


  csv.pd_timestamp_type="pd_period"
  df = csv.read("tests/data/datetime_type.csv")
  df.my_datetime.dtype # "period[S]"


  csv.pd_timestamp_type="pd_timestamp"
  df = csv.read("tests/data/datetime_type.csv")
  df.my_datetime.dtype # dtype('<M8[ns]')
  ```



  Datasets that are too large to fit into memory can be read in chunks. If the `chunksize` parameter is given to `reader.read` then an iterator of dataframes is returned rather than a single dataframe. `chunksize` can be an integer indicating the number of rows each chunk contains, or a string indicating the amount of memory each chunk should fill, e.g. "1 GB". Note that the memory size should not fill available memory as some overhead is required for reading and writing. The `writer.write` function can then use these iterators instead of a dataframe.

  ```python
  from arrow_pd_parser import reader, writer

  df_iter = reader.read("s3://my_bucket/csv_data/my_table.csv", chunksize=10000)
  writer.write(df_iter, "s3://my_bucket/parquet_data/my_table.parquet")
  ```

  If the dataframe needs transforming before writing then use a generator.

  ```python
  from arrow_pd_parser import reader, writer

  def transform(df):
      
      return df

  df_iter = reader.read("s3://my_bucket/csv_data/my_table.csv", chunksize="500MB")

  df_transformed_iter = (transform(df) for df in df_iter)
  writer.write(df_transformed_iter, "s3://my_bucket/parquet_data/my_transformed_table.parquet")
  ```


pkgId: ac7a7c55383de7e83753cc8b9188daee8194dba5e805a01b5fe3584259b8caa7
name: python-arrow-udf
arch: src
version: 0.2.1
epoch: 0
release: 1
summary: A user-defined function framework for Apache Arrow
url: https://pypi.org/project/arrow-udf/
rpm_license: Apache Software License
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrow-udf-0.2.1-1.src.rpm
checksum_type: sha256
description:
  ```sh
  pip install arrow-udf
  ```



  Define functions in a Python file:

  ```python

  from arrow_udf import udf, udtf, UdfServer
  import struct
  import socket


  @udf(input_types=['INT', 'INT'], result_type='INT')
  def gcd(x, y):
      while y != 0:
          (x, y) = (y, x % y)
      return x


  @udf(input_types=['BINARY'], result_type='STRUCT<src_addr: STRING, dst_addr: STRING, src_port: INT16, dst_port: INT16>')
  def extract_tcp_info(tcp_packet: bytes):
      src_addr, dst_addr = struct.unpack('!4s4s', tcp_packet[12:20])
      src_port, dst_port = struct.unpack('!HH', tcp_packet[20:24])
      src_addr = socket.inet_ntoa(src_addr)
      dst_addr = socket.inet_ntoa(dst_addr)
      return {
          'src_addr': src_addr,
          'dst_addr': dst_addr,
          'src_port': src_port,
          'dst_port': dst_port,
      }


  @udtf(input_types='INT', result_types='INT')
  def series(n):
      for i in range(n):
          yield i


  if __name__ == '__main__':
      server = UdfServer(location="0.0.0.0:8815")
      server.add_function(gcd)
      server.add_function(extract_tcp_info)
      server.add_function(series)
      server.serve()
  ```

  Start the UDF server:

  ```sh
  python3 udf.py
  ```



  | Arrow Type           | Python Type                    |
  | -------------------- | ------------------------------ |
  | `boolean`            | `bool`                         |
  | `int8`               | `int`                          |
  | `int16`              | `int`                          |
  | `int32`              | `int`                          |
  | `int64`              | `int`                          |
  | `uint8`              | `int`                          |
  | `uint16`             | `int`                          |
  | `uint32`             | `int`                          |
  | `uint64`             | `int`                          |
  | `float32`            | `float`                        |
  | `float32`            | `float`                        |
  | `date32`             | `datetime.date`                |
  | `time64`             | `datetime.time`                |
  | `timestamp`          | `datetime.datetime`            |
  | `interval`           | `MonthDayNano` / `(int, int, int)` (fields can be obtained by `months()`, `days()` and `nanoseconds()` from `MonthDayNano`) |
  | `string`             | `str`                          |
  | `binary`             | `bytes`                        |
  | `large_string`       | `str`                          |
  | `large_binary`       | `bytes`                        |

  Extension types:

  | Data type   | Metadata            | Python Type           |
  | ----------- | ------------------- | --------------------- |
  | `decimal`   | `arrowudf.decimal`  | `decimal.Decimal`     |
  | `json`      | `arrowudf.json`     | `any`                 |


pkgId: 0755e26f7d457e3c281974357a9d8ceca3b16ab0d27298a0796ef906d25cbe33
name: python-arrr
arch: src
version: 1.0.5
epoch: 0
release: 1
summary: A module and command to turn English into Pirate speak.
url: https://github.com/ntoll/arrr
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arrr-1.0.5-1.src.rpm
checksum_type: sha256
description:
  A simple script / module to turn plain English into Pirate speak. Arrr.
  Someone mentioned something called "Pirate Python", I idly wondered if anyone
  had made an English to Pirate-ish module/command written in Python (they
  hadn't), I realised I had a burning desire to make one, and things got out of
  hand. :-)
  We have an entirely serious `code of conduct <https://github.com/ntoll/arrr/blob/master/CODE_OF_CONDUCT.rst>`_
  and a not-so-serious `code of mis-conduct <https://github.com/ntoll/arrr/blob/master/CODE_OF_MISCONDUCT.rst>`_
  for those of a more Piratical disposition.


pkgId: 81a4e5d30cf1d04db5882bf26e6ecbb38fb164c710ed4aca63f8ec98722b7093
name: python-ars-magica
arch: src
version: 0.1.3
epoch: 0
release: 1
summary: A Python implementation of Ars Magica 5th Edition mechanics
url: https://github.com/bjornaer/ars
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-ars-magica-0.1.3-1.src.rpm
checksum_type: sha256
description:
  _"We are the ancient shapeshifters, guardians of the old ways. Our magic flows from the heart-beast within."_
  *- A common saying among House Bjornaer magi*


pkgId: 679569bf1a3a2bccd8375d2c92b393343c954730c4f9f3b87496916b8b2257d6
name: python-arsenal-cli
arch: src
version: 1.2.6
epoch: 0
release: 1
summary: Arsenal is just a quick inventory, reminder and launcher for pentest commands.
url: https://github.com/Orange-Cyberdefense/arsenal
rpm_license: GPL-3.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arsenal-cli-1.2.6-1.src.rpm
checksum_type: sha256
description:
  ![](img/logo.png)

  Arsenal is just a quick inventory, reminder and launcher for pentest commands.
  <br>This project written by pentesters for pentesters simplify the use of all the hard-to-remember commands

  ![](img/arsenal.gif)

  In arsenal you can search for a command, select one and it's prefilled directly in your terminal. This functionality is independent of the shell used. Indeed arsenal emulates real user input (with TTY arguments and IOCTL) so arsenal works with all shells and your commands will be in the history.

  You have to enter arguments if needed, but arsenal supports global variables. <br>
  For example, during a pentest we can set the variable `ip` to prefill all commands using an ip with the right one.

  To do that you just have to enter the following command in arsenal:
  ```
  >set ip=10.10.10.10
  ```

  Authors:
  * Guillaume Muh
  * mayfly

  This project is inspired by navi (<https://github.com/denisidoro/navi>) because the original version was in bash and too hard to understand to add features




  ![](img/arsenal_update.png)

  - New colors
  - Add tmux new pane support (with -t)
  - Add default values in cheatsheets commands with `<argument|default_value>`
  - Support description inside cheatsheets
  - New categories and Tags
  - New cheatsheets
  - Add yml support (thx @0xswitch )
  - Add fzf support with ctrl+t (thx @mgp25)
  - Add prefix to commands generated (with -f)


  - with pip :
  ```
  python3 -m pip install arsenal-cli
  ```

  - run (we also advice you to add this alias : `alias a='arsenal'`)
  ```
  arsenal
  ```

  - manually:
  ```
  git clone https://github.com/Orange-Cyberdefense/arsenal.git
  cd arsenal
  python3 -m pip install -r requirements.txt
  ./run
  ```

  Inside your .bashrc or .zshrc add the path to `run` to help you do that you could launch the addalias.sh script
  ```
  ./addalias.sh
  ```

  - Also if you are an Arch user you can install from the AUR:
  ```bash
  git clone https://aur.archlinux.org/arsenal.git
  cd arsenal
  makepkg -si
  ```
  - Or with an AUR helper like yay:
  ```bash
  yay -S arsenal
  ```



  ```
  ./run -t # if you launch arsenal in a tmux window with one pane, it will split the window and send the command to the otherpane without quitting arsenal
           
  ./run -t -e # just like the -t mode but with direct execution in the other pane without quitting arsenal
  ```



  You could add your own cheatsheets inside the my_cheats folder or in the ~/.cheats folder.

  You could also add additional paths to the file `<arsenal_home>/arsenal/modules/config.py`,
  arsenal reads `.md` (MarkDown) and `.rst` (RestructuredText).

  ```
  CHEATS_PATHS = [
      join(BASEPATH, "cheats"), # DEFAULT
      join(HOMEPATH, "docs/my_cheats")
  ]
  ```

  Cheatsheets examples are in `<arsenal_home>/cheats`: `README.md` and `README.rst`



  In order to prefix commands generated by arsenal you need to set the `arsenal_prefix_cmd` global variable.

  For example if you need your commands to be prefixed with `proxychains -q`:
  ```
  >set arsenal_prefix_cmd=proxychains -q
  ```

  then you can start run arsenal with the prefix option:
  ```bash
  arsenal -f
  ```



  If you got on error on color init try :
  ```
  export TERM='xterm-256color'
  ```

  --

  If you have the following exception when running Arsenal:
  ```
  ImportError: cannot import name 'FullLoader'
  ```
  First, check that requirements are installed:
  ```
  pip install -r requirements.txt
  ```
  If the exception is still there:
  ```
  pip install -U PyYAML
  ```

  --

  If you encounter an exception similar to the following (contains TIOCSTI in strace) when running Arsenal:
  ```
  [...]
      fcntl.ioctl(stdin, termios.TIOCSTI, c)
  OSError: [Errno 5] Input/output error
  ```
  Then you may need to re-enable TIOCSTI. Please run the following commands as root to fix this issue on the current session :
  ```
  sysctl -w dev.tty.legacy_tiocsti=1
  ```
  If you want this workaround to survive a reboot, add the following configuration to sysctl.conf file and reboot :
  ```
  echo "dev.tty.legacy_tiocsti=1" >> /etc/sysctl.conf
  ```
  More information is available in the issue [https://github.com/Orange-Cyberdefense/arsenal/issues/77](https://github.com/Orange-Cyberdefense/arsenal/issues/77)



  - Active directory mindmap
    - Due to csp on github when you open the svg, we moved the AD mindmap and the source to this repository : [https://github.com/Orange-Cyberdefense/ocd-mindmaps](https://github.com/Orange-Cyberdefense/ocd-mindmaps)

  [https://orange-cyberdefense.github.io/ocd-mindmaps/img/pentest_ad_dark_2022_11.svg](https://orange-cyberdefense.github.io/ocd-mindmaps/img/pentest_ad_dark_2022_11.svg)

  - AD mindmap black version
  ![](./mindmap/pentest_ad_black.png)

  - Exchange Mindmap (thx to @snovvcrash)
  ![](./mindmap/Pentesting_MS_Exchange_Server_on_the_Perimeter.png)

  - Active directory ACE mindmap
  ![](./mindmap/ACEs_xmind.png)




  - [X] msfvenom
  - [X] php
  - [X] python
  - [X] perl
  - [X] powershell
  - [X] java
  - [X] ruby


  - [X] php
  - [X] nodejs
  - [X] hash




  - [X] enum4linux
  - [X] smbmap
  - [ ] smbget
  - [X] rpcclient
  - [ ] rpcinfo
  - [X] nbtscan
  - [X] impacket


  - [X] impacket
  - [X] bloodhound
  - [X] rubeus
  - [ ] powerview
  - [ ] shadow credentials attack
  - [ ] samaccountname attack


  - [X] mitm6
  - [X] responder


  - [X] ysoserial
  - [ ] ysoserial.net


  - [X] hydra
  - [X] hashcat
  - [X] john


  - [X] nmap
  - [X] eyewitness
  - [X] gowitness


  - [X] gobuster
  - [X] ffuf
  - [X] wfuzz


  - [X] dig
  - [X] dnsrecon
  - [X] dnsenum
  - [X] sublist3r


  - [ ] rpcbind


  - [X] snmpwalk
  - [X] snmp-check
  - [X] onesixtyone


  - [X] sqlmap


  - [ ] oscanner
  - [ ] sqlplus
  - [ ] tnscmd10g


  - [X] mysql


  - [X] showmount


  - [X] xfreerdp
  - [X] rdesktop
  - [ ] ncrack


  - [X] sqsh


  - [X] evilwinrm


  - [ ] redis-cli


  - [X] psql
  - [ ] pgdump


  - [X] vncviewer


  - [X] xspy
  - [X] xwd
  - [X] xwininfo


  - [X] ldapsearch


  - [ ] sslscan


  - [ ] burp
  - [X] nikto
  - [ ] tplmap


  - [X] drupwn
  - [X] wpscan
  - [ ] nuclei


pkgId: 6d4a43838ce7bb9b6f48612f8b250fda97694f52e2dac2c4942330d84ca4d4a3
name: python-arsenic
arch: src
version: 21.8
epoch: 0
release: 1
summary: Asynchronous WebDriver client
url: https://github.com/HDE/arsenic
rpm_license: Apache-2.0
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arsenic-21.8-1.src.rpm
checksum_type: sha256
description:
  [![CircleCI](https://circleci.com/gh/HDE/arsenic/tree/main.svg?style=svg)](https://circleci.com/gh/HDE/arsenic/tree/main) [![Documentation Status](https://readthedocs.org/projects/arsenic/badge/?version=latest)](http://arsenic.readthedocs.io/en/latest/?badge=latest)
  [![BrowserStack Status](https://automate.browserstack.com/badge.svg?badge_key=QmtNVHFnWWRFSEVUdTBZNWU5NGMraVorWVltazFqRk1VNWRydW5FRXU2dz0tLVhoTlFuK2tZUTJ1UGx0UmZaWjg4R1E9PQ==--35ef3d28fbf8ea24ee7fa2a435f9271fbaaf85d4)](https://automate.browserstack.com/public-build/QmtNVHFnWWRFSEVUdTBZNWU5NGMraVorWVltazFqRk1VNWRydW5FRXU2dz0tLVhoTlFuK2tZUTJ1UGx0UmZaWjg4R1E9PQ==--35ef3d28fbf8ea24ee7fa2a435f9271fbaaf85d4)
  [![Appveyor status](https://ci.appveyor.com/api/projects/status/8l0koom7h93y1f9q?svg=true)](https://ci.appveyor.com/project/ojii/arsenic)
  [![PyPI version](https://badge.fury.io/py/arsenic.svg)](https://badge.fury.io/py/arsenic)
  [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)
  [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)


  Asynchronous webdriver client built on asyncio.




  Let's run a local Firefox instance.


  ```python

  from arsenic import get_session
  from arsenic.browsers import Firefox
  from arsenic.services import Geckodriver


  async def example():
      
      async with get_session(Geckodriver(), Firefox()) as session:
            
            await session.get('http://example.com')
            
            h1 = await session.wait_for_element(5, 'h1')
            
            print(await h1.get_text())
  ```

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



  Continuous integration for certain browsers is generously provided by [Browserstack](http://browserstack.com).

  [![Browserstack](./.circleci/browserstack-logo.png)](http://browserstack.com/)


pkgId: 198395b4d0632d100ef1f9389f046518534bcb3cad6b90499882fd94506fdc36
name: python-arsls
arch: src
version: 1.0
epoch: 0
release: 1
summary: A simple URL Shortener with GUI made using CustomTkinter.
url: https://github.com/e500ky/arsls
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arsls-1.0-1.src.rpm
checksum_type: sha256
description:
  ARSLS, Python ile geliştirilmiş, URL kısaltma ve kısaltılmış URL'yi kolayca panoya kopyalama işlemini gerçekleştiren bir GUI uygulamasıdır.



  - URL'leri kısaltma
  - Kısaltılmış URL'yi panoya kopyalama
  - Basit ve kullanımı kolay arayüz



  ```bash
  pip install arsls
  ```



  ```bash
  arsls
  ```


pkgId: f8a86b6c04c916e4601a6da9f75bdae397a2b2f1133b158f32d9814178661247
name: python-arspack
arch: src
version: 0.0.6.1
epoch: 0
release: 1
summary: A Python Package Installer GUI powered by ArsTech.
url: https://github.com/e500ky/arspack
rpm_license: None
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-arspack-0.0.6.1-1.src.rpm
checksum_type: sha256
description:
  ARSPY, Python paketlerini kolayca yüklemenizi sağlayan bir GUI uygulamasıdır.



  - `pip` veya `conda` kullanarak paket yükleme
  - Kullanıcı dostu arayüz
  - Python 3.8 ve üzeri sürümler için uyumlu



  ```bash
  pip install arspack
  ```


pkgId: 885f22791b07efd5bf161e9bf8e9cd1f59c510115d3798f3cebb4e30a3bcec4c
name: python-art
arch: src
version: 6.2
epoch: 0
release: 1
summary: ASCII Art Library For Python
url: https://github.com/sepandhaghighi/art
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-art-6.2-1.src.rpm
checksum_type: sha256
description:
  ASCII art is also known as "computer text art". It involves the smart placement of typed special characters or
  letters to make a visual shape that is spread over multiple lines of text.
  ART is a Python lib for text converting to ASCII art fancy. ;-)
  <table>
  	<tr align="center">
  		<td>Open Hub</td>
  		<td><a href="https://www.openhub.net/p/artlib"><img src="https://www.openhub.net/p/artlib/widgets/project_thin_badge.gif"></a></td>
  	</tr>
  	<tr align="center">
  		<td>PyPI Counter</td>
  		<td><a href="http://pepy.tech/project/art"><img src="http://pepy.tech/badge/art"></a></td>
  	</tr>
  	<tr align="center">
  		<td>Github Stars</td>
  		<td><a href="https://github.com/sepandhaghighi/art"><img src="https://img.shields.io/github/stars/sepandhaghighi/art.svg?style=social&label=Stars"></a></td>
  	</tr>
  	<tr align="center">
  		<td>Font Counter</td>
  		<td id="font_counter">657</td>
  	</tr>
  	<tr align="center">
  		<td>1-Line-Art Counter</td>
  		<td id="art_counter">710</td>
  	</tr>
  	<tr align="center">
  		<td>Decor Counter</td>
  		<td id="decor_counter">218</td>
  	</tr>
  </table>
  <table>
  	<tr>
  		<td align="center">Branch</td>
  		<td align="center">master</td>
  		<td align="center">dev</td>
  	</tr>
  	<tr>
  		<td align="center">CI</td>
  		<td align="center"><img src="https://github.com/sepandhaghighi/art/workflows/CI/badge.svg?branch=master"></td>
  		<td align="center"><img src="https://github.com/sepandhaghighi/art/workflows/CI/badge.svg?branch=dev"></td>
  	</tr>
  </table>
  <table>
  	<tr>
  		<td align="center">Code Quality</td>
  		<td align="center"><a class="badge-align" href="https://www.codacy.com/app/sepand-haghighi/art?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=sepandhaghighi/art&amp;utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/405020450bc94088ad1450461831a587"/></a></td>
  		<td align="center"><a href="https://codebeat.co/projects/github-com-sepandhaghighi-art-dev"><img alt="codebeat badge" src="https://codebeat.co/badges/90e77325-a046-4cc5-9c3e-646c011a5b72" /></a></td>
  		<td align="center"><a href="https://www.codefactor.io/repository/github/sepandhaghighi/art"><img src="https://www.codefactor.io/repository/github/sepandhaghighi/art/badge" alt="CodeFactor" /></a></td>
  	</tr>
  </table>

  <div align="center">
  <img src="https://github.com/sepandhaghighi/art/raw/master/otherfile/ART.gif">
  <p>Quick Start</p>
  </div>

  ⚠️ Some environments don't support all 1-Line arts
  ⚠️ **ART 4.6** is the last version to support **Bipartite art**

  This function return 1-line art as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> from art import *
  >>> art_1=art("coffee") # return art as str in normal mode
  >>> print(art_1)
  c[_]
  >>> art_2=art("woman",number=2) # return multiple art as str
  >>> print(art_2)
  ▓⚗_⚗▓ ▓⚗_⚗▓
  >>> art("coffee", number=3, space=5)
  'c[_]     c[_]     c[_]'
  >>> art("random") # random 1-line art mode
  '(っ◕‿◕)っ '
  >>> art("rand")   # random 1-line art mode
  't(-_-t) '
  >>> art(22,number=1) # raise artError
  Traceback (most recent call last):
  art.art.artError: The 'artname' type must be str.
  ```

  This function print 1-line art in normal mode (return None) and raise `artError` in exception.
  ```pycon
  >>> aprint("butterfly") # print art
  Ƹ̵̡Ӝ̵̨̄Ʒ
  >>> aprint("happy") # print art
   ۜ\(סּںסּَ` )/ۜ
  >>> aprint("coffee", number=3, space=5)
  c[_]     c[_]     c[_]
  >>> aprint("random") # random 1-line art mode
  '(っ◕‿◕)っ '
  >>> aprint("rand")   # random 1-line art mode
  't(-_-t) '
  >>> aprint("woman",number="22") # raise artError
  Traceback (most recent call last):
  art.art.artError: The 'number' type must be int.
  ```

  `randart` function is added in `Version 2.2` as `art("random")` shortcut.
  ```pycon
  >>> randart()
  'ዞᏜ℘℘Ꮍ ℬℹℛʈዞᗬᏜᎽ '
  >>> randart()
  '✌(◕‿-)✌ '
  ```
  * Note1 : Use `ART_NAMES` to access all arts name list (new in `Version 4.2`)
  * Note2 : Use `NON_ASCII_ARTS` to access all Non-ASCII arts name list (new in `Version 4.6`)
  * Note3 : Use `ASCII_ARTS` to access all ASCII arts name list (new in `Version 5.7`)

  ⚠️ Some fonts don't support all characters
  ⚠️ From `Version 3.3` Non-ASCII fonts added (These fonts are not compatible with some environments)
  ⚠️ From `Version 5.3` `\n` is used as the default line separator instead of `\r\n` (Use `sep` parameter if needed)

  This function return ASCII text as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> Art=text2art("art") # Return ASCII text (default font) and default chr_ignore=True
  >>> print(Art)
                _
    __ _  _ __ | |_
   / _` || '__|| __|
  | (_| || |   | |_
   \__,_||_|    \__|
  >>> Art=text2art("art",font='block',chr_ignore=True) # Return ASCII text with block font
  >>> print(Art)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> Art=text2art("test","random") # random font mode
  >>> print(Art)
   |       |
  ~|~/~/(~~|~
   | \/__) |
  >>> Art=text2art("test","rand") # random font mode
  >>> print(Art)
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  >>> print(text2art("test", space=10))
   _                                             _
  | |_             ___            ___           | |_
  | __|           / _ \          / __|          | __|
  | |_           |  __/          \__ \          | |_
   \__|           \___|          |___/           \__|
  >>> print(text2art('''Lorem
  ipsum
  dolor''', font="small")) # Multi-line print
   _
  | |    ___  _ _  ___  _ __
  | |__ / _ \| '_|/ -_)| '  \
  |____|\___/|_|  \___||_|_|_|
   _
  (_) _ __  ___ _  _  _ __
  | || '_ \(_-<| || || '  \
  |_|| .__//__/ \_,_||_|_|_|
     |_|
      _       _
   __| | ___ | | ___  _ _
  / _` |/ _ \| |/ _ \| '_|
  \__,_|\___/|_|\___/|_|
  >>> print(text2art("test","white_bubble"))  # Non-ASCII font example
  ⓣⓔⓢⓣ
  >>> text2art("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6
  '▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌'
  >>> text2art("seسسس",font=DEFAULT_FONT,chr_ignore=False) # raise artError in exception
  Traceback (most recent call last):
  art.art.artError: س is invalid.
  ```

  This function print ASCII text in normal mode (return None) and raise `artError` in exception.
  ```pycon
  >>> tprint("art") # print ASCII text (default font)
                _
    __ _  _ __ | |_
   / _` || '__|| __|
  | (_| || |   | |_
   \__,_||_|    \__|
  >>> tprint("art",font="block",chr_ignore=True) # print ASCII text (block font)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> tprint('testسس')  # chr_ignore flag ==True (Default)
   _               _
  | |_   ___  ___ | |_
  | __| / _ \/ __|| __|
  | |_ |  __/\__ \| |_
   \__| \___||___/ \__|
  >>> tprint("test","random") # random font mode
   |       |
  ~|~/~/(~~|~
   | \/__) |
  >>> tprint("test","rand") # random font mode
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  >>> tprint("test", space=10)
   _                                             _
  | |_             ___            ___           | |_
  | __|           / _ \          / __|          | __|
  | |_           |  __/          \__ \          | |_
   \__|           \___|          |___/           \__|
  >>> tprint('testسس',chr_ignore=False) # raise artError in exception
  Traceback (most recent call last):
  art.art.artError: س is invalid.
  >>> tprint('''Lorem
  ipsum
  dolor''', font="cybermedium") # Multi-line print
  _    ____ ____ ____ _  _
  |    |  | |__/ |___ |\/|
  |___ |__| |  \ |___ |  |
  _ ___  ____ _  _ _  _
  | |__] [__  |  | |\/|
  | |    ___] |__| |  |
  ___  ____ _    ____ ____
  |  \ |  | |    |  | |__/
  |__/ |__| |___ |__| |  \
  >>> tprint("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6
  ▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌
  >>> tprint("art",font="fancy5",decoration="random") # decoration random mode is added in Version 5.0
  •]•·✦º✦·»ᏗᏒᏖ«·✦º✦·•[•
  ```

  This function return `dict` in normal and exception mode.
  ```pycon
  >>> Response=tsave("art",filename="test.txt") # save ASCII text in test.txt file with save message (print_status==True), return dict
  Saved!
  Filename: test.txt
  >>> Response["Message"]
  'OK'
  >>> Response=tsave("art",filename="test.txt",print_status=False) # save ASCII text in test.txt file without save message (print_status==False)
  >>> Response["Message"]
  'OK'
  >>> Response["Status"]
  True
  >>> tsave(22,font=DEFAULT_FONT,filename="art",chr_ignore=True,print_status=True)
  {'Status': False, 'Message': "'int' object has no attribute 'split'"}
  >>> Response=tsave("art",filename="test.txt",overwrite=True) # overwrite parameter is added in Version 4.0
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",decoration="barcode1") # decoration parameter is added in Version 4.6
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",sep="\r\n") # sep parameter is added in Version 5.3
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",space=5) # space parameter is added in Version 6.0
  Saved!
  Filename: test.txt
  ```
  * Note1 : Use `FONT_NAMES` to access all fonts name list (new in `Version 4.2`)
  * Note2 : Use `NON_ASCII_FONTS` to access all Non-ASCII fonts name list (new in `Version 4.4`)
  * Note3 : Use `ASCII_FONTS` to access all ASCII fonts name list (new in `Version 5.7`)

  ⚠️ Some environments don't support all decorations

  This function return decoration as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> decor("barcode1")
  '▌│█║▌║▌║ '
  >>> decor("barcode1",reverse=True)
  ' ║▌║▌║█│▌'
  >>> decor("barcode1") + text2art("    art   ",font="fancy42") + decor("barcode1",reverse=True)
  '▌│█║▌║▌║     ąяţ    ║▌║▌║█│▌'
  >>> decor("barcode1",both=True) # both parameter is added in Version 5.0
  ['▌│█║▌║▌║ ', ' ║▌║▌║█│▌']
  >>> decor("random",both=True) # random mode is added in Version 5.0
  ['｢(◔ω◔「)三', '三三三ʅ(；◔౪◔)ʃ']
  >>> decor("rand",both=True) # random mode is added in Version 5.0
  ['‹–…·´`·…–›', '‹–…·´`·…–›']
  >>> decor(None)
  Traceback (most recent call last):
  art.art.artError: The 'decoration' type must be str.
  ```
  * Note : Use `DECORATION_NAMES` to access all decorations name list (new in `Version 4.6`)

  These modes are available for `text2art`, `tprint` & `tsave`.

  ⚠️ Some fonts don't support all characters
  ```pycon
  >>> tprint("art",font="block",chr_ignore=True)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> tprint("art","white_bubble")
  ⓐⓡⓣ
  ```

  Randomly select from all fonts.
  Keywords : `random`, `rand` & `rnd`
  ```pycon
  >>> tprint("test",font="random")
   |       |
  ~|~/~/(~~|~
   | \/__) |
  ```

  Randomly select from small fonts.
  Keywords : `rnd-small`, `random-small` & `rand-small`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-small")
  _/  _   _ _/
  /  (- _)  /
  ```

  Randomly select from medium fonts.
  Keywords : `rnd-medium`, `random-medium` & `rand-medium`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-medium")
    ,                ,
   ||               ||
  =||=  _-_   _-_, =||=
   ||  || \\ ||_.   ||
   ||  ||/    ~ ||  ||
   \\, \\,/  ,-_-   \\,
  ```

  Randomly select from large fonts.
  Keywords : `rnd-large`, `random-large` & `rand-large`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-large")
  8888888 8888888888 8 8888888888      d888888o.   8888888 8888888888
        8 8888       8 8888          .`8888:' `88.       8 8888
        8 8888       8 8888          8.`8888.   Y8       8 8888
        8 8888       8 8888          `8.`8888.           8 8888
        8 8888       8 888888888888   `8.`8888.          8 8888
        8 8888       8 8888            `8.`8888.         8 8888
        8 8888       8 8888             `8.`8888.        8 8888
        8 8888       8 8888         8b   `8.`8888.       8 8888
        8 8888       8 8888         `8b.  ;8.`8888       8 8888
        8 8888       8 888888888888  `Y8888P ,88P'       8 8888
  ```

  Randomly select from xlarge fonts.
  Keywords : `rnd-xlarge`, `random-xlarge` & `rand-xlarge`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test","rnd-xlarge")
        _____                    _____                    _____                _____
       /\    \                  /\    \                  /\    \              /\    \
      /::\    \                /::\    \                /::\    \            /::\    \
      \:::\    \              /::::\    \              /::::\    \           \:::\    \
       \:::\    \            /::::::\    \            /::::::\    \           \:::\    \
        \:::\    \          /:::/\:::\    \          /:::/\:::\    \           \:::\    \
         \:::\    \        /:::/__\:::\    \        /:::/__\:::\    \           \:::\    \
         /::::\    \      /::::\   \:::\    \       \:::\   \:::\    \          /::::\    \
        /::::::\    \    /::::::\   \:::\    \    ___\:::\   \:::\    \        /::::::\    \
       /:::/\:::\    \  /:::/\:::\   \:::\    \  /\   \:::\   \:::\    \      /:::/\:::\    \
      /:::/  \:::\____\/:::/__\:::\   \:::\____\/::\   \:::\   \:::\____\    /:::/  \:::\____\
     /:::/    \::/    /\:::\   \:::\   \::/    /\:::\   \:::\   \::/    /   /:::/    \::/    /
    /:::/    / \/____/  \:::\   \:::\   \/____/  \:::\   \:::\   \/____/   /:::/    / \/____/
   /:::/    /            \:::\   \:::\    \       \:::\   \:::\    \      /:::/    /
  /:::/    /              \:::\   \:::\____\       \:::\   \:::\____\    /:::/    /
  \::/    /                \:::\   \::/    /        \:::\  /:::/    /    \::/    /
   \/____/                  \:::\   \/____/          \:::\/:::/    /      \/____/
                             \:::\    \               \::::::/    /
                              \:::\____\               \::::/    /
                               \::/    /                \::/    /
                                \/____/                  \/____/
  ```

  This mode consider length of input text to select font
  ☑️ Support of 95 ASCII characters guaranteed
  Keywords : `wizard`, `wiz` & `magic`
  * Note : New in `Version 2.9`
  ```pycon
  >>> tprint("1","wizard")
      88
    ,d88
  888888
      88
      88
      88
      88
      88
      88
      88
  >>> tprint("1"*5,"wizard")
  d88  d88  d88  d88  d88
   88   88   88   88   88
   88   88   88   88   88
   88   88   88   88   88
   88   88   88   88   88
  d88P d88P d88P d88P d88P
  >>> tprint("1"*15,"wizard")
   

   
   
   

  ```

  Randomly select from Non-ASCII fonts.
  Keywords : `random-na`, `rand-na` & `rnd-na`
  * Note : New in `Version 3.4`
  ```pycon
  >>> tprint("test","random-na")
  ₮Ɇ₴₮
  >>> tprint("test","random-na")
  ʇsǝʇ
  ```

  Randomly mix Non-ASCII fonts.
  Keywords : `mix`
  * Note : New in `Version 3.7`
  ```pycon
  >>> tprint("test","mix")
  †Ɛѕ†
  >>> tprint("test","mix")
  tᏋѕt
  >>> tprint("test","mix")
  ꓄єร꓄
  ```
  ⚠️ Non-ASCII fonts are only available in `Font name`, `Random Non-ASCII` and `Mix` modes

  <a href="https://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein distance</a> used in this project. (`Version` >0.9)
  ```pycon
  >>> aprint("happi")  # correct --> aprint("happy"), error < |artname|/2
   ۜ\(סּںסּَ` )/ۜ
  >>> Art=art("birds2222222",number=1) # correct --> Art=art("birds",number=1), error >= |artname|/2
  Traceback (most recent call last):
  art.art.artError: Invalid art name.
  >>> aprint("happi231")  # correct --> aprint("happy"), error < |artname|/2
  ⎦˚◡˚⎣
  >>> aprint("happi2312344") # correct --> aprint("happy"), error >= |artname|/2
  Traceback (most recent call last):
  art.art.artError: Invalid art name.
  >>> Art=text2art("test",font="black") # correct --> Art=text2art("test",font="block")
  >>> print(Art)
   .----------------.  .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. || .--------------. |
  | |  _________   | || |  _________   | || |    _______   | || |  _________   | |
  | | |  _   _  |  | || | |_   ___  |  | || |   /  ___  |  | || | |  _   _  |  | |
  | | |_/ | | \_|  | || |   | |_  \_|  | || |  |  (__ \_|  | || | |_/ | | \_|  | |
  | |     | |      | || |   |  _|  _   | || |   '.___`-.   | || |     | |      | |
  | |    _| |_     | || |  _| |___/ |  | || |  |`\____) |  | || |    _| |_     | |
  | |   |_____|    | || | |_________|  | || |  |_______.'  | || |   |_____|    | |
  | |              | || |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'  '----------------'
  >>> tprint("test",font="cybermedum")   # correct --> tprint("test",font="cybermedium")
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  ```

  `set_default` function is added in `Version 2.2` in order to change default values.
  ```pycon
  >>> help(set_default)
  Help on function set_default in module art.art:
  set_default(font='standard', chr_ignore=True, filename='art', print_status=True, overwrite=False, decoration=None, sep='\n')
      Change text2art, tprint and tsave default values.
  >>> tprint("test")
   _               _
  | |_   ___  ___ | |_
  | __| / _ \/ __|| __|
  | |_ |  __/\__ \| |_
   \__| \___||___/ \__|
  >>> set_default(font="italic")
  >>> tprint("test")
  _/  _   _ _/
  /  (- _)  /
  ```
  * Note : Functions error response updated in `Version 0.8`
  	<table>
  	<tr>
  		<td align="center">Function</td>
  		<td align="center">Normal Output</td>
  		<td align="center">Error</td>
  	</tr>
      <tr>
  		<td align="center">decor</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">art</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">aprint</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">tprint</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">tsave</td>
  		<td align="center">{"Status":bool,"Message":str}</td>
  		<td align="center">{"Status":bool,"Message":str}</td>
  	</tr>
  	<tr>
  		<td align="center">text2art</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">set_default</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	</table>

  - Only ASCII fonts and arts :
  ```
  art test
  ```
  - All fonts, arts and decorations :
  ```
  art test2
  ```

  ⚠️ [Backward Compatibility] **ART 5.9** is the last version to support this **CLI structure** officially
  ⚠️ You can use `art` or `python -m art` to run this mode
  - List of arts :  `art list` or `art arts`
  - List of fonts : `art fonts`
  - Text : `art text [yourtext] [fontname(optional)]`
  - Art : `art shape [artname]` or `art art [artname]`
  - Save :  `art save [yourtext] [fontname(optional)]`
  - All  :  `art all [yourtext]`

  Just send your text to one of these bots. 👇👇👇👇
  <a href="https://t.me/artlib_bot" target="__blank"><img src="https://img.shields.io/badge/Telegram-Bot1-red.svg"></a>
  <a href="https://t.me/textart_robot" target="__blank"><img src="https://img.shields.io/badge/Telegram-Bot2-blue.svg"></a>

  1. ART can be used online in interactive Jupyter Notebooks via the Binder service! Try it out now! :
  [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/sepandhaghighi/art/master)
  * Open `FontList.ipynb`, `ArtList.ipynb` and `DecorList.ipynb`
  * Edit and execute each part of the notes, step by step from the top panel by run button
  2. ART also can be used online in [ascii-generator.site](https://ascii-generator.site/), a Django website by [hermanTenuki](https://github.com/hermanTenuki)

  <div align="center">
  <a href="https://asciinema.org/a/186368" target="_blank"><img src="https://asciinema.org/a/186368.png" /></a>
  <p>Screen Record</p>
  </div>
  * View full font list ([Link1](https://github.com/sepandhaghighi/art/blob/master/FontList.ipynb "Full Font List"),[Link2](https://www.ascii-art.site/FontList.html "Full Font List"))
  * View full art list ([Link1](https://github.com/sepandhaghighi/art/blob/master/ArtList.ipynb "Full Art List"),[Link2](https://www.ascii-art.site/ArtList.html "Full Art List"))
  * View full decoration list ([Link1](https://github.com/sepandhaghighi/art/blob/master/DecorList.ipynb "Full Decoration List"),[Link2](https://www.ascii-art.site/DecorList.html "Full Decoration List"))

  1. Fill an issue and describe it. We'll check it ASAP!
      - Please complete the issue template
  2. Discord : [https://discord.com/invite/FAAyq3QJqP](https://discord.com/invite/FAAyq3QJqP)
  3. Website : [https://www.ascii-art.site](https://www.ascii-art.site)
  4. Email : [info@ascii-art.site](mailto:info@ascii-art.site "info@ascii-art.site")

  1. [FIGlet](http://www.figlet.org/)
  2. [1 Line Art](http://1lineart.kulaone.com/#/)
  3. [Text to ASCII](http://patorjk.com/software/taag/#p=display&f=Blocks&t=ART)
  4. [ASCII Generator](http://www.network-science.de/ascii/)
  5. [Asky](https://asky.io/)
  6. [Flipyourtext](https://www.flipyourtext.com/)
  7. [YayText](https://yaytext.com)
  8. [Coolletters](http://www.coolletters.net/)
  9. [Instagram Fonts](https://igfonts.io/)
  10. [Cool Symbol](https://coolsymbol.com/)
  11. [ASCII Moji](http://asciimoji.com/)
  12. [SMILEY COOL](https://smiley.cool/)
  13. [SPREZZ](https://www.sprezzkeyboard.com/)
  14. [Textart4u](http://textart4u.blogspot.com/2013/03/one-line-ascii-text-art.html?m=1)
  15. [Chat4o](https://en.chat4o.com/ascii/)
  16. [Findwebapp](http://www.findwebapp.com/ascii-art-one-liner/)
  17. [Hubpages](https://hubpages.com/technology/one-line-ascii-art-for-twitter)
  18. [ASCII-ART](http://www.ascii-art.de/ascii/mno/one_line.txt)
  19. [Messletters](https://www.messletters.com/en/)
  20. [Webestools](http://www.webestools.com/)
  21. [ASCII-emoji](https://github.com/dysfunc/ascii-emoji)
  22. [Instagram Fonts2](https://www.instagramfonts.com/)
  23. [Emotiworld](http://en.emotiworld.com/)
  24. [Fancy Text Pro](https://www.fancytextpro.com/)
  25. [Playing Cards in Unicode](https://en.m.wikipedia.org/wiki/Playing_cards_in_Unicode)
  26. [Text Generator](https://coolfonts.text-generator.org/)
  27. [GOGOTEXT](https://instafontsgen.codesdetail.com)
  28. [Fsymbols](https://fsymbols.com/)
  29. [Font Copy and Paste](https://www.fontcopypaste.com/)
  30. [Mega Cool Text](http://megacooltext.com/)
  31. [ToolCalculator](https://www.toolcalculator.com/)
  32. [Copy Paste Fonts](https://copy-paste-fonts.top/)
  * Logo designed by [Arta Khanalizadeh](https://www.linkedin.com/in/artakhanalizadeh)

  <h3>Star this repo</h3>
  Give a ⭐️ if this project helped you!
  <h3>Donate to our project</h3>
  If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .
  <a href="https://www.ascii-art.site/#support" target="_blank"><img src="https://github.com/sepandhaghighi/art/raw/master/otherfile/donate-button.png" height="90px" width="270px" alt="Art Donation"></a>
  <h3>Become a sponsor to ART</h3>
  * Contact us at the email first
  <h4>Corporate sponsor</h4>
  - **$250** a month
  - Your company's logo can be featured on **Readme**
  - Intended for small companies
  <h4>Mega corporate sponsor</h4>
  - **$500** a month
  - Your company's logo can be featured on **Readme** and **Website**
  - Intended for medium-sized companies

  Some parts of the infrastructure for this project are supported by:
  <p>
    <a href="https://www.digitalocean.com/">
      <img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px" alt="DigitalOcean">
    </a>
  </p>

  All notable changes to this project will be documented in this file.
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).



  - 5 new font
  	1. alissa
  	2. milka
  	3. ozana
  	4. shanna
  	5. livia
  - `decoration_request.yml` template
  - `font_request.yml` template
  - `one_line_request.yml` template
  - `feature_request.yml` template
  - `config.yml` for issue template
  - `SECURITY.md`

  - Bug report template modified
  - Test system modified
  - `README.md` modified
  - [DigitalOcean](https://digitalocean.com/) logo added to `README.md`
  - `Python 3.12` added to `test.yml`


  - `font_size_splitter` function modified
  - `__detailed_return` parameter added to `art` function
  - `__detailed_return` parameter added to `text2art` function
  - Random mode name bug fixed
  - `__word2art` function modified
  - `art` function tail space bug fixed
  - `space` parameter bug fixed
  - `space` parameter added to `art` function
  - `space` parameter added to `aprint` function
  - `font_check.py` modified
  - `README.md` modified
  - `INSTALL.md` modified


  - 6 new font
  	1. vaporwave
  	2. squiggle1
  	3. squiggle2
  	4. crazy2
  	5. crazy3
  	6. emoji

  - `font_wizard.py` modified
  - Drop Python 2.7 and 3.4 support
  - `space` parameter added to `tsave` function
  - `space` parameter added to `tprint` function
  - `space` parameter added to `text2art` function
  - `crazy` font renamed to `crazy1`
  - Test system modified
  - `codecov` removed from `dev-requirements.txt`
  - `README.md` modified
  - `INSTALL.md` modified


  - 6 new font
  	1. small_fancy
  	2. boom
  	3. cross_jesus
  	4. dark_tattoo
  	5. lucifer
  	6. ascii_roman

  - Test system modified
  - `README.md` modified
  - `help_func` function modified
  - CLI mode updated


  - 8 new font
  	1. russian2
  	2. got
  	3. vip
  	4. crazy
  	5. cruse
  	6. drippy
  	7. stylish
  	8. ayda

  - Test system modified
  - `Python 3.11` added to `test.yml`
  - `Conda-Forge` installing section added to `INSTALL.md`
  - Website changed to https://www.ascii-art.site

  - `testcov` and `testcov2` modes


  - 5 new font
  	1. fancy144
  	2. fancy145
  	3. fancy146
  	4. fancy147
  	5. fancy148
  - `ASCII_FONTS` list
  - `ASCII_ARTS` list


  - 7 new font
  	1. fancy141
  	2. fancy142
  	3. fancy143
  	4. tarty6
  	5. tarty7
  	6. tarty8
  	7. tarty9

  - Test system modified


  - 5 new font
  	1. tarty4
  	2. tarty5
  	3. fancy138
  	4. fancy139
  	5. fancy140
  - Anaconda workflow

  - `__word2art` function modified
  - `font_wizard.py` modified


  - 10 new font
  	1. fancy131
  	2. fancy132
  	3. fancy133
  	4. fancy134
  	5. fancy135
  	6. fancy136
  	7. fancy137
  	8. tarty1
  	9. tarty2
  	10. tarty3
  - Discord badge

  - Some fonts width bug fixed
  - `test.py` modified
  - `font_wizard.py` modified
  - `font_check.py` modified
  - `art_decor_check.py` modified
  - `__word2art` function modified
  - `mix_letters` function modified
  - `AUTHORS.md` updated
  - License updated
  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - `Python 3.10` added to `test.yml`

  - `greetings.yml`


  - 10 new font
  	1. smooth3
  	2. flaky
  	3. tiny_caps
  	4. high_above
  	5. handwriting3
  	6. fantasy2
  	7. manga
  	8. upside_down2
  	9. cool
  	10. instagram

  - `fantasy` font renamed to `fantasy1`
  - `upside_down` font renamed to `upside_down1`
  - `sep` parameter added to `text2art`, `tprint`, `tsave` and `set_default` functions
  - Default line separator changed from `\r\n` to `\n`
  - `__word2art` function modified
  - Escaped `\ ` in string literals


  - 10 new 1-line-art
  	1. playing cards waterfall
  	2. playing cards waterfall (trump)
  	3. playing cards hearts waterfall
  	4. playing cards diamonds waterfall
  	5. playing cards clubs waterfall
  	6. playing cards spades waterfall
  	7. joker1
  	8. joker2
  	9. joker3
  	10. joker4
  - 23 new decorations
  	1. fancy87
  	2. fancy88
  	3. fancy89
  	4. fancy90
  	5. fancy91
  	6. fancy92
  	7. fancy93
  	8. fancy94
  	9. fancy95
  	10. heart10
  	11. heart11
  	12. heart12
  	13. heart13
  	14. heart14
  	15. heart15
  	16. star18
  	17. star19
  	18. star20
  	19. star21
  	20. star22
  	21. star23
  	22. star24
  	23. star25
  - 5 new fonts
  	1. old_italic
  	2. ninja
  	3. tai_viet
  	4. subscript2
  	5. fancy130

  - Test system modified
  - `subscript` font renamed to `subscript1`
  - Logo changed


  - 15 new fonts
  	1. fancy120
  	2. fancy121
  	3. fancy122
  	4. fancy123
  	5. fancy124
  	6. fancy125
  	7. fancy126
  	8. fancy127
  	9. fancy128
  	10. fancy129
  	11. bud1
  	12. bud2
  	13. pin1
  	14. pin2
  	15. sign
  - 45 new art
  	1. surprised4
  	2. surprised5
  	3. surprised6
  	4. surprised7
  	5. surprised8
  	6. surprised9
  	7. surprised10
  	8. surprised11
  	9. surprised12
  	10. surprised13
  	11. surprised14
  	12. surprised15
  	13. surprised16
  	14. surprised17
  	15. surprised18
  	16. surprised19
  	17. surprised20
  	18. confused3
  	19. confused4
  	20. confused5
  	21. confused6
  	22. confused7
  	23. confused8
  	24. confused9
  	25. confused10
  	26. table flip2
  	27. table flip3
  	28. table flip4
  	29. table flip5
  	30. table flip6
  	31. table flip7
  	32. table flip8
  	33. table flip9
  	34. table flip10
  	35. bear2
  	36. spider4
  	37. cat4
  	38. swim
  	39. swim2
  	40. swim3
  	41. yawning
  	42. boobs2
  	43. airplane3
  	44. gun4
  	45. cthulhu2


  - 5 new fonts
  	1. shasha
  	2. fancy116
  	3. fancy117
  	4. fancy118
  	5. fancy119
  - 60 new art
  	1. hello2
  	2. dunno2
  	3. dunno3
  	4. dunno4
  	5. dunno5
  	6. happy6
  	7. happy7
  	8. happy8
  	9. happy9
  	10. happy10
  	11. happy11
  	12. happy12
  	13. happy13
  	14. happy14
  	15. happy15
  	16. happy16
  	17. happy17
  	18. happy18
  	19. happy19
  	20. happy20
  	21. happy21
  	22. happy22
  	23. happy23
  	24. happy24
  	25. happy25
  	26. happy26
  	27. happy27
  	28. love4
  	29. kiss2
  	30. kiss3
  	31. kissing2
  	32. kissing3
  	33. kissing4
  	34. kissing5
  	35. kissing6
  	36. cute face2
  	37. cute face3
  	38. cute face4
  	39. cute face5
  	40. cute face6
  	41. cute face7
  	42. cute face8
  	43. cute face9
  	44. upset
  	45. pistols4
  	46. pistols5
  	47. mad
  	48. mad2
  	49. mad3
  	50. mad4
  	51. mad5
  	52. mad6
  	53. mad7
  	54. mad8
  	55. mad9
  	56. mad10
  	57. finger3
  	58. finger4
  	59. sad5
  	60. sad6

  - `random` mode added to `decor` function
  - `both` parameter added to `decor` function
  - `art` function modified
  - `indirect_font` function modified


  - 10 new fonts
  	1. foxy
  	2. fancy109
  	3. fancy110
  	4. fancy111
  	5. fancy112
  	6. fancy113
  	7. fancy114
  	8. fancy115
  	9. sheqi
  	10. fari

  - `font_wizard.py` script updated
  - `README.md` modified


  - 96 new art
  	1. angry birds
  	2. angry face2
    	3. angry troll
    	4. at what cost
    	5. barf
    	6. basking in glory
    	7. bear GTFO
  	8. bear squiting
  	9. boxing
  	10. breakdown
  	11. careless
  	12. chasing
  	13. cheers
  	14. chicken
  	15. confused scratch
  	16. crazy
  	17. creeper
  	18. cry face
  	19. cry troll
  	20. cute face
  	21. dance2
  	22. dancing
  	23. dear god why
  	24. devious smile
  	25. disagree
  	26. discombobulated
  	27. dislike1
  	28. dislike2
  	29. do you even lift bro?
  	30. double flip
  	31. emo dance
  	32. excited
  	33. exorcism
  	34. eye roll
  	35. feel perky
  	36. fido
  	37. fight
  	38. fisticuffs
  	39. flip friend
  	40. fly away
  	41. flying
  	42. fuck you2
  	43. happy face
  	44. happy hug
  	45. hitchhicking
  	46. hugger
  	47. im a hugger
  	48. injured
  	49. innocent face
  	50. japanese lion face
  	51. judgemental
  	52. judging
  	53. kissing
  	54. kitty emote
  	55. listening to headphones
  	56. looking down
  	57. love3
  	58. meow
  	59. no support
  	60. opera
  	61. peepers
  	62. pretty eyes
  	63. put the table back
  	64. resting my eyes
  	65. robot3
  	66. running
  	67. sad and confused
  	68. sad and crying
  	69. sad face
  	70. satisfied
  	71. seal
  	72. shark face
  	73. shy
  	74. sleepy
  	75. staring
  	76. stranger danger
  	77. strut
  	78. stunna shades
  	79. surprised2
  	80. taking a dump
  	81. tgif
  	82. things that can_t be unseen
  	83. tidy up
  	84. tired
  	85. touchy feely
  	86. tripping out
  	87. trolling
  	88. wave dance
  	89. whisling
  	90. winnie the pooh
  	91. winning
  	92. wizard2
  	93. worried
  	94. yun
  	95. zombie2
  	96. zoned

  - `surprised2` 1-line art renamed to `surprised3`
  - `art_decor_check.py` script updated
  - `font_check.py` script updated
  - `font_wizard.py` script updated


  - `art_decor_check.py` file
  - Greeting GitHub actions
  - 185 new decorations
  	1. angry1
  	2. arrow1
  	3. arrow2
  	4. arrow3
  	5. arrow4
  	6. arrow5
  	7. arrow6
  	8. arrow7
  	9. arrow8
  	10. arrow_wave1
  	11. arrow_wave2
  	12. ball1
  	13. ball2
  	14. ball3
  	15. bazar1
  	16. block1
  	17. block2
  	18. bow1
  	19. bubble
  	20. cat1
  	21. cat2
  	22. cat3
  	23. cell1
  	24. confused1
  	25. confused2
  	26. cross1
  	27. depressed
  	28. diamon3
  	29. diamond1
  	30. diamond2
  	31. egypt1
  	32. emotions1
  	33. fancy1
  	34. fancy2
  	35. fancy3
  	36. fancy4
  	37. fancy5
  	38. fancy6
  	39. fancy7
  	40. fancy8
  	41. fancy9
  	42. fancy10
  	43. fancy11
  	44. fancy12
  	45. fancy13
  	46. fancy14
  	47. fancy15
  	48. fancy16
  	49. fancy17
  	50. fancy18
  	51. fancy19
  	52. fancy20
  	53. fancy21
  	54. fancy22
  	55. fancy23
  	56. fancy24
  	57. fancy25
  	58. fancy26
  	59. fancy27
  	60. fancy28
  	61. fancy29
  	62. fancy30
  	63. fancy31
  	64. fancy32
  	65. fancy33
  	66. fancy34
  	67. fancy35
  	68. fancy36
  	69. fancy37
  	70. fancy38
  	71. fancy39
  	72. fancy40
  	73. fancy41
  	74. fancy42
  	75. fancy43
  	76. fancy44
  	77. fancy45
  	78. fancy46
  	79. fancy47
  	80. fancy48
  	81. fancy49
  	82. fancy50
  	83. fancy51
  	84. fancy52
  	85. fancy53
  	86. fancy54
  	87. fancy55
  	88. fancy56
  	89. fancy57
  	90. fancy58
  	91. fancy59
  	92. fancy60
  	93. fancy61
  	94. fancy62
  	95. fancy63
  	96. fancy64
  	97. fancy65
  	98. fancy66
  	99. fancy67
  	100. fancy68
  	101. fancy69
  	102. fancy70
  	103. fancy71
  	104. fancy72
  	105. fancy73
  	106. fancy74
  	107. fancy75
  	108. fancy76
  	109. fancy77
  	110. fancy78
  	111. fancy79
  	112. fancy80
  	113. fancy81
  	114. fancy82
  	115. fancy83
  	116. fancy84
  	117. fancy85
  	118. fancy86
  	119. flame1
  	120. flower1
  	121. food1
  	122. food2
  	123. haha
  	124. happy1
  	125. happy_new_year
  	126. hawaii1
  	127. hawaii2
  	128. heart1
  	129. heart2
  	130. heart3
  	131. heart4
  	132. heart5
  	133. heart6
  	134. heart7
  	135. heart8
  	136. heart9
  	137. line1
  	138. line2
  	139. line3
  	140. line4
  	141. love_music
  	142. missile1
  	143. mountain1
  	144. mountain2
  	145. mountain3
  	146. music1
  	147. music2
  	148. music3
  	149. pencil1
  	150. poker1
  	151. puzzle1
  	152. puzzle2
  	153. puzzle3
  	154. sad2
  	155. sad3
  	156. sad4
  	157. smile1
  	158. snow1
  	159. snow2
  	160. star3
  	161. star4
  	162. star5
  	163. star6
  	164. star7
  	165. star8
  	166. star9
  	167. star10
  	168. star11
  	169. star12
  	170. star13
  	171. star14
  	172. star15
  	173. star16
  	174. star17
  	175. temple1
  	176. title1
  	177. tree1
  	178. wall1
  	179. wave3
  	180. wave4
  	181. wave5
  	182. wave6
  	183. wave7
  	184. wave8
  	185. wave9

  - `text` parameter removed from `art` and `aprint` functions
  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - MATLAB examples updated
  - `kitty2` 1-line art renamed to `kitty`

  - 5 bipartite 1-line art
  	1. love you
  	2. message1
  	3. message2
  	4. musical
  	5. text decoration
  - 12 duplicate 1-line art
  	1. dog
  	2. human
  	3. mis mujeres
  	4. 100$
  	5. worm2
  	6. stars in my eyes
  	7. chainsword
  	8. badass
  	9. aliens
  	10. this guy
  	11. kitty1
  	12. don fuller


  - `NON_ASCII_ARTS` list
  - `decor_dic.py` file
  - `codecov.yml` file
  - `decor` function
  - `decor_list` function
  - `DecorList.ipynb` notebook
  - 10 new decorations
  	1. barcode1
  	2. champion1
  	3. chess1
  	4. lucky1
  	5. sad1
  	6. soccer1
  	7. star1
  	8. star2
  	9. wave1
  	10. wave2
  - 20 new fonts
  	1. scammer
  	2. strikethrough
  	3. drako
  	4. celtic
  	5. fasion
  	6. curly
  	7. russian
  	8. messletters
  	9. swirly
  	10. dotted
  	11. parenthesized
  	12. strange
  	13. wiggly
  	14. hazy
  	15. hyves
  	16. awcute
  	17. slammer
  	18. coptic1
  	19. coptic2
  	20. fancy108

  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - MATLAB examples updated
  - `setup.py` modified
  - `coverage` dependency moved to `extras_require`
  - Test system modified
  - `random` mode modified
  - `test` parameter removed from `font_list` function
  - `mode` parameter added to `font_list` and `art_list` functions
  - `decoration` parameter added to `text2art`, `tprint` and `tsave` functions
  - `\n` support bug fixed
  - `tsave` function bug in Windows fixed

  - `requirements.txt`


  - 35 new fonts
  	1. smooth1
  	2. smooth2
  	3. carrier1
  	4. carrier2
  	5. cute1
  	6. cute2
  	7. cute3
  	8. cjk
  	9. malayalam
  	10. lilia
  	11. dwarf
  	12. awesome
  	13. lopioo
  	14. cranky
  	15. fancy87
  	16. fancy88
  	17. fancy89
  	18. fancy90
  	19. fancy91
  	20. fancy92
  	21. fancy93
  	22. fancy94
  	23. fancy95
  	24. fancy96
  	25. fancy97
  	26. fancy98
  	27. fancy99
  	28. fancy100
  	29. fancy101
  	30. fancy102
  	31. fancy103
  	32. fancy104
  	33. fancy105
  	34. fancy106
  	35. fancy107
  - 43 new 1-line art
  	1. fish6
  	2. loch ness monster
  	3. mouse5
  	4. mouse6
  	5. mouse7
  	6. sheep
  	7. pie fight
  	8. rose5
  	9. rose6
  	10. rose7
  	11. concerned
  	12. happy4
  	13. happy5
  	14. coffee2
  	15. coffee3
  	16. coffee4
  	17. headphone3
  	18. carpet roll
  	19. infinity
  	20. computer mouse
  	21. volcano1
  	22. volcano2
  	23. volcano3
  	24. squigle with spirals
  	25. palm tree
  	26. crotch shot
  	27. vagina
  	28. stealth fighter
  	29. tent1
  	30. tent2
  	31. power lines
  	32. tree stump
  	33. hammer
  	34. arrow2
  	35. sword10
  	36. fish skeleton2
  	37. fork
  	38. pipe
  	39. dead guy
  	40. dead girl
  	41. dead child
  	42. dude glasses1
  	43. dude glasses2

  - `README.md` modified
  - `INSTALL.md` modified
  - `coffee` 1-line art renamed to `coffee1`
  - `arrow` 1-line art renamed to `arrow1`
  - `fish skeleton` 1-line art renamed to `fish skeleton1`


  - 68 new 1-line art
  	1. smile
  	2. toungue out1
  	3. toungue out2
  	4. bad hair1
  	5. bad hair2
  	6. woops
  	7. screaming
  	8. full mouth
  	9. cussing
  	10. ready to cry
  	11. crying2
  	12. druling1
  	13. druling2
  	14. big kiss
  	15. french kiss
  	16. wink
  	17. big smile
  	18. smirk
  	19. confused1
  	20. confused2
  	21. pursing lips
  	22. shocked2
  	23. really sad
  	24. baseball fan
  	25. angel2
  	26. really mad
  	27. licking lips
  	28. buck teeth
  	29. surprised1
  	30. alien
  	31. sunglasses2
  	32. don king
  	33. devilish smile
  	34. devilish grin
  	35. clowning
  	36. bugs bunny
  	37. kitty2
  	38. fish skeleton
  	39. snowman2
  	40. marshmallows
  	41. nerd
  	42. mouse4
  	43. pistols3
  	44. rock on2
  	45. love in my eye2
  	46. love in my eye3
  	47. sad3
  	48. sad4
  	49. headphone2
  	50. cigarette1
  	51. spider3
  	52. barcode2
  	53. equalizer
  	54. boombox2
  	55. surprised2
  	56. playing cards
  	57. playing cards hearts
  	58. playing cards diamonds
  	59. playing cards spades
  	60. playing cards clubs
  	61. spade bold
  	62. heart bold
  	63. diamond bold
  	64. club bold
  	65. spade regular
  	66. heart regular
  	67. diamond regular
  	68. club regular
  - MATLAB examples

  - Bipartite art deprecated
  - `crying` 1-line art renamed to `crying1`
  - `shocked` 1-line art renamed to `shocked1`
  - `angel` 1-line art renamed to `angel1`
  - `sunglasses` 1-line art renamed to `sunglasses1`
  - `kitty` 1-line art renamed to `kitty1`
  - `snowman` 1-line art renamed to `snowman1`
  - `barcode` 1-line art renamed to `barcode1`
  - `cigaret` 1-line art renamed to `cigarette3`
  - `cigarette` 1-line art renamed to `cigarette2`
  - `headphone` 1-line art renamed to `headphone1`
  - `rock on` 1-line art renamed to `rock on1`
  - `boom box` 1-line art renamed to `boombox1`
  - `love in my eye` 1-line art renamed to `love in my eye1`
  - `CONTRIBUTING.md` modified
  - `TEST_FILTERED_FONTS` renamed to `NON_ASCII_FONTS`
  - `RANDOM_FILTERED_FONTS` and `NON_ASCII_FONTS` lists optimized
  - `README.md` modified
  - `appveyor.yml` modified
  - `INSTALL.md` modified
  - `wizard` mode modified


  - 35 new 1-line art
  	1. cup1
  	2. cup2
  	3. gun2
  	4. gun3
  	5. fish3
  	6. fish4
  	7. fish5
  	8. sword6
  	9. sword7
  	10. sword8
  	11. sword9
  	12. knife2
  	13. barcode
  	14. loading1
  	15. loading3
  	16. loading4
  	17. loading5
  	18. loading6
  	19. bat2
  	20. band aid
  	21. mouse2
  	22. mouse3
  	23. cat3
  	24. needle2
  	25. rose4
  	26. electrocardiogram1
  	27. electrocardiogram2
  	28. electrocardiogram3
  	29. electrocardiogram4
  	30. snail2
  	31. american money2
  	32. american money3
  	33. american money4
  	34. american money5
  	35. cassette2
  - 10 new fonts
  	1. sarah
  	2. hippie
  	3. minion
  	4. greek_legends
  	5. funky_fresh
  	6. atlantic
  	7. foreign_friends
  	8. native_lands
  	9. sunday_cuddle
  	10. chinese_mafia

  - `gun` 1-line art renamed to `gun1`
  - `knife` 1-line art renamed to `knife1`
  - `loading` 1-line art renamed to `loading2`
  - `bat` 1-line art renamed to `bat1`
  - `mouse` 1-line art renamed to `mouse1`
  - `needle` 1-line art renamed to `needle2`
  - `snail` 1-line art renamed to `snail1`
  - `american money` 1-line art renamed to `american money1`
  - `cassette` 1-line art renamed to `cassette1`
  - Test system modified


  - 14 new fonts
  	1. smallcaps3
  	2. fraktur2
  	3. bold_fraktur
  	4. bold_script
  	5. handwriting1
  	6. handwriting2
  	7. rusify
  	8. monospace
  	9. dirty2
  	10. knight2
  	11. h4k3r
  	12. thin3
  	13. tiny2
  	14. upside_down
  - `FONT_NAMES` variable
  - `ART_NAMES` variable

  - Namespace optimized
  - Website changed to https://www.4r7.ir


  - 20 new fonts
  	1. fancy75
  	2. fancy76
  	3. fancy77
  	4. fancy78
  	5. love1
  	6. fancy79
  	7. fancy80
  	8. fancy81
  	9. fancy82
  	10. fancy83
  	11. fancy84
  	12. fancy85
  	13. fancy86
  	14. contouring3
  	15. contouring4
  	16. love2
  	17. black_square
  	18. white_square
  	19. black_bubble
  	20. paranormal
  - `get_font_dic` function

  - `font_check.py` modified
  - `font_wizard.py` modified
  - `CONTRIBUTING.md` modified


  - `install.sh`
  - `autopep8.sh`
  - 21 new fonts
  	1. fancy56
  	2. fancy57
  	3. fancy58
  	4. fancy59
  	5. fancy60
  	6. fancy61
  	7. fancy62
  	8. fancy63
  	9. fanyc64
  	10. fancy65
  	11. fancy66
  	12. fancy67
  	13. fancy68
  	14. fancy69
  	15. fanyc70
  	16. fancy71
  	17. fancy72
  	18. fancy73
  	19. fancy74
  	20. contouring1
  	21. contouring2

  - `test.sh` moved to `.travis` folder
  - `font_wizard.py` updated
  - `font_check.py` updated
  - `tsave` function bugs fixed
  - `aprint` and `tprint` functions modified
  - Test system modified
  - `overwrite` parameter added to `tsave` and `set_default` functions
  - `README.md` modified
  - `CONTRIBUTING.md` modified


  - `__version__` variable
  - `font_wizard.py`
  - 15 new fonts
  	1. fancy41
  	2. fancy42
  	3. fancy43
  	4. fancy44
  	5. fancy45
  	6. fancy46
  	7. fancy47
  	8. fancy48
  	9. fancy49
  	10. fancy50
  	11. fancy51
  	12. fancy52
  	13. fancy53
  	14. fancy54
  	15. fancy55

  - `VERSION` variable renamed to `ART_VERSION`
  - Some fonts moved to `text_dic3.py`
  - `ISSUE_TEMPLATE.md` modified
  - `CONTRIBUTING.md` modified


  - 11 new fonts
  	1. fancy31
  	2. fancy32
  	3. fancy33
  	4. fancy34
  	5. symbols
  	6. fancy35
  	7. fancy36
  	8. fancy37
  	9. fancy38
  	10. fancy39
  	11. fancy40
  - 20 new 1-line art
  	1. acid
  	2. arrowhead
  	3. awkward
  	4. because
  	5. blackeye
  	6. catlenny
  	7. dab
  	8. damnyou
  	9. depressed
  	10. dunno
  	11. eeriemob
  	12. envelope
  	13. fart
  	14. finn
  	15. frown
  	16. glitter
  	17. gotit
  	18. hello
  	19. loading
  	20. meep

  - `dev-requirements.txt` modified


  - 3 new fonts
  	1. fancy28
  	2. fancy29
  	3. fancy30
  - `mix` mode

  - Duplication test added to`font_check.py`
  - `README.md` modified
  - fancy11 and fancy14 fonts updated
  - `indirect_font` function modified

  - 9 duplicate fonts
  	1. magical
  	2. morse2
  	3. fire_font-k
  	4. paranormal
  	5. battle_s
  	6. ntgreek
  	7. peaksslant
  	8. sorcerer
  	9. nancyj-improved


  - 20 new fonts
  	1. fancy8
  	2. fancy9
  	3. fancy10
  	4. fancy11
  	5. fancy12
  	6. fancy13
  	7. fancy14
  	8. fancy15
  	9. fancy16
  	10. fancy17
  	11. fancy18
  	12. fancy19
  	13. fancy20
  	14. fancy21
  	15. fancy22
  	16. fancy23
  	17. fancy24
  	18. fancy25
  	19. fancy26
  	20. fancy27

  - Drop Python 3.3 support


  - 15 new fonts
  	1. magical
  	2. paranormal
  	3. sorcerer
  	4. special
  	5. dirty
  	6. knight
  	7. thin2
  	8. tiny
  	9. fancy1
  	10. fancy2
  	11. fancy3
  	12. fancy4
  	13. fancy5
  	14. fancy6
  	15. fancy7


  - 7 new fonts
  	1. white_bubble
  	2. smallcaps2
  	3. superscript
  	4. subscript
  	5. full_width
  	6. currency
  	7. antrophobia
  - `text2art` function support of `\n`
  - `rnd-na` mode

  - `tprint` function modified
  - `tsave` function modified
  - `README.md` modified
  - `random` mode modified


  - 3 new fonts
  	1. mirror
  	2. flip
  	3. mirror_flip
  - 40 new 1-line art
  	1. dead eyes
  	2. satan
  	3. bomb
  	4. sleepy coffee
  	5. high five
  	6. wtf dude?
  	7. fungry
  	8. derp
  	9. drwoning
  	10. almost cared
  	11. yessir
  	12. coffee now
  	13. round cat
  	14. squee
  	15. round bird
  	16. hoxom
  	17. squid
  	18. man spider
  	19. spell cast
  	20. jazz musician
  	21. myan cat
  	22. gimme
  	23. crab
  	24. playing in snow
  	25. sunglasses
  	26. mini penis
  	27. victory
  	28. don fuller
  	29. dgaf
  	30. ryans dick
  	31. eds dick
  	32. point
  	33. afraid
  	34. laughing
  	35. energy
  	36. drunkenness
  	37. error
  	38. penis2
  	39. exchange
  	40. singing2
  - `test2.py`
  - `font_check.py`

  - `test_mode` parameter added to `font_list` function
  - `all` flag bug fixed
  - `__main__.py` modified
  - Warnings and errors messages moved to `art_param.py`
  - Art random mode modified


  - 30 new 1-line art
  	1. shrug
  	2. flex
  	3. this guy
  	4. why
  	5. meditation
  	6. kitty
  	7. pac man
  	8. emo
  	9. shark attack
  	10. shocked
  	11. monocle
  	12. piggy
  	13. camera
  	14. what??
  	15. neo
  	16. lenny
  	17. snowing
  	18. dick
  	19. wizard
  	20. wat
  	21. chu
  	22. butt
  	23. sophie
  	24. joy
  	25. bautista
  	26. smooth
  	27. fuckall
  	28. penis
  	29. wat-wat
  	30. fail
  - `pydocstyle` test

  - Docstrings modified
  - Some fonts lowercase bug fixed
  - Font random modes modified
  - `test_mode` parameter removed from `font_list` function


  - 30 new 1-line art
  	1. rose3
  	2. cigaret
  	3. oar
  	4. sword5
  	5. car
  	6. hacksaw
  	7. canoe
  	8. spider1
  	9. machinegun
  	10. roadblock
  	11. aliens
  	12. marge simpson
  	13. homer simpson
  	14. bat
  	15. superman logo
  	16. dna sample
  	17. mail box
  	18. ufo1
  	19. ufo2
  	20. spider2
  	21. american money
  	22. british money
  	23. teepee
  	24. heart3
  	25. angel
  	26. shark
  	27. regular ass
  	28. fat ass
  	29. kiss my ass
  	30. devil
  - 15 new fonts
  	1. future_1
  	2. future_2
  	3. future_3
  	4. future_4
  	5. future_5
  	6. future_6
  	7. future_7
  	8. future_8
  	9. gauntlet
  	10. ghost_bo
  	11. grand_pr
  	12. green_be
  	13. hades
  	14. heavy_me
  	15. nfi1

  - `README.md` modified
  - `art` function typo-tolerance threshold modified


  - 20 new fonts
  	1. druid
  	2. e_fist
  	3. ebbs_1
  	4. ebbs_2
  	5. eca
  	6. faces_of
  	7. fair_mea
  	8. fairligh
  	9. fantasy
  	10. fbr12
  	11. fbr1
  	12. fbr2
  	13. fbr_stri
  	14. fbr_tilt
  	15. finalass
  	16. fireing
  	17. flyn_sh
  	18. fp1
  	19. fp2
  	20. funky_dr
  - `CODE_OF_CONDUCT.md`
  - `PULL_REQUEST_TEMPLATE.md`
  - `ISSUE_TEMPLATE.md`
  - `vulture` test
  - `bandit` test

  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - `font_map` renamed to `FONT_MAP`
  - `font_counter` renamed to `FONT_COUNTER`
  - `art_counter` renamed to `ART_COUNTER`
  - Constants and parameters moved to `art_param.py`


  - 20 new fonts
  	1. aquaplan
  	2. ascii
  	3. c_consen
  	4. clb6x10
  	5. clb8x10
  	6. clb8x8
  	7. cli8x8
  	8. clr4x6
  	9. clr5x10
  	10. clr5x6
  	11. clr5x8
  	12. clr6x10
  	13. clr6x6
  	14. clr6x8
  	15. clr7x8
  	16. clr8x10
  	17. clr8x8
  	18. coil_cop
  	19. com_sen
  	20. c_ascii
  - `wizard` mode
  - Interactive notebooks section (binder)
  - `.coveragerc`
  - `version_check.py`

  - `README.md` modified
  - Minor bug in coverage system fixed
  - `.travis.yml` modified
  - `font_size_splitter` function thresholds fixed


  - 20 new fonts
  	1. zone7
  	2. zig_zag
  	3. yie_ar_k
  	4. yie-ar
  	5. xtty
  	6. war_of_w
  	7. vortron
  	8. utopia
  	9. utopiai
  	10. utopiabi
  	11. utopiab
  	12. usa_pq
  	13. usa
  	14. unarmed
  	15. ugalympi
  	16. ucf_fan
  	17. type_set
  	18. twin_cob
  	19. tsn_base
  	20. z-pilot
  - `rnd-small` mode
  - `rnd-medium` mode
  - `rnd-large` mode
  - `rnd-xlarge` mode

  - `README.md` modified


  - 30 new fonts
  	1. heroboti
  	2. high_noo
  	3. hills
  	4. home_pak
  	5. house_of
  	6. hypa_bal
  	7. hyper
  	8. inc_raw
  	9. italics
  	10. kgames_i
  	11. kik_star
  	12. krak_out
  	13. 4x4_offr
  	14. 5x7
  	15. 5x8
  	16. 64f1
  	17. 6x10
  	18. 6x9
  	19. a_zooloo
  	20. asc
  	21. assalt_m
  	22. asslt_m
  	23. atc
  	24. atc_gran
  	25. battle_s
  	26. battlesh
  	27. baz_bil
  	28. beer_pub
  	29. c1
  	30. c2
  - `art_profile.py`

  - Docstring modified
  - `B1FF` font bug fixed
  - `ICL-1900` font bug fixed
  - `AK-47` 1-line art bug fixed
  - `I kill you` 1-line art bug fixed


  - 20 new fonts
  	1. xbrite
  	2. xbriteb
  	3. xbritei
  	4. xbritebi
  	5. xchartr
  	6. xchartri
  	7. xcour
  	8. xcourb
  	9. xcourbi
  	10. xcouri
  	11. xhelv
  	12. xhelvb
  	13. xhelvbi
  	14. xhelvi
  	15. xsans
  	16. xsansb
  	17. xsansbi
  	18. xsansi
  	19. xtimes
  	20. xttyb
  - CLI `testcov` flag

  - `requirements.txt` modified
  - `INSTALL.md` modified
  - CLI `test` flag modified


  - 15 new fonts
  	1. char1
  	2. char2
  	3. char3
  	4. char4
  	5. charact1
  	6. charact2
  	7. charact3
  	8. charact4
  	9. charact5
  	10. charact6
  	11. characte
  	12. chartr
  	13. chartri
  	14. 1943
  	15. advenger
  - `dev-requirements.txt`

  - `Python 3.7` added to `.travis.yml` & `appveyor.yml`
  - `font_list` modified
  - `README.md` modified
  - `INSTALL.md` modified


  - 10 new fonts
  	1. alpha
  	2. alligator3
  	3. amc3liv1
  	4. ascii_new_roman
  	5. B1FF
  	6. dwhistled
  	7. eftiwall
  	8. fire_font-k
  	9. fire_font-s
  	10. gradient

  - `requirements.txt` modified


  - 35 new fonts
  	1. nancyj-improved
  	2. nscript
  	3. ntgreek
  	4. nvscript
  	5. octal
  	6. oldbanner
  	7. os2
  	8. peaksslant
  	9. puzzle
  	10. rammstein
  	11. red_phoenix
  	12. runyc
  	13. santaclara
  	14. shimrod
  	15. smallcaps
  	16. smpoison
  	17. soft
  	18. spliff
  	19. stacey
  	20. stampate
  	21. stforek
  	22. sub-zero
  	23. swampland
  	24. sweet
  	25. ticks
  	26. ticksslant
  	27. tiles
  	28. tsalagi
  	29. tubular
  	30. twisted
  	31. varsity
  	32. wavy
  	33. wetletter
  	34. whimsy
  	35. wow


  - 15 new fonts
  	1. ICL-1900
  	2. impossible
  	3. jacky
  	4. katakana
  	5. keyboard
  	6. knob
  	7. lildevil
  	8. lineblocks
  	9. merlin1
  	10. merlin2
  	11. modular
  	12. morse
  	13. morse2
  	14. moscow
  	15. muzzle
  - `set_default` function
  - `randart` function


  - 15 new fonts
  	1. fraktur
  	2. funface
  	3. funfaces
  	4. georgi16
  	5. georgia11
  	6. ghost
  	7. ghoulish
  	8. glenyn
  	9. graceful
  	10. greek
  	11. heartleft
  	12. heartright
  	13. henry3d
  	14. horizontalleft
  	15. horizontalright

  - `setuptools` removed from `requirements.txt`
  - `OSX` env added to `.travis.yml`
  - Test cases modified
  - `text2art` bug  in OSX fixed


  - 20 new fonts
  	1. bigfig
  	2. bolger
  	3. braced
  	4. bright
  	5. broadway
  	6. cards
  	7. chiseled
  	8. cola
  	9. crawford
  	10. cricket
  	11. DANC4
  	12. dancingfont
  	13. decimal
  	14. defleppard
  	15. dietcola
  	16. flipped
  	17. double
  	18. doubleshorts
  	19. eftipiti
  	20. filter
  - Font list HTML page
  - Art list HTML page


  - 20 new fonts
  	1. cybersmall
  	2. gothic
  	3. rev
  	4. smtengwar
  	5. term
  	6. 1row
  	7. 3d_diagonal
  	8. 4max
  	9. amc3line
  	10. amcrazor
  	11. amcaaa01
  	12. amcneko
  	13. amcrrazo2
  	14. amcslash
  	15. amcthin
  	16. amctubes
  	17. amcun1
  	18. arrows
  	19. bear
  	20. benjamin


  - 30 new 1-line art
  	1. westbound fish
  	2. telephone
  	3. 9/11 truth
  	4. spear
  	5. srs face
  	6. this is areku
  	7. robot boy
  	8. med man
  	9. angry
  	10. badass
  	11. zoidberg
  	12. eastbound fish
  	13. kilroy was here
  	14. gtalk fit
  	15. thanks
  	16. dalek
  	17. sean the sheep
  	18. kablewee
  	19. i dont care
  	20. slenderman
  	21. john lennon
  	22. peace yo
  	23. punch
  	24. russian boobs
  	25. fuck off
  	26. man tears
  	27. robber
  	28. facepalm
  	29. yo
  	30. party time


  - 30 new 1-line art
  	1. crayons
  	2. stars in my eyes
  	3. fish invasion
  	4. bender
  	5. musical
  	6. sunny day
  	7. happy birthday 1
  	8. line brack
  	9. med
  	10. melp1
  	11. happy3
  	12. happy square
  	13. snowman
  	14. melp2
  	15. i kill you
  	16. jaymz
  	17. text decoration
  	18. long rose
  	19. kirbay dance
  	20. death star defense team
  	21. chainsword
  	22. boobies
  	23. dancing people
  	24. dance
  	25. pictou
  	26. polar bear
  	27. go away bear
  	28. charly
  	29. train
  	30. spot

  - `car race` 1-line art fixed


  - 30 new 1-line art
  	1. sexy symbol
  	2. barbell
  	3. sniper rifle
  	4. being draged
  	5. possessed
  	6. jokeranonimous
  	7. epic gun
  	8. love
  	9. love2
  	10. eric
  	11. puls
  	12. sky free
  	13. smug bastard
  	14. tie-fighter
  	15. kyubey
  	16. dancee
  	17. mtmtika
  	18. ak-47
  	19. eaten apple
  	20. huhu
  	21. faydre
  	22. domino
  	23. honeycute
  	24. superman
  	25. worm2
  	26. jokeranonimous2
  	27. kyubey2
  	28. nose2
  	29. hell yeah
  	30. roke


  - 30 new 1-line art
  	1. sorreh bro
  	2. yolo
  	3. formula 1 car
  	4. dummy
  	5. rope
  	6. rare
  	7. chess pieces
  	8. sparkling heart
  	9. weather
  	10. stars2
  	11. upsidedown
  	12. nathan
  	13. cat smile
  	14. old lady boobs
  	15. glasses2
  	16. religious
  	17. sniperstars
  	18. kokain
  	19. bagel
  	20. crying
  	21. angry2
  	22. 3
  	23. 5
  	24. fuck you
  	25. head shot
  	26. metal
  	27. killer
  	28. fu
  	29. ankush
  	30. owlkin

  - CLI `art` flag
  - CLI `list` flag


  - 15 new fonts
  	1. letters
  	2. lockergnome
  	3. madrid
  	4. marquee
  	5. mike
  	6. mini
  	7. nancyj-fancy
  	8. nancyj-underlined
  	9. pepper
  	10. poison
  	11. rot13
  	12. short
  	13. small
  	14. tengwar
  	15. big
  - 11 new 1-line art
  	1. teddy
  	2. dice
  	3. bee
  	4. ukulele
  	5. perky
  	6. snail
  	7. decorate
  	8. kirby
  	9. mango
  	10. bunny
  	11. kiss
  - `random` 1-line art mode

  - Minor bug in `text2art` random range fixed
  - `README.md` modified
  - `aprint_test` function renamed to `art_list`
  - `setup.py` modified


  - 10 new fonts
  	1. eftitalic
  	2. eftiwater
  	3. fourtops
  	4. goofy
  	5. hollywood
  	6. invita
  	7. italic
  	8. jazmine
  	9. lcd
  	10. lean
  - `random` font mode


  - 8 new fonts
  	1. barbwire
  	2. bigchief
  	3. binary
  	4. bubble
  	5. calgphy2
  	6. cygnet
  	7. diamond
  	8. eftifont

  - Test cases modified


  - 5 new fonts
  	1. peaks
  	2. pawp
  	3. o8
  	4. nipples
  	5. maxfour
  - 15 new 1-line art
  	1. guitar
  	2. rocket
  	3. ghost
  	4. hal
  	5. cthulhu
  	6. sat
  	7. what
  	8. king
  	9. tron
  	10. homer
  	11. fox
  	12. singing
  	13. atish
  	14. zable
  	15. trumpet
  - CLI description

  - `README.md` modified
  - Test cases modified
  - File name bug in UNIX fixed
  - `CHANGELOG.md` modified


  - 15 new fonts
  	1. tinker-toy
  	2. straight
  	3. stampatello
  	4. smslant
  	5. smshadow
  	6. smscript
  	7. smkeyboard
  	8. smisome1
  	9. slscript
  	10. slide
  	11. sblood
  	12. rozzo
  	13. pyramid
  	14. puffy
  	15. pebbles
  - Typo-tolerance system

  - `README.md` modified
  - Test cases modified


  - 10 new fonts
  	1. weird
  	2. univers
  	3. twopoint
  	4. trek
  	5. tombstone
  	6. threepoint
  	7. thick
  	8. tanja
  	9. swan
  	10. stellar

  - `MANIFEST.in` modified
  - `INSTALL.md` modified


  - `CHANGELOG.md`

  - Functions error response
  - `README.md` modified
  - `tsave` function extension bug fixed
  - `text2art` response bug fixed ("\r\n")
  - `setup.py` modified


  - 10 new fonts
  	1. acrobatic
  	2. alligator
  	3. alligator2
  	4. block2
  	5. caligraphy
  	6. computer
  	7. digital
  	8. doh
  	9. eftirobot
  	10. graffiti


  - `all` flag


  - 10 new fonts
  	1. 3-d
  	2. 3x5
  	3. 5lineoblique
  	4. alphabet
  	5. banner3-D
  	6. banner3
  	7. banner4
  	8. bell
  	9. catwalk
  	10. colossal


  - Telegram bot

  - Universal text format added for Unix & Windows


  - Save function (tsave)
  - `chr_ignore` flag
  - 10 new fonts
  	1. banner
  	2. avatar
  	3. basic
  	4. bulbhead
  	5. chunky
  	6. coinstak
  	7. contessa
  	8. contrast
  	9. cyberlarge
  	10. cybermedium
  	11. doom
  	12. dotmatrix
  	13. drpepper
  	14. epic
  	15. fuzzy
  	16. isometric1
  	17. isometric2
  	18. isometric3
  	19. isometric4
  	20. larry3d
  	21. nancyj
  	22. ogre
  	23. rectangles
  	24. roman
  	25. rounded
  	26. rowancap
  	27. script
  	28. serifcap
  	29. shadow
  	30. slant
  	31. speed
  	32. starwars
  	33. stop
  	34. thin
  	35. usaflag

  - Space bug fixed


  - Standard font

  - Minor bugs fixed


  - Block font
  - 1-Line art
  - CLI commands
  [Unreleased]: https://github.com/sepandhaghighi/art/compare/v6.2...dev
  [6.2]: https://github.com/sepandhaghighi/art/compare/v6.1...v6.2
  [6.1]: https://github.com/sepandhaghighi/art/compare/v6.0...v6.1
  [6.0]: https://github.com/sepandhaghighi/art/compare/v5.9...v6.0
  [5.9]: https://github.com/sepandhaghighi/art/compare/v5.8...v5.9
  [5.8]: https://github.com/sepandhaghighi/art/compare/v5.7...v5.8
  [5.7]: https://github.com/sepandhaghighi/art/compare/v5.6...v5.7
  [5.6]: https://github.com/sepandhaghighi/art/compare/v5.5...v5.6
  [5.5]: https://github.com/sepandhaghighi/art/compare/v5.4...v5.5
  [5.4]: https://github.com/sepandhaghighi/art/compare/v5.3...v5.4
  [5.3]: https://github.com/sepandhaghighi/art/compare/v5.2...v5.3
  [5.2]: https://github.com/sepandhaghighi/art/compare/v5.1...v5.2
  [5.1]: https://github.com/sepandhaghighi/art/compare/v5.0...v5.1
  [5.0]: https://github.com/sepandhaghighi/art/compare/v4.9...v5.0
  [4.9]: https://github.com/sepandhaghighi/art/compare/v4.8...v4.9
  [4.8]: https://github.com/sepandhaghighi/art/compare/v4.7...v4.8
  [4.7]: https://github.com/sepandhaghighi/art/compare/v4.6...v4.7
  [4.6]: https://github.com/sepandhaghighi/art/compare/v4.5...v4.6
  [4.5]: https://github.com/sepandhaghighi/art/compare/v4.4...v4.5
  [4.4]: https://github.com/sepandhaghighi/art/compare/v4.3...v4.4
  [4.3]: https://github.com/sepandhaghighi/art/compare/v4.2...v4.3
  [4.2]: https://github.com/sepandhaghighi/art/compare/v4.1...v4.2
  [4.1]: https://github.com/sepandhaghighi/art/compare/v4.0...v4.1
  [4.0]: https://github.com/sepandhaghighi/art/compare/v3.9...v4.0
  [3.9]: https://github.com/sepandhaghighi/art/compare/v3.8...v3.9
  [3.8]: https://github.com/sepandhaghighi/art/compare/v3.7...v3.8
  [3.7]: https://github.com/sepandhaghighi/art/compare/v3.6...v3.7
  [3.6]: https://github.com/sepandhaghighi/art/compare/v3.5...v3.6
  [3.5]: https://github.com/sepandhaghighi/art/compare/v3.4...v3.5
  [3.4]: https://github.com/sepandhaghighi/art/compare/v3.3...v3.4
  [3.3]: https://github.com/sepandhaghighi/art/compare/v3.2...v3.3
  [3.2]: https://github.com/sepandhaghighi/art/compare/v3.1...v3.2
  [3.1]: https://github.com/sepandhaghighi/art/compare/v3.0...v3.1
  [3.0]: https://github.com/sepandhaghighi/art/compare/v2.9...v3.0
  [2.9]: https://github.com/sepandhaghighi/art/compare/v2.8...v2.9
  [2.8]: https://github.com/sepandhaghighi/art/compare/v2.7...v2.8
  [2.7]: https://github.com/sepandhaghighi/art/compare/v2.6...v2.7
  [2.6]: https://github.com/sepandhaghighi/art/compare/v2.5...v2.6
  [2.5]: https://github.com/sepandhaghighi/art/compare/v2.4...v2.5
  [2.4]: https://github.com/sepandhaghighi/art/compare/v2.3...v2.4
  [2.3]: https://github.com/sepandhaghighi/art/compare/v2.2...v2.3
  [2.2]: https://github.com/sepandhaghighi/art/compare/v2.1...v2.2
  [2.1]: https://github.com/sepandhaghighi/art/compare/v2.0...v2.1
  [2.0]: https://github.com/sepandhaghighi/art/compare/v1.9...v2.0
  [1.9]: https://github.com/sepandhaghighi/art/compare/v1.8...v1.9
  [1.8]: https://github.com/sepandhaghighi/art/compare/v1.7...v1.8
  [1.7]: https://github.com/sepandhaghighi/art/compare/v1.6...v1.7
  [1.6]: https://github.com/sepandhaghighi/art/compare/v1.5...v1.6
  [1.5]: https://github.com/sepandhaghighi/art/compare/v1.4...v1.5
  [1.4]: https://github.com/sepandhaghighi/art/compare/v1.3...v1.4
  [1.3]: https://github.com/sepandhaghighi/art/compare/v1.2...v1.3
  [1.2]: https://github.com/sepandhaghighi/art/compare/v1.1...v1.2
  [1.1]: https://github.com/sepandhaghighi/art/compare/v1.0...v1.1
  [1.0]: https://github.com/sepandhaghighi/art/compare/v0.9...v1.0
  [0.9]: https://github.com/sepandhaghighi/art/compare/v0.8...v0.9
  [0.8]: https://github.com/sepandhaghighi/art/compare/v0.7...v0.8
  [0.7]: https://github.com/sepandhaghighi/art/compare/v0.6...v0.7
  [0.6]: https://github.com/sepandhaghighi/art/compare/v0.5...v0.6
  [0.5]: https://github.com/sepandhaghighi/art/compare/v0.4...v0.5
  [0.4]: https://github.com/sepandhaghighi/art/compare/v0.3...v0.4
  [0.3]: https://github.com/sepandhaghighi/art/compare/v0.2...v0.3
  [0.2]: https://github.com/sepandhaghighi/art/compare/v0.1...v0.2
  [0.1]: https://github.com/sepandhaghighi/art/compare/1e238cd...v0.1


pkgId: 1f4fc69dcf58c8aad5ac75df717719d083363e58dcbdf196d76fb6e94361dddf
name: python-art
arch: src
version: 6.3
epoch: 0
release: 1
summary: ASCII Art Library For Python
url: https://github.com/sepandhaghighi/art
rpm_license: MIT
rpm_group: Unspecified
rpm_buildhost: localhost
location_href: Packages/python-art-6.3-1.src.rpm
checksum_type: sha256
description:
  ASCII art is also known as "computer text art". It involves the smart placement of typed special characters or
  letters to make a visual shape that is spread over multiple lines of text.
  ART is a Python lib for text converting to ASCII art fancy. ;-)
  <table>
  	<tr align="center">
  		<td>Open Hub</td>
  		<td><a href="https://www.openhub.net/p/artlib"><img src="https://www.openhub.net/p/artlib/widgets/project_thin_badge.gif"></a></td>
  	</tr>
  	<tr align="center">
  		<td>PyPI Counter</td>
  		<td><a href="http://pepy.tech/project/art"><img src="http://pepy.tech/badge/art"></a></td>
  	</tr>
  	<tr align="center">
  		<td>Github Stars</td>
  		<td><a href="https://github.com/sepandhaghighi/art"><img src="https://img.shields.io/github/stars/sepandhaghighi/art.svg?style=social&label=Stars"></a></td>
  	</tr>
  	<tr align="center">
  		<td>Font Counter</td>
  		<td id="font_counter">667</td>
  	</tr>
  	<tr align="center">
  		<td>1-Line-Art Counter</td>
  		<td id="art_counter">710</td>
  	</tr>
  	<tr align="center">
  		<td>Decor Counter</td>
  		<td id="decor_counter">218</td>
  	</tr>
  </table>
  <table>
  	<tr>
  		<td align="center">Branch</td>
  		<td align="center">master</td>
  		<td align="center">dev</td>
  	</tr>
  	<tr>
  		<td align="center">CI</td>
  		<td align="center"><img src="https://github.com/sepandhaghighi/art/workflows/CI/badge.svg?branch=master"></td>
  		<td align="center"><img src="https://github.com/sepandhaghighi/art/workflows/CI/badge.svg?branch=dev"></td>
  	</tr>
  </table>
  <table>
  	<tr>
  		<td align="center">Code Quality</td>
  		<td align="center"><a class="badge-align" href="https://www.codacy.com/app/sepand-haghighi/art?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=sepandhaghighi/art&amp;utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/405020450bc94088ad1450461831a587"/></a></td>
  		<td align="center"><a href="https://codebeat.co/projects/github-com-sepandhaghighi-art-dev"><img alt="codebeat badge" src="https://codebeat.co/badges/90e77325-a046-4cc5-9c3e-646c011a5b72" /></a></td>
  		<td align="center"><a href="https://www.codefactor.io/repository/github/sepandhaghighi/art"><img src="https://www.codefactor.io/repository/github/sepandhaghighi/art/badge" alt="CodeFactor" /></a></td>
  	</tr>
  </table>

  <div align="center">
  <img src="https://github.com/sepandhaghighi/art/raw/master/otherfile/ART.gif">
  <p>Quick Start</p>
  </div>

  ⚠️ Some environments don't support all 1-Line arts
  ⚠️ **ART 4.6** is the last version to support **Bipartite art**

  This function return 1-line art as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> from art import *
  >>> art_1=art("coffee") # return art as str in normal mode
  >>> print(art_1)
  c[_]
  >>> art_2=art("woman",number=2) # return multiple art as str
  >>> print(art_2)
  ▓⚗_⚗▓ ▓⚗_⚗▓
  >>> art("coffee", number=3, space=5)
  'c[_]     c[_]     c[_]'
  >>> art("random") # random 1-line art mode
  '(っ◕‿◕)っ '
  >>> art("rand")   # random 1-line art mode
  't(-_-t) '
  >>> art(22,number=1) # raise artError
  Traceback (most recent call last):
  art.art.artError: The 'artname' type must be str.
  ```

  This function print 1-line art in normal mode (return None) and raise `artError` in exception.
  ```pycon
  >>> aprint("butterfly") # print art
  Ƹ̵̡Ӝ̵̨̄Ʒ
  >>> aprint("happy") # print art
   ۜ\(סּںסּَ` )/ۜ
  >>> aprint("coffee", number=3, space=5)
  c[_]     c[_]     c[_]
  >>> aprint("random") # random 1-line art mode
  '(っ◕‿◕)っ '
  >>> aprint("rand")   # random 1-line art mode
  't(-_-t) '
  >>> aprint("woman",number="22") # raise artError
  Traceback (most recent call last):
  art.art.artError: The 'number' type must be int.
  ```

  `randart` function is added in `Version 2.2` as `art("random")` shortcut.
  ```pycon
  >>> randart()
  'ዞᏜ℘℘Ꮍ ℬℹℛʈዞᗬᏜᎽ '
  >>> randart()
  '✌(◕‿-)✌ '
  ```
  * Note1 : Use `ART_NAMES` to access all arts name list (new in `Version 4.2`)
  * Note2 : Use `NON_ASCII_ARTS` to access all Non-ASCII arts name list (new in `Version 4.6`)
  * Note3 : Use `ASCII_ARTS` to access all ASCII arts name list (new in `Version 5.7`)

  ⚠️ Some fonts don't support all characters
  ⚠️ From `Version 3.3` Non-ASCII fonts added (These fonts are not compatible with some environments)
  ⚠️ From `Version 5.3` `\n` is used as the default line separator instead of `\r\n` (Use `sep` parameter if needed)

  This function return ASCII text as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> Art=text2art("art") # Return ASCII text (default font) and default chr_ignore=True
  >>> print(Art)
                _
    __ _  _ __ | |_
   / _` || '__|| __|
  | (_| || |   | |_
   \__,_||_|    \__|
  >>> Art=text2art("art",font='block',chr_ignore=True) # Return ASCII text with block font
  >>> print(Art)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> Art=text2art("test","random") # random font mode
  >>> print(Art)
   |       |
  ~|~/~/(~~|~
   | \/__) |
  >>> Art=text2art("test","rand") # random font mode
  >>> print(Art)
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  >>> print(text2art("test", space=10))
   _                                             _
  | |_             ___            ___           | |_
  | __|           / _ \          / __|          | __|
  | |_           |  __/          \__ \          | |_
   \__|           \___|          |___/           \__|
  >>> print(text2art('''Lorem
  ipsum
  dolor''', font="small")) # Multi-line print
   _
  | |    ___  _ _  ___  _ __
  | |__ / _ \| '_|/ -_)| '  \
  |____|\___/|_|  \___||_|_|_|
   _
  (_) _ __  ___ _  _  _ __
  | || '_ \(_-<| || || '  \
  |_|| .__//__/ \_,_||_|_|_|
     |_|
      _       _
   __| | ___ | | ___  _ _
  / _` |/ _ \| |/ _ \| '_|
  \__,_|\___/|_|\___/|_|
  >>> print(text2art("test","white_bubble"))  # Non-ASCII font example
  ⓣⓔⓢⓣ
  >>> text2art("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6
  '▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌'
  >>> text2art("seسسس",font=DEFAULT_FONT,chr_ignore=False) # raise artError in exception
  Traceback (most recent call last):
  art.art.artError: س is invalid.
  ```

  This function print ASCII text in normal mode (return None) and raise `artError` in exception.
  ```pycon
  >>> tprint("art") # print ASCII text (default font)
                _
    __ _  _ __ | |_
   / _` || '__|| __|
  | (_| || |   | |_
   \__,_||_|    \__|
  >>> tprint("art",font="block",chr_ignore=True) # print ASCII text (block font)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> tprint('testسس')  # chr_ignore flag ==True (Default)
   _               _
  | |_   ___  ___ | |_
  | __| / _ \/ __|| __|
  | |_ |  __/\__ \| |_
   \__| \___||___/ \__|
  >>> tprint("test","random") # random font mode
   |       |
  ~|~/~/(~~|~
   | \/__) |
  >>> tprint("test","rand") # random font mode
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  >>> tprint("test", space=10)
   _                                             _
  | |_             ___            ___           | |_
  | __|           / _ \          / __|          | __|
  | |_           |  __/          \__ \          | |_
   \__|           \___|          |___/           \__|
  >>> tprint('testسس',chr_ignore=False) # raise artError in exception
  Traceback (most recent call last):
  art.art.artError: س is invalid.
  >>> tprint('''Lorem
  ipsum
  dolor''', font="cybermedium") # Multi-line print
  _    ____ ____ ____ _  _
  |    |  | |__/ |___ |\/|
  |___ |__| |  \ |___ |  |
  _ ___  ____ _  _ _  _
  | |__] [__  |  | |\/|
  | |    ___] |__| |  |
  ___  ____ _    ____ ____
  |  \ |  | |    |  | |__/
  |__/ |__| |___ |__| |  \
  >>> tprint("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6
  ▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌
  >>> tprint("art",font="fancy5",decoration="random") # decoration random mode is added in Version 5.0
  •]•·✦º✦·»ᏗᏒᏖ«·✦º✦·•[•
  ```

  This function return `dict` in normal and exception mode.
  ```pycon
  >>> Response=tsave("art",filename="test.txt") # save ASCII text in test.txt file with save message (print_status==True), return dict
  Saved!
  Filename: test.txt
  >>> Response["Message"]
  'OK'
  >>> Response=tsave("art",filename="test.txt",print_status=False) # save ASCII text in test.txt file without save message (print_status==False)
  >>> Response["Message"]
  'OK'
  >>> Response["Status"]
  True
  >>> tsave(22,font=DEFAULT_FONT,filename="art",chr_ignore=True,print_status=True)
  {'Status': False, 'Message': "'int' object has no attribute 'split'"}
  >>> Response=tsave("art",filename="test.txt",overwrite=True) # overwrite parameter is added in Version 4.0
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",decoration="barcode1") # decoration parameter is added in Version 4.6
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",sep="\r\n") # sep parameter is added in Version 5.3
  Saved!
  Filename: test.txt
  >>> Response=tsave("art",filename="test.txt",space=5) # space parameter is added in Version 6.0
  Saved!
  Filename: test.txt
  ```
  * Note1 : Use `FONT_NAMES` to access all fonts name list (new in `Version 4.2`)
  * Note2 : Use `NON_ASCII_FONTS` to access all Non-ASCII fonts name list (new in `Version 4.4`)
  * Note3 : Use `ASCII_FONTS` to access all ASCII fonts name list (new in `Version 5.7`)

  ⚠️ Some environments don't support all decorations

  This function return decoration as `str` in normal mode and raise `artError` in exception.
  ```pycon
  >>> decor("barcode1")
  '▌│█║▌║▌║ '
  >>> decor("barcode1",reverse=True)
  ' ║▌║▌║█│▌'
  >>> decor("barcode1") + text2art("    art   ",font="fancy42") + decor("barcode1",reverse=True)
  '▌│█║▌║▌║     ąяţ    ║▌║▌║█│▌'
  >>> decor("barcode1",both=True) # both parameter is added in Version 5.0
  ['▌│█║▌║▌║ ', ' ║▌║▌║█│▌']
  >>> decor("random",both=True) # random mode is added in Version 5.0
  ['｢(◔ω◔「)三', '三三三ʅ(；◔౪◔)ʃ']
  >>> decor("rand",both=True) # random mode is added in Version 5.0
  ['‹–…·´`·…–›', '‹–…·´`·…–›']
  >>> decor(None)
  Traceback (most recent call last):
  art.art.artError: The 'decoration' type must be str.
  ```
  * Note : Use `DECORATION_NAMES` to access all decorations name list (new in `Version 4.6`)

  These modes are available for `text2art`, `tprint` & `tsave`.

  ⚠️ Some fonts don't support all characters
  ```pycon
  >>> tprint("art",font="block",chr_ignore=True)
   .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. |
  | |      __      | || |  _______     | || |  _________   | |
  | |     /  \     | || | |_   __ \    | || | |  _   _  |  | |
  | |    / /\ \    | || |   | |__) |   | || | |_/ | | \_|  | |
  | |   / ____ \   | || |   |  __ /    | || |     | |      | |
  | | _/ /    \ \_ | || |  _| |  \ \_  | || |    _| |_     | |
  | ||____|  |____|| || | |____| |___| | || |   |_____|    | |
  | |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'
  >>> tprint("art","white_bubble")
  ⓐⓡⓣ
  ```

  Randomly select from all fonts.
  Keywords : `random`, `rand` & `rnd`
  ```pycon
  >>> tprint("test",font="random")
   |       |
  ~|~/~/(~~|~
   | \/__) |
  ```

  Randomly select from small fonts.
  Keywords : `rnd-small`, `random-small` & `rand-small`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-small")
  _/  _   _ _/
  /  (- _)  /
  ```

  Randomly select from medium fonts.
  Keywords : `rnd-medium`, `random-medium` & `rand-medium`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-medium")
    ,                ,
   ||               ||
  =||=  _-_   _-_, =||=
   ||  || \\ ||_.   ||
   ||  ||/    ~ ||  ||
   \\, \\,/  ,-_-   \\,
  ```

  Randomly select from large fonts.
  Keywords : `rnd-large`, `random-large` & `rand-large`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test",font="rnd-large")
  8888888 8888888888 8 8888888888      d888888o.   8888888 8888888888
        8 8888       8 8888          .`8888:' `88.       8 8888
        8 8888       8 8888          8.`8888.   Y8       8 8888
        8 8888       8 8888          `8.`8888.           8 8888
        8 8888       8 888888888888   `8.`8888.          8 8888
        8 8888       8 8888            `8.`8888.         8 8888
        8 8888       8 8888             `8.`8888.        8 8888
        8 8888       8 8888         8b   `8.`8888.       8 8888
        8 8888       8 8888         `8b.  ;8.`8888       8 8888
        8 8888       8 888888888888  `Y8888P ,88P'       8 8888
  ```

  Randomly select from xlarge fonts.
  Keywords : `rnd-xlarge`, `random-xlarge` & `rand-xlarge`
  * Note : New in `Version 2.8`
  ```pycon
  >>> tprint("test","rnd-xlarge")
        _____                    _____                    _____                _____
       /\    \                  /\    \                  /\    \              /\    \
      /::\    \                /::\    \                /::\    \            /::\    \
      \:::\    \              /::::\    \              /::::\    \           \:::\    \
       \:::\    \            /::::::\    \            /::::::\    \           \:::\    \
        \:::\    \          /:::/\:::\    \          /:::/\:::\    \           \:::\    \
         \:::\    \        /:::/__\:::\    \        /:::/__\:::\    \           \:::\    \
         /::::\    \      /::::\   \:::\    \       \:::\   \:::\    \          /::::\    \
        /::::::\    \    /::::::\   \:::\    \    ___\:::\   \:::\    \        /::::::\    \
       /:::/\:::\    \  /:::/\:::\   \:::\    \  /\   \:::\   \:::\    \      /:::/\:::\    \
      /:::/  \:::\____\/:::/__\:::\   \:::\____\/::\   \:::\   \:::\____\    /:::/  \:::\____\
     /:::/    \::/    /\:::\   \:::\   \::/    /\:::\   \:::\   \::/    /   /:::/    \::/    /
    /:::/    / \/____/  \:::\   \:::\   \/____/  \:::\   \:::\   \/____/   /:::/    / \/____/
   /:::/    /            \:::\   \:::\    \       \:::\   \:::\    \      /:::/    /
  /:::/    /              \:::\   \:::\____\       \:::\   \:::\____\    /:::/    /
  \::/    /                \:::\   \::/    /        \:::\  /:::/    /    \::/    /
   \/____/                  \:::\   \/____/          \:::\/:::/    /      \/____/
                             \:::\    \               \::::::/    /
                              \:::\____\               \::::/    /
                               \::/    /                \::/    /
                                \/____/                  \/____/
  ```

  This mode consider length of input text to select font
  ☑️ Support of 95 ASCII characters guaranteed
  Keywords : `wizard`, `wiz` & `magic`
  * Note : New in `Version 2.9`
  ```pycon
  >>> tprint("1","wizard")
      88
    ,d88
  888888
      88
      88
      88
      88
      88
      88
      88
  >>> tprint("1"*5,"wizard")
  d88  d88  d88  d88  d88
   88   88   88   88   88
   88   88   88   88   88
   88   88   88   88   88
   88   88   88   88   88
  d88P d88P d88P d88P d88P
  >>> tprint("1"*15,"wizard")
   

   
   
   

  ```

  Randomly select from Non-ASCII fonts.
  Keywords : `random-na`, `rand-na` & `rnd-na`
  * Note : New in `Version 3.4`
  ```pycon
  >>> tprint("test","random-na")
  ₮Ɇ₴₮
  >>> tprint("test","random-na")
  ʇsǝʇ
  ```

  Randomly mix Non-ASCII fonts.
  Keywords : `mix`
  * Note : New in `Version 3.7`
  ```pycon
  >>> tprint("test","mix")
  †Ɛѕ†
  >>> tprint("test","mix")
  tᏋѕt
  >>> tprint("test","mix")
  ꓄єร꓄
  ```
  ⚠️ Non-ASCII fonts are only available in `Font name`, `Random Non-ASCII` and `Mix` modes

  <a href="https://en.wikipedia.org/wiki/Levenshtein_distance">Levenshtein distance</a> used in this project. (`Version` >0.9)
  ```pycon
  >>> aprint("happi")  # correct --> aprint("happy"), error < |artname|/2
   ۜ\(סּںסּَ` )/ۜ
  >>> Art=art("birds2222222",number=1) # correct --> Art=art("birds",number=1), error >= |artname|/2
  Traceback (most recent call last):
  art.art.artError: Invalid art name.
  >>> aprint("happi231")  # correct --> aprint("happy"), error < |artname|/2
  ⎦˚◡˚⎣
  >>> aprint("happi2312344") # correct --> aprint("happy"), error >= |artname|/2
  Traceback (most recent call last):
  art.art.artError: Invalid art name.
  >>> Art=text2art("test",font="black") # correct --> Art=text2art("test",font="block")
  >>> print(Art)
   .----------------.  .----------------.  .----------------.  .----------------.
  | .--------------. || .--------------. || .--------------. || .--------------. |
  | |  _________   | || |  _________   | || |    _______   | || |  _________   | |
  | | |  _   _  |  | || | |_   ___  |  | || |   /  ___  |  | || | |  _   _  |  | |
  | | |_/ | | \_|  | || |   | |_  \_|  | || |  |  (__ \_|  | || | |_/ | | \_|  | |
  | |     | |      | || |   |  _|  _   | || |   '.___`-.   | || |     | |      | |
  | |    _| |_     | || |  _| |___/ |  | || |  |`\____) |  | || |    _| |_     | |
  | |   |_____|    | || | |_________|  | || |  |_______.'  | || |   |_____|    | |
  | |              | || |              | || |              | || |              | |
  | '--------------' || '--------------' || '--------------' || '--------------' |
   '----------------'  '----------------'  '----------------'  '----------------'
  >>> tprint("test",font="cybermedum")   # correct --> tprint("test",font="cybermedium")
  ___ ____ ____ ___
   |  |___ [__   |
   |  |___ ___]  |
  ```

  `set_default` function is added in `Version 2.2` in order to change default values.
  ```pycon
  >>> help(set_default)
  Help on function set_default in module art.art:
  set_default(font='standard', chr_ignore=True, filename='art', print_status=True, overwrite=False, decoration=None, sep='\n')
      Change text2art, tprint and tsave default values.
  >>> tprint("test")
   _               _
  | |_   ___  ___ | |_
  | __| / _ \/ __|| __|
  | |_ |  __/\__ \| |_
   \__| \___||___/ \__|
  >>> set_default(font="italic")
  >>> tprint("test")
  _/  _   _ _/
  /  (- _)  /
  ```
  * Note : Functions error response updated in `Version 0.8`
  	<table>
  	<tr>
  		<td align="center">Function</td>
  		<td align="center">Normal Output</td>
  		<td align="center">Error</td>
  	</tr>
      <tr>
  		<td align="center">decor</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">art</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">aprint</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">tprint</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">tsave</td>
  		<td align="center">{"Status":bool,"Message":str}</td>
  		<td align="center">{"Status":bool,"Message":str}</td>
  	</tr>
  	<tr>
  		<td align="center">text2art</td>
  		<td align="center">str</td>
  		<td align="center">raise artError</td>
  	</tr>
  	<tr>
  		<td align="center">set_default</td>
  		<td align="center">None</td>
  		<td align="center">raise artError</td>
  	</tr>
  	</table>

  - Only ASCII fonts and arts :
  ```
  art test
  ```
  - All fonts, arts and decorations :
  ```
  art test2
  ```

  ⚠️ [Backward Compatibility] **ART 5.9** is the last version to support this **CLI structure** officially
  ⚠️ You can use `art` or `python -m art` to run this mode
  - List of arts :  `art list` or `art arts`
  - List of fonts : `art fonts`
  - Text : `art text [yourtext] [fontname(optional)]`
  - Art : `art shape [artname]` or `art art [artname]`
  - Save :  `art save [yourtext] [fontname(optional)]`
  - All  :  `art all [yourtext]`

  Just send your text to one of these bots. 👇👇👇👇
  <a href="https://t.me/artlib_bot" target="__blank"><img src="https://img.shields.io/badge/Telegram-Bot1-red.svg"></a>
  <a href="https://t.me/textart_robot" target="__blank"><img src="https://img.shields.io/badge/Telegram-Bot2-blue.svg"></a>

  1. ART can be used online in interactive Jupyter Notebooks via the Binder service! Try it out now! :
  [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/sepandhaghighi/art/master)
  * Open `FontList.ipynb`, `ArtList.ipynb` and `DecorList.ipynb`
  * Edit and execute each part of the notes, step by step from the top panel by run button
  2. ART also can be used online in [ascii-generator.site](https://ascii-generator.site/), a Django website by [hermanTenuki](https://github.com/hermanTenuki)

  <div align="center">
  <a href="https://asciinema.org/a/186368" target="_blank"><img src="https://asciinema.org/a/186368.png" /></a>
  <p>Screen Record</p>
  </div>
  * View full font list ([Link1](https://github.com/sepandhaghighi/art/blob/master/FontList.ipynb "Full Font List"),[Link2](https://www.ascii-art.site/FontList.html "Full Font List"))
  * View full art list ([Link1](https://github.com/sepandhaghighi/art/blob/master/ArtList.ipynb "Full Art List"),[Link2](https://www.ascii-art.site/ArtList.html "Full Art List"))
  * View full decoration list ([Link1](https://github.com/sepandhaghighi/art/blob/master/DecorList.ipynb "Full Decoration List"),[Link2](https://www.ascii-art.site/DecorList.html "Full Decoration List"))

  1. Fill an issue and describe it. We'll check it ASAP!
      - Please complete the issue template
  2. Discord : [https://discord.com/invite/FAAyq3QJqP](https://discord.com/invite/FAAyq3QJqP)
  3. Website : [https://www.ascii-art.site](https://www.ascii-art.site)
  4. Email : [info@ascii-art.site](mailto:info@ascii-art.site "info@ascii-art.site")

  1. [FIGlet](http://www.figlet.org/)
  2. [1 Line Art](http://1lineart.kulaone.com/#/)
  3. [Text to ASCII](http://patorjk.com/software/taag/#p=display&f=Blocks&t=ART)
  4. [ASCII Generator](http://www.network-science.de/ascii/)
  5. [Asky](https://asky.io/)
  6. [Flipyourtext](https://www.flipyourtext.com/)
  7. [YayText](https://yaytext.com)
  8. [Coolletters](http://www.coolletters.net/)
  9. [Instagram Fonts](https://igfonts.io/)
  10. [Cool Symbol](https://coolsymbol.com/)
  11. [ASCII Moji](http://asciimoji.com/)
  12. [SMILEY COOL](https://smiley.cool/)
  13. [SPREZZ](https://www.sprezzkeyboard.com/)
  14. [Textart4u](http://textart4u.blogspot.com/2013/03/one-line-ascii-text-art.html?m=1)
  15. [Chat4o](https://en.chat4o.com/ascii/)
  16. [Findwebapp](http://www.findwebapp.com/ascii-art-one-liner/)
  17. [Hubpages](https://hubpages.com/technology/one-line-ascii-art-for-twitter)
  18. [ASCII-ART](http://www.ascii-art.de/ascii/mno/one_line.txt)
  19. [Messletters](https://www.messletters.com/en/)
  20. [Webestools](http://www.webestools.com/)
  21. [ASCII-emoji](https://github.com/dysfunc/ascii-emoji)
  22. [Instagram Fonts2](https://www.instagramfonts.com/)
  23. [Emotiworld](http://en.emotiworld.com/)
  24. [Fancy Text Pro](https://www.fancytextpro.com/)
  25. [Playing Cards in Unicode](https://en.m.wikipedia.org/wiki/Playing_cards_in_Unicode)
  26. [Text Generator](https://coolfonts.text-generator.org/)
  27. [GOGOTEXT](https://instafontsgen.codesdetail.com)
  28. [Fsymbols](https://fsymbols.com/)
  29. [Font Copy and Paste](https://www.fontcopypaste.com/)
  30. [Mega Cool Text](http://megacooltext.com/)
  31. [ToolCalculator](https://www.toolcalculator.com/)
  32. [Copy Paste Fonts](https://copy-paste-fonts.top/)
  * Logo designed by [Arta Khanalizadeh](https://www.linkedin.com/in/artakhanalizadeh)

  <h3>Star this repo</h3>
  Give a ⭐️ if this project helped you!
  <h3>Donate to our project</h3>
  If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .
  <a href="https://www.ascii-art.site/#support" target="_blank"><img src="https://github.com/sepandhaghighi/art/raw/master/otherfile/donate-button.png" height="90px" width="270px" alt="Art Donation"></a>
  <h3>Become a sponsor to ART</h3>
  * Contact us at the email first
  <h4>Corporate sponsor</h4>
  - **$250** a month
  - Your company's logo can be featured on **Readme**
  - Intended for small companies
  <h4>Mega corporate sponsor</h4>
  - **$500** a month
  - Your company's logo can be featured on **Readme** and **Website**
  - Intended for medium-sized companies

  Some parts of the infrastructure for this project are supported by:
  <p>
    <a href="https://www.digitalocean.com/">
      <img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" width="201px" alt="DigitalOcean">
    </a>
  </p>
  [Python Software Foundation (PSF)](https://www.python.org/psf/) grants ART library from version **6.3** to **6.6**. [PSF](https://www.python.org/psf/) is the organization behind Python. Their mission is to promote, protect, and advance the Python programming language and to support and facilitate the growth of a diverse and international community of Python programmers.
  <a href="https://www.python.org/psf/"><img src="https://github.com/sepandhaghighi/art/raw/master/otherfile/PSF.png" height="55px" alt="Python Software Foundation"></a>

  All notable changes to this project will be documented in this file.
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).



  - `data` directory
  - `tests` directory
  - 10 new font
  	1. lolie
  	2. zakia
  	3. batman
  	4. lord_of_the_ring
  	5. kesia
  	6. akila
  	7. laurine
  	8. bianca
  	9. callian
  	10. awa

  - `art_param` module changed to `params`
  - `art` module split into `errors`, `utils`, and `functions` modules
  - `text_dic1`, `text_dic2`, and `text_dic3` renamed to `fonts1`, `fonts2`, and `fonts3`
  - `art_dic` renamed to `arts`
  - `decor_dic` renamed to `decorations`
  - Fonts, arts, and decorations moved to `data` directory
  - Tests moved to `tests` directory
  - `Python 3.5` support dropped
  - Test system modified
  - `CONTRIBUTING.md` updated
  - `README.md` modified


  - 5 new font
  	1. alissa
  	2. milka
  	3. ozana
  	4. shanna
  	5. livia
  - `decoration_request.yml` template
  - `font_request.yml` template
  - `one_line_request.yml` template
  - `feature_request.yml` template
  - `config.yml` for issue template
  - `SECURITY.md`

  - Bug report template modified
  - Test system modified
  - `README.md` modified
  - [DigitalOcean](https://digitalocean.com/) logo added to `README.md`
  - `Python 3.12` added to `test.yml`


  - `font_size_splitter` function modified
  - `__detailed_return` parameter added to `art` function
  - `__detailed_return` parameter added to `text2art` function
  - Random mode name bug fixed
  - `__word2art` function modified
  - `art` function tail space bug fixed
  - `space` parameter bug fixed
  - `space` parameter added to `art` function
  - `space` parameter added to `aprint` function
  - `font_check.py` modified
  - `README.md` modified
  - `INSTALL.md` modified


  - 6 new font
  	1. vaporwave
  	2. squiggle1
  	3. squiggle2
  	4. crazy2
  	5. crazy3
  	6. emoji

  - `font_wizard.py` modified
  - Drop Python 2.7 and 3.4 support
  - `space` parameter added to `tsave` function
  - `space` parameter added to `tprint` function
  - `space` parameter added to `text2art` function
  - `crazy` font renamed to `crazy1`
  - Test system modified
  - `codecov` removed from `dev-requirements.txt`
  - `README.md` modified
  - `INSTALL.md` modified


  - 6 new font
  	1. small_fancy
  	2. boom
  	3. cross_jesus
  	4. dark_tattoo
  	5. lucifer
  	6. ascii_roman

  - Test system modified
  - `README.md` modified
  - `help_func` function modified
  - CLI mode updated


  - 8 new font
  	1. russian2
  	2. got
  	3. vip
  	4. crazy
  	5. cruse
  	6. drippy
  	7. stylish
  	8. ayda

  - Test system modified
  - `Python 3.11` added to `test.yml`
  - `Conda-Forge` installing section added to `INSTALL.md`
  - Website changed to https://www.ascii-art.site

  - `testcov` and `testcov2` modes


  - 5 new font
  	1. fancy144
  	2. fancy145
  	3. fancy146
  	4. fancy147
  	5. fancy148
  - `ASCII_FONTS` list
  - `ASCII_ARTS` list


  - 7 new font
  	1. fancy141
  	2. fancy142
  	3. fancy143
  	4. tarty6
  	5. tarty7
  	6. tarty8
  	7. tarty9

  - Test system modified


  - 5 new font
  	1. tarty4
  	2. tarty5
  	3. fancy138
  	4. fancy139
  	5. fancy140
  - Anaconda workflow

  - `__word2art` function modified
  - `font_wizard.py` modified


  - 10 new font
  	1. fancy131
  	2. fancy132
  	3. fancy133
  	4. fancy134
  	5. fancy135
  	6. fancy136
  	7. fancy137
  	8. tarty1
  	9. tarty2
  	10. tarty3
  - Discord badge

  - Some fonts width bug fixed
  - `test.py` modified
  - `font_wizard.py` modified
  - `font_check.py` modified
  - `art_decor_check.py` modified
  - `__word2art` function modified
  - `mix_letters` function modified
  - `AUTHORS.md` updated
  - License updated
  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - `Python 3.10` added to `test.yml`

  - `greetings.yml`


  - 10 new font
  	1. smooth3
  	2. flaky
  	3. tiny_caps
  	4. high_above
  	5. handwriting3
  	6. fantasy2
  	7. manga
  	8. upside_down2
  	9. cool
  	10. instagram

  - `fantasy` font renamed to `fantasy1`
  - `upside_down` font renamed to `upside_down1`
  - `sep` parameter added to `text2art`, `tprint`, `tsave` and `set_default` functions
  - Default line separator changed from `\r\n` to `\n`
  - `__word2art` function modified
  - Escaped `\ ` in string literals


  - 10 new 1-line-art
  	1. playing cards waterfall
  	2. playing cards waterfall (trump)
  	3. playing cards hearts waterfall
  	4. playing cards diamonds waterfall
  	5. playing cards clubs waterfall
  	6. playing cards spades waterfall
  	7. joker1
  	8. joker2
  	9. joker3
  	10. joker4
  - 23 new decorations
  	1. fancy87
  	2. fancy88
  	3. fancy89
  	4. fancy90
  	5. fancy91
  	6. fancy92
  	7. fancy93
  	8. fancy94
  	9. fancy95
  	10. heart10
  	11. heart11
  	12. heart12
  	13. heart13
  	14. heart14
  	15. heart15
  	16. star18
  	17. star19
  	18. star20
  	19. star21
  	20. star22
  	21. star23
  	22. star24
  	23. star25
  - 5 new fonts
  	1. old_italic
  	2. ninja
  	3. tai_viet
  	4. subscript2
  	5. fancy130

  - Test system modified
  - `subscript` font renamed to `subscript1`
  - Logo changed


  - 15 new fonts
  	1. fancy120
  	2. fancy121
  	3. fancy122
  	4. fancy123
  	5. fancy124
  	6. fancy125
  	7. fancy126
  	8. fancy127
  	9. fancy128
  	10. fancy129
  	11. bud1
  	12. bud2
  	13. pin1
  	14. pin2
  	15. sign
  - 45 new art
  	1. surprised4
  	2. surprised5
  	3. surprised6
  	4. surprised7
  	5. surprised8
  	6. surprised9
  	7. surprised10
  	8. surprised11
  	9. surprised12
  	10. surprised13
  	11. surprised14
  	12. surprised15
  	13. surprised16
  	14. surprised17
  	15. surprised18
  	16. surprised19
  	17. surprised20
  	18. confused3
  	19. confused4
  	20. confused5
  	21. confused6
  	22. confused7
  	23. confused8
  	24. confused9
  	25. confused10
  	26. table flip2
  	27. table flip3
  	28. table flip4
  	29. table flip5
  	30. table flip6
  	31. table flip7
  	32. table flip8
  	33. table flip9
  	34. table flip10
  	35. bear2
  	36. spider4
  	37. cat4
  	38. swim
  	39. swim2
  	40. swim3
  	41. yawning
  	42. boobs2
  	43. airplane3
  	44. gun4
  	45. cthulhu2


  - 5 new fonts
  	1. shasha
  	2. fancy116
  	3. fancy117
  	4. fancy118
  	5. fancy119
  - 60 new art
  	1. hello2
  	2. dunno2
  	3. dunno3
  	4. dunno4
  	5. dunno5
  	6. happy6
  	7. happy7
  	8. happy8
  	9. happy9
  	10. happy10
  	11. happy11
  	12. happy12
  	13. happy13
  	14. happy14
  	15. happy15
  	16. happy16
  	17. happy17
  	18. happy18
  	19. happy19
  	20. happy20
  	21. happy21
  	22. happy22
  	23. happy23
  	24. happy24
  	25. happy25
  	26. happy26
  	27. happy27
  	28. love4
  	29. kiss2
  	30. kiss3
  	31. kissing2
  	32. kissing3
  	33. kissing4
  	34. kissing5
  	35. kissing6
  	36. cute face2
  	37. cute face3
  	38. cute face4
  	39. cute face5
  	40. cute face6
  	41. cute face7
  	42. cute face8
  	43. cute face9
  	44. upset
  	45. pistols4
  	46. pistols5
  	47. mad
  	48. mad2
  	49. mad3
  	50. mad4
  	51. mad5
  	52. mad6
  	53. mad7
  	54. mad8
  	55. mad9
  	56. mad10
  	57. finger3
  	58. finger4
  	59. sad5
  	60. sad6

  - `random` mode added to `decor` function
  - `both` parameter added to `decor` function
  - `art` function modified
  - `indirect_font` function modified


  - 10 new fonts
  	1. foxy
  	2. fancy109
  	3. fancy110
  	4. fancy111
  	5. fancy112
  	6. fancy113
  	7. fancy114
  	8. fancy115
  	9. sheqi
  	10. fari

  - `font_wizard.py` script updated
  - `README.md` modified


  - 96 new art
  	1. angry birds
  	2. angry face2
    	3. angry troll
    	4. at what cost
    	5. barf
    	6. basking in glory
    	7. bear GTFO
  	8. bear squiting
  	9. boxing
  	10. breakdown
  	11. careless
  	12. chasing
  	13. cheers
  	14. chicken
  	15. confused scratch
  	16. crazy
  	17. creeper
  	18. cry face
  	19. cry troll
  	20. cute face
  	21. dance2
  	22. dancing
  	23. dear god why
  	24. devious smile
  	25. disagree
  	26. discombobulated
  	27. dislike1
  	28. dislike2
  	29. do you even lift bro?
  	30. double flip
  	31. emo dance
  	32. excited
  	33. exorcism
  	34. eye roll
  	35. feel perky
  	36. fido
  	37. fight
  	38. fisticuffs
  	39. flip friend
  	40. fly away
  	41. flying
  	42. fuck you2
  	43. happy face
  	44. happy hug
  	45. hitchhicking
  	46. hugger
  	47. im a hugger
  	48. injured
  	49. innocent face
  	50. japanese lion face
  	51. judgemental
  	52. judging
  	53. kissing
  	54. kitty emote
  	55. listening to headphones
  	56. looking down
  	57. love3
  	58. meow
  	59. no support
  	60. opera
  	61. peepers
  	62. pretty eyes
  	63. put the table back
  	64. resting my eyes
  	65. robot3
  	66. running
  	67. sad and confused
  	68. sad and crying
  	69. sad face
  	70. satisfied
  	71. seal
  	72. shark face
  	73. shy
  	74. sleepy
  	75. staring
  	76. stranger danger
  	77. strut
  	78. stunna shades
  	79. surprised2
  	80. taking a dump
  	81. tgif
  	82. things that can_t be unseen
  	83. tidy up
  	84. tired
  	85. touchy feely
  	86. tripping out
  	87. trolling
  	88. wave dance
  	89. whisling
  	90. winnie the pooh
  	91. winning
  	92. wizard2
  	93. worried
  	94. yun
  	95. zombie2
  	96. zoned

  - `surprised2` 1-line art renamed to `surprised3`
  - `art_decor_check.py` script updated
  - `font_check.py` script updated
  - `font_wizard.py` script updated


  - `art_decor_check.py` file
  - Greeting GitHub actions
  - 185 new decorations
  	1. angry1
  	2. arrow1
  	3. arrow2
  	4. arrow3
  	5. arrow4
  	6. arrow5
  	7. arrow6
  	8. arrow7
  	9. arrow8
  	10. arrow_wave1
  	11. arrow_wave2
  	12. ball1
  	13. ball2
  	14. ball3
  	15. bazar1
  	16. block1
  	17. block2
  	18. bow1
  	19. bubble
  	20. cat1
  	21. cat2
  	22. cat3
  	23. cell1
  	24. confused1
  	25. confused2
  	26. cross1
  	27. depressed
  	28. diamon3
  	29. diamond1
  	30. diamond2
  	31. egypt1
  	32. emotions1
  	33. fancy1
  	34. fancy2
  	35. fancy3
  	36. fancy4
  	37. fancy5
  	38. fancy6
  	39. fancy7
  	40. fancy8
  	41. fancy9
  	42. fancy10
  	43. fancy11
  	44. fancy12
  	45. fancy13
  	46. fancy14
  	47. fancy15
  	48. fancy16
  	49. fancy17
  	50. fancy18
  	51. fancy19
  	52. fancy20
  	53. fancy21
  	54. fancy22
  	55. fancy23
  	56. fancy24
  	57. fancy25
  	58. fancy26
  	59. fancy27
  	60. fancy28
  	61. fancy29
  	62. fancy30
  	63. fancy31
  	64. fancy32
  	65. fancy33
  	66. fancy34
  	67. fancy35
  	68. fancy36
  	69. fancy37
  	70. fancy38
  	71. fancy39
  	72. fancy40
  	73. fancy41
  	74. fancy42
  	75. fancy43
  	76. fancy44
  	77. fancy45
  	78. fancy46
  	79. fancy47
  	80. fancy48
  	81. fancy49
  	82. fancy50
  	83. fancy51
  	84. fancy52
  	85. fancy53
  	86. fancy54
  	87. fancy55
  	88. fancy56
  	89. fancy57
  	90. fancy58
  	91. fancy59
  	92. fancy60
  	93. fancy61
  	94. fancy62
  	95. fancy63
  	96. fancy64
  	97. fancy65
  	98. fancy66
  	99. fancy67
  	100. fancy68
  	101. fancy69
  	102. fancy70
  	103. fancy71
  	104. fancy72
  	105. fancy73
  	106. fancy74
  	107. fancy75
  	108. fancy76
  	109. fancy77
  	110. fancy78
  	111. fancy79
  	112. fancy80
  	113. fancy81
  	114. fancy82
  	115. fancy83
  	116. fancy84
  	117. fancy85
  	118. fancy86
  	119. flame1
  	120. flower1
  	121. food1
  	122. food2
  	123. haha
  	124. happy1
  	125. happy_new_year
  	126. hawaii1
  	127. hawaii2
  	128. heart1
  	129. heart2
  	130. heart3
  	131. heart4
  	132. heart5
  	133. heart6
  	134. heart7
  	135. heart8
  	136. heart9
  	137. line1
  	138. line2
  	139. line3
  	140. line4
  	141. love_music
  	142. missile1
  	143. mountain1
  	144. mountain2
  	145. mountain3
  	146. music1
  	147. music2
  	148. music3
  	149. pencil1
  	150. poker1
  	151. puzzle1
  	152. puzzle2
  	153. puzzle3
  	154. sad2
  	155. sad3
  	156. sad4
  	157. smile1
  	158. snow1
  	159. snow2
  	160. star3
  	161. star4
  	162. star5
  	163. star6
  	164. star7
  	165. star8
  	166. star9
  	167. star10
  	168. star11
  	169. star12
  	170. star13
  	171. star14
  	172. star15
  	173. star16
  	174. star17
  	175. temple1
  	176. title1
  	177. tree1
  	178. wall1
  	179. wave3
  	180. wave4
  	181. wave5
  	182. wave6
  	183. wave7
  	184. wave8
  	185. wave9

  - `text` parameter removed from `art` and `aprint` functions
  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - MATLAB examples updated
  - `kitty2` 1-line art renamed to `kitty`

  - 5 bipartite 1-line art
  	1. love you
  	2. message1
  	3. message2
  	4. musical
  	5. text decoration
  - 12 duplicate 1-line art
  	1. dog
  	2. human
  	3. mis mujeres
  	4. 100$
  	5. worm2
  	6. stars in my eyes
  	7. chainsword
  	8. badass
  	9. aliens
  	10. this guy
  	11. kitty1
  	12. don fuller


  - `NON_ASCII_ARTS` list
  - `decor_dic.py` file
  - `codecov.yml` file
  - `decor` function
  - `decor_list` function
  - `DecorList.ipynb` notebook
  - 10 new decorations
  	1. barcode1
  	2. champion1
  	3. chess1
  	4. lucky1
  	5. sad1
  	6. soccer1
  	7. star1
  	8. star2
  	9. wave1
  	10. wave2
  - 20 new fonts
  	1. scammer
  	2. strikethrough
  	3. drako
  	4. celtic
  	5. fasion
  	6. curly
  	7. russian
  	8. messletters
  	9. swirly
  	10. dotted
  	11. parenthesized
  	12. strange
  	13. wiggly
  	14. hazy
  	15. hyves
  	16. awcute
  	17. slammer
  	18. coptic1
  	19. coptic2
  	20. fancy108

  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - MATLAB examples updated
  - `setup.py` modified
  - `coverage` dependency moved to `extras_require`
  - Test system modified
  - `random` mode modified
  - `test` parameter removed from `font_list` function
  - `mode` parameter added to `font_list` and `art_list` functions
  - `decoration` parameter added to `text2art`, `tprint` and `tsave` functions
  - `\n` support bug fixed
  - `tsave` function bug in Windows fixed

  - `requirements.txt`


  - 35 new fonts
  	1. smooth1
  	2. smooth2
  	3. carrier1
  	4. carrier2
  	5. cute1
  	6. cute2
  	7. cute3
  	8. cjk
  	9. malayalam
  	10. lilia
  	11. dwarf
  	12. awesome
  	13. lopioo
  	14. cranky
  	15. fancy87
  	16. fancy88
  	17. fancy89
  	18. fancy90
  	19. fancy91
  	20. fancy92
  	21. fancy93
  	22. fancy94
  	23. fancy95
  	24. fancy96
  	25. fancy97
  	26. fancy98
  	27. fancy99
  	28. fancy100
  	29. fancy101
  	30. fancy102
  	31. fancy103
  	32. fancy104
  	33. fancy105
  	34. fancy106
  	35. fancy107
  - 43 new 1-line art
  	1. fish6
  	2. loch ness monster
  	3. mouse5
  	4. mouse6
  	5. mouse7
  	6. sheep
  	7. pie fight
  	8. rose5
  	9. rose6
  	10. rose7
  	11. concerned
  	12. happy4
  	13. happy5
  	14. coffee2
  	15. coffee3
  	16. coffee4
  	17. headphone3
  	18. carpet roll
  	19. infinity
  	20. computer mouse
  	21. volcano1
  	22. volcano2
  	23. volcano3
  	24. squigle with spirals
  	25. palm tree
  	26. crotch shot
  	27. vagina
  	28. stealth fighter
  	29. tent1
  	30. tent2
  	31. power lines
  	32. tree stump
  	33. hammer
  	34. arrow2
  	35. sword10
  	36. fish skeleton2
  	37. fork
  	38. pipe
  	39. dead guy
  	40. dead girl
  	41. dead child
  	42. dude glasses1
  	43. dude glasses2

  - `README.md` modified
  - `INSTALL.md` modified
  - `coffee` 1-line art renamed to `coffee1`
  - `arrow` 1-line art renamed to `arrow1`
  - `fish skeleton` 1-line art renamed to `fish skeleton1`


  - 68 new 1-line art
  	1. smile
  	2. toungue out1
  	3. toungue out2
  	4. bad hair1
  	5. bad hair2
  	6. woops
  	7. screaming
  	8. full mouth
  	9. cussing
  	10. ready to cry
  	11. crying2
  	12. druling1
  	13. druling2
  	14. big kiss
  	15. french kiss
  	16. wink
  	17. big smile
  	18. smirk
  	19. confused1
  	20. confused2
  	21. pursing lips
  	22. shocked2
  	23. really sad
  	24. baseball fan
  	25. angel2
  	26. really mad
  	27. licking lips
  	28. buck teeth
  	29. surprised1
  	30. alien
  	31. sunglasses2
  	32. don king
  	33. devilish smile
  	34. devilish grin
  	35. clowning
  	36. bugs bunny
  	37. kitty2
  	38. fish skeleton
  	39. snowman2
  	40. marshmallows
  	41. nerd
  	42. mouse4
  	43. pistols3
  	44. rock on2
  	45. love in my eye2
  	46. love in my eye3
  	47. sad3
  	48. sad4
  	49. headphone2
  	50. cigarette1
  	51. spider3
  	52. barcode2
  	53. equalizer
  	54. boombox2
  	55. surprised2
  	56. playing cards
  	57. playing cards hearts
  	58. playing cards diamonds
  	59. playing cards spades
  	60. playing cards clubs
  	61. spade bold
  	62. heart bold
  	63. diamond bold
  	64. club bold
  	65. spade regular
  	66. heart regular
  	67. diamond regular
  	68. club regular
  - MATLAB examples

  - Bipartite art deprecated
  - `crying` 1-line art renamed to `crying1`
  - `shocked` 1-line art renamed to `shocked1`
  - `angel` 1-line art renamed to `angel1`
  - `sunglasses` 1-line art renamed to `sunglasses1`
  - `kitty` 1-line art renamed to `kitty1`
  - `snowman` 1-line art renamed to `snowman1`
  - `barcode` 1-line art renamed to `barcode1`
  - `cigaret` 1-line art renamed to `cigarette3`
  - `cigarette` 1-line art renamed to `cigarette2`
  - `headphone` 1-line art renamed to `headphone1`
  - `rock on` 1-line art renamed to `rock on1`
  - `boom box` 1-line art renamed to `boombox1`
  - `love in my eye` 1-line art renamed to `love in my eye1`
  - `CONTRIBUTING.md` modified
  - `TEST_FILTERED_FONTS` renamed to `NON_ASCII_FONTS`
  - `RANDOM_FILTERED_FONTS` and `NON_ASCII_FONTS` lists optimized
  - `README.md` modified
  - `appveyor.yml` modified
  - `INSTALL.md` modified
  - `wizard` mode modified


  - 35 new 1-line art
  	1. cup1
  	2. cup2
  	3. gun2
  	4. gun3
  	5. fish3
  	6. fish4
  	7. fish5
  	8. sword6
  	9. sword7
  	10. sword8
  	11. sword9
  	12. knife2
  	13. barcode
  	14. loading1
  	15. loading3
  	16. loading4
  	17. loading5
  	18. loading6
  	19. bat2
  	20. band aid
  	21. mouse2
  	22. mouse3
  	23. cat3
  	24. needle2
  	25. rose4
  	26. electrocardiogram1
  	27. electrocardiogram2
  	28. electrocardiogram3
  	29. electrocardiogram4
  	30. snail2
  	31. american money2
  	32. american money3
  	33. american money4
  	34. american money5
  	35. cassette2
  - 10 new fonts
  	1. sarah
  	2. hippie
  	3. minion
  	4. greek_legends
  	5. funky_fresh
  	6. atlantic
  	7. foreign_friends
  	8. native_lands
  	9. sunday_cuddle
  	10. chinese_mafia

  - `gun` 1-line art renamed to `gun1`
  - `knife` 1-line art renamed to `knife1`
  - `loading` 1-line art renamed to `loading2`
  - `bat` 1-line art renamed to `bat1`
  - `mouse` 1-line art renamed to `mouse1`
  - `needle` 1-line art renamed to `needle2`
  - `snail` 1-line art renamed to `snail1`
  - `american money` 1-line art renamed to `american money1`
  - `cassette` 1-line art renamed to `cassette1`
  - Test system modified


  - 14 new fonts
  	1. smallcaps3
  	2. fraktur2
  	3. bold_fraktur
  	4. bold_script
  	5. handwriting1
  	6. handwriting2
  	7. rusify
  	8. monospace
  	9. dirty2
  	10. knight2
  	11. h4k3r
  	12. thin3
  	13. tiny2
  	14. upside_down
  - `FONT_NAMES` variable
  - `ART_NAMES` variable

  - Namespace optimized
  - Website changed to https://www.4r7.ir


  - 20 new fonts
  	1. fancy75
  	2. fancy76
  	3. fancy77
  	4. fancy78
  	5. love1
  	6. fancy79
  	7. fancy80
  	8. fancy81
  	9. fancy82
  	10. fancy83
  	11. fancy84
  	12. fancy85
  	13. fancy86
  	14. contouring3
  	15. contouring4
  	16. love2
  	17. black_square
  	18. white_square
  	19. black_bubble
  	20. paranormal
  - `get_font_dic` function

  - `font_check.py` modified
  - `font_wizard.py` modified
  - `CONTRIBUTING.md` modified


  - `install.sh`
  - `autopep8.sh`
  - 21 new fonts
  	1. fancy56
  	2. fancy57
  	3. fancy58
  	4. fancy59
  	5. fancy60
  	6. fancy61
  	7. fancy62
  	8. fancy63
  	9. fanyc64
  	10. fancy65
  	11. fancy66
  	12. fancy67
  	13. fancy68
  	14. fancy69
  	15. fanyc70
  	16. fancy71
  	17. fancy72
  	18. fancy73
  	19. fancy74
  	20. contouring1
  	21. contouring2

  - `test.sh` moved to `.travis` folder
  - `font_wizard.py` updated
  - `font_check.py` updated
  - `tsave` function bugs fixed
  - `aprint` and `tprint` functions modified
  - Test system modified
  - `overwrite` parameter added to `tsave` and `set_default` functions
  - `README.md` modified
  - `CONTRIBUTING.md` modified


  - `__version__` variable
  - `font_wizard.py`
  - 15 new fonts
  	1. fancy41
  	2. fancy42
  	3. fancy43
  	4. fancy44
  	5. fancy45
  	6. fancy46
  	7. fancy47
  	8. fancy48
  	9. fancy49
  	10. fancy50
  	11. fancy51
  	12. fancy52
  	13. fancy53
  	14. fancy54
  	15. fancy55

  - `VERSION` variable renamed to `ART_VERSION`
  - Some fonts moved to `text_dic3.py`
  - `ISSUE_TEMPLATE.md` modified
  - `CONTRIBUTING.md` modified


  - 11 new fonts
  	1. fancy31
  	2. fancy32
  	3. fancy33
  	4. fancy34
  	5. symbols
  	6. fancy35
  	7. fancy36
  	8. fancy37
  	9. fancy38
  	10. fancy39
  	11. fancy40
  - 20 new 1-line art
  	1. acid
  	2. arrowhead
  	3. awkward
  	4. because
  	5. blackeye
  	6. catlenny
  	7. dab
  	8. damnyou
  	9. depressed
  	10. dunno
  	11. eeriemob
  	12. envelope
  	13. fart
  	14. finn
  	15. frown
  	16. glitter
  	17. gotit
  	18. hello
  	19. loading
  	20. meep

  - `dev-requirements.txt` modified


  - 3 new fonts
  	1. fancy28
  	2. fancy29
  	3. fancy30
  - `mix` mode

  - Duplication test added to`font_check.py`
  - `README.md` modified
  - fancy11 and fancy14 fonts updated
  - `indirect_font` function modified

  - 9 duplicate fonts
  	1. magical
  	2. morse2
  	3. fire_font-k
  	4. paranormal
  	5. battle_s
  	6. ntgreek
  	7. peaksslant
  	8. sorcerer
  	9. nancyj-improved


  - 20 new fonts
  	1. fancy8
  	2. fancy9
  	3. fancy10
  	4. fancy11
  	5. fancy12
  	6. fancy13
  	7. fancy14
  	8. fancy15
  	9. fancy16
  	10. fancy17
  	11. fancy18
  	12. fancy19
  	13. fancy20
  	14. fancy21
  	15. fancy22
  	16. fancy23
  	17. fancy24
  	18. fancy25
  	19. fancy26
  	20. fancy27

  - Drop Python 3.3 support


  - 15 new fonts
  	1. magical
  	2. paranormal
  	3. sorcerer
  	4. special
  	5. dirty
  	6. knight
  	7. thin2
  	8. tiny
  	9. fancy1
  	10. fancy2
  	11. fancy3
  	12. fancy4
  	13. fancy5
  	14. fancy6
  	15. fancy7


  - 7 new fonts
  	1. white_bubble
  	2. smallcaps2
  	3. superscript
  	4. subscript
  	5. full_width
  	6. currency
  	7. antrophobia
  - `text2art` function support of `\n`
  - `rnd-na` mode

  - `tprint` function modified
  - `tsave` function modified
  - `README.md` modified
  - `random` mode modified


  - 3 new fonts
  	1. mirror
  	2. flip
  	3. mirror_flip
  - 40 new 1-line art
  	1. dead eyes
  	2. satan
  	3. bomb
  	4. sleepy coffee
  	5. high five
  	6. wtf dude?
  	7. fungry
  	8. derp
  	9. drwoning
  	10. almost cared
  	11. yessir
  	12. coffee now
  	13. round cat
  	14. squee
  	15. round bird
  	16. hoxom
  	17. squid
  	18. man spider
  	19. spell cast
  	20. jazz musician
  	21. myan cat
  	22. gimme
  	23. crab
  	24. playing in snow
  	25. sunglasses
  	26. mini penis
  	27. victory
  	28. don fuller
  	29. dgaf
  	30. ryans dick
  	31. eds dick
  	32. point
  	33. afraid
  	34. laughing
  	35. energy
  	36. drunkenness
  	37. error
  	38. penis2
  	39. exchange
  	40. singing2
  - `test2.py`
  - `font_check.py`

  - `test_mode` parameter added to `font_list` function
  - `all` flag bug fixed
  - `__main__.py` modified
  - Warnings and errors messages moved to `art_param.py`
  - Art random mode modified


  - 30 new 1-line art
  	1. shrug
  	2. flex
  	3. this guy
  	4. why
  	5. meditation
  	6. kitty
  	7. pac man
  	8. emo
  	9. shark attack
  	10. shocked
  	11. monocle
  	12. piggy
  	13. camera
  	14. what??
  	15. neo
  	16. lenny
  	17. snowing
  	18. dick
  	19. wizard
  	20. wat
  	21. chu
  	22. butt
  	23. sophie
  	24. joy
  	25. bautista
  	26. smooth
  	27. fuckall
  	28. penis
  	29. wat-wat
  	30. fail
  - `pydocstyle` test

  - Docstrings modified
  - Some fonts lowercase bug fixed
  - Font random modes modified
  - `test_mode` parameter removed from `font_list` function


  - 30 new 1-line art
  	1. rose3
  	2. cigaret
  	3. oar
  	4. sword5
  	5. car
  	6. hacksaw
  	7. canoe
  	8. spider1
  	9. machinegun
  	10. roadblock
  	11. aliens
  	12. marge simpson
  	13. homer simpson
  	14. bat
  	15. superman logo
  	16. dna sample
  	17. mail box
  	18. ufo1
  	19. ufo2
  	20. spider2
  	21. american money
  	22. british money
  	23. teepee
  	24. heart3
  	25. angel
  	26. shark
  	27. regular ass
  	28. fat ass
  	29. kiss my ass
  	30. devil
  - 15 new fonts
  	1. future_1
  	2. future_2
  	3. future_3
  	4. future_4
  	5. future_5
  	6. future_6
  	7. future_7
  	8. future_8
  	9. gauntlet
  	10. ghost_bo
  	11. grand_pr
  	12. green_be
  	13. hades
  	14. heavy_me
  	15. nfi1

  - `README.md` modified
  - `art` function typo-tolerance threshold modified


  - 20 new fonts
  	1. druid
  	2. e_fist
  	3. ebbs_1
  	4. ebbs_2
  	5. eca
  	6. faces_of
  	7. fair_mea
  	8. fairligh
  	9. fantasy
  	10. fbr12
  	11. fbr1
  	12. fbr2
  	13. fbr_stri
  	14. fbr_tilt
  	15. finalass
  	16. fireing
  	17. flyn_sh
  	18. fp1
  	19. fp2
  	20. funky_dr
  - `CODE_OF_CONDUCT.md`
  - `PULL_REQUEST_TEMPLATE.md`
  - `ISSUE_TEMPLATE.md`
  - `vulture` test
  - `bandit` test

  - `README.md` modified
  - `CONTRIBUTING.md` modified
  - `font_map` renamed to `FONT_MAP`
  - `font_counter` renamed to `FONT_COUNTER`
  - `art_counter` renamed to `ART_COUNTER`
  - Constants and parameters moved to `art_param.py`


  - 20 new fonts
  	1. aquaplan
  	2. ascii
  	3. c_consen
  	4. clb6x10
  	5. clb8x10
  	6. clb8x8
  	7. cli8x8
  	8. clr4x6
  	9. clr5x10
  	10. clr5x6
  	11. clr5x8
  	12. clr6x10
  	13. clr6x6
  	14. clr6x8
  	15. clr7x8
  	16. clr8x10
  	17. clr8x8
  	18. coil_cop
  	19. com_sen
  	20. c_ascii
  - `wizard` mode
  - Interactive notebooks section (binder)
  - `.coveragerc`
  - `version_check.py`

  - `README.md` modified
  - Minor bug in coverage system fixed
  - `.travis.yml` modified
  - `font_size_splitter` function thresholds fixed


  - 20 new fonts
  	1. zone7
  	2. zig_zag
  	3. yie_ar_k
  	4. yie-ar
  	5. xtty
  	6. war_of_w
  	7. vortron
  	8. utopia
  	9. utopiai
  	10. utopiabi
  	11. utopiab
  	12. usa_pq
  	13. usa
  	14. unarmed
  	15. ugalympi
  	16. ucf_fan
  	17. type_set
  	18. twin_cob
  	19. tsn_base
  	20. z-pilot
  - `rnd-small` mode
  - `rnd-medium` mode
  - `rnd-large` mode
  - `rnd-xlarge` mode

  - `README.md` modified


  - 30 new fonts
  	1. heroboti
  	2. high_noo
  	3. hills
  	4. home_pak
  	5. house_of
  	6. hypa_bal
  	7. hyper
  	8. inc_raw
  	9. italics
  	10. kgames_i
  	11. kik_star
  	12. krak_out
  	13. 4x4_offr
  	14. 5x7
  	15. 5x8
  	16. 64f1
  	17. 6x10
  	18. 6x9
  	19. a_zooloo
  	20. asc
  	21. assalt_m
  	22. asslt_m
  	23. atc
  	24. atc_gran
  	25. battle_s
  	26. battlesh
  	27. baz_bil
  	28. beer_pub
  	29. c1
  	30. c2
  - `art_profile.py`

  - Docstring modified
  - `B1FF` font bug fixed
  - `ICL-1900` font bug fixed
  - `AK-47` 1-line art bug fixed
  - `I kill you` 1-line art bug fixed


  - 20 new fonts
  	1. xbrite
  	2. xbriteb
  	3. xbritei
  	4. xbritebi
  	5. xchartr
  	6. xchartri
  	7. xcour
  	8. xcourb
  	9. xcourbi
  	10. xcouri
  	11. xhelv
  	12. xhelvb
  	13. xhelvbi
  	14. xhelvi
  	15. xsans
  	16. xsansb
  	17. xsansbi
  	18. xsansi
  	19. xtimes
  	20. xttyb
  - CLI `testcov` flag

  - `requirements.txt` modified
  - `INSTALL.md` modified
  - CLI `test` flag modified


  - 15 new fonts
  	1. char1
  	2. char2
  	3. char3
  	4. char4
  	5. charact1
  	6. charact2
  	7. charact3
  	8. charact4
  	9. charact5
  	10. charact6
  	11. characte
  	12. chartr
  	13. chartri
  	14. 1943
  	15. advenger
  - `dev-requirements.txt`

  - `Python 3.7` added to `.travis.yml` & `appveyor.yml`
  - `font_list` modified
  - `README.md` modified
  - `INSTALL.md` modified


  - 10 new fonts
  	1. alpha
  	2. alligator3
  	3. amc3liv1
  	4. ascii_new_roman
  	5. B1FF
  	6. dwhistled
  	7. eftiwall
  	8. fire_font-k
  	9. fire_font-s
  	10. gradient

  - `requirements.txt` modified


  - 35 new fonts
  	1. nancyj-improved
  	2. nscript
  	3. ntgreek
  	4. nvscript
  	5. octal
  	6. oldbanner
  	7. os2
  	8. peaksslant
  	9. puzzle
  	10. rammstein
  	11. red_phoenix
  	12. runyc
  	13. santaclara
  	14. shimrod
  	15. smallcaps
  	16. smpoison
  	17. soft
  	18. spliff
  	19. stacey
  	20. stampate
  	21. stforek
  	22. sub-zero
  	23. swampland
  	24. sweet
  	25. ticks
  	26. ticksslant
  	27. tiles
  	28. tsalagi
  	29. tubular
  	30. twisted
  	31. varsity
  	32. wavy
  	33. wetletter
  	34. whimsy
  	35. wow


  - 15 new fonts
  	1. ICL-1900
  	2. impossible
  	3. jacky
  	4. katakana
  	5. keyboard
  	6. knob
  	7. lildevil
  	8. lineblocks
  	9. merlin1
  	10. merlin2
  	11. modular
  	12. morse
  	13. morse2
  	14. moscow
  	15. muzzle
  - `set_default` function
  - `randart` function


  - 15 new fonts
  	1. fraktur
  	2. funface
  	3. funfaces
  	4. georgi16
  	5. georgia11
  	6. ghost
  	7. ghoulish
  	8. glenyn
  	9. graceful
  	10. greek
  	11. heartleft
  	12. heartright
  	13. henry3d
  	14. horizontalleft
  	15. horizontalright

  - `setuptools` removed from `requirements.txt`
  - `OSX` env added to `.travis.yml`
  - Test cases modified
  - `text2art` bug  in OSX fixed


  - 20 new fonts
  	1. bigfig
  	2. bolger
  	3. braced
  	4. bright
  	5. broadway
  	6. cards
  	7. chiseled
  	8. cola
  	9. crawford
  	10. cricket
  	11. DANC4
  	12. dancingfont
  	13. decimal
  	14. defleppard
  	15. dietcola
  	16. flipped
  	17. double
  	18. doubleshorts
  	19. eftipiti
  	20. filter
  - Font list HTML page
  - Art list HTML page


  - 20 new fonts
  	1. cybersmall
  	2. gothic
  	3. rev
  	4. smtengwar
  	5. term
  	6. 1row
  	7. 3d_diagonal
  	8. 4max
  	9. amc3line
  	10. amcrazor
  	11. amcaaa01
  	12. amcneko
  	13. amcrrazo2
  	14. amcslash
  	15. amcthin
  	16. amctubes
  	17. amcun1
  	18. arrows
  	19. bear
  	20. benjamin


  - 30 new 1-line art
  	1. westbound fish
  	2. telephone
  	3. 9/11 truth
  	4. spear
  	5. srs face
  	6. this is areku
  	7. robot boy
  	8. med man
  	9. angry
  	10. badass
  	11. zoidberg
  	12. eastbound fish
  	13. kilroy was here
  	14. gtalk fit
  	15. thanks
  	16. dalek
  	17. sean the sheep
  	18. kablewee
  	19. i dont care
  	20. slenderman
  	21. john lennon
  	22. peace yo
  	23. punch
  	24. russian boobs
  	25. fuck off
  	26. man tears
  	27. robber
  	28. facepalm
  	29. yo
  	30. party time


  - 30 new 1-line art
  	1. crayons
  	2. stars in my eyes
  	3. fish invasion
  	4. bender
  	5. musical
  	6. sunny day
  	7. happy birthday 1
  	8. line brack
  	9. med
  	10. melp1
  	11. happy3
  	12. happy square
  	13. snowman
  	14. melp2
  	15. i kill you
  	16. jaymz
  	17. text decoration
  	18. long rose
  	19. kirbay dance
  	20. death star defense team
  	21. chainsword
  	22. boobies
  	23. dancing people
  	24. dance
  	25. pictou
  	26. polar bear
  	27. go away bear
  	28. charly
  	29. train
  	30. spot

  - `car race` 1-line art fixed


  - 30 new 1-line art
  	1. sexy symbol
  	2. barbell
  	3. sniper rifle
  	4. being draged
  	5. possessed
  	6. jokeranonimous
  	7. epic gun
  	8. love
  	9. love2
  	10. eric
  	11. puls
  	12. sky free
  	13. smug bastard
  	14. tie-fighter
  	15. kyubey
  	16. dancee
  	17. mtmtika
  	18. ak-47
  	19. eaten apple
  	20. huhu
  	21. faydre
  	22. domino
  	23. honeycute
  	24. superman
  	25. worm2
  	26. jokeranonimous2
  	27. kyubey2
  	28. nose2
  	29. hell yeah
  	30. roke


  - 30 new 1-line art
  	1. sorreh bro
  	2. yolo
  	3. formula 1 car
  	4. dummy
  	5. rope
  	6. rare
  	7. chess pieces
  	8. sparkling heart
  	9. weather
  	10. stars2
  	11. upsidedown
  	12. nathan
  	13. cat smile
  	14. old lady boobs
  	15. glasses2
  	16. religious
  	17. sniperstars
  	18. kokain
  	19. bagel
  	20. crying
  	21. angry2
  	22. 3
  	23. 5
  	24. fuck you
  	25. head shot
  	26. metal
  	27. killer
  	28. fu
  	29. ankush
  	30. owlkin

  - CLI `art` flag
  - CLI `list` flag


  - 15 new fonts
  	1. letters
  	2. lockergnome
  	3. madrid
  	4. marquee
  	5. mike
  	6. mini
  	7. nancyj-fancy
  	8. nancyj-underlined
  	9. pepper
  	10. poison
  	11. rot13
  	12. short
  	13. small
  	14. tengwar
  	15. big
  - 11 new 1-line art
  	1. teddy
  	2. dice
  	3. bee
  	4. ukulele
  	5. perky
  	6. snail
  	7. decorate
  	8. kirby
  	9. mango
  	10. bunny
  	11. kiss
  - `random` 1-line art mode

  - Minor bug in `text2art` random range fixed
  - `README.md` modified
  - `aprint_test` function renamed to `art_list`
  - `setup.py` modified


  - 10 new fonts
  	1. eftitalic
  	2. eftiwater
  	3. fourtops
  	4. goofy
  	5. hollywood
  	6. invita
  	7. italic
  	8. jazmine
  	9. lcd
  	10. lean
  - `random` font mode


  - 8 new fonts
  	1. barbwire
  	2. bigchief
  	3. binary
  	4. bubble
  	5. calgphy2
  	6. cygnet
  	7. diamond
  	8. eftifont

  - Test cases modified


  - 5 new fonts
  	1. peaks
  	2. pawp
  	3. o8
  	4. nipples
  	5. maxfour
  - 15 new 1-line art
  	1. guitar
  	2. rocket
  	3. ghost
  	4. hal
  	5. cthulhu
  	6. sat
  	7. what
  	8. king
  	9. tron
  	10. homer
  	11. fox
  	12. singing
  	13. atish
  	14. zable
  	15. trumpet
  - CLI description

  - `README.md` modified
  - Test cases modified
  - File name bug in UNIX fixed
  - `CHANGELOG.md` modified


  - 15 new fonts
  	1. tinker-toy
  	2. straight
  	3. stampatello
  	4. smslant
  	5. smshadow
  	6. smscript
  	7. smkeyboard
  	8. smisome1
  	9. slscript
  	10. slide
  	11. sblood
  	12. rozzo
  	13. pyramid
  	14. puffy
  	15. pebbles
  - Typo-tolerance system

  - `README.md` modified
  - Test cases modified


  - 10 new fonts
  	1. weird
  	2. univers
  	3. twopoint
  	4. trek
  	5. tombstone
  	6. threepoint
  	7. thick
  	8. tanja
  	9. swan
  	10. stellar

  - `MANIFEST.in` modified
  - `INSTALL.md` modified


  - `CHANGELOG.md`

  - Functions error response
  - `README.md` modified
  - `tsave` function extension bug fixed
  - `text2art` response bug fixed ("\r\n")
  - `setup.py` modified


  - 10 new fonts
  	1. acrobatic
  	2. alligator
  	3. alligator2
  	4. block2
  	5. caligraphy
  	6. computer
  	7. digital
  	8. doh
  	9. eftirobot
  	10. graffiti


  - `all` flag


  - 10 new fonts
  	1. 3-d
  	2. 3x5
  	3. 5lineoblique
  	4. alphabet
  	5. banner3-D
  	6. banner3
  	7. banner4
  	8. bell
  	9. catwalk
  	10. colossal


  - Telegram bot

  - Universal text format added for Unix & Windows


  - Save function (tsave)
  - `chr_ignore` flag
  - 10 new fonts
  	1. banner
  	2. avatar
  	3. basic
  	4. bulbhead
  	5. chunky
  	6. coinstak
  	7. contessa
  	8. contrast
  	9. cyberlarge
  	10. cybermedium
  	11. doom
  	12. dotmatrix
  	13. drpepper
  	14. epic
  	15. fuzzy
  	16. isometric1
  	17. isometric2
  	18. isometric3
  	19. isometric4
  	20. larry3d
  	21. nancyj
  	22. ogre
  	23. rectangles
  	24. roman
  	25. rounded
  	26. rowancap
  	27. script
  	28. serifcap
  	29. shadow
  	30. slant
  	31. speed
  	32. starwars
  	33. stop
  	34. thin
  	35. usaflag

  - Space bug fixed


  - Standard font

  - Minor bugs fixed


  - Block font
  - 1-Line art
  - CLI commands
  [Unreleased]: https://github.com/sepandhaghighi/art/compare/v6.3...dev
  [6.3]: https://github.com/sepandhaghighi/art/compare/v6.2...v6.3
  [6.2]: https://github.com/sepandhaghighi/art/compare/v6.1...v6.2
  [6.1]: https://github.com/sepandhaghighi/art/compare/v6.0...v6.1
  [6.0]: https://github.com/sepandhaghighi/art/compare/v5.9...v6.0
  [5.9]: https://github.com/sepandhaghighi/art/compare/v5.8...v5.9
  [5.8]: https://github.com/sepandhaghighi/art/compare/v5.7...v5.8
  [5.7]: https://github.com/sepandhaghighi/art/compare/v5.6...v5.7
  [5.6]: https://github.com/sepandhaghighi/art/compare/v5.5...v5.6
  [5.5]: https://github.com/sepandhaghighi/art/compare/v5.4...v5.5
  [5.4]: https://github.com/sepandhaghighi/art/compare/v5.3...v5.4
  [5.3]: https://github.com/sepandhaghighi/art/compare/v5.2...v5.3
  [5.2]: https://github.com/sepandhaghighi/art/compare/v5.1...v5.2
  [5.1]: https://github.com/sepandhaghighi/art/compare/v5.0...v5.1
  [5.0]: https://github.com/sepandhaghighi/art/compare/v4.9...v5.0
  [4.9]: https://github.com/sepandhaghighi/art/compare/v4.8...v4.9
  [4.8]: https://github.com/sepandhaghighi/art/compare/v4.7...v4.8
  [4.7]: https://github.com/sepandhaghighi/art/compare/v4.6...v4.7
  [4.6]: https://github.com/sepandhaghighi/art/compare/v4.5...v4.6
  [4.5]: https://github.com/sepandhaghighi/art/compare/v4.4...v4.5
  [4.4]: https://github.com/sepandhaghighi/art/compare/v4.3...v4.4
  [4.3]: https://github.com/sepandhaghighi/art/compare/v4.2...v4.3
  [4.2]: https://github.com/sepandhaghighi/art/compare/v4.1...v4.2
  [4.1]: https://github.com/sepandhaghighi/art/compare/v4.0...v4.1
  [4.0]: https://github.com/sepandhaghighi/art/compare/v3.9...v4.0
  [3.9]: https://github.com/sepandhaghighi/art/compare/v3.8...v3.9
  [3.8]: https://github.com/sepandhaghighi/art/compare/v3.7...v3.8
  [3.7]: https://github.com/sepandhaghighi/art/compare/v3.6...v3.7
  [3.6]: https://github.com/sepandhaghighi/art/compare/v3.5...v3.6
  [3.5]: https://github.com/sepandhaghighi/art/compare/v3.4...v3.5
  [3.4]: https://github.com/sepandhaghighi/art/compare/v3.3...v3.4
  [3.3]: https://github.com/sepandhaghighi/art/compare/v3.2...v3.3
  [3.2]: https://github.com/sepandhaghighi/art/compare/v3.1...v3.2
  [3.1]: https://github.com/sepandhaghighi/art/compare/v3.0...v3.1
  [3.0]: https://github.com/sepandhaghighi/art/compare/v2.9...v3.0
  [2.9]: https://github.com/sepandhaghighi/art/compare/v2.8...v2.9
  [2.8]: https://github.com/sepandhaghighi/art/compare/v2.7...v2.8
  [2.7]: https://github.com/sepandhaghighi/art/compare/v2.6...v2.7
  [2.6]: https://github.com/sepandhaghighi/art/compare/v2.5...v2.6
  [2.5]: https://github.com/sepandhaghighi/art/compare/v2.4...v2.5
  [2.4]: https://github.com/sepandhaghighi/art/compare/v2.3...v2.4
  [2.3]: https://github.com/sepandhaghighi/art/compare/v2.2...v2.3
  [2.2]: https://github.com/sepandhaghighi/art/compare/v2.1...v2.2
  [2.1]: https://github.com/sepandhaghighi/art/compare/v2.0...v2.1
  [2.0]: https://github.com/sepandhaghighi/art/compare/v1.9...v2.0
  [1.9]: https://github.com/sepandhaghighi/art/compare/v1.8...v1.9
  [1.8]: https://github.com/sepandhaghighi/art/compare/v1.7...v1.8
  [1.7]: https://github.com/sepandhaghighi/art/compare/v1.6...v1.7
  [1.6]: https://github.com/sepandhaghighi/art/compare/v1.5...v1.6
  [1.5]: https://github.com/sepandhaghighi/art/compare/v1.4...v1.5
  [1.4]: https://github.com/sepandhaghighi/art/compare/v1.3...v1.4
  [1.3]: https://github.com/sepandhaghighi/art/compare/v1.2...v1.3
  [1.2]: https://github.com/sepandhaghighi/art/compare/v1.1...v1.2
  [1.1]: https://github.com/sepandhaghighi/art/compare/v1.0...v1.1
  [1.0]: https://github.com/sepandhaghighi/art/compare/v0.9...v1.0
  [0.9]: https://github.com/sepandhaghighi/art/compare/v0.8...v0.9
  [0.8]: https://github.com/sepandhaghighi/art/compare/v0.7...v0.8
  [0.7]: https://github.com/sepandhaghighi/art/compare/v0.6...v0.7
  [0.6]: https://github.com/sepandhaghighi/art/compare/v0.5...v0.6
  [0.5]: https://github.com/sepandhaghighi/art/compare/v0.4...v0.5
  [0.4]: https://github.com/sepandhaghighi/art/compare/v0.3...v0.4
  [0.3]: https://github.com/sepandhaghighi/art/compare/v0.2...v0.3
  [0.2]: https://github.com/sepandhaghighi/art/compare/v0.1...v0.2
  [0.1]: https://github.com/sepandhaghighi/art/compare/1e238cd...v0.1


