dnnets


Namednnets JSON
Version 0.2.1 PyPI version JSON
download
home_pageNone
SummaryRunning multilayer perceptrons on the CPU
upload_time2025-10-24 14:30:35
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords feedforward multilayer perceptron neural network
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # dnnets

This is a lightweight and dependency-free library to run multilayer perceptrons
on the CPU.
Given a model and an input, it will compute the output of a forward pass.
Nothing more.
The computation of a single pass runs in a single thread.
Generally, the library tries to make a good trade-off between simplicity and
performance.
A model can be provided as a JSON file (format: see below), DNNF file (format:
see [dnnf.md](dnnf.md)) or created dynamically at runtime.
A model can also be exported to both JSON and DNNF.

> **Note:** in this library, activation functions are also modeled as
> layers.

## Installation

To build and install the shared library along with the header file and a
pkg-config file to `/usr/local` (or another location of your choice), use the
(default) `install` target:

    zig build install -Doptimize=ReleaseFast
    zig build install -Doptimize=ReleaseFast -p /usr/local

To automaticallly build a Python wheel with the provided build script, you need
to have [Hatch](https://hatch.pypa.io/) installed.
For bundling the Python bindings together with the shared library into a wheel,
use `build-wheel-with-lib`:

    zig build build-wheel-with-lib -Doptimize=ReleaseFast

If you only want to include the bindings without the shared library, use
`build-wheel`:

    zig build build-wheel

In both cases, you will find the generated wheel in `zig-out/dist`.

If you'd like to use your own frontend for building the Python wheel, you can
use the `prepare-wheel-with-lib` and `prepare-wheel` targets instead:

    zig build prepare-wheel-with-lib -Doptimize=ReleaseFast
    # or
    zig build prepare-wheel

You can then navigate to `zig-out/wheel-builds/<your target>` and invoke the
frontend of your choice there. Note that hatchling is still used as the
backend.
`<your-target>` is either `any` if the wheel does not contain the shared
library or a combination of `<CPU architecture>-<OS>-<ABI>` otherwise.

If you need to cross compile/build the Python wheel, you can use
`build-all-wheels` which builds the wheels for all available targets:

    zig build build-all-wheels -Doptimize=ReleaseFast

## Using from Zig

This package exposes a module called `dnnets` that you can use in your own Zig
code. Simply add this package to the dependencies in your `build.zig.zon`.
In your build file, you can add the module as an import to your own module with
something similar to this:

```zig
const dnnets_pkg = b.dependency("dnnets", .{});
const dnnets_mod = dnnets_pkg.module("dnnets");
exe_mod.addImport("dnnets", dnnets_mod);
```

The API is available as an online documentation at https://hannesbraun.net/share/doc/dnnets/zig

This is a small example of its usage:

```zig
var model = try dnnets.json.load(allocator, "sample_model.json");
defer model.deinit();
var input = [_]f32{ -3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02 };
const output = model.getOutputBuffer(); // The output buffer will be reused.
model.forwardPass(&input);
```

## C interface

dnnets has a C-compatible ABI. Documentation for the C interface is available in
the header at [include/dnnets.h](include/dnnets.h).

If you don't like browsing the header file directly, there's also an online
version of this documentation available: https://hannesbraun.net/share/doc/dnnets/c

This is the example provided above adjusted for C (without error handling):

```c
dnnets_init(); // Initialize library

struct dnnets_model *model;
dnnets_load_json(&model, "sample_model.json");

const float input[] = { -3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02 };
const float* out_buf = dnnets_get_output_buffer(model);
const unsigned int out_len = dnnets_get_output_len(model);
dnnets_forward_pass(model, input, 4);

dnnets_free_model(model);

dnnets_deinit(); // Deinitialize library
```

## Python bindings

dnnets provides Python bindings. You can install the package (including the
native library) via the PyPI:

    pip install dnnets

You can find a documentation of the Python API here: https://hannesbraun.net/share/doc/dnnets/python

The Python bindings can optionally be used together with NumPy. This feature can
be enabled using `dnnets.enable_numpy()`. Then, all weights, biases and inputs
need to be NumPy arrays. Outputs will then also be NumPy arrays.

Here's a quick example:

```python
import dnnets

model = dnnets.load_json("sample_model.json")
input = [-3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02]
output = model.forward_pass(input)
```

## JSON format

Models can be stored in a JSON format.
This is simply an object.
The object has two attributes: `input_size` and `layers`.
`input_size` is the size of the input that the model accepts.
`layers` is an array of Layers.
Each layer has a `type` attribute that describes the layer type and a `size`
attribute describing the size of the layer (the number of outgoing values).
A layer type can be one of the following:
- `linear`
- `layer_norm`
- `elu`
- `leaky_relu`
- `relu`
- `relu6`
- `sigmoid`
- `tanh`
- `clip`

You can also have a view at [sample_model.json](sample_model.json) to see how
this looks as a whole.

### Linear

This is an example for a linear layer where the previous layer has 2 outputs and
this layer has 3 outputs.

```json
{
    "type": "linear",
    "size": 3,
    "weight": [
        [0.1, 0.2],
        [0.4, 0.4],
        [0.5, 0.6]
    ],
    "bias": [0.1, 0.2, 0.3]
}
```

### Layer Normalization

This is an example for a layer normalization layer.

```json
{
    "type": "layer_norm",
    "size": 3,
    "weight": [0.1, 0.2, 0.3],
    "bias": [0.1, 0.2, 0.3],
    "eps": 0.00001
}
```

`eps` is an optional attribute with a default value of `1e-5`.

### ELU
This is an example for an ELU layer.

```json
{
    "type": "elu",
    "size": 3,
    "alpha": 0.9
}
```

`alpha` is an optional attribute with a default value of `1.0`.

### LeakyReLU
This is an example for an ELU layer.

```json
{
    "type": "leaky_relu",
    "size": 3,
    "negative_slope": 0.1
}
```

`negative_slope` is an optional attribute with a default value of `0.01`.

### ReLU
This is the representation of a ReLU layer.

```json
{
    "type": "relu",
    "size": 3
}
```

### ReLU6
This is the representation of a ReLU6 layer.

```json
{
    "type": "relu6",
    "size": 3
}
```

### Sigmoid
This is the representation of a sigmoid layer.

```json
{
    "type": "sigmoid",
    "size": 3
}
```

### Tanh
This is the representation of a Tanh layer.

```json
{
    "type": "tanh",
    "size": 3
}
```

### Clip
This is an example for a clipping layer.

```json
{
    "type": "clip",
    "size": 3,
    "min": -3.0,
    "max": 3.0
}
```

## License

This library is licensed under the terms of the GNU Lesser General Public
License (version 3 only) as published by the Free Software Foundation.
For more information, see [LICENSE](LICENSE).


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "dnnets",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "Feedforward, Multilayer perceptron, Neural Network",
    "author": null,
    "author_email": "Hannes Braun <hannes@hannesbraun.net>",
    "download_url": "https://files.pythonhosted.org/packages/dc/7d/0927f36077eafa6980317422a29a2ecaa745f7b7a7ab1f0865b29f33aaf3/dnnets-0.2.1.tar.gz",
    "platform": null,
    "description": "# dnnets\n\nThis is a lightweight and dependency-free library to run multilayer perceptrons\non the CPU.\nGiven a model and an input, it will compute the output of a forward pass.\nNothing more.\nThe computation of a single pass runs in a single thread.\nGenerally, the library tries to make a good trade-off between simplicity and\nperformance.\nA model can be provided as a JSON file (format: see below), DNNF file (format:\nsee [dnnf.md](dnnf.md)) or created dynamically at runtime.\nA model can also be exported to both JSON and DNNF.\n\n> **Note:** in this library, activation functions are also modeled as\n> layers.\n\n## Installation\n\nTo build and install the shared library along with the header file and a\npkg-config file to `/usr/local` (or another location of your choice), use the\n(default) `install` target:\n\n    zig build install -Doptimize=ReleaseFast\n    zig build install -Doptimize=ReleaseFast -p /usr/local\n\nTo automaticallly build a Python wheel with the provided build script, you need\nto have [Hatch](https://hatch.pypa.io/) installed.\nFor bundling the Python bindings together with the shared library into a wheel,\nuse `build-wheel-with-lib`:\n\n    zig build build-wheel-with-lib -Doptimize=ReleaseFast\n\nIf you only want to include the bindings without the shared library, use\n`build-wheel`:\n\n    zig build build-wheel\n\nIn both cases, you will find the generated wheel in `zig-out/dist`.\n\nIf you'd like to use your own frontend for building the Python wheel, you can\nuse the `prepare-wheel-with-lib` and `prepare-wheel` targets instead:\n\n    zig build prepare-wheel-with-lib -Doptimize=ReleaseFast\n    # or\n    zig build prepare-wheel\n\nYou can then navigate to `zig-out/wheel-builds/<your target>` and invoke the\nfrontend of your choice there. Note that hatchling is still used as the\nbackend.\n`<your-target>` is either `any` if the wheel does not contain the shared\nlibrary or a combination of `<CPU architecture>-<OS>-<ABI>` otherwise.\n\nIf you need to cross compile/build the Python wheel, you can use\n`build-all-wheels` which builds the wheels for all available targets:\n\n    zig build build-all-wheels -Doptimize=ReleaseFast\n\n## Using from Zig\n\nThis package exposes a module called `dnnets` that you can use in your own Zig\ncode. Simply add this package to the dependencies in your `build.zig.zon`.\nIn your build file, you can add the module as an import to your own module with\nsomething similar to this:\n\n```zig\nconst dnnets_pkg = b.dependency(\"dnnets\", .{});\nconst dnnets_mod = dnnets_pkg.module(\"dnnets\");\nexe_mod.addImport(\"dnnets\", dnnets_mod);\n```\n\nThe API is available as an online documentation at https://hannesbraun.net/share/doc/dnnets/zig\n\nThis is a small example of its usage:\n\n```zig\nvar model = try dnnets.json.load(allocator, \"sample_model.json\");\ndefer model.deinit();\nvar input = [_]f32{ -3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02 };\nconst output = model.getOutputBuffer(); // The output buffer will be reused.\nmodel.forwardPass(&input);\n```\n\n## C interface\n\ndnnets has a C-compatible ABI. Documentation for the C interface is available in\nthe header at [include/dnnets.h](include/dnnets.h).\n\nIf you don't like browsing the header file directly, there's also an online\nversion of this documentation available: https://hannesbraun.net/share/doc/dnnets/c\n\nThis is the example provided above adjusted for C (without error handling):\n\n```c\ndnnets_init(); // Initialize library\n\nstruct dnnets_model *model;\ndnnets_load_json(&model, \"sample_model.json\");\n\nconst float input[] = { -3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02 };\nconst float* out_buf = dnnets_get_output_buffer(model);\nconst unsigned int out_len = dnnets_get_output_len(model);\ndnnets_forward_pass(model, input, 4);\n\ndnnets_free_model(model);\n\ndnnets_deinit(); // Deinitialize library\n```\n\n## Python bindings\n\ndnnets provides Python bindings. You can install the package (including the\nnative library) via the PyPI:\n\n    pip install dnnets\n\nYou can find a documentation of the Python API here: https://hannesbraun.net/share/doc/dnnets/python\n\nThe Python bindings can optionally be used together with NumPy. This feature can\nbe enabled using `dnnets.enable_numpy()`. Then, all weights, biases and inputs\nneed to be NumPy arrays. Outputs will then also be NumPy arrays.\n\nHere's a quick example:\n\n```python\nimport dnnets\n\nmodel = dnnets.load_json(\"sample_model.json\")\ninput = [-3.5987e-01, -4.6701e-01, 1.6226e+00, 5.3634e-02]\noutput = model.forward_pass(input)\n```\n\n## JSON format\n\nModels can be stored in a JSON format.\nThis is simply an object.\nThe object has two attributes: `input_size` and `layers`.\n`input_size` is the size of the input that the model accepts.\n`layers` is an array of Layers.\nEach layer has a `type` attribute that describes the layer type and a `size`\nattribute describing the size of the layer (the number of outgoing values).\nA layer type can be one of the following:\n- `linear`\n- `layer_norm`\n- `elu`\n- `leaky_relu`\n- `relu`\n- `relu6`\n- `sigmoid`\n- `tanh`\n- `clip`\n\nYou can also have a view at [sample_model.json](sample_model.json) to see how\nthis looks as a whole.\n\n### Linear\n\nThis is an example for a linear layer where the previous layer has 2 outputs and\nthis layer has 3 outputs.\n\n```json\n{\n    \"type\": \"linear\",\n    \"size\": 3,\n    \"weight\": [\n        [0.1, 0.2],\n        [0.4, 0.4],\n        [0.5, 0.6]\n    ],\n    \"bias\": [0.1, 0.2, 0.3]\n}\n```\n\n### Layer Normalization\n\nThis is an example for a layer normalization layer.\n\n```json\n{\n    \"type\": \"layer_norm\",\n    \"size\": 3,\n    \"weight\": [0.1, 0.2, 0.3],\n    \"bias\": [0.1, 0.2, 0.3],\n    \"eps\": 0.00001\n}\n```\n\n`eps` is an optional attribute with a default value of `1e-5`.\n\n### ELU\nThis is an example for an ELU layer.\n\n```json\n{\n    \"type\": \"elu\",\n    \"size\": 3,\n    \"alpha\": 0.9\n}\n```\n\n`alpha` is an optional attribute with a default value of `1.0`.\n\n### LeakyReLU\nThis is an example for an ELU layer.\n\n```json\n{\n    \"type\": \"leaky_relu\",\n    \"size\": 3,\n    \"negative_slope\": 0.1\n}\n```\n\n`negative_slope` is an optional attribute with a default value of `0.01`.\n\n### ReLU\nThis is the representation of a ReLU layer.\n\n```json\n{\n    \"type\": \"relu\",\n    \"size\": 3\n}\n```\n\n### ReLU6\nThis is the representation of a ReLU6 layer.\n\n```json\n{\n    \"type\": \"relu6\",\n    \"size\": 3\n}\n```\n\n### Sigmoid\nThis is the representation of a sigmoid layer.\n\n```json\n{\n    \"type\": \"sigmoid\",\n    \"size\": 3\n}\n```\n\n### Tanh\nThis is the representation of a Tanh layer.\n\n```json\n{\n    \"type\": \"tanh\",\n    \"size\": 3\n}\n```\n\n### Clip\nThis is an example for a clipping layer.\n\n```json\n{\n    \"type\": \"clip\",\n    \"size\": 3,\n    \"min\": -3.0,\n    \"max\": 3.0\n}\n```\n\n## License\n\nThis library is licensed under the terms of the GNU Lesser General Public\nLicense (version 3 only) as published by the Free Software Foundation.\nFor more information, see [LICENSE](LICENSE).\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Running multilayer perceptrons on the CPU",
    "version": "0.2.1",
    "project_urls": {
        "Changelog": "https://git.sr.ht/~hannes/dnnets/refs",
        "Documentation": "https://hannesbraun.net/share/doc/dnnets/python/index.html",
        "Homepage": "https://git.sr.ht/~hannes/dnnets",
        "Repository": "https://git.sr.ht/~hannes/dnnets"
    },
    "split_keywords": [
        "feedforward",
        " multilayer perceptron",
        " neural network"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "64875d4b37670de28588ba39ecba82eb91a126f65b9234a3d4afce2d5b2f33a0",
                "md5": "d8739becba2065914837ec995ea304dd",
                "sha256": "b85f4038ced8a5e30fae003ed9188394bb7739464aa7e59cc177e0e7d086845f"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-macosx_10_7_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d8739becba2065914837ec995ea304dd",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 185916,
            "upload_time": "2025-10-24T14:29:53",
            "upload_time_iso_8601": "2025-10-24T14:29:53.970459Z",
            "url": "https://files.pythonhosted.org/packages/64/87/5d4b37670de28588ba39ecba82eb91a126f65b9234a3d4afce2d5b2f33a0/dnnets-0.2.1-py3-none-macosx_10_7_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b75da99dea0f3b1f8d5e936d38c22368b7b0f789aa9be1c15f96c43b364151c1",
                "md5": "617999624f03ff0e9a22e3a1951d893c",
                "sha256": "4d57da644ce4911ffc3f3208ad464cbedb594f877d27f5146a8694f7d4f7aee3"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "617999624f03ff0e9a22e3a1951d893c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 173542,
            "upload_time": "2025-10-24T14:29:55",
            "upload_time_iso_8601": "2025-10-24T14:29:55.632102Z",
            "url": "https://files.pythonhosted.org/packages/b7/5d/a99dea0f3b1f8d5e936d38c22368b7b0f789aa9be1c15f96c43b364151c1/dnnets-0.2.1-py3-none-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "001d6eedd9f9fc16db96445e8c5e9d08e16043884c4031ac1f12010efa1be543",
                "md5": "86aae33bd28c8f8365227bc9054c4b70",
                "sha256": "d7872e1a8f649177da2023d2190c2bf4964bed89eab78adbe52ad19f4ee7d934"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_aarch64.whl",
            "has_sig": false,
            "md5_digest": "86aae33bd28c8f8365227bc9054c4b70",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 597959,
            "upload_time": "2025-10-24T14:29:57",
            "upload_time_iso_8601": "2025-10-24T14:29:57.876105Z",
            "url": "https://files.pythonhosted.org/packages/00/1d/6eedd9f9fc16db96445e8c5e9d08e16043884c4031ac1f12010efa1be543/dnnets-0.2.1-py3-none-manylinux_2_35_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "877d33f7496c703feedade42d9246849ac292535bd84d97f8cf0964a301881d7",
                "md5": "eeeaeffe8046efe5aa2e99a479bb155f",
                "sha256": "8f63bb1d647a1386ced101b45f2f42c36b98352964e1729c65989dd3a73bd40d"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_armv7l.whl",
            "has_sig": false,
            "md5_digest": "eeeaeffe8046efe5aa2e99a479bb155f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 855047,
            "upload_time": "2025-10-24T14:30:00",
            "upload_time_iso_8601": "2025-10-24T14:30:00.779140Z",
            "url": "https://files.pythonhosted.org/packages/87/7d/33f7496c703feedade42d9246849ac292535bd84d97f8cf0964a301881d7/dnnets-0.2.1-py3-none-manylinux_2_35_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ebf57705584a2e9e4dc6b6939601330066354a1e6434006fed82717f54120cba",
                "md5": "e59da204b0eefcb4134cdf829a8deb70",
                "sha256": "72f5d8506cf6fd39554b62b3be6d37a4fc9bf7fcb65ce103bca223350e6c66b7"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_i686.whl",
            "has_sig": false,
            "md5_digest": "e59da204b0eefcb4134cdf829a8deb70",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 622045,
            "upload_time": "2025-10-24T14:30:03",
            "upload_time_iso_8601": "2025-10-24T14:30:03.598442Z",
            "url": "https://files.pythonhosted.org/packages/eb/f5/7705584a2e9e4dc6b6939601330066354a1e6434006fed82717f54120cba/dnnets-0.2.1-py3-none-manylinux_2_35_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "13e6aebb279d5a99ca41c8508520303254bdab423f6313e461cc778fa675ae17",
                "md5": "1598363833e8a507786d9b1742cab81f",
                "sha256": "3a35208a827d18961752f534df923ae69de510367efcc462091b07fd295ad832"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "1598363833e8a507786d9b1742cab81f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 579602,
            "upload_time": "2025-10-24T14:30:06",
            "upload_time_iso_8601": "2025-10-24T14:30:06.959350Z",
            "url": "https://files.pythonhosted.org/packages/13/e6/aebb279d5a99ca41c8508520303254bdab423f6313e461cc778fa675ae17/dnnets-0.2.1-py3-none-manylinux_2_35_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "232f92c5e22d6b119fa90ec1166e144fd4ca2d295a8ff1f12dba9f63397f1a26",
                "md5": "d01af2fcf7b47c8efd8953f814057a79",
                "sha256": "ddc2ccf1038fcb786d723629b3b47088e687e95c714d948e8d649ae5be905f0d"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_riscv64.whl",
            "has_sig": false,
            "md5_digest": "d01af2fcf7b47c8efd8953f814057a79",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 731854,
            "upload_time": "2025-10-24T14:30:10",
            "upload_time_iso_8601": "2025-10-24T14:30:10.877454Z",
            "url": "https://files.pythonhosted.org/packages/23/2f/92c5e22d6b119fa90ec1166e144fd4ca2d295a8ff1f12dba9f63397f1a26/dnnets-0.2.1-py3-none-manylinux_2_35_riscv64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "143897848dcf1a85bb32a083497e5a1a9b9e6df240b5a7f43d6661dc956a74a9",
                "md5": "afe06e8b3d42f975a32a6b22fc1824f8",
                "sha256": "e9767a5358cddee720bd6da0c30fac42d2ba8177908b1a310586a40a188730a2"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_s390x.whl",
            "has_sig": false,
            "md5_digest": "afe06e8b3d42f975a32a6b22fc1824f8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 899139,
            "upload_time": "2025-10-24T14:30:13",
            "upload_time_iso_8601": "2025-10-24T14:30:13.765569Z",
            "url": "https://files.pythonhosted.org/packages/14/38/97848dcf1a85bb32a083497e5a1a9b9e6df240b5a7f43d6661dc956a74a9/dnnets-0.2.1-py3-none-manylinux_2_35_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7544dfe851b75b1d8114f24b304fa8dfe8b0acd4dc763f80a08309e26af4e6fc",
                "md5": "fe81e91e4c82aedd202893ecf4f6e986",
                "sha256": "03a626c6310f456cb6cb16aea25e4b5cad45774ae4eb99cf227488622cf91ff2"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-manylinux_2_35_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fe81e91e4c82aedd202893ecf4f6e986",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 607758,
            "upload_time": "2025-10-24T14:30:15",
            "upload_time_iso_8601": "2025-10-24T14:30:15.768377Z",
            "url": "https://files.pythonhosted.org/packages/75/44/dfe851b75b1d8114f24b304fa8dfe8b0acd4dc763f80a08309e26af4e6fc/dnnets-0.2.1-py3-none-manylinux_2_35_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0b6a5d3c1b98ffc9fd68c253d0705015e454543b9e10d4f3d3e808b9e511d14a",
                "md5": "9f9cf501c3ec4a167c5d289dfd3331e0",
                "sha256": "463c4661dd16cc98af9e44279d82d9afd22cd9199aa6d59091121c09386b7271"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "9f9cf501c3ec4a167c5d289dfd3331e0",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 596722,
            "upload_time": "2025-10-24T14:30:17",
            "upload_time_iso_8601": "2025-10-24T14:30:17.465418Z",
            "url": "https://files.pythonhosted.org/packages/0b/6a/5d3c1b98ffc9fd68c253d0705015e454543b9e10d4f3d3e808b9e511d14a/dnnets-0.2.1-py3-none-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0e79c386866ac43465b3b79a34c3fa28bb096800a7f59caca3eea3766c190ea4",
                "md5": "e8a792584782cc96a5c58198feff2a66",
                "sha256": "1e655a6ebb4b2b4b88f7b10ac8240d0279cf83d28e0200c36235f3b55dd245ac"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_armv7l.whl",
            "has_sig": false,
            "md5_digest": "e8a792584782cc96a5c58198feff2a66",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 854347,
            "upload_time": "2025-10-24T14:30:19",
            "upload_time_iso_8601": "2025-10-24T14:30:19.443210Z",
            "url": "https://files.pythonhosted.org/packages/0e/79/c386866ac43465b3b79a34c3fa28bb096800a7f59caca3eea3766c190ea4/dnnets-0.2.1-py3-none-musllinux_1_2_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1329732c9f61fc05f07172820403487ea30360ec2504441e99f344672eb361b9",
                "md5": "aff2f9ac87c52e38c5cc3023b6f7a966",
                "sha256": "95f8f2007f2186fe671222ae127401284beabb1a47c5bade8475aa3cda6461ce"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "aff2f9ac87c52e38c5cc3023b6f7a966",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 823298,
            "upload_time": "2025-10-24T14:30:21",
            "upload_time_iso_8601": "2025-10-24T14:30:21.165344Z",
            "url": "https://files.pythonhosted.org/packages/13/29/732c9f61fc05f07172820403487ea30360ec2504441e99f344672eb361b9/dnnets-0.2.1-py3-none-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "05f6f1bebc662ef82c2948217ae1cd02c1d4d838ad719a8d6e9ba07b692f61e2",
                "md5": "38c7ce8fb099c6c08fb2ab96fb18f70f",
                "sha256": "1b4a2b136d370701bb6dfc8b4f5b2cfb5b104f6e208208a5230b5403325ad55d"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "38c7ce8fb099c6c08fb2ab96fb18f70f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 579270,
            "upload_time": "2025-10-24T14:30:22",
            "upload_time_iso_8601": "2025-10-24T14:30:22.762402Z",
            "url": "https://files.pythonhosted.org/packages/05/f6/f1bebc662ef82c2948217ae1cd02c1d4d838ad719a8d6e9ba07b692f61e2/dnnets-0.2.1-py3-none-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "52497e3af554201007117ae570c5aa1f7105eb1819be5a856d26b479ca2a669e",
                "md5": "717f388735ec2626bb26f34f0068c41a",
                "sha256": "1c39ad87f9d914e437f2fa25ba1879ad23736b4440629cb4b99f8048fd6f2e65"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_riscv64.whl",
            "has_sig": false,
            "md5_digest": "717f388735ec2626bb26f34f0068c41a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 731407,
            "upload_time": "2025-10-24T14:30:25",
            "upload_time_iso_8601": "2025-10-24T14:30:25.442002Z",
            "url": "https://files.pythonhosted.org/packages/52/49/7e3af554201007117ae570c5aa1f7105eb1819be5a856d26b479ca2a669e/dnnets-0.2.1-py3-none-musllinux_1_2_riscv64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9842f27de29e4717c260b1630b7051a1e0211002198569a6fbfdcb26deafdda5",
                "md5": "49e0927654eaa3b9084ce3636e418351",
                "sha256": "b4a9bc3e726872b1c1293b1832360db1a573ef03719e5e5d298a1e4e8657aef1"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_s390x.whl",
            "has_sig": false,
            "md5_digest": "49e0927654eaa3b9084ce3636e418351",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 898393,
            "upload_time": "2025-10-24T14:30:27",
            "upload_time_iso_8601": "2025-10-24T14:30:27.346507Z",
            "url": "https://files.pythonhosted.org/packages/98/42/f27de29e4717c260b1630b7051a1e0211002198569a6fbfdcb26deafdda5/dnnets-0.2.1-py3-none-musllinux_1_2_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "50306875d7f2c5db46afa393dc227b7eea00710432ca44518fad77b008442c69",
                "md5": "285f966b1d2b7bca0494e5757234c049",
                "sha256": "475f36521a76719258320c0adff22500632e0087fae6bb88ecebd5b6d6111cf7"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "285f966b1d2b7bca0494e5757234c049",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 607774,
            "upload_time": "2025-10-24T14:30:29",
            "upload_time_iso_8601": "2025-10-24T14:30:29.268557Z",
            "url": "https://files.pythonhosted.org/packages/50/30/6875d7f2c5db46afa393dc227b7eea00710432ca44518fad77b008442c69/dnnets-0.2.1-py3-none-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "076f90f1268eda9c1fe2674f986384c527483f97b1f90d7838d32e8b1ed26cf3",
                "md5": "68e0283e578d984d7f671c42618ab400",
                "sha256": "24f1d2d7f28e86918be88fdc6fae1beaba56fa9ff75e6cf74d7861a3c267fdd8"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-win32.whl",
            "has_sig": false,
            "md5_digest": "68e0283e578d984d7f671c42618ab400",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 253070,
            "upload_time": "2025-10-24T14:30:30",
            "upload_time_iso_8601": "2025-10-24T14:30:30.517305Z",
            "url": "https://files.pythonhosted.org/packages/07/6f/90f1268eda9c1fe2674f986384c527483f97b1f90d7838d32e8b1ed26cf3/dnnets-0.2.1-py3-none-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6f9cdc0f8b0c6249652140c1cf813f9b14fa509bbd8aae9e446ad19e7737846",
                "md5": "543ca5fbd69c8e3032f67a2c47902a8c",
                "sha256": "d8cbc822fc4f53f60fad6442b6836ad1e07fe8894d74e3f36961132836b77983"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "543ca5fbd69c8e3032f67a2c47902a8c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 233510,
            "upload_time": "2025-10-24T14:30:32",
            "upload_time_iso_8601": "2025-10-24T14:30:32.373022Z",
            "url": "https://files.pythonhosted.org/packages/b6/f9/cdc0f8b0c6249652140c1cf813f9b14fa509bbd8aae9e446ad19e7737846/dnnets-0.2.1-py3-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7d1e2abb4331edd0fe29768564017ddfe1b254ba1d869d22bd7efa130b9a6489",
                "md5": "4ce75b5dc3a7d56dc45532c65088578f",
                "sha256": "6e1ca2f7b8e19c9d8ef98f3bf648af2ba401f46d0ee817538314829d75e4c94c"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1-py3-none-win_arm64.whl",
            "has_sig": false,
            "md5_digest": "4ce75b5dc3a7d56dc45532c65088578f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 215332,
            "upload_time": "2025-10-24T14:30:33",
            "upload_time_iso_8601": "2025-10-24T14:30:33.979261Z",
            "url": "https://files.pythonhosted.org/packages/7d/1e/2abb4331edd0fe29768564017ddfe1b254ba1d869d22bd7efa130b9a6489/dnnets-0.2.1-py3-none-win_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dc7d0927f36077eafa6980317422a29a2ecaa745f7b7a7ab1f0865b29f33aaf3",
                "md5": "2c2e5135f043fc63afd5a39976125b48",
                "sha256": "f13e4cc765ed2b0cfdb2522b9060e85f4beb1341955d47e1ec256a5742988789"
            },
            "downloads": -1,
            "filename": "dnnets-0.2.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2c2e5135f043fc63afd5a39976125b48",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 13101,
            "upload_time": "2025-10-24T14:30:35",
            "upload_time_iso_8601": "2025-10-24T14:30:35.010484Z",
            "url": "https://files.pythonhosted.org/packages/dc/7d/0927f36077eafa6980317422a29a2ecaa745f7b7a7ab1f0865b29f33aaf3/dnnets-0.2.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-24 14:30:35",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "dnnets"
}
        
Elapsed time: 2.57282s