kolat


Namekolat JSON
Version 2.0.0 PyPI version JSON
download
home_pageNone
Summarya Python Polars interface to j* and q
upload_time2025-08-16 05:24:46
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords j* q kdb polars dataframe arrow
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # kola

a Python [Polars](https://pola-rs.github.io/polars/) Interface to `j*` and `q`

## Basic Data Type Map

### j\*

#### Deserialization

##### Atom

| j type      | n   | size | python type | note                        |
| ----------- | --- | ---- | ----------- | --------------------------- |
| `boolean`   | 1   | 1    | `bool`      |                             |
| `u8`        | 4   | 1    | `int`       |                             |
| `i16`       | 5   | 2    | `int`       |                             |
| `i32`       | 6   | 4    | `int`       |                             |
| `i64`       | 7   | 8    | `int`       |                             |
| `f32`       | 8   | 4    | `float`     |                             |
| `f64`       | 9   | 8    | `float`     |                             |
| `string`    | 10  | 1    | `str`       |                             |
| `symbol`    | 11  | \*   | `str`       |                             |
| `timestamp` | 12  | 8    | `datetime`  |                             |
| `date`      | 14  | 4    | `date`      | 0001.01.01 - 9999.12.31     |
| `datetime`  | 15  | 8    | `datetime`  |                             |
| `duration`  | 16  | 8    | `timedelta` |                             |
| `time`      | 19  | 4    | `time`      | 00:00:00.000 - 23:59:59.999 |

##### Composite Data Type

| k type       | n    | size | python type    |
| ------------ | ---- | ---- | -------------- |
| `series`     | 1-15 | -    | `pl.Series`    |
| `list`       | 90   | -    | `Tuple`        |
| `dictionary` | 91   | \*   | `dict`         |
| `dataframe`  | 92   | \*   | `pl.DataFrame` |

#### Serialization

##### Basic Data Type

| python type | j type     | note                        |
| ----------- | ---------- | --------------------------- |
| `bool`      | `boolean`  |                             |
| `int`       | `i64`      |                             |
| `float`     | `f64`      |                             |
| `str`       | `symbol`   |                             |
| `bytes`     | `string`   |                             |
| `date`      | `date`     | 0001.01.01 - 9999.12.31     |
| `datetime`  | `datetime` |                             |
| `timedelta` | `duration` |                             |
| `time`      | `time`     | 00:00:00.000 - 23:59:59.999 |

##### Dictionary, Series and DataFrame

| python type    | j type    |
| -------------- | --------- |
| `dict`         | dict      |
| `pl.Series`    | series    |
| `pl.DataFrame` | dataframe |

> for dictionary, requires `string` as keys.

### q

#### Deserialization

##### Atom

| k type      | n   | size | python type | note                        |
| ----------- | --- | ---- | ----------- | --------------------------- |
| `boolean`   | 1   | 1    | `bool`      |                             |
| `guid`      | 2   | 16   | `str`       |                             |
| `byte`      | 4   | 1    | `int`       |                             |
| `short`     | 5   | 2    | `int`       |                             |
| `int`       | 6   | 4    | `int`       |                             |
| `long`      | 7   | 8    | `int`       |                             |
| `real`      | 8   | 4    | `float`     |                             |
| `float`     | 9   | 8    | `float`     |                             |
| `char`      | 10  | 1    | `str`       |                             |
| `string`    | 10  | 1    | `str`       |                             |
| `symbol`    | 11  | \*   | `str`       |                             |
| `timestamp` | 12  | 8    | `datetime`  |                             |
| `month`     | 13  | 4    | `-`         |                             |
| `date`      | 14  | 4    | `date`      | 0001.01.01 - 9999.12.31     |
| `datetime`  | 15  | 8    | `datetime`  |                             |
| `timespan`  | 16  | 8    | `timedelta` |                             |
| `minute`    | 17  | 4    | `time`      | 00:00 - 23:59               |
| `second`    | 18  | 4    | `time`      | 00:00:00 - 23:59:59         |
| `time`      | 19  | 4    | `time`      | 00:00:00.000 - 23:59:59.999 |

##### Composite Data Type

| k type           | n   | size | python type              |
| ---------------- | --- | ---- | ------------------------ |
| `boolean list`   | 1   | 1    | `pl.Boolean`             |
| `guid list`      | 2   | 16   | `pl.List(pl.Binary(16))` |
| `byte list`      | 4   | 1    | `pl.Uint8`               |
| `short list`     | 5   | 2    | `pl.Int16`               |
| `int list`       | 6   | 4    | `pl.Int32`               |
| `long list`      | 7   | 8    | `pl.Int64`               |
| `real list`      | 8   | 4    | `pl.Float32`             |
| `float list`     | 9   | 8    | `pl.Float64`             |
| `char list`      | 10  | 1    | `pl.Utf8`                |
| `string list`    | 10  | 1    | `pl.Utf8`                |
| `symbol list`    | 11  | \*   | `pl.Categorical`         |
| `timestamp list` | 12  | 8    | `pl.Datetime`            |
| `month list`     | 13  | 4    | `-`                      |
| `date list`      | 14  | 4    | `pl.Date`                |
| `datetime list`  | 15  | 8    | `pl.Datetime`            |
| `timespan list`  | 16  | 8    | `pl.Duration`            |
| `minute list`    | 17  | 4    | `pl.Time`                |
| `second list`    | 18  | 4    | `pl.Time`                |
| `time list`      | 19  | 4    | `pl.Time`                |
| `table`          | 98  | \*   | `pl.DataFrame`           |
| `dictionary`     | 99  | \*   | `-`                      |
| `keyed table`    | 99  | \*   | `pl.DataFrame`           |

> performance is impacted by converting guid to string, deserialize the uuid to 16 fixed binary list, use .hex() to convert binary to string if required

> real/float 0n is mapped to Polars null not NaN

> short/int/long 0Nh/i/j, 0Wh/i/j and -0Wh/i/j are mapped to null

```
df.with_columns([
    (pl.col("uuid").apply(lambda u: u.hex()))
    ])
```

#### Serialization

##### Basic Data Type

| python type | k type      | note                        |
| ----------- | ----------- | --------------------------- |
| `bool`      | `boolean`   |                             |
| `int`       | `long`      |                             |
| `float`     | `float`     |                             |
| `str`       | `symbol`    |                             |
| `bytes`     | `string`    |                             |
| `datetime`  | `timestamp` |                             |
| `date`      | `date`      | 0001.01.01 - 9999.12.31     |
| `datetime`  | `datetime`  |                             |
| `timedelta` | `timespan`  |                             |
| `time`      | `time`      | 00:00:00.000 - 23:59:59.999 |

##### Dictionary, Series and DataFrame

| python type              | k type    |
| ------------------------ | --------- |
| `dict`                   | dict      |
| `pl.Boolean`             | boolean   |
| `pl.List(pl.Binary(16))` | guid      |
| `pl.Uint8`               | byte      |
| `pl.Int16`               | short     |
| `pl.Int32`               | int       |
| `pl.Int64`               | long      |
| `pl.Float32`             | real      |
| `pl.Float64`             | float     |
| `pl.Utf8`                | char      |
| `pl.Categorical`         | symbol    |
| `pl.Datetime`            | timestamp |
| `pl.Date`                | date      |
| `pl.Datetime`            | datetime  |
| `pl.Duration`            | timespan  |
| `pl.Time`                | time      |
| `pl.DataFrame`           | table     |

> Limited Support for dictionary as arguments, requires `string` as keys.

## Quick Start

### Create a Connection

```python
import polars as pl
import kola
# Connect to j*, J and Q both work with j*
conn = kola.J('localhost', 1800)

# Connect to q
conn = kola.Q('localhost', 1800)

# with retries for IO Errors, 1s, 2s, 4s ...
conn = kola.J('localhost', 1800, retries=3)

# with read timeout error, 2s, "Resource temporarily unavailable"
conn = kola.J('localhost', 1800, retries=3, timeout=2)
```

### Connect(Optional)

Automatically connect when querying q process

```python
conn.connect()
```

### Disconnect

Automatically disconnect if any IO error

```python
conn.disconnect()
```

### String Query

```python
conn.sync("select from trade where date=last date")
```

### Functional Query

For functional query, `kola` supports Python [Basic Data Type](#basic-data-type), `pl.Series`, `pl.DataFrame` and Python Dictionary with string keys and Python [Basic Data Type](#basic-data-type) and `pl.Series` values.

```python
from datetime import date, time

conn.sync(
    ".gw.query",
    "table",
    {
        "date": date(2023, 11, 21),
        "syms": pl.Series("", ["sym0", "sym1"], pl.Categorical),
        # 09:00
        "startTime": time(9),
        # 11:30
        "endTime": time(11, 30),
    },
)
```

### Send DataFrame

```python
# pl_df is a Polars DataFrame
conn.sync("upsert", "table", pl_df)
```

```python
# pd_df is a Pandas DataFrame, use pl.DateFrame to cast Pandas DataFrame
conn.sync("upsert", "table", pl.DataFrame(pd_df))
```

### Async Query

```python
# pl_df is a Polars DataFrame
conn.asyn("upsert", "table", pl_df)
```

### Subscribe

```python
from kola import QType

conn.sync(".u.sub", pl.Series("", ["table1", "table2"], QType.Symbol), "")

# specify symbol filter
conn.sync(
    ".u.sub",
    pl.Series("", ["table1", "table2"], QType.Symbol),
    pl.Series("", ["sym1", "sym2"], QType.Symbol),
)

while true:
    # ("upd", "table", pl.Dataframe)
    upd = conn.receive()
    print(upd)
```

### Generate IPC for q

```python
import polars as pl
from kola import serialize_as_ipc_bytes6

df = pl.DataFrame(
    {
        "sym": pl.Series("sym", ["a", "b", "c"], pl.Categorical),
        "price": [1, 2, 3],
    }
)
# without compression
buffer = serialize_as_ipc_bytes6("sync", False, ["upd", "table", df])

# with compression
buffer = serialize_as_ipc_bytes6("sync", True, ["upd", "table", df])
```

## Polars Documentations

Refer to

- [User Guide](https://pola-rs.github.io/polars/user-guide/)
- [API Reference](https://pola-rs.github.io/polars/py-polars/html/reference/index.html)


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "kolat",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "j*, q, kdb, polars, dataframe, arrow",
    "author": null,
    "author_email": "Jo Shinonome <jo.shinonome@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/13/ec/d617b581b2b0da6e9f19ee48949f5905417ad3715ed2830a2fbc39470fd2/kolat-2.0.0.tar.gz",
    "platform": null,
    "description": "# kola\n\na Python [Polars](https://pola-rs.github.io/polars/) Interface to `j*` and `q`\n\n## Basic Data Type Map\n\n### j\\*\n\n#### Deserialization\n\n##### Atom\n\n| j type      | n   | size | python type | note                        |\n| ----------- | --- | ---- | ----------- | --------------------------- |\n| `boolean`   | 1   | 1    | `bool`      |                             |\n| `u8`        | 4   | 1    | `int`       |                             |\n| `i16`       | 5   | 2    | `int`       |                             |\n| `i32`       | 6   | 4    | `int`       |                             |\n| `i64`       | 7   | 8    | `int`       |                             |\n| `f32`       | 8   | 4    | `float`     |                             |\n| `f64`       | 9   | 8    | `float`     |                             |\n| `string`    | 10  | 1    | `str`       |                             |\n| `symbol`    | 11  | \\*   | `str`       |                             |\n| `timestamp` | 12  | 8    | `datetime`  |                             |\n| `date`      | 14  | 4    | `date`      | 0001.01.01 - 9999.12.31     |\n| `datetime`  | 15  | 8    | `datetime`  |                             |\n| `duration`  | 16  | 8    | `timedelta` |                             |\n| `time`      | 19  | 4    | `time`      | 00:00:00.000 - 23:59:59.999 |\n\n##### Composite Data Type\n\n| k type       | n    | size | python type    |\n| ------------ | ---- | ---- | -------------- |\n| `series`     | 1-15 | -    | `pl.Series`    |\n| `list`       | 90   | -    | `Tuple`        |\n| `dictionary` | 91   | \\*   | `dict`         |\n| `dataframe`  | 92   | \\*   | `pl.DataFrame` |\n\n#### Serialization\n\n##### Basic Data Type\n\n| python type | j type     | note                        |\n| ----------- | ---------- | --------------------------- |\n| `bool`      | `boolean`  |                             |\n| `int`       | `i64`      |                             |\n| `float`     | `f64`      |                             |\n| `str`       | `symbol`   |                             |\n| `bytes`     | `string`   |                             |\n| `date`      | `date`     | 0001.01.01 - 9999.12.31     |\n| `datetime`  | `datetime` |                             |\n| `timedelta` | `duration` |                             |\n| `time`      | `time`     | 00:00:00.000 - 23:59:59.999 |\n\n##### Dictionary, Series and DataFrame\n\n| python type    | j type    |\n| -------------- | --------- |\n| `dict`         | dict      |\n| `pl.Series`    | series    |\n| `pl.DataFrame` | dataframe |\n\n> for dictionary, requires `string` as keys.\n\n### q\n\n#### Deserialization\n\n##### Atom\n\n| k type      | n   | size | python type | note                        |\n| ----------- | --- | ---- | ----------- | --------------------------- |\n| `boolean`   | 1   | 1    | `bool`      |                             |\n| `guid`      | 2   | 16   | `str`       |                             |\n| `byte`      | 4   | 1    | `int`       |                             |\n| `short`     | 5   | 2    | `int`       |                             |\n| `int`       | 6   | 4    | `int`       |                             |\n| `long`      | 7   | 8    | `int`       |                             |\n| `real`      | 8   | 4    | `float`     |                             |\n| `float`     | 9   | 8    | `float`     |                             |\n| `char`      | 10  | 1    | `str`       |                             |\n| `string`    | 10  | 1    | `str`       |                             |\n| `symbol`    | 11  | \\*   | `str`       |                             |\n| `timestamp` | 12  | 8    | `datetime`  |                             |\n| `month`     | 13  | 4    | `-`         |                             |\n| `date`      | 14  | 4    | `date`      | 0001.01.01 - 9999.12.31     |\n| `datetime`  | 15  | 8    | `datetime`  |                             |\n| `timespan`  | 16  | 8    | `timedelta` |                             |\n| `minute`    | 17  | 4    | `time`      | 00:00 - 23:59               |\n| `second`    | 18  | 4    | `time`      | 00:00:00 - 23:59:59         |\n| `time`      | 19  | 4    | `time`      | 00:00:00.000 - 23:59:59.999 |\n\n##### Composite Data Type\n\n| k type           | n   | size | python type              |\n| ---------------- | --- | ---- | ------------------------ |\n| `boolean list`   | 1   | 1    | `pl.Boolean`             |\n| `guid list`      | 2   | 16   | `pl.List(pl.Binary(16))` |\n| `byte list`      | 4   | 1    | `pl.Uint8`               |\n| `short list`     | 5   | 2    | `pl.Int16`               |\n| `int list`       | 6   | 4    | `pl.Int32`               |\n| `long list`      | 7   | 8    | `pl.Int64`               |\n| `real list`      | 8   | 4    | `pl.Float32`             |\n| `float list`     | 9   | 8    | `pl.Float64`             |\n| `char list`      | 10  | 1    | `pl.Utf8`                |\n| `string list`    | 10  | 1    | `pl.Utf8`                |\n| `symbol list`    | 11  | \\*   | `pl.Categorical`         |\n| `timestamp list` | 12  | 8    | `pl.Datetime`            |\n| `month list`     | 13  | 4    | `-`                      |\n| `date list`      | 14  | 4    | `pl.Date`                |\n| `datetime list`  | 15  | 8    | `pl.Datetime`            |\n| `timespan list`  | 16  | 8    | `pl.Duration`            |\n| `minute list`    | 17  | 4    | `pl.Time`                |\n| `second list`    | 18  | 4    | `pl.Time`                |\n| `time list`      | 19  | 4    | `pl.Time`                |\n| `table`          | 98  | \\*   | `pl.DataFrame`           |\n| `dictionary`     | 99  | \\*   | `-`                      |\n| `keyed table`    | 99  | \\*   | `pl.DataFrame`           |\n\n> performance is impacted by converting guid to string, deserialize the uuid to 16 fixed binary list, use .hex() to convert binary to string if required\n\n> real/float 0n is mapped to Polars null not NaN\n\n> short/int/long 0Nh/i/j, 0Wh/i/j and -0Wh/i/j are mapped to null\n\n```\ndf.with_columns([\n    (pl.col(\"uuid\").apply(lambda u: u.hex()))\n    ])\n```\n\n#### Serialization\n\n##### Basic Data Type\n\n| python type | k type      | note                        |\n| ----------- | ----------- | --------------------------- |\n| `bool`      | `boolean`   |                             |\n| `int`       | `long`      |                             |\n| `float`     | `float`     |                             |\n| `str`       | `symbol`    |                             |\n| `bytes`     | `string`    |                             |\n| `datetime`  | `timestamp` |                             |\n| `date`      | `date`      | 0001.01.01 - 9999.12.31     |\n| `datetime`  | `datetime`  |                             |\n| `timedelta` | `timespan`  |                             |\n| `time`      | `time`      | 00:00:00.000 - 23:59:59.999 |\n\n##### Dictionary, Series and DataFrame\n\n| python type              | k type    |\n| ------------------------ | --------- |\n| `dict`                   | dict      |\n| `pl.Boolean`             | boolean   |\n| `pl.List(pl.Binary(16))` | guid      |\n| `pl.Uint8`               | byte      |\n| `pl.Int16`               | short     |\n| `pl.Int32`               | int       |\n| `pl.Int64`               | long      |\n| `pl.Float32`             | real      |\n| `pl.Float64`             | float     |\n| `pl.Utf8`                | char      |\n| `pl.Categorical`         | symbol    |\n| `pl.Datetime`            | timestamp |\n| `pl.Date`                | date      |\n| `pl.Datetime`            | datetime  |\n| `pl.Duration`            | timespan  |\n| `pl.Time`                | time      |\n| `pl.DataFrame`           | table     |\n\n> Limited Support for dictionary as arguments, requires `string` as keys.\n\n## Quick Start\n\n### Create a Connection\n\n```python\nimport polars as pl\nimport kola\n# Connect to j*, J and Q both work with j*\nconn = kola.J('localhost', 1800)\n\n# Connect to q\nconn = kola.Q('localhost', 1800)\n\n# with retries for IO Errors, 1s, 2s, 4s ...\nconn = kola.J('localhost', 1800, retries=3)\n\n# with read timeout error, 2s, \"Resource temporarily unavailable\"\nconn = kola.J('localhost', 1800, retries=3, timeout=2)\n```\n\n### Connect(Optional)\n\nAutomatically connect when querying q process\n\n```python\nconn.connect()\n```\n\n### Disconnect\n\nAutomatically disconnect if any IO error\n\n```python\nconn.disconnect()\n```\n\n### String Query\n\n```python\nconn.sync(\"select from trade where date=last date\")\n```\n\n### Functional Query\n\nFor functional query, `kola` supports Python [Basic Data Type](#basic-data-type), `pl.Series`, `pl.DataFrame` and Python Dictionary with string keys and Python [Basic Data Type](#basic-data-type) and `pl.Series` values.\n\n```python\nfrom datetime import date, time\n\nconn.sync(\n    \".gw.query\",\n    \"table\",\n    {\n        \"date\": date(2023, 11, 21),\n        \"syms\": pl.Series(\"\", [\"sym0\", \"sym1\"], pl.Categorical),\n        # 09:00\n        \"startTime\": time(9),\n        # 11:30\n        \"endTime\": time(11, 30),\n    },\n)\n```\n\n### Send DataFrame\n\n```python\n# pl_df is a Polars DataFrame\nconn.sync(\"upsert\", \"table\", pl_df)\n```\n\n```python\n# pd_df is a Pandas DataFrame, use pl.DateFrame to cast Pandas DataFrame\nconn.sync(\"upsert\", \"table\", pl.DataFrame(pd_df))\n```\n\n### Async Query\n\n```python\n# pl_df is a Polars DataFrame\nconn.asyn(\"upsert\", \"table\", pl_df)\n```\n\n### Subscribe\n\n```python\nfrom kola import QType\n\nconn.sync(\".u.sub\", pl.Series(\"\", [\"table1\", \"table2\"], QType.Symbol), \"\")\n\n# specify symbol filter\nconn.sync(\n    \".u.sub\",\n    pl.Series(\"\", [\"table1\", \"table2\"], QType.Symbol),\n    pl.Series(\"\", [\"sym1\", \"sym2\"], QType.Symbol),\n)\n\nwhile true:\n    # (\"upd\", \"table\", pl.Dataframe)\n    upd = conn.receive()\n    print(upd)\n```\n\n### Generate IPC for q\n\n```python\nimport polars as pl\nfrom kola import serialize_as_ipc_bytes6\n\ndf = pl.DataFrame(\n    {\n        \"sym\": pl.Series(\"sym\", [\"a\", \"b\", \"c\"], pl.Categorical),\n        \"price\": [1, 2, 3],\n    }\n)\n# without compression\nbuffer = serialize_as_ipc_bytes6(\"sync\", False, [\"upd\", \"table\", df])\n\n# with compression\nbuffer = serialize_as_ipc_bytes6(\"sync\", True, [\"upd\", \"table\", df])\n```\n\n## Polars Documentations\n\nRefer to\n\n- [User Guide](https://pola-rs.github.io/polars/user-guide/)\n- [API Reference](https://pola-rs.github.io/polars/py-polars/html/reference/index.html)\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "a Python Polars interface to j* and q",
    "version": "2.0.0",
    "project_urls": {
        "Repository": "https://github.com/jshinonome/kola"
    },
    "split_keywords": [
        "j*",
        " q",
        " kdb",
        " polars",
        " dataframe",
        " arrow"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4f5f03ebcc403d194f9d496ba13d2c5bb8bd0a1e6272e71fb9320c3d967bdec5",
                "md5": "c719fb825126e27f6e651c1b60279f46",
                "sha256": "920473bea217e23c7429e6cddf226aa021c640784080c930f663f92b3d3c7ea4"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c719fb825126e27f6e651c1b60279f46",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 9565139,
            "upload_time": "2025-08-16T05:24:21",
            "upload_time_iso_8601": "2025-08-16T05:24:21.973111Z",
            "url": "https://files.pythonhosted.org/packages/4f/5f/03ebcc403d194f9d496ba13d2c5bb8bd0a1e6272e71fb9320c3d967bdec5/kolat-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5afa252ecc82fa3b7ae9f224a8490d58e422da29eff1c1decd6743881e528f26",
                "md5": "00e9e500819ae82ed0710392ba8d816c",
                "sha256": "e95cf868eee93c53a02e6d312c59c1f7c8750862415618017be250b1a8e4d8e5"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "00e9e500819ae82ed0710392ba8d816c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 6347978,
            "upload_time": "2025-08-16T05:24:47",
            "upload_time_iso_8601": "2025-08-16T05:24:47.560911Z",
            "url": "https://files.pythonhosted.org/packages/5a/fa/252ecc82fa3b7ae9f224a8490d58e422da29eff1c1decd6743881e528f26/kolat-2.0.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0cb7fd03ec16e55a26b9f7f099843ccafba4777cdddfbd1d67edeff07c581fd1",
                "md5": "9d6826536c5d10eb0707c2987facdfed",
                "sha256": "c9db94a4af259e23259e6a70311824dbc43a54fe7df1c565a709ba13ed410551"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9d6826536c5d10eb0707c2987facdfed",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 6736047,
            "upload_time": "2025-08-16T05:24:41",
            "upload_time_iso_8601": "2025-08-16T05:24:41.548991Z",
            "url": "https://files.pythonhosted.org/packages/0c/b7/fd03ec16e55a26b9f7f099843ccafba4777cdddfbd1d67edeff07c581fd1/kolat-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c3b351d1747f3a7822e19147b4975602f9d2e5caf6d239004178f0f21786444d",
                "md5": "4a8ef2aa5aa2a9879eed15763e8c2fd3",
                "sha256": "1d030299bddbc2a9b25e48cde621446fa45f6bf9246e8c62bfd7c16e2ff809c7"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4a8ef2aa5aa2a9879eed15763e8c2fd3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 6195715,
            "upload_time": "2025-08-16T05:24:36",
            "upload_time_iso_8601": "2025-08-16T05:24:36.602257Z",
            "url": "https://files.pythonhosted.org/packages/c3/b3/51d1747f3a7822e19147b4975602f9d2e5caf6d239004178f0f21786444d/kolat-2.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ca84569807427d274a580b4f85df7a2d3f8c293f2d2a2fa0efe12818e220d15e",
                "md5": "40cb9ae96534261f0ec8018e7f510e18",
                "sha256": "6fe4978932d26f90c9962ec016d192bdb4c12df0ec884cc7e4c1db5fb8ad8550"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "40cb9ae96534261f0ec8018e7f510e18",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 9565596,
            "upload_time": "2025-08-16T05:24:24",
            "upload_time_iso_8601": "2025-08-16T05:24:24.065588Z",
            "url": "https://files.pythonhosted.org/packages/ca/84/569807427d274a580b4f85df7a2d3f8c293f2d2a2fa0efe12818e220d15e/kolat-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "395c298eecf93082b979157f484fedfca2ce4983bc87fe092fcf7063fdc794c0",
                "md5": "c7d876926bc04c45d6df589387b00844",
                "sha256": "aa7c18ae0811107bff8d46f141ff7b62a178bb7da74e42cab5f322d5fb5a3bb3"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c7d876926bc04c45d6df589387b00844",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 6350101,
            "upload_time": "2025-08-16T05:24:48",
            "upload_time_iso_8601": "2025-08-16T05:24:48.985230Z",
            "url": "https://files.pythonhosted.org/packages/39/5c/298eecf93082b979157f484fedfca2ce4983bc87fe092fcf7063fdc794c0/kolat-2.0.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "871b7ed7d4adcba00afd16331b207fc850855467cf50386bc982e77cc30f92a4",
                "md5": "d5200591edb7c07900c582f7fbf6a5c5",
                "sha256": "1cde5338a0a04c72e58a44b8cf3234d025a94a2a285288350248d773cd74cb12"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d5200591edb7c07900c582f7fbf6a5c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 6731412,
            "upload_time": "2025-08-16T05:24:43",
            "upload_time_iso_8601": "2025-08-16T05:24:43.363951Z",
            "url": "https://files.pythonhosted.org/packages/87/1b/7ed7d4adcba00afd16331b207fc850855467cf50386bc982e77cc30f92a4/kolat-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8bd4a643260c03b51b1668d539e9e6d346aa820a93d2eec0b69eda9141de670e",
                "md5": "56f88497a591546b1f4082edbddbccef",
                "sha256": "b36352e8a12c283b13bc4db175de9c419efeec4d8b40f9d60df6c193f8509fb9"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "56f88497a591546b1f4082edbddbccef",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 6194547,
            "upload_time": "2025-08-16T05:24:38",
            "upload_time_iso_8601": "2025-08-16T05:24:38.013472Z",
            "url": "https://files.pythonhosted.org/packages/8b/d4/a643260c03b51b1668d539e9e6d346aa820a93d2eec0b69eda9141de670e/kolat-2.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5891fce00a6761aea8e902e7e559f37d7f6d438fda9c6b9aa438edd40ff33a8f",
                "md5": "a611ca80a3f124033a915a86df25c86c",
                "sha256": "94a028d9ae060dc96d283e8ecae4de464af64b7795ca8f85788851fabaa2d596"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a611ca80a3f124033a915a86df25c86c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 9563328,
            "upload_time": "2025-08-16T05:24:25",
            "upload_time_iso_8601": "2025-08-16T05:24:25.901903Z",
            "url": "https://files.pythonhosted.org/packages/58/91/fce00a6761aea8e902e7e559f37d7f6d438fda9c6b9aa438edd40ff33a8f/kolat-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dc4570a4dc767ff3a75eac8bbe4027aa639f43f1ea86ea388081d698587667b4",
                "md5": "0452b9667cfcda7bdae5004c6f4e838b",
                "sha256": "7f4bec6c475e28436be442ee56fdbafd224f528dbd187627f56c183883907e06"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0452b9667cfcda7bdae5004c6f4e838b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 6345926,
            "upload_time": "2025-08-16T05:24:50",
            "upload_time_iso_8601": "2025-08-16T05:24:50.886019Z",
            "url": "https://files.pythonhosted.org/packages/dc/45/70a4dc767ff3a75eac8bbe4027aa639f43f1ea86ea388081d698587667b4/kolat-2.0.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "010d48a1e1497355b8f8ac9dac6e0d49861a2e8756018ed1d3b2fa96647ff04f",
                "md5": "72a6b053b04c37bba6dc49d44412f7f0",
                "sha256": "de173229bb42806f936ca07e4d4a2c9b82d7bc61f7bdb4430c16b7af5854cffc"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "72a6b053b04c37bba6dc49d44412f7f0",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 6729886,
            "upload_time": "2025-08-16T05:24:44",
            "upload_time_iso_8601": "2025-08-16T05:24:44.931452Z",
            "url": "https://files.pythonhosted.org/packages/01/0d/48a1e1497355b8f8ac9dac6e0d49861a2e8756018ed1d3b2fa96647ff04f/kolat-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "23274d0d2c900fd17dd2591126e34d1aea6b86b6a442a9a2fd021961bf02d84c",
                "md5": "48a46c17da784badc35033cfc84ea700",
                "sha256": "ed5111c0c73b84cb4c083ab6c1a26001170dd531eb19739d1d3872c9ec053cb7"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "48a46c17da784badc35033cfc84ea700",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 6194013,
            "upload_time": "2025-08-16T05:24:39",
            "upload_time_iso_8601": "2025-08-16T05:24:39.775431Z",
            "url": "https://files.pythonhosted.org/packages/23/27/4d0d2c900fd17dd2591126e34d1aea6b86b6a442a9a2fd021961bf02d84c/kolat-2.0.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e30f182ffb70a2fc21a744187063b95a0c9a74dc69dd116f7ff710646d48999c",
                "md5": "b35ff06bacef8986aa25825b6e191295",
                "sha256": "d38a0a2c649c892938923c1da58d67897aced821fc36f2196687e9351d5cd389"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b35ff06bacef8986aa25825b6e191295",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 9562036,
            "upload_time": "2025-08-16T05:24:28",
            "upload_time_iso_8601": "2025-08-16T05:24:28.017613Z",
            "url": "https://files.pythonhosted.org/packages/e3/0f/182ffb70a2fc21a744187063b95a0c9a74dc69dd116f7ff710646d48999c/kolat-2.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bfbe6977d26d065db49809e9477815079d6f54c7233db5473514d7c6362edcd5",
                "md5": "042feb326d9e1746b9f3777fae445639",
                "sha256": "f111f1e0ba708d82377a6a7e8a14634d09cca670e4d727260d16799000686997"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "042feb326d9e1746b9f3777fae445639",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 6345456,
            "upload_time": "2025-08-16T05:24:52",
            "upload_time_iso_8601": "2025-08-16T05:24:52.807574Z",
            "url": "https://files.pythonhosted.org/packages/bf/be/6977d26d065db49809e9477815079d6f54c7233db5473514d7c6362edcd5/kolat-2.0.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2e3f8dca64dd790a930c7251a6597a039dcb7bae566a78b253bec424fea2e3b1",
                "md5": "1a1cd21c8c9de2f3407c452dca289d92",
                "sha256": "4fdbe3b89f343fd593012290faca644d2cfee582ffb6df674e4ca8411e95d1d4"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1a1cd21c8c9de2f3407c452dca289d92",
            "packagetype": "bdist_wheel",
            "python_version": "cp314",
            "requires_python": ">=3.10",
            "size": 9563611,
            "upload_time": "2025-08-16T05:24:30",
            "upload_time_iso_8601": "2025-08-16T05:24:30.181929Z",
            "url": "https://files.pythonhosted.org/packages/2e/3f/8dca64dd790a930c7251a6597a039dcb7bae566a78b253bec424fea2e3b1/kolat-2.0.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3d6247d72945c310175278a06b269995cccf3d198bf49f6a55a9c8c59adb0dbe",
                "md5": "655117c4b8b5521fa1ca2196b9938a07",
                "sha256": "05c8611aee9057fc6ae69ac8eff3b16bd6e69687c0d1fec32427d3bbcd1cde65"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "655117c4b8b5521fa1ca2196b9938a07",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.10",
            "size": 9569779,
            "upload_time": "2025-08-16T05:24:32",
            "upload_time_iso_8601": "2025-08-16T05:24:32.221872Z",
            "url": "https://files.pythonhosted.org/packages/3d/62/47d72945c310175278a06b269995cccf3d198bf49f6a55a9c8c59adb0dbe/kolat-2.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c68aa1dba1a8354234d731333076d9fc1105637f1c518540d31de09ddd57ff63",
                "md5": "174e8bbfedb443a9bc100cfe5c851191",
                "sha256": "5fa89e085fc5685e3b5af79b383b97700fb28e7bdc1ff5796880900bcaf4cb7f"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "174e8bbfedb443a9bc100cfe5c851191",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.10",
            "size": 9569537,
            "upload_time": "2025-08-16T05:24:34",
            "upload_time_iso_8601": "2025-08-16T05:24:34.341546Z",
            "url": "https://files.pythonhosted.org/packages/c6/8a/a1dba1a8354234d731333076d9fc1105637f1c518540d31de09ddd57ff63/kolat-2.0.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "13ecd617b581b2b0da6e9f19ee48949f5905417ad3715ed2830a2fbc39470fd2",
                "md5": "ea029404ce1e23669c4f939c8fbaa0ed",
                "sha256": "5dc333c339b14a78bca16e8f5c8f910c908e62eed6a6824167f00c1573c89845"
            },
            "downloads": -1,
            "filename": "kolat-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ea029404ce1e23669c4f939c8fbaa0ed",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 63698,
            "upload_time": "2025-08-16T05:24:46",
            "upload_time_iso_8601": "2025-08-16T05:24:46.639966Z",
            "url": "https://files.pythonhosted.org/packages/13/ec/d617b581b2b0da6e9f19ee48949f5905417ad3715ed2830a2fbc39470fd2/kolat-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-16 05:24:46",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "jshinonome",
    "github_project": "kola",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "kolat"
}
        
Elapsed time: 0.42186s