# <img src="https://raw.githubusercontent.com/lszeremeta/knows/main/logo/knows-logo.png" alt="Knows logo" width="300">
[](https://pypi.org/project/knows/) [](https://hub.docker.com/r/lszeremeta/knows)
Knows is a powerful and user-friendly tool for benchmarking property graphs. These graphs are crucial in many fields.
Knows supports
multiple output formats and basic visualization capabilities, making it a go-to tool for researchers, educators and data
enthusiasts.
## Key Features 🚀
- **Customizable Graph Generation**: Tailor your graphs by specifying the number of nodes and edges.
- **Diverse Output Formats**: Export graphs in formats like
GraphML, [YARS-PG 5.0](https://github.com/lszeremeta/yarspg), CSV, Cypher, GEXF, GML, JSON, and others.
- **Flexible Output Options**: Display results in the console, redirect them, or save them directly to a file.
- **Integrated Graph Visualization**: Conveniently visualize your graphs in SVG, PNG, JPG, or PDF format.
- **Intuitive Command-Line Interface (CLI)**: A user-friendly CLI for streamlined graph generation and visualization.
- **Docker Compatibility**: Deploy Knows in Docker containers for a consistent and isolated runtime environment.
- **Selectable Properties**: Choose which node and edge properties should be generated.
- **Reproducible graphs**: Ensure deterministic outputs by setting the `-s`/`--seed` option regardless of the selected
output format.
> **Note on reproducibility:** The `-s`/`--seed` option makes the random aspects of graph generation deterministic
> within the same software environment. Results may still differ across versions of Python or dependencies.
## Graph Structure
- Generates graphs with specified or random nodes and edges.
- Creates directed graphs.
- Nodes are labeled `Person` with unique IDs (`N1, N2, N3, ..., Nn`).
- Nodes feature `firstName` and `lastName` properties by default.
- Edges are labeled `knows` and include `strength` [1..100] and `lastMeetingDate` [1955-01-01..2025-06-28] properties by
default.
- Additional node properties:
- `favoriteColor`
- `company`
- `job`
- `phoneNumber`
- `postalAddress`
- `friendCount` [1..1000]
- `preferredContactMethod` [`inPerson`, `email`, `postalMail`, `phone`, `textMessage`, `videoCall`, `noPreference`]
- Additional edge properties:
- `lastMeetingCity`
- `meetingCount` [1..10000]
- Edges have random nodes, avoiding cycles.
- If edges connect the same nodes in both directions, the paired edges share `lastMeetingCity`, `lastMeetingDate`, and
`meetingCount` values.
## Installation 🛠️
You can install knows via PyPI, Docker or run it from the source code.
### Install via PyPI
1. **Installation**:
```shell
pip install knows[draw]
```
The `draw` installs a `matplotlib` library for graph visualization. You can omit the `[draw]` if you don't need
visualization and `svg` output generation.
2. **Running Knows**:
```shell
knows [options]
```
### Docker Deployment 🐳
#### From Docker Hub
1. **Pull Image**:
```shell
docker pull lszeremeta/knows
```
2. **Run Container**:
```shell
docker run --rm lszeremeta/knows [options]
```
#### Building from Source
1. **Build Image**:
```shell
docker build -t knows .
```
2. **Run Container**:
```shell
docker run --rm knows [options]
```
### Python from Source
1. **Clone Repository**:
```shell
git clone git@github.com:lszeremeta/knows.git
cd knows
```
2. **Install Requirements**:
```shell
pip install .[draw]
```
3. **Execute Knows**:
```shell
python -m knows [options]
```
### Install Tkinter for Graph Visualization
The `-d`/`--draw` option requires Tkinter.
- **Ubuntu**:
```shell
sudo apt update
sudo apt install python3-tk
```
See [Installing Tkinter on Ubuntu](https://www.pythonguis.com/installation/install-tkinter-linux/) for details.
- **macOS (Homebrew)**:
```shell
brew install python3
brew install python-tk
```
See [Installing Tkinter on macOS](https://www.pythonguis.com/installation/install-tkinter-mac/) for details.
- **Windows**:
On Windows, Tkinter should be installed by default with Python. No additional steps required.
## Usage 💡
### Basic Usage
```shell
knows [-h] [-n NODES] [-e EDGES] [-s SEED] [-f {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}]
[-np [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...]]
[-ep [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]] [-ap] [-d]
[output]
```
> Available options may vary depending on the version. To display all available options with their descriptions use
`knows -h`.
### Positional arguments
- `output`: Optional path to save the graph. For CSV format two files will be created: `*_nodes.csv` and `*_edges.csv`.
### Options
- `-h`, `--help`: Show this help message and exit.
- `-n NODES`, `--nodes NODES`: Number of nodes in the graph. Selected randomly if not specified.
- `-e EDGES`, `--edges EDGES`: Number of edges in the graph. Selected randomly if not specified.
- `-s SEED`, `--seed SEED`: Seed for random number generation to ensure reproducible results (also between various
output formats).
- `-f {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}, --format {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}`:
Format to output the graph. Default: `yarspg`. The `svg`, `png`, `jpg` and `pdf` formats are for simple graph
visualization.
- `-np [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...], --node-props [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...]`:
Space-separated node properties. Available: `firstName`, `lastName`, `company`, `job`, `phoneNumber`, `favoriteColor`,
`postalAddress`, `friendCount`, `preferredContactMethod`.
- `-ep [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]`,
`--edge-props [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]`:
Space-separated edge properties. Available: `strength`, `lastMeetingCity`, `lastMeetingDate`, `meetingCount`.
- `-ap`, `--all-props`: Use all available node and edge properties.
- `-d`, `--draw`: Show simple image of the graph. Requires Tkinter. This option
may not work in Docker. If you want to generate an image of the graph, use the `svg`, `png`, `jpg`, or `pdf` output
format and save it to a file.
### Practical Examples 🌟
1. Create a random graph in [YARS-PG 5.0 format](https://github.com/lszeremeta/yarspg) and show it:
```shell
knows
# or
docker run --rm lszeremeta/knows
```
2. Create a 100-node, 70-edge graph in GraphML format:
```shell
knows -n 100 -e 70 -f graphml > graph.graphml
# or
knows -n 100 -e 70 -f graphml graph.graphml
# or
docker run --rm lszeremeta/knows -n 100 -e 70 -f graphml > graph.graphml
# or
docker run --rm -v "$(pwd)":/data lszeremeta/knows -n 100 -e 70 -f graphml /data/graph.graphml
```
3. Create a random graph in CSV format and save to files (nodes are written to standard output, edges to standard
error):
```shell
knows -f csv > nodes.csv 2> edges.csv
# or
knows -f csv graph.csv
# or
docker run --rm lszeremeta/knows -f csv > nodes.csv 2> edges.csv
# or
docker run --rm -v "$(pwd)":/data lszeremeta/knows -f csv /data/graph.csv
```
The latter command creates `graph_nodes.csv` and `graph_edges.csv`.
4. Create a 50-node, 20-edge graph in Cypher format:
```shell
knows -n 50 -e 20 -f cypher > graph.cypher
# or
knows -n 50 -e 20 -f cypher graph.cypher
```
5. Create a 100-node, 50-edge graph in YARS-PG format:
```shell
knows -n 100 -e 50 > graph.yarspg
# or
knows -n 100 -e 50 graph.yarspg
```
6. Create, save, and visualize a 100-node, 50-edge graph in SVG:
```shell
knows -n 100 -e 50 -f svg -d > graph.svg
# or
knows -n 100 -e 50 -f svg -d graph.svg
```
7. Create, save a 70-node, 50-edge graph in SVG:
```shell
knows -n 70 -e 50 -f svg > graph.svg
# or
knows -n 70 -e 50 -f svg graph.svg
```
8. Create, save a 10-node, 5-edge graph in PNG:
```shell
knows -n 10 -e 5 -f png > graph.png
# or
knows -n 10 -e 5 -f png graph.png
```
9. Create a graph in JSON format:
```shell
knows -f json > graph.json
# or
knows -f json graph.json
```
10. Create a graph with custom properties (20 nodes, 10 edges) and show it:
```shell
knows -n 20 -e 10 -np firstName favoriteColor job -ep lastMeetingCity
```
11. Create a graph with all possible properties in YARS-PG format and save it to file:
```shell
knows -ap > graph.yarspg
# or
knows -ap graph.yarspg
```
12. Generate a reproducible graph in CSV by setting a seed:
```shell
knows -n 3 -e 2 -s 43 -f csv
```
Running the command again with the same seed will produce the identical graph, provided the environment and dependencies
remain unchanged.
13. Generate the same graph as above but in YARS-PG format:
```shell
knows -n 3 -e 2 -s 43
```
## Contribute to Knows 👥
Your ideas and contributions can make Knows even better! If you're new to open source,
read [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
and [CONTRIBUTING.md](https://github.com/lszeremeta/knows/blob/main/CONTRIBUTING.md).
## License 📜
Knows is licensed under the [MIT License](https://github.com/lszeremeta/knows/blob/main/LICENSE).
Raw data
{
"_id": null,
"home_page": null,
"name": "knows",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "knows, benchmark, yarspg, graphs, mathematics, CLI, GraphML, YARS-PG, property graph, graph, graph database, graph data, Neo4j, NetworkX, Faker, graph analysis, benchmarking, graph visualization, data science, graph algorithms, network analysis, graph tool, data analytics, educational tool, research tool, graph generation, python graph, docker graph tool, command line interface, CLI tool, json, svg, data visualization",
"author": null,
"author_email": "\u0141ukasz Szeremeta <l.szeremeta.dev+knows@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/6f/fa/d9ed8976203ca323b1d599b5ecf880aecbba097339f3f364b94ab0b18568/knows-2.0.2.tar.gz",
"platform": null,
"description": "# <img src=\"https://raw.githubusercontent.com/lszeremeta/knows/main/logo/knows-logo.png\" alt=\"Knows logo\" width=\"300\">\n\n[](https://pypi.org/project/knows/) [](https://hub.docker.com/r/lszeremeta/knows)\n\nKnows is a powerful and user-friendly tool for benchmarking property graphs. These graphs are crucial in many fields.\nKnows supports\nmultiple output formats and basic visualization capabilities, making it a go-to tool for researchers, educators and data\nenthusiasts.\n\n## Key Features \ud83d\ude80\n\n- **Customizable Graph Generation**: Tailor your graphs by specifying the number of nodes and edges.\n- **Diverse Output Formats**: Export graphs in formats like\n GraphML, [YARS-PG 5.0](https://github.com/lszeremeta/yarspg), CSV, Cypher, GEXF, GML, JSON, and others.\n- **Flexible Output Options**: Display results in the console, redirect them, or save them directly to a file.\n- **Integrated Graph Visualization**: Conveniently visualize your graphs in SVG, PNG, JPG, or PDF format.\n- **Intuitive Command-Line Interface (CLI)**: A user-friendly CLI for streamlined graph generation and visualization.\n- **Docker Compatibility**: Deploy Knows in Docker containers for a consistent and isolated runtime environment.\n- **Selectable Properties**: Choose which node and edge properties should be generated.\n- **Reproducible graphs**: Ensure deterministic outputs by setting the `-s`/`--seed` option regardless of the selected\n output format.\n\n> **Note on reproducibility:** The `-s`/`--seed` option makes the random aspects of graph generation deterministic\n> within the same software environment. Results may still differ across versions of Python or dependencies.\n\n## Graph Structure\n\n- Generates graphs with specified or random nodes and edges.\n- Creates directed graphs.\n- Nodes are labeled `Person` with unique IDs (`N1, N2, N3, ..., Nn`).\n- Nodes feature `firstName` and `lastName` properties by default.\n- Edges are labeled `knows` and include `strength` [1..100] and `lastMeetingDate` [1955-01-01..2025-06-28] properties by\n default.\n- Additional node properties:\n - `favoriteColor`\n - `company`\n - `job`\n - `phoneNumber`\n - `postalAddress`\n - `friendCount` [1..1000]\n - `preferredContactMethod` [`inPerson`, `email`, `postalMail`, `phone`, `textMessage`, `videoCall`, `noPreference`]\n- Additional edge properties:\n - `lastMeetingCity`\n - `meetingCount` [1..10000]\n- Edges have random nodes, avoiding cycles.\n- If edges connect the same nodes in both directions, the paired edges share `lastMeetingCity`, `lastMeetingDate`, and\n `meetingCount` values.\n\n## Installation \ud83d\udee0\ufe0f\n\nYou can install knows via PyPI, Docker or run it from the source code.\n\n### Install via PyPI\n\n1. **Installation**:\n ```shell\n pip install knows[draw]\n ```\n The `draw` installs a `matplotlib` library for graph visualization. You can omit the `[draw]` if you don't need\n visualization and `svg` output generation.\n\n2. **Running Knows**:\n ```shell\n knows [options]\n ```\n\n### Docker Deployment \ud83d\udc33\n\n#### From Docker Hub\n\n1. **Pull Image**:\n ```shell\n docker pull lszeremeta/knows\n ```\n\n2. **Run Container**:\n ```shell\n docker run --rm lszeremeta/knows [options]\n ```\n\n#### Building from Source\n\n1. **Build Image**:\n ```shell\n docker build -t knows .\n ```\n\n2. **Run Container**:\n ```shell\n docker run --rm knows [options]\n ```\n\n### Python from Source\n\n1. **Clone Repository**:\n ```shell\n git clone git@github.com:lszeremeta/knows.git\n cd knows\n ```\n\n2. **Install Requirements**:\n ```shell\n pip install .[draw]\n ```\n\n3. **Execute Knows**:\n ```shell\n python -m knows [options]\n ```\n\n### Install Tkinter for Graph Visualization\n\nThe `-d`/`--draw` option requires Tkinter.\n\n- **Ubuntu**:\n ```shell\n sudo apt update\n sudo apt install python3-tk\n ```\n See [Installing Tkinter on Ubuntu](https://www.pythonguis.com/installation/install-tkinter-linux/) for details.\n\n- **macOS (Homebrew)**:\n ```shell\n brew install python3\n brew install python-tk\n ```\n See [Installing Tkinter on macOS](https://www.pythonguis.com/installation/install-tkinter-mac/) for details.\n\n- **Windows**:\n On Windows, Tkinter should be installed by default with Python. No additional steps required.\n\n## Usage \ud83d\udca1\n\n### Basic Usage\n\n```shell\nknows [-h] [-n NODES] [-e EDGES] [-s SEED] [-f {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}]\n [-np [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...]]\n [-ep [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]] [-ap] [-d]\n [output]\n```\n\n> Available options may vary depending on the version. To display all available options with their descriptions use\n`knows -h`.\n\n### Positional arguments\n\n- `output`: Optional path to save the graph. For CSV format two files will be created: `*_nodes.csv` and `*_edges.csv`.\n\n### Options\n\n- `-h`, `--help`: Show this help message and exit.\n- `-n NODES`, `--nodes NODES`: Number of nodes in the graph. Selected randomly if not specified.\n- `-e EDGES`, `--edges EDGES`: Number of edges in the graph. Selected randomly if not specified.\n- `-s SEED`, `--seed SEED`: Seed for random number generation to ensure reproducible results (also between various\n output formats).\n- `-f {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}, --format {yarspg,graphml,csv,cypher,gexf,gml,svg,png,jpg,pdf,adjacency_list,multiline_adjacency_list,edge_list,json}`:\nFormat to output the graph. Default: `yarspg`. The `svg`, `png`, `jpg` and `pdf` formats are for simple graph\nvisualization.\n- `-np [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...], --node-props [{firstName,lastName,company,job,phoneNumber,favoriteColor,postalAddress,friendCount,preferredContactMethod} ...]`: \nSpace-separated node properties. Available: `firstName`, `lastName`, `company`, `job`, `phoneNumber`, `favoriteColor`,\n`postalAddress`, `friendCount`, `preferredContactMethod`.\n- `-ep [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]`, \n `--edge-props [{strength,lastMeetingCity,lastMeetingDate,meetingCount} ...]`: \n Space-separated edge properties. Available: `strength`, `lastMeetingCity`, `lastMeetingDate`, `meetingCount`.\n- `-ap`, `--all-props`: Use all available node and edge properties.\n- `-d`, `--draw`: Show simple image of the graph. Requires Tkinter. This option\n may not work in Docker. If you want to generate an image of the graph, use the `svg`, `png`, `jpg`, or `pdf` output\n format and save it to a file.\n\n### Practical Examples \ud83c\udf1f\n\n1. Create a random graph in [YARS-PG 5.0 format](https://github.com/lszeremeta/yarspg) and show it:\n ```shell\n knows\n # or\n docker run --rm lszeremeta/knows\n ```\n2. Create a 100-node, 70-edge graph in GraphML format:\n ```shell\n knows -n 100 -e 70 -f graphml > graph.graphml\n # or\n knows -n 100 -e 70 -f graphml graph.graphml\n # or\n docker run --rm lszeremeta/knows -n 100 -e 70 -f graphml > graph.graphml\n # or\n docker run --rm -v \"$(pwd)\":/data lszeremeta/knows -n 100 -e 70 -f graphml /data/graph.graphml\n ```\n3. Create a random graph in CSV format and save to files (nodes are written to standard output, edges to standard\n error):\n ```shell\n knows -f csv > nodes.csv 2> edges.csv\n # or\n knows -f csv graph.csv\n # or\n docker run --rm lszeremeta/knows -f csv > nodes.csv 2> edges.csv\n # or\n docker run --rm -v \"$(pwd)\":/data lszeremeta/knows -f csv /data/graph.csv\n ```\n The latter command creates `graph_nodes.csv` and `graph_edges.csv`.\n4. Create a 50-node, 20-edge graph in Cypher format:\n ```shell\n knows -n 50 -e 20 -f cypher > graph.cypher\n # or\n knows -n 50 -e 20 -f cypher graph.cypher\n ```\n5. Create a 100-node, 50-edge graph in YARS-PG format:\n ```shell\n knows -n 100 -e 50 > graph.yarspg\n # or\n knows -n 100 -e 50 graph.yarspg\n ```\n6. Create, save, and visualize a 100-node, 50-edge graph in SVG:\n ```shell\n knows -n 100 -e 50 -f svg -d > graph.svg\n # or\n knows -n 100 -e 50 -f svg -d graph.svg\n ```\n7. Create, save a 70-node, 50-edge graph in SVG:\n ```shell\n knows -n 70 -e 50 -f svg > graph.svg\n # or\n knows -n 70 -e 50 -f svg graph.svg\n ```\n8. Create, save a 10-node, 5-edge graph in PNG:\n ```shell\n knows -n 10 -e 5 -f png > graph.png\n # or\n knows -n 10 -e 5 -f png graph.png\n ```\n9. Create a graph in JSON format:\n ```shell\n knows -f json > graph.json\n # or\n knows -f json graph.json\n ```\n10. Create a graph with custom properties (20 nodes, 10 edges) and show it:\n ```shell\n knows -n 20 -e 10 -np firstName favoriteColor job -ep lastMeetingCity\n ```\n11. Create a graph with all possible properties in YARS-PG format and save it to file:\n ```shell\n knows -ap > graph.yarspg\n # or\n knows -ap graph.yarspg\n ```\n12. Generate a reproducible graph in CSV by setting a seed:\n ```shell\n knows -n 3 -e 2 -s 43 -f csv\n ```\n\nRunning the command again with the same seed will produce the identical graph, provided the environment and dependencies\nremain unchanged.\n\n13. Generate the same graph as above but in YARS-PG format:\n\n ```shell\n knows -n 3 -e 2 -s 43\n ```\n\n## Contribute to Knows \ud83d\udc65\n\nYour ideas and contributions can make Knows even better! If you're new to open source,\nread [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)\nand [CONTRIBUTING.md](https://github.com/lszeremeta/knows/blob/main/CONTRIBUTING.md).\n\n## License \ud83d\udcdc\n\nKnows is licensed under the [MIT License](https://github.com/lszeremeta/knows/blob/main/LICENSE).\n",
"bugtrack_url": null,
"license": null,
"summary": "Powerful and user-friendly property graph benchmark that creates graphs with specified node and edge numbers, supporting multiple output formats and visualization",
"version": "2.0.2",
"project_urls": {
"Changelog": "https://github.com/lszeremeta/knows/releases",
"Homepage": "https://github.com/lszeremeta/knows",
"Issues": "https://github.com/lszeremeta/knows/issues",
"Repository": "https://github.com/lszeremeta/knows"
},
"split_keywords": [
"knows",
" benchmark",
" yarspg",
" graphs",
" mathematics",
" cli",
" graphml",
" yars-pg",
" property graph",
" graph",
" graph database",
" graph data",
" neo4j",
" networkx",
" faker",
" graph analysis",
" benchmarking",
" graph visualization",
" data science",
" graph algorithms",
" network analysis",
" graph tool",
" data analytics",
" educational tool",
" research tool",
" graph generation",
" python graph",
" docker graph tool",
" command line interface",
" cli tool",
" json",
" svg",
" data visualization"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "05b289fb2790213c3aacd1e0c923f4863a53a52222f726501cc81bd624d1040f",
"md5": "3f239a077f8ea9f2f4a5ffa997bfe0bb",
"sha256": "38b2755a0f6640efa80f5853986c423e329518453c0cfe8f84f1fa1b636bb1e5"
},
"downloads": -1,
"filename": "knows-2.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3f239a077f8ea9f2f4a5ffa997bfe0bb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 13460,
"upload_time": "2025-08-21T19:15:37",
"upload_time_iso_8601": "2025-08-21T19:15:37.345993Z",
"url": "https://files.pythonhosted.org/packages/05/b2/89fb2790213c3aacd1e0c923f4863a53a52222f726501cc81bd624d1040f/knows-2.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6ffad9ed8976203ca323b1d599b5ecf880aecbba097339f3f364b94ab0b18568",
"md5": "bbe72c093c16c97bcd01c832d05acf15",
"sha256": "a4bb97429a74513b65613b56749052c5dc7b27a3a86d199975deb49cf5e6953b"
},
"downloads": -1,
"filename": "knows-2.0.2.tar.gz",
"has_sig": false,
"md5_digest": "bbe72c093c16c97bcd01c832d05acf15",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 20570,
"upload_time": "2025-08-21T19:15:38",
"upload_time_iso_8601": "2025-08-21T19:15:38.624471Z",
"url": "https://files.pythonhosted.org/packages/6f/fa/d9ed8976203ca323b1d599b5ecf880aecbba097339f3f364b94ab0b18568/knows-2.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-21 19:15:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lszeremeta",
"github_project": "knows",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "knows"
}