Name | kola JSON |
Version |
2.1.0
JSON |
| download |
home_page | None |
Summary | a Python Polars interface to j* and q |
upload_time | 2025-08-23 08:38:10 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | None |
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": "kola",
"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/eb/e9/839bd5024e38c11c83dfe813f5074aa06cb259ae35b3aa0fe35c7454f18d/kola-2.1.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.1.0",
"project_urls": {
"Repository": "https://github.com/jshinonome/kola"
},
"split_keywords": [
"j*",
" q",
" kdb",
" polars",
" dataframe",
" arrow"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3d63857456f5bd16526642fc5a26171b68048d03d918cf757c9369708d908677",
"md5": "b9e01b433418d604f8edb090724c8cf5",
"sha256": "d1af3a935724e4b002ffbb613d2c00ecf69f08fc0137210fd571c776496941e1"
},
"downloads": -1,
"filename": "kola-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b9e01b433418d604f8edb090724c8cf5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 5413787,
"upload_time": "2025-08-23T08:37:51",
"upload_time_iso_8601": "2025-08-23T08:37:51.917905Z",
"url": "https://files.pythonhosted.org/packages/3d/63/857456f5bd16526642fc5a26171b68048d03d918cf757c9369708d908677/kola-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa46a5c509336b174f9d4d9263ee99cb5fa842cdb50b729c95de4e5a6ed5ea93",
"md5": "b0d5a5fe2cacd7ee84786ba3df0146cd",
"sha256": "51b441a0ba2a45f6d40c6b5738acf12642ee0e75b586df3350de87b81aa6ce6d"
},
"downloads": -1,
"filename": "kola-2.1.0-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "b0d5a5fe2cacd7ee84786ba3df0146cd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 2695596,
"upload_time": "2025-08-23T08:38:11",
"upload_time_iso_8601": "2025-08-23T08:38:11.942195Z",
"url": "https://files.pythonhosted.org/packages/aa/46/a5c509336b174f9d4d9263ee99cb5fa842cdb50b729c95de4e5a6ed5ea93/kola-2.1.0-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7e58e29bae0cc668807e7889ee74f829fc625bc8a4fb54f5214dd9bc7c250acf",
"md5": "965694e3d52a7267413eca479d9f0a6f",
"sha256": "1db31c0c6b0b7c3aae4d61587dbb295b94ac557813079422630843315921caf4"
},
"downloads": -1,
"filename": "kola-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "965694e3d52a7267413eca479d9f0a6f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2836592,
"upload_time": "2025-08-23T08:38:07",
"upload_time_iso_8601": "2025-08-23T08:38:07.211767Z",
"url": "https://files.pythonhosted.org/packages/7e/58/e29bae0cc668807e7889ee74f829fc625bc8a4fb54f5214dd9bc7c250acf/kola-2.1.0-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ab5146b5f12cc269057f22ab9ee995a9b65b9ee4fc3ed3c160613e3be65a9057",
"md5": "436aeccf47fe618dd0699e89a4b1852f",
"sha256": "8e1b9878a1c4b6bf20560af14027f16921fd5b7206d1fbf1d5046c62560a2078"
},
"downloads": -1,
"filename": "kola-2.1.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "436aeccf47fe618dd0699e89a4b1852f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2490911,
"upload_time": "2025-08-23T08:38:02",
"upload_time_iso_8601": "2025-08-23T08:38:02.793969Z",
"url": "https://files.pythonhosted.org/packages/ab/51/46b5f12cc269057f22ab9ee995a9b65b9ee4fc3ed3c160613e3be65a9057/kola-2.1.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7d6db111a1b279638f7f8accf3a87dd10448c006ac3d6712eaf6d544f4ba249d",
"md5": "a8bec3ecf22c913ef5a8560862471607",
"sha256": "5e0d5d7be933a87ab475dd4b7cbb1ddd9b430c538e31753f2cc658a963c4d9d0"
},
"downloads": -1,
"filename": "kola-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a8bec3ecf22c913ef5a8560862471607",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 5413702,
"upload_time": "2025-08-23T08:37:53",
"upload_time_iso_8601": "2025-08-23T08:37:53.835856Z",
"url": "https://files.pythonhosted.org/packages/7d/6d/b111a1b279638f7f8accf3a87dd10448c006ac3d6712eaf6d544f4ba249d/kola-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a7f88f52bac9d3aba6355e3e378e1dd125dea8e87fa70f5d4c01e2b616237521",
"md5": "a90c709a09cc46af0cc21026496dc19a",
"sha256": "c5befa59cb8b0b08821a495dbeb9674490b660efd13cb85388cc6312cc172f64"
},
"downloads": -1,
"filename": "kola-2.1.0-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "a90c709a09cc46af0cc21026496dc19a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 2695512,
"upload_time": "2025-08-23T08:38:13",
"upload_time_iso_8601": "2025-08-23T08:38:13.432645Z",
"url": "https://files.pythonhosted.org/packages/a7/f8/8f52bac9d3aba6355e3e378e1dd125dea8e87fa70f5d4c01e2b616237521/kola-2.1.0-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "401b3b8f18e283765b8d0cbefacd5a6441dce8590413b609156861d6782fd07c",
"md5": "04a2ff8d644114a1046b2093d9b82cc9",
"sha256": "628d34931d7ce09973911488cfcfabbcce66e5c1a31f652f84c98e5ee9d2d799"
},
"downloads": -1,
"filename": "kola-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "04a2ff8d644114a1046b2093d9b82cc9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2836635,
"upload_time": "2025-08-23T08:38:08",
"upload_time_iso_8601": "2025-08-23T08:38:08.645511Z",
"url": "https://files.pythonhosted.org/packages/40/1b/3b8f18e283765b8d0cbefacd5a6441dce8590413b609156861d6782fd07c/kola-2.1.0-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e6f64731d47581938a50a7bd9dc6d1b62e5c9b922388b5cf6876d21fd49c0296",
"md5": "2dd91f88522b6b1525cc0170289a2856",
"sha256": "49094fd178ec7f41c3f963efc8683201862193261b3b10b300924b1671f06838"
},
"downloads": -1,
"filename": "kola-2.1.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2dd91f88522b6b1525cc0170289a2856",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2492904,
"upload_time": "2025-08-23T08:38:04",
"upload_time_iso_8601": "2025-08-23T08:38:04.252925Z",
"url": "https://files.pythonhosted.org/packages/e6/f6/4731d47581938a50a7bd9dc6d1b62e5c9b922388b5cf6876d21fd49c0296/kola-2.1.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "82e4f75c0a128ef3e12fdf525b6a22a0b574d1099deaa777e9a63cf2b6355e77",
"md5": "152b7093c89efa5078b747ce08be0910",
"sha256": "11f4c5f8af35662341d225379fef1ff836ff8aea55c03a4d82b207809c33f5f1"
},
"downloads": -1,
"filename": "kola-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "152b7093c89efa5078b747ce08be0910",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 5413266,
"upload_time": "2025-08-23T08:37:55",
"upload_time_iso_8601": "2025-08-23T08:37:55.117386Z",
"url": "https://files.pythonhosted.org/packages/82/e4/f75c0a128ef3e12fdf525b6a22a0b574d1099deaa777e9a63cf2b6355e77/kola-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4c775fc59e17868535830edbe5631a4e4dd4059059f96d5ef57fb3c5274fc050",
"md5": "c513290e9c66fdeda124ce265d7534dc",
"sha256": "5eefeff9539b7989410ee3a1ba543c47ab37e53ce7da42862d0b636c7c3c146c"
},
"downloads": -1,
"filename": "kola-2.1.0-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "c513290e9c66fdeda124ce265d7534dc",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 2693328,
"upload_time": "2025-08-23T08:38:14",
"upload_time_iso_8601": "2025-08-23T08:38:14.793643Z",
"url": "https://files.pythonhosted.org/packages/4c/77/5fc59e17868535830edbe5631a4e4dd4059059f96d5ef57fb3c5274fc050/kola-2.1.0-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3a83d4a39e503b77faeaade62f696f7df56225ea661ac7b450186893b9cf9d83",
"md5": "37b68f56d1879913e7755ced56e52e1d",
"sha256": "909ce5df437da82b9aea943a9a1cfbd8c923cff56cbedfcc095f1666a40cb568"
},
"downloads": -1,
"filename": "kola-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "37b68f56d1879913e7755ced56e52e1d",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 2836639,
"upload_time": "2025-08-23T08:38:09",
"upload_time_iso_8601": "2025-08-23T08:38:09.833363Z",
"url": "https://files.pythonhosted.org/packages/3a/83/d4a39e503b77faeaade62f696f7df56225ea661ac7b450186893b9cf9d83/kola-2.1.0-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "43c1ba696393c4dde8fa4c66acdb604721a296efa2e4ee53fdde702acfca1549",
"md5": "6330e148cfc6cc513ffb7684cb8b0ccd",
"sha256": "12b499ffb277f0ac7aea6df9c2ae3d74fb66f8947266a082f3e54a74150dcd7f"
},
"downloads": -1,
"filename": "kola-2.1.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6330e148cfc6cc513ffb7684cb8b0ccd",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 2492847,
"upload_time": "2025-08-23T08:38:05",
"upload_time_iso_8601": "2025-08-23T08:38:05.957535Z",
"url": "https://files.pythonhosted.org/packages/43/c1/ba696393c4dde8fa4c66acdb604721a296efa2e4ee53fdde702acfca1549/kola-2.1.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ed2a7e14583c83957b72ebb0379ca66c552fb6eb424aba58a53deff6632af3d0",
"md5": "a2bfc694a2f27c0fd4f2dae598db81ef",
"sha256": "15ae82958767d23fb907185eebf85ef13f7017af495330f697eb02aab247d18a"
},
"downloads": -1,
"filename": "kola-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a2bfc694a2f27c0fd4f2dae598db81ef",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 5413181,
"upload_time": "2025-08-23T08:37:56",
"upload_time_iso_8601": "2025-08-23T08:37:56.729436Z",
"url": "https://files.pythonhosted.org/packages/ed/2a/7e14583c83957b72ebb0379ca66c552fb6eb424aba58a53deff6632af3d0/kola-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c8b231209865bf1d293c30727bb64107c8dc9a3b1e3451234f3f4718fb866af",
"md5": "a33b6a63dc1edfeed8fecc6e942fc8af",
"sha256": "1551f1457ceea1f703da88d8353dbc6d02eb0be34bb4de72c617d21d7795d678"
},
"downloads": -1,
"filename": "kola-2.1.0-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "a33b6a63dc1edfeed8fecc6e942fc8af",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 2693265,
"upload_time": "2025-08-23T08:38:15",
"upload_time_iso_8601": "2025-08-23T08:38:15.957757Z",
"url": "https://files.pythonhosted.org/packages/6c/8b/231209865bf1d293c30727bb64107c8dc9a3b1e3451234f3f4718fb866af/kola-2.1.0-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4cd75c8e7268d31626f03bb722253cf14f6f703efabbffab3a0bda7e0c76b91b",
"md5": "121780f2be43391a71ff2368d0d8fdb2",
"sha256": "75fd0a2b1d0ac691511bf19999d6529c7b2f009b9b1837ac44a3e209d8df3297"
},
"downloads": -1,
"filename": "kola-2.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "121780f2be43391a71ff2368d0d8fdb2",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.10",
"size": 5413869,
"upload_time": "2025-08-23T08:37:58",
"upload_time_iso_8601": "2025-08-23T08:37:58.286424Z",
"url": "https://files.pythonhosted.org/packages/4c/d7/5c8e7268d31626f03bb722253cf14f6f703efabbffab3a0bda7e0c76b91b/kola-2.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "22e3e786d260a24eed88f878fddc4d89565b96a49779a4da87846d9edb0d13da",
"md5": "be87913cb1a6e384bff8d9288d7eb25c",
"sha256": "4d62f9423cbe15cd09397ee42e8aa5381b1a1e1333f39760178136af5a67c429"
},
"downloads": -1,
"filename": "kola-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "be87913cb1a6e384bff8d9288d7eb25c",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.10",
"size": 5414326,
"upload_time": "2025-08-23T08:38:00",
"upload_time_iso_8601": "2025-08-23T08:38:00.087065Z",
"url": "https://files.pythonhosted.org/packages/22/e3/e786d260a24eed88f878fddc4d89565b96a49779a4da87846d9edb0d13da/kola-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b9bbb157dbfd4bcece0acde8ee65ba92b12fce06fcabc5e3f6f4faa5658519ac",
"md5": "34473cc2c15bce0dbffdbb77773f581d",
"sha256": "2717f59a99cd7509f3da8a368b24cab1068fb871dcce257b24b238ae47dc706e"
},
"downloads": -1,
"filename": "kola-2.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "34473cc2c15bce0dbffdbb77773f581d",
"packagetype": "bdist_wheel",
"python_version": "pp311",
"requires_python": ">=3.10",
"size": 5414144,
"upload_time": "2025-08-23T08:38:01",
"upload_time_iso_8601": "2025-08-23T08:38:01.297174Z",
"url": "https://files.pythonhosted.org/packages/b9/bb/b157dbfd4bcece0acde8ee65ba92b12fce06fcabc5e3f6f4faa5658519ac/kola-2.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ebe9839bd5024e38c11c83dfe813f5074aa06cb259ae35b3aa0fe35c7454f18d",
"md5": "3154db1950ce95688242ea82e837b1e5",
"sha256": "c7112163a12679f4db807c07eac7df0a1932500f14a66d1d1c6eec1cb2ebb3a2"
},
"downloads": -1,
"filename": "kola-2.1.0.tar.gz",
"has_sig": false,
"md5_digest": "3154db1950ce95688242ea82e837b1e5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 66108,
"upload_time": "2025-08-23T08:38:10",
"upload_time_iso_8601": "2025-08-23T08:38:10.950916Z",
"url": "https://files.pythonhosted.org/packages/eb/e9/839bd5024e38c11c83dfe813f5074aa06cb259ae35b3aa0fe35c7454f18d/kola-2.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-23 08:38:10",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jshinonome",
"github_project": "kola",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "kola"
}