Skip to main content

Modular YAML based portfolio analytics calculation engine

Project description

Portfolio Analytics Calculation Engine

This project provides a modular YAML based portfolio analytics calculation engine. This engine allows to plug in YAML configurations to compute various portfolio related analytics. Engine adheres to YAML schema and is utilising Polars or Python instructions. This project also hosts a dash app that relies on a local LLM model to create schema compliant YAML files. These YAML files are consumed and interpreted by the calculation engine provided.

Build Package

CodeQL Advanced

Release Package to PyPi


Table of Contents


Overview

The analytics calculation engine is designed to process data based on instructions provided in YAML configuration files. It leverages Polars for data manipulation and supports Sphinx for documentation generation.

System Context

graph TD
    A[User] -->|Interacts with| B[Dash Web UI]
    B -->|Sends JSON data| C[Backend Service]
    C -->|Fetches data from| G[Data Service]
    G -->|Fetches data from| D[SQL Server]
    C -->|Processes YAML files with| E[Calculation Engine]
    E -->|Uses| F[Polars]
    E -->|Uses| I[YAML Files]
    C -->|Interacts with| H[GPT App]
    H -->|Generates| I[YAML Files]
    C -->|Returns results to| B
    B -->|Displays results to| A

Video Demo

IMAGE ALT TEXT HERE


Features

  • Modular design with separation of data, configuration, and computation.
  • Dynamic analytics calculations via YAML configurations.
  • Regression testing capabilities with YAML support.
  • Sphinx documentation for the codebase.

Getting Started

Prerequisites


Installation

  1. Clone the Repository

    git clone https://github.com/maxicusj/polarparrot.git
    cd polarparrot
    
  2. Install Dependencies

    pip install -r requirements.txt
    
  3. Create Environment Configuration (.env)
    Create a .env file in the root directory with the following content:

    DB_SERVER=localhost
    DB_DATABASE=AdventureWorks
    DB_USERNAME=sa
    DB_PASSWORD=password
    
  4. Start Backend Services, Web UI and GPT Assistant
    Start the services with the provided script:

    ./start_services.sh
    

Usage

Running Analytics defined in JSON config file

Run the selected YAML metrics against mockup test data:

python metrics_runner.py analytics_list.json

Running Regression Tests

Run regression on YAML metrics against mockup test data in data.py:

python tests/regression_runner.py

Running Unit Tests

Run the selected YAML metrics against mockup test data:

python tests/unit_tests_runner.py

Running Analytics via CURL Command

You can test the backend service with a sample request:

curl -X POST http://localhost:8088/analytics \
-H "Content-Type: application/json" \
-d '{
  "positions_json": "[{\"instrument_id\": 1, \"weight_1\": 0.00005, \"weight_2\": 0.00004, \"weight_3\": 0.00003, \"weight_4\": 0.00005, \"is_laggard\": true}, {\"instrument_id\": 2, \"weight_1\": 0.00007, \"weight_2\": 0.00006, \"weight_3\": 0.00007, \"weight_4\": 0.00006, \"is_laggard\": false}, {\"instrument_id\": 3, \"weight_1\": 0.0001, \"weight_2\": 0.00008, \"weight_3\": 0.00002, \"weight_4\": 0.0001, \"is_laggard\": true}, {\"instrument_id\": 4, \"weight_1\": 0.00002, \"weight_2\": 0.00005, \"weight_3\": 0.00009, \"weight_4\": 0.00002, \"is_laggard\": true}, {\"instrument_id\": 5, \"weight_1\": 0.00009, \"weight_2\": 0.00007, \"weight_3\": 0.00005, \"weight_4\": 0.00007, \"is_laggard\": false}]", 
  "analytics_list_json": "{\"analytics\": [\"yaml/0002.yaml\", \"yaml/0004.yaml\"]}"
}'

Running Analytics via Web UI

http://localhost:8050

Generating YAML config Files with GPT Assistant

http://localhost:8080

Project Structure

  • metrics_runner.py: Executes analytics calculations as per YAML configurations.

  • regression_runner.py: Validates metrics using regression tests.

  • unit_tests_runner.py: Validates metrics using regression tests.

  • start_services.sh: Starts backend services and the web UI.

  • requirements.txt: Lists required Python packages.

  • .env: Environment variables for database connection.

  • calculation_engine.py: The actual analytics engine.

  • backend_service.py: Backend service.

  • data_service.py: Data service, providing interface to the SQL database.

  • app.py: Web UI for running analytics against provided YAML config and portfolio positions.

  • gpt/gpt_service.py: Web UI for generating YAMLs with the help of an LLM.

  • data/data.sql: Sample SQL table and data population script for instrument_categorization table. Used by analytics engine.


Customization

You can customize this engine by:

  • Adding new YAML files to the yaml/ directory to define analytics configurations.
  • Generating new YAML files by talking to a locally available LLM model(http://localhost:8080) and placing the genrated files to the yaml/ directory to be interrpreted by the engine.
  • Extending the Polars DataFrame manipulation logic in the calculaton_engine.py file.

License

This project is licensed under MIT License.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polarparrot-0.0.12.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polarparrot-0.0.12-py3-none-any.whl (960.4 kB view details)

Uploaded Python 3

File details

Details for the file polarparrot-0.0.12.tar.gz.

File metadata

  • Download URL: polarparrot-0.0.12.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for polarparrot-0.0.12.tar.gz
Algorithm Hash digest
SHA256 2ecd8c1f7b949f2b0d060adbb1d1c34808bfa2fa54a9d76e8a2ac1a7eb02d5c6
MD5 fd9905336bb42e81339dfef41c72ea74
BLAKE2b-256 8b99916c955cb1da9fe577f3f1e9374bf107bde5be28bc71fc3a0cade0912272

See more details on using hashes here.

Provenance

The following attestation bundles were made for polarparrot-0.0.12.tar.gz:

Publisher: publish.yml on maxicusj/polarparrot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polarparrot-0.0.12-py3-none-any.whl.

File metadata

  • Download URL: polarparrot-0.0.12-py3-none-any.whl
  • Upload date:
  • Size: 960.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for polarparrot-0.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 bcb40b5a2b6cc34297072b1885dd47e335ba418aeacc9a723a8fc12a1ada929e
MD5 4a516a6856b35130014995424a6836ca
BLAKE2b-256 5b1d275aaf5a7529697f49e3bce4a164d9f34dbd16ed11acf4bf427761670e94

See more details on using hashes here.

Provenance

The following attestation bundles were made for polarparrot-0.0.12-py3-none-any.whl:

Publisher: publish.yml on maxicusj/polarparrot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page