tensorneko-lib


Nametensorneko-lib JSON
Version 0.3.13 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2024-04-23 07:49:08
maintainerNone
docs_urlNone
authorNone
requires_python>=3.7
licenseNone
keywords pytorch ai
VCS
bugtrack_url
requirements torch torchaudio torchvision torchmetrics tensorboard lightning pillow av pysoundfile numpy einops
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <h1 style="text-align: center">TensorNeko</h1> 

<div align="center">
    <img src="https://img.shields.io/github/stars/ControlNet/tensorneko?style=flat-square">
    <img src="https://img.shields.io/github/forks/ControlNet/tensorneko?style=flat-square">
    <a href="https://github.com/ControlNet/tensorneko/issues"><img src="https://img.shields.io/github/issues/ControlNet/tensorneko?style=flat-square"></a>
    <a href="https://pypi.org/project/tensorneko/"><img src="https://img.shields.io/pypi/v/tensorneko?style=flat-square"></a>
    <a href="https://pypi.org/project/tensorneko/"><img src="https://img.shields.io/pypi/dm/tensorneko?style=flat-square"></a>
    <img src="https://img.shields.io/github/license/ControlNet/tensorneko?style=flat-square">
</div>

<div align="center">    
    <a href="https://www.python.org/"><img src="https://img.shields.io/pypi/pyversions/tensorneko?style=flat-square"></a>
    <a href="https://pytorch.org/"><img src="https://img.shields.io/badge/PyTorch-%3E%3D1.9.0-EE4C2C?style=flat-square&logo=pytorch"></a>
    <a href="https://www.pytorchlightning.ai/"><img src="https://img.shields.io/badge/Lightning-2.0.*%20|%202.1.*%20|%202.2.*-792EE5?style=flat-square&logo=lightning"></a>
</div>

<div align="center">
    <a href="https://github.com/ControlNet/tensorneko/actions"><img src="https://img.shields.io/github/actions/workflow/status/ControlNet/tensorneko/unittest.yml?branch=dev&label=unittest&style=flat-square"></a>
    <a href="https://github.com/ControlNet/tensorneko/actions"><img src="https://img.shields.io/github/actions/workflow/status/ControlNet/tensorneko/release.yml?branch=master&label=release&style=flat-square"></a>
    <a href="https://coveralls.io/github/ControlNet/tensorneko"><img src="https://img.shields.io/coverallsCoverage/github/ControlNet/tensorneko?style=flat-square"></a>
</div>

Tensor Neural Engine Kompanion. An util library based on PyTorch and PyTorch Lightning.

## Install

```shell
pip install tensorneko
```

To use the library without PyTorch and PyTorch Lightning, you can install the util library (support Python 3.7 ~ 3.12 with limited features) with following command.
```shell
pip install tensorneko_util
```

Some cpu bound functions are implemented by `pyo3`, and you can install the optimized version with below command.
```shell
pip install tensorneko_lib
```

## Neko Layers, Modules and Architectures

Build an MLP with linear layers. The activation and normalization will be placed in the hidden layers.

784 -> 1024 -> 512 -> 10

```python
import tensorneko as neko
import torch.nn

mlp = neko.module.MLP(
    neurons=[784, 1024, 512, 10],
    build_activation=torch.nn.ReLU,
    build_normalization=[
        lambda: torch.nn.BatchNorm1d(1024),
        lambda: torch.nn.BatchNorm1d(512)
    ],
    dropout_rate=0.5
)
```

Build a Conv2d with activation and normalization.

```python
import tensorneko as neko
import torch.nn

conv2d = neko.layer.Conv2d(
    in_channels=256,
    out_channels=1024,
    kernel_size=(3, 3),
    padding=(1, 1),
    build_activation=torch.nn.ReLU,
    build_normalization=lambda: torch.nn.BatchNorm2d(256),
    normalization_after_activation=False
)
```

#### All architectures, modules and layers

Layers:

- `Aggregation`
- `Concatenate`
- `Conv`, `Conv1d`, `Conv2d`, `Conv3d`
- `GaussianNoise`
- `ImageAttention`, `SeqAttention`
- `MaskedConv2d`, `MaskedConv2dA`, `MaskedConv2dB`
- `Linear`
- `Log`
- `PatchEmbedding2d`
- `PositionalEmbedding`
- `Reshape`
- `Stack`
- `VectorQuantizer`

Modules:

- `DenseBlock`
- `InceptionModule`
- `MLP`
- `ResidualBlock` and `ResidualModule`
- `AttentionModule`, `TransformerEncoderBlock` and `TransformerEncoder`
- `GatedConv`

Architectures:
- `AutoEncoder`
- `GAN`
- `WGAN`
- `VQVAE`

## Neko modules

All `tensorneko.layer` and `tensorneko.module` are `NekoModule`. They can be used in 
[fn.py](https://github.com/kachayev/fn.py) pipe operation.

```python
from tensorneko.layer import Linear
from torch.nn import ReLU
import torch

linear0 = Linear(16, 128, build_activation=ReLU)
linear1 = Linear(128, 1)

f = linear0 >> linear1
print(f(torch.rand(16)).shape)
# torch.Size([1])
```

## Neko IO

Easily load and save different modal data.

```python
import tensorneko as neko
from tensorneko.io import json_data
from typing import List

# read video (Temporal, Channel, Height, Width)
video_tensor, audio_tensor, video_info = neko.io.read.video("path/to/video.mp4")
# write video
neko.io.write.video("path/to/video.mp4", 
    video_tensor, video_info.video_fps,
    audio_tensor, video_info.audio_fps
)

# read audio (Channel, Temporal)
audio_tensor, sample_rate = neko.io.read.audio("path/to/audio.wav")
# write audio
neko.io.write.audio("path/to/audio.wav", audio_tensor, sample_rate)

# read image (Channel, Height, Width) with float value in range [0, 1]
image_tensor = neko.io.read.image("path/to/image.png")
# write image
neko.io.write.image("path/to/image.png", image_tensor)
neko.io.write.image("path/to/image.jpg", image_tensor)

# read plain text
text_string = neko.io.read.text("path/to/text.txt")
# write plain text
neko.io.write.text("path/to/text.txt", text_string)

# read json as python dict or list
json_dict = neko.io.read.json("path/to/json.json")
# read json as an object
@json_data
class JsonData:
    x: int
    y: int

json_obj: List[JsonData] = neko.io.read.json("path/to/json.json", cls=List[JsonData])
# write json from python dict/list or json_data decorated object
neko.io.write.json("path/to/json.json", json_dict)
neko.io.write.json("path/to/json.json", json_obj)
```

Besides, the read/write for `mat` and `pickle` files is also supported.


## Neko preprocessing

```python
import tensorneko as neko

# A video tensor with (120, 3, 720, 1280)
video = neko.io.read.video("example/video.mp4").video
# Get a resized tensor with (120, 3, 256, 256)
resized_video = neko.preprocess.resize_video(video, (256, 256))
```

#### All preprocessing utils

- `resize_video`
- `resize_image`
- `padding_video`
- `padding_audio`
- `crop_with_padding`
- `frames2video`

if `ffmpeg` is available, you can use below ffmpeg wrappers.

- `video2frames`
- `merge_video_audio`
- `resample_video_fps`
- `mp32wav`

## Neko Visualization

### Variable Web Watcher
Start a web server to watch the variable status when the program (e.g. training, inference, data preprocessing) is running.
```python
import time
from tensorneko.visualization.watcher import *
data_list = ... # a list of data
def preprocessing(d): ...

# initialize the components
pb = ProgressBar("Processing", total=len(data_list))
logger = Logger("Log message")
var = Variable("Some Value", 0)
line_chart = LineChart("Line Chart", x_label="x", y_label="y")
view = View("Data preprocessing").add_all()

t0 = time.time()
# open server when the code block in running.
with Server(view, port=8000):
    for i, data in enumerate(data_list):
        preprocessing(data) # do some processing here
        
        x = time.time() - t0  # time since the start of the program
        y = i # processed number of data
        line_chart.add(x, y)  # add to the line chart
        logger.log("Some messages")  # log messages to the server
        var.value = ...  # keep tracking a variable
        pb.add(1)  # update the progress bar by add 1
```
When the script is running, go to `127.0.0.1:8000` to keep tracking the status.

### Tensorboard Server

Simply run tensorboard server in Python script.
```python
import tensorneko as neko

with neko.visualization.tensorboard.Server(port=6006):
    trainer.fit(model, dm)
```

### Matplotlib wrappers
Display an image of (C, H, W) shape by `plt.imshow` wrapper.
```python
import tensorneko as neko
import matplotlib.pyplot as plt

image_tensor = ...  # an image tensor with shape (C, H, W)
neko.visualization.matplotlib.imshow(image_tensor)
plt.show()
```

### Predefined colors
Several aesthetic colors are predefined.

```python
import tensorneko as neko
import matplotlib.pyplot as plt

# use with matplotlib
plt.plot(..., color=neko.visualization.Colors.RED)

# the palette for seaborn is also available
from tensorneko_util.visualization.seaborn import palette
import seaborn as sns
sns.set_palette(palette)
```

## Neko Model

Build and train a simple model for classifying MNIST with MLP.

```python
from typing import Optional, Union, Sequence, Dict, List

import torch.nn
from torch import Tensor
from torch.optim import Adam
from torchmetrics import Accuracy
from lightning.pytorch.callbacks import ModelCheckpoint

import tensorneko as neko
from tensorneko.util import get_activation, get_loss


class MnistClassifier(neko.NekoModel):

    def __init__(self, name: str, mlp_neurons: List[int], activation: str, dropout_rate: float, loss: str,
        learning_rate: float, weight_decay: float
    ):
        super().__init__(name)
        self.weight_decay = weight_decay
        self.learning_rate = learning_rate

        self.flatten = torch.nn.Flatten()
        self.mlp = neko.module.MLP(
            neurons=mlp_neurons,
            build_activation=get_activation(activation),
            dropout_rate=dropout_rate
        )
        self.loss_func = get_loss(loss)()
        self.acc_func = Accuracy()

    def forward(self, x):
        # (batch, 28, 28)
        x = self.flatten(x)
        # (batch, 768)
        x = self.mlp(x)
        # (batch, 10)
        return x

    def training_step(self, batch: Optional[Union[Tensor, Sequence[Tensor]]] = None, batch_idx: Optional[int] = None,
        optimizer_idx: Optional[int] = None, hiddens: Optional[Tensor] = None
    ) -> Dict[str, Tensor]:
        x, y = batch
        logit = self(x)
        prob = logit.sigmoid()
        loss = self.loss_func(logit, y)
        acc = self.acc_func(prob.max(dim=1)[1], y)
        return {"loss": loss, "acc": acc}

    def validation_step(self, batch: Optional[Union[Tensor, Sequence[Tensor]]] = None, batch_idx: Optional[int] = None,
        dataloader_idx: Optional[int] = None
    ) -> Dict[str, Tensor]:
        x, y = batch
        logit = self(x)
        prob = logit.sigmoid()
        loss = self.loss_func(logit, y)
        acc = self.acc_func(prob.max(dim=1)[1], y)
        return {"loss": loss, "acc": acc}

    def configure_optimizers(self):
        optimizer = Adam(self.parameters(), lr=self.learning_rate, betas=(0.5, 0.9), weight_decay=self.weight_decay)
        return {
            "optimizer": optimizer
        }


model = MnistClassifier("mnist_mlp_classifier", [784, 1024, 512, 10], "ReLU", 0.5, "CrossEntropyLoss", 1e-4, 1e-4)

dm = ...  # The MNIST datamodule from PyTorch Lightning

trainer = neko.NekoTrainer(log_every_n_steps=100, gpus=1, logger=model.name, precision=32,
    callbacks=[ModelCheckpoint(dirpath="./ckpt",
        save_last=True, filename=model.name + "-{epoch}-{val_acc:.3f}", monitor="val_acc", mode="max"
    )])

trainer.fit(model, dm)
```

## Neko Callbacks

Some simple but useful pytorch-lightning callbacks are provided.

- `DisplayMetricsCallback`
- `EarlyStoppingLR`: Early stop training when learning rate reaches threshold.

## Neko Notebook Helpers
Here are some helper functions to better interact with Jupyter Notebook.
```python
import tensorneko as neko
# display a video
neko.notebook.display.video("path/to/video.mp4")
# display an audio
neko.notebook.display.audio("path/to/audio.wav")
# display a code file
neko.notebook.display.code("path/to/code.java")
```

## Neko Debug Tools

Get the default values from `ArgumentParser` args. It's convenient to use this in the notebook.
```python
from argparse import ArgumentParser
from tensorneko.debug import get_parser_default_args

parser = ArgumentParser()
parser.add_argument("integers", type=int, nargs="+", default=[1, 2, 3])
parser.add_argument("--sum", dest="accumulate", action="store_const", const=sum, default=max)
args = get_parser_default_args(parser)

print(args.integers)  # [1, 2, 3]
print(args.accumulate)  # <function sum at ...>
```

## Neko Evaluation

Some metrics function for evaluation are provided.

- `iou_1d`
- `iou_2d`
- `psnr_video`
- `psnr_image`
- `ssim_video`
- `ssim_image`


## Neko Utilities

### Misc functions

`__`: The arguments to pipe operator. (Inspired from [fn.py](https://github.com/kachayev/fn.py))
```python
from tensorneko.util import __, _
result = __(20) >> (_ + 1) >> (_ * 2) >> __.get
print(result)
# 42
```

`Seq` and `Stream`: A collection wrapper for method chaining with concurrent supporting.
```python
from tensorneko.util import Seq, Stream, _
from tensorneko_util.backend.parallel import ParallelType
# using method chaining
seq = Seq.of(1, 2, 3).map(_ + 1).filter(_ % 2 == 0).map(_ * 2).take(2).to_list()
# return [4, 8]

# using bit shift operator to chain the sequence
seq = Seq.of(1, 2, 3) << Seq.of(2, 3, 4) << [3, 4, 5]
# return Seq(1, 2, 3, 2, 3, 4, 3, 4, 5)

# run concurrent with `for_each` for Stream
if __name__ == '__main__':
    Stream.of(1, 2, 3, 4).for_each(print, progress_bar=True, parallel_type=ParallelType.PROCESS)
```

`Option`: A monad for dealing with data.
```python
from tensorneko.util import return_option

@return_option
def get_data():
    if some_condition:
        return 1
    else:
        return None

def process_data(n: int):
    if condition(n):
        return n
    else:
        return None
    

data = get_data()
data = data.map(process_data).get_or_else(-1)  # if the response is None, return -1
```

`Eval`: A monad for lazy evaluation.
```python
from tensorneko.util import Eval

@Eval.always
def call_by_name_var():
    return 42

@Eval.later
def call_by_need_var():
    return 43

@Eval.now
def call_by_value_var():
    return 44


print(call_by_name_var.value)  # 42
```

### Reactive
This library provides event bus based reactive tools. The API integrates the Python type annotation syntax.

```python
# useful decorators for default event bus
from tensorneko.util import subscribe
# Event base type
from tensorneko.util import Event

class LogEvent(Event):
    def __init__(self, message: str):
        self.message = message

# the event argument should be annotated correctly
@subscribe # run in the main thread
def log_information(event: LogEvent):
    print(event.message)


@subscribe.thread # run in a new thread
def log_information_thread(event: LogEvent):
    print(event.message, "in another thread")


@subscribe.coro # run with async
async def log_information_async(event: LogEvent):
    print(event.message, "async")


@subscribe.process # run in a new process
def log_information_process(event: LogEvent):
    print(event.message, "in a new process")

if __name__ == '__main__':
    # emit an event, and then the event handler will be invoked
    # The sequential order is not guaranteed
    LogEvent("Hello world!")
    # one possible output:
    # Hello world! in another thread
    # Hello world! async
    # Hello world!
    # Hello world! in a new process
```

### Multiple Dispatch

`dispatch`: Multi-dispatch implementation for Python. 

To my knowledge, 3 popular multi-dispatch libraries still have critical limitations. 
[plum](https://github.com/wesselb/plum) doesn't support static methods, 
[mutipledispatch](https://github.com/mrocklin/multipledispatch) doesn't support Python type annotation syntax and 
[multimethod](https://github.com/coady/multimethod) doesn't support default argument. TensorNeko can do it all.

```python
from tensorneko.util import dispatch

class DispatchExample:

    @staticmethod
    @dispatch
    def go() -> None:
        print("Go0")

    @staticmethod
    @dispatch
    def go(x: int) -> None:
        print("Go1")

    @staticmethod
    @dispatch
    def go(x: float, y: float = 1.0) -> None:
        print("Go2")

@dispatch
def come(x: int) -> str:
    return "Come1"

@dispatch.of(str)
def come(x) -> str:
    return "Come2"
```

### Miscellaneous

`StringGetter`: Get PyTorch class from string.
```python
import tensorneko as neko
activation = neko.util.get_activation("leakyRelu")()
```

`Seed`: The universal seed for `numpy`, `torch` and Python `random`.
```python
from tensorneko.util import Seed
from torch.utils.data import DataLoader

# set seed to 42 for all numpy, torch and python random
Seed.set(42)

# Apply seed to parallel workers of DataLoader
DataLoader(
    train_dataset,
    batch_size=batch_size,
    num_workers=num_workers,
    worker_init_fn=Seed.get_loader_worker_init(),
    generator=Seed.get_torch_generator()
)
```

`Timer`: A timer for measuring the time.
```python
from tensorneko.util import Timer
import time

# use as a context manager with single time
with Timer():
    time.sleep(1)

# use as a context manager with multiple segments
with Timer() as t:
    time.sleep(1)
    t.time("sleep A")
    time.sleep(1)
    t.time("sleep B")
    time.sleep(1)

# use as a decorator
@Timer()
def f():
    time.sleep(1)
    print("f")
```

`Singleton`: A decorator to make a class as a singleton. Inspired from Scala/Kotlin.
```python
from tensorneko.util import Singleton

@Singleton
class MyObject:
    def __init__(self):
        self.value = 0

    def add(self, value):
        self.value += value
        return self.value


print(MyObject.value)  # 0
MyObject.add(1)
print(MyObject.value)  # 1
```

Besides, many miscellaneous functions are also provided.


Functions list (in `tensorneko_util`):
- `generate_inf_seq`
- `compose`
- `listdir`
- `with_printed`
- `ifelse`
- `dict_add`
- `as_list`
- `identity`
- `list_to_dict`
- `get_tensorneko_util_path`

Functions list (in `tensorneko`):
- `reduce_dict_by`
- `summarize_dict_by`
- `with_printed_shape`
- `is_bad_num`
- `count_parameters`


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tensorneko-lib",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "pytorch, AI",
    "author": null,
    "author_email": "ControlNet <smczx@hotmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/98/0f/2dc5e43cebcfa27551bc9257f58c807ba3727992412e47bfee4e0f83515d/tensorneko_lib-0.3.13.tar.gz",
    "platform": null,
    "description": "<h1 style=\"text-align: center\">TensorNeko</h1> \n\n<div align=\"center\">\n    <img src=\"https://img.shields.io/github/stars/ControlNet/tensorneko?style=flat-square\">\n    <img src=\"https://img.shields.io/github/forks/ControlNet/tensorneko?style=flat-square\">\n    <a href=\"https://github.com/ControlNet/tensorneko/issues\"><img src=\"https://img.shields.io/github/issues/ControlNet/tensorneko?style=flat-square\"></a>\n    <a href=\"https://pypi.org/project/tensorneko/\"><img src=\"https://img.shields.io/pypi/v/tensorneko?style=flat-square\"></a>\n    <a href=\"https://pypi.org/project/tensorneko/\"><img src=\"https://img.shields.io/pypi/dm/tensorneko?style=flat-square\"></a>\n    <img src=\"https://img.shields.io/github/license/ControlNet/tensorneko?style=flat-square\">\n</div>\n\n<div align=\"center\">    \n    <a href=\"https://www.python.org/\"><img src=\"https://img.shields.io/pypi/pyversions/tensorneko?style=flat-square\"></a>\n    <a href=\"https://pytorch.org/\"><img src=\"https://img.shields.io/badge/PyTorch-%3E%3D1.9.0-EE4C2C?style=flat-square&logo=pytorch\"></a>\n    <a href=\"https://www.pytorchlightning.ai/\"><img src=\"https://img.shields.io/badge/Lightning-2.0.*%20|%202.1.*%20|%202.2.*-792EE5?style=flat-square&logo=lightning\"></a>\n</div>\n\n<div align=\"center\">\n    <a href=\"https://github.com/ControlNet/tensorneko/actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/ControlNet/tensorneko/unittest.yml?branch=dev&label=unittest&style=flat-square\"></a>\n    <a href=\"https://github.com/ControlNet/tensorneko/actions\"><img src=\"https://img.shields.io/github/actions/workflow/status/ControlNet/tensorneko/release.yml?branch=master&label=release&style=flat-square\"></a>\n    <a href=\"https://coveralls.io/github/ControlNet/tensorneko\"><img src=\"https://img.shields.io/coverallsCoverage/github/ControlNet/tensorneko?style=flat-square\"></a>\n</div>\n\nTensor Neural Engine Kompanion. An util library based on PyTorch and PyTorch Lightning.\n\n## Install\n\n```shell\npip install tensorneko\n```\n\nTo use the library without PyTorch and PyTorch Lightning, you can install the util library (support Python 3.7 ~ 3.12 with limited features) with following command.\n```shell\npip install tensorneko_util\n```\n\nSome cpu bound functions are implemented by `pyo3`, and you can install the optimized version with below command.\n```shell\npip install tensorneko_lib\n```\n\n## Neko Layers, Modules and Architectures\n\nBuild an MLP with linear layers. The activation and normalization will be placed in the hidden layers.\n\n784 -> 1024 -> 512 -> 10\n\n```python\nimport tensorneko as neko\nimport torch.nn\n\nmlp = neko.module.MLP(\n    neurons=[784, 1024, 512, 10],\n    build_activation=torch.nn.ReLU,\n    build_normalization=[\n        lambda: torch.nn.BatchNorm1d(1024),\n        lambda: torch.nn.BatchNorm1d(512)\n    ],\n    dropout_rate=0.5\n)\n```\n\nBuild a Conv2d with activation and normalization.\n\n```python\nimport tensorneko as neko\nimport torch.nn\n\nconv2d = neko.layer.Conv2d(\n    in_channels=256,\n    out_channels=1024,\n    kernel_size=(3, 3),\n    padding=(1, 1),\n    build_activation=torch.nn.ReLU,\n    build_normalization=lambda: torch.nn.BatchNorm2d(256),\n    normalization_after_activation=False\n)\n```\n\n#### All architectures, modules and layers\n\nLayers:\n\n- `Aggregation`\n- `Concatenate`\n- `Conv`, `Conv1d`, `Conv2d`, `Conv3d`\n- `GaussianNoise`\n- `ImageAttention`, `SeqAttention`\n- `MaskedConv2d`, `MaskedConv2dA`, `MaskedConv2dB`\n- `Linear`\n- `Log`\n- `PatchEmbedding2d`\n- `PositionalEmbedding`\n- `Reshape`\n- `Stack`\n- `VectorQuantizer`\n\nModules:\n\n- `DenseBlock`\n- `InceptionModule`\n- `MLP`\n- `ResidualBlock` and `ResidualModule`\n- `AttentionModule`, `TransformerEncoderBlock` and `TransformerEncoder`\n- `GatedConv`\n\nArchitectures:\n- `AutoEncoder`\n- `GAN`\n- `WGAN`\n- `VQVAE`\n\n## Neko modules\n\nAll `tensorneko.layer` and `tensorneko.module` are `NekoModule`. They can be used in \n[fn.py](https://github.com/kachayev/fn.py) pipe operation.\n\n```python\nfrom tensorneko.layer import Linear\nfrom torch.nn import ReLU\nimport torch\n\nlinear0 = Linear(16, 128, build_activation=ReLU)\nlinear1 = Linear(128, 1)\n\nf = linear0 >> linear1\nprint(f(torch.rand(16)).shape)\n# torch.Size([1])\n```\n\n## Neko IO\n\nEasily load and save different modal data.\n\n```python\nimport tensorneko as neko\nfrom tensorneko.io import json_data\nfrom typing import List\n\n# read video (Temporal, Channel, Height, Width)\nvideo_tensor, audio_tensor, video_info = neko.io.read.video(\"path/to/video.mp4\")\n# write video\nneko.io.write.video(\"path/to/video.mp4\", \n    video_tensor, video_info.video_fps,\n    audio_tensor, video_info.audio_fps\n)\n\n# read audio (Channel, Temporal)\naudio_tensor, sample_rate = neko.io.read.audio(\"path/to/audio.wav\")\n# write audio\nneko.io.write.audio(\"path/to/audio.wav\", audio_tensor, sample_rate)\n\n# read image (Channel, Height, Width) with float value in range [0, 1]\nimage_tensor = neko.io.read.image(\"path/to/image.png\")\n# write image\nneko.io.write.image(\"path/to/image.png\", image_tensor)\nneko.io.write.image(\"path/to/image.jpg\", image_tensor)\n\n# read plain text\ntext_string = neko.io.read.text(\"path/to/text.txt\")\n# write plain text\nneko.io.write.text(\"path/to/text.txt\", text_string)\n\n# read json as python dict or list\njson_dict = neko.io.read.json(\"path/to/json.json\")\n# read json as an object\n@json_data\nclass JsonData:\n    x: int\n    y: int\n\njson_obj: List[JsonData] = neko.io.read.json(\"path/to/json.json\", cls=List[JsonData])\n# write json from python dict/list or json_data decorated object\nneko.io.write.json(\"path/to/json.json\", json_dict)\nneko.io.write.json(\"path/to/json.json\", json_obj)\n```\n\nBesides, the read/write for `mat` and `pickle` files is also supported.\n\n\n## Neko preprocessing\n\n```python\nimport tensorneko as neko\n\n# A video tensor with (120, 3, 720, 1280)\nvideo = neko.io.read.video(\"example/video.mp4\").video\n# Get a resized tensor with (120, 3, 256, 256)\nresized_video = neko.preprocess.resize_video(video, (256, 256))\n```\n\n#### All preprocessing utils\n\n- `resize_video`\n- `resize_image`\n- `padding_video`\n- `padding_audio`\n- `crop_with_padding`\n- `frames2video`\n\nif `ffmpeg` is available, you can use below ffmpeg wrappers.\n\n- `video2frames`\n- `merge_video_audio`\n- `resample_video_fps`\n- `mp32wav`\n\n## Neko Visualization\n\n### Variable Web Watcher\nStart a web server to watch the variable status when the program (e.g. training, inference, data preprocessing) is running.\n```python\nimport time\nfrom tensorneko.visualization.watcher import *\ndata_list = ... # a list of data\ndef preprocessing(d): ...\n\n# initialize the components\npb = ProgressBar(\"Processing\", total=len(data_list))\nlogger = Logger(\"Log message\")\nvar = Variable(\"Some Value\", 0)\nline_chart = LineChart(\"Line Chart\", x_label=\"x\", y_label=\"y\")\nview = View(\"Data preprocessing\").add_all()\n\nt0 = time.time()\n# open server when the code block in running.\nwith Server(view, port=8000):\n    for i, data in enumerate(data_list):\n        preprocessing(data) # do some processing here\n        \n        x = time.time() - t0  # time since the start of the program\n        y = i # processed number of data\n        line_chart.add(x, y)  # add to the line chart\n        logger.log(\"Some messages\")  # log messages to the server\n        var.value = ...  # keep tracking a variable\n        pb.add(1)  # update the progress bar by add 1\n```\nWhen the script is running, go to `127.0.0.1:8000` to keep tracking the status.\n\n### Tensorboard Server\n\nSimply run tensorboard server in Python script.\n```python\nimport tensorneko as neko\n\nwith neko.visualization.tensorboard.Server(port=6006):\n    trainer.fit(model, dm)\n```\n\n### Matplotlib wrappers\nDisplay an image of (C, H, W) shape by `plt.imshow` wrapper.\n```python\nimport tensorneko as neko\nimport matplotlib.pyplot as plt\n\nimage_tensor = ...  # an image tensor with shape (C, H, W)\nneko.visualization.matplotlib.imshow(image_tensor)\nplt.show()\n```\n\n### Predefined colors\nSeveral aesthetic colors are predefined.\n\n```python\nimport tensorneko as neko\nimport matplotlib.pyplot as plt\n\n# use with matplotlib\nplt.plot(..., color=neko.visualization.Colors.RED)\n\n# the palette for seaborn is also available\nfrom tensorneko_util.visualization.seaborn import palette\nimport seaborn as sns\nsns.set_palette(palette)\n```\n\n## Neko Model\n\nBuild and train a simple model for classifying MNIST with MLP.\n\n```python\nfrom typing import Optional, Union, Sequence, Dict, List\n\nimport torch.nn\nfrom torch import Tensor\nfrom torch.optim import Adam\nfrom torchmetrics import Accuracy\nfrom lightning.pytorch.callbacks import ModelCheckpoint\n\nimport tensorneko as neko\nfrom tensorneko.util import get_activation, get_loss\n\n\nclass MnistClassifier(neko.NekoModel):\n\n    def __init__(self, name: str, mlp_neurons: List[int], activation: str, dropout_rate: float, loss: str,\n        learning_rate: float, weight_decay: float\n    ):\n        super().__init__(name)\n        self.weight_decay = weight_decay\n        self.learning_rate = learning_rate\n\n        self.flatten = torch.nn.Flatten()\n        self.mlp = neko.module.MLP(\n            neurons=mlp_neurons,\n            build_activation=get_activation(activation),\n            dropout_rate=dropout_rate\n        )\n        self.loss_func = get_loss(loss)()\n        self.acc_func = Accuracy()\n\n    def forward(self, x):\n        # (batch, 28, 28)\n        x = self.flatten(x)\n        # (batch, 768)\n        x = self.mlp(x)\n        # (batch, 10)\n        return x\n\n    def training_step(self, batch: Optional[Union[Tensor, Sequence[Tensor]]] = None, batch_idx: Optional[int] = None,\n        optimizer_idx: Optional[int] = None, hiddens: Optional[Tensor] = None\n    ) -> Dict[str, Tensor]:\n        x, y = batch\n        logit = self(x)\n        prob = logit.sigmoid()\n        loss = self.loss_func(logit, y)\n        acc = self.acc_func(prob.max(dim=1)[1], y)\n        return {\"loss\": loss, \"acc\": acc}\n\n    def validation_step(self, batch: Optional[Union[Tensor, Sequence[Tensor]]] = None, batch_idx: Optional[int] = None,\n        dataloader_idx: Optional[int] = None\n    ) -> Dict[str, Tensor]:\n        x, y = batch\n        logit = self(x)\n        prob = logit.sigmoid()\n        loss = self.loss_func(logit, y)\n        acc = self.acc_func(prob.max(dim=1)[1], y)\n        return {\"loss\": loss, \"acc\": acc}\n\n    def configure_optimizers(self):\n        optimizer = Adam(self.parameters(), lr=self.learning_rate, betas=(0.5, 0.9), weight_decay=self.weight_decay)\n        return {\n            \"optimizer\": optimizer\n        }\n\n\nmodel = MnistClassifier(\"mnist_mlp_classifier\", [784, 1024, 512, 10], \"ReLU\", 0.5, \"CrossEntropyLoss\", 1e-4, 1e-4)\n\ndm = ...  # The MNIST datamodule from PyTorch Lightning\n\ntrainer = neko.NekoTrainer(log_every_n_steps=100, gpus=1, logger=model.name, precision=32,\n    callbacks=[ModelCheckpoint(dirpath=\"./ckpt\",\n        save_last=True, filename=model.name + \"-{epoch}-{val_acc:.3f}\", monitor=\"val_acc\", mode=\"max\"\n    )])\n\ntrainer.fit(model, dm)\n```\n\n## Neko Callbacks\n\nSome simple but useful pytorch-lightning callbacks are provided.\n\n- `DisplayMetricsCallback`\n- `EarlyStoppingLR`: Early stop training when learning rate reaches threshold.\n\n## Neko Notebook Helpers\nHere are some helper functions to better interact with Jupyter Notebook.\n```python\nimport tensorneko as neko\n# display a video\nneko.notebook.display.video(\"path/to/video.mp4\")\n# display an audio\nneko.notebook.display.audio(\"path/to/audio.wav\")\n# display a code file\nneko.notebook.display.code(\"path/to/code.java\")\n```\n\n## Neko Debug Tools\n\nGet the default values from `ArgumentParser` args. It's convenient to use this in the notebook.\n```python\nfrom argparse import ArgumentParser\nfrom tensorneko.debug import get_parser_default_args\n\nparser = ArgumentParser()\nparser.add_argument(\"integers\", type=int, nargs=\"+\", default=[1, 2, 3])\nparser.add_argument(\"--sum\", dest=\"accumulate\", action=\"store_const\", const=sum, default=max)\nargs = get_parser_default_args(parser)\n\nprint(args.integers)  # [1, 2, 3]\nprint(args.accumulate)  # <function sum at ...>\n```\n\n## Neko Evaluation\n\nSome metrics function for evaluation are provided.\n\n- `iou_1d`\n- `iou_2d`\n- `psnr_video`\n- `psnr_image`\n- `ssim_video`\n- `ssim_image`\n\n\n## Neko Utilities\n\n### Misc functions\n\n`__`: The arguments to pipe operator. (Inspired from [fn.py](https://github.com/kachayev/fn.py))\n```python\nfrom tensorneko.util import __, _\nresult = __(20) >> (_ + 1) >> (_ * 2) >> __.get\nprint(result)\n# 42\n```\n\n`Seq` and `Stream`: A collection wrapper for method chaining with concurrent supporting.\n```python\nfrom tensorneko.util import Seq, Stream, _\nfrom tensorneko_util.backend.parallel import ParallelType\n# using method chaining\nseq = Seq.of(1, 2, 3).map(_ + 1).filter(_ % 2 == 0).map(_ * 2).take(2).to_list()\n# return [4, 8]\n\n# using bit shift operator to chain the sequence\nseq = Seq.of(1, 2, 3) << Seq.of(2, 3, 4) << [3, 4, 5]\n# return Seq(1, 2, 3, 2, 3, 4, 3, 4, 5)\n\n# run concurrent with `for_each` for Stream\nif __name__ == '__main__':\n    Stream.of(1, 2, 3, 4).for_each(print, progress_bar=True, parallel_type=ParallelType.PROCESS)\n```\n\n`Option`: A monad for dealing with data.\n```python\nfrom tensorneko.util import return_option\n\n@return_option\ndef get_data():\n    if some_condition:\n        return 1\n    else:\n        return None\n\ndef process_data(n: int):\n    if condition(n):\n        return n\n    else:\n        return None\n    \n\ndata = get_data()\ndata = data.map(process_data).get_or_else(-1)  # if the response is None, return -1\n```\n\n`Eval`: A monad for lazy evaluation.\n```python\nfrom tensorneko.util import Eval\n\n@Eval.always\ndef call_by_name_var():\n    return 42\n\n@Eval.later\ndef call_by_need_var():\n    return 43\n\n@Eval.now\ndef call_by_value_var():\n    return 44\n\n\nprint(call_by_name_var.value)  # 42\n```\n\n### Reactive\nThis library provides event bus based reactive tools. The API integrates the Python type annotation syntax.\n\n```python\n# useful decorators for default event bus\nfrom tensorneko.util import subscribe\n# Event base type\nfrom tensorneko.util import Event\n\nclass LogEvent(Event):\n    def __init__(self, message: str):\n        self.message = message\n\n# the event argument should be annotated correctly\n@subscribe # run in the main thread\ndef log_information(event: LogEvent):\n    print(event.message)\n\n\n@subscribe.thread # run in a new thread\ndef log_information_thread(event: LogEvent):\n    print(event.message, \"in another thread\")\n\n\n@subscribe.coro # run with async\nasync def log_information_async(event: LogEvent):\n    print(event.message, \"async\")\n\n\n@subscribe.process # run in a new process\ndef log_information_process(event: LogEvent):\n    print(event.message, \"in a new process\")\n\nif __name__ == '__main__':\n    # emit an event, and then the event handler will be invoked\n    # The sequential order is not guaranteed\n    LogEvent(\"Hello world!\")\n    # one possible output:\n    # Hello world! in another thread\n    # Hello world! async\n    # Hello world!\n    # Hello world! in a new process\n```\n\n### Multiple Dispatch\n\n`dispatch`: Multi-dispatch implementation for Python. \n\nTo my knowledge, 3 popular multi-dispatch libraries still have critical limitations. \n[plum](https://github.com/wesselb/plum) doesn't support static methods, \n[mutipledispatch](https://github.com/mrocklin/multipledispatch) doesn't support Python type annotation syntax and \n[multimethod](https://github.com/coady/multimethod) doesn't support default argument. TensorNeko can do it all.\n\n```python\nfrom tensorneko.util import dispatch\n\nclass DispatchExample:\n\n    @staticmethod\n    @dispatch\n    def go() -> None:\n        print(\"Go0\")\n\n    @staticmethod\n    @dispatch\n    def go(x: int) -> None:\n        print(\"Go1\")\n\n    @staticmethod\n    @dispatch\n    def go(x: float, y: float = 1.0) -> None:\n        print(\"Go2\")\n\n@dispatch\ndef come(x: int) -> str:\n    return \"Come1\"\n\n@dispatch.of(str)\ndef come(x) -> str:\n    return \"Come2\"\n```\n\n### Miscellaneous\n\n`StringGetter`: Get PyTorch class from string.\n```python\nimport tensorneko as neko\nactivation = neko.util.get_activation(\"leakyRelu\")()\n```\n\n`Seed`: The universal seed for `numpy`, `torch` and Python `random`.\n```python\nfrom tensorneko.util import Seed\nfrom torch.utils.data import DataLoader\n\n# set seed to 42 for all numpy, torch and python random\nSeed.set(42)\n\n# Apply seed to parallel workers of DataLoader\nDataLoader(\n    train_dataset,\n    batch_size=batch_size,\n    num_workers=num_workers,\n    worker_init_fn=Seed.get_loader_worker_init(),\n    generator=Seed.get_torch_generator()\n)\n```\n\n`Timer`: A timer for measuring the time.\n```python\nfrom tensorneko.util import Timer\nimport time\n\n# use as a context manager with single time\nwith Timer():\n    time.sleep(1)\n\n# use as a context manager with multiple segments\nwith Timer() as t:\n    time.sleep(1)\n    t.time(\"sleep A\")\n    time.sleep(1)\n    t.time(\"sleep B\")\n    time.sleep(1)\n\n# use as a decorator\n@Timer()\ndef f():\n    time.sleep(1)\n    print(\"f\")\n```\n\n`Singleton`: A decorator to make a class as a singleton. Inspired from Scala/Kotlin.\n```python\nfrom tensorneko.util import Singleton\n\n@Singleton\nclass MyObject:\n    def __init__(self):\n        self.value = 0\n\n    def add(self, value):\n        self.value += value\n        return self.value\n\n\nprint(MyObject.value)  # 0\nMyObject.add(1)\nprint(MyObject.value)  # 1\n```\n\nBesides, many miscellaneous functions are also provided.\n\n\nFunctions list (in `tensorneko_util`):\n- `generate_inf_seq`\n- `compose`\n- `listdir`\n- `with_printed`\n- `ifelse`\n- `dict_add`\n- `as_list`\n- `identity`\n- `list_to_dict`\n- `get_tensorneko_util_path`\n\nFunctions list (in `tensorneko`):\n- `reduce_dict_by`\n- `summarize_dict_by`\n- `with_printed_shape`\n- `is_bad_num`\n- `count_parameters`\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": null,
    "version": "0.3.13",
    "project_urls": {
        "Bug Tracker": "https://github.com/ControlNet/tensorneko/issues",
        "Homepage": "https://github.com/ControlNet/tensorneko",
        "Source Code": "https://github.com/ControlNet/tensorneko"
    },
    "split_keywords": [
        "pytorch",
        " ai"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e6bc1d875ec322ec7a31c6e040a317c980e8b7f83bc33215985fc3ae73351002",
                "md5": "d207f230c3fd4da2af2a20fa23ba93c4",
                "sha256": "52ca30691a09bcac6383953aa75c76ffce132a59ace371fd7525b2c1a90a416d"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "d207f230c3fd4da2af2a20fa23ba93c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 806462,
            "upload_time": "2024-04-23T07:47:35",
            "upload_time_iso_8601": "2024-04-23T07:47:35.845749Z",
            "url": "https://files.pythonhosted.org/packages/e6/bc/1d875ec322ec7a31c6e040a317c980e8b7f83bc33215985fc3ae73351002/tensorneko_lib-0.3.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "25d8e2106eb5230bcff424c705148a59ee519cd825dab3936be1a9a5b0a8329e",
                "md5": "4785d09a14beb4fdfae54f33e81b6595",
                "sha256": "0fce00748a8f0966be40650ba1b647965aca628c3520c8d74fdacd06676dc2bf"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "4785d09a14beb4fdfae54f33e81b6595",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 451089,
            "upload_time": "2024-04-23T07:47:37",
            "upload_time_iso_8601": "2024-04-23T07:47:37.790229Z",
            "url": "https://files.pythonhosted.org/packages/25/d8/e2106eb5230bcff424c705148a59ee519cd825dab3936be1a9a5b0a8329e/tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "602efd620cbb265110f40c05e961055d9a6747a0816e0d03e83739e8417b5401",
                "md5": "2d6603e85789b8593d7a2b4c6783fd4f",
                "sha256": "d3802a7f9f8e4e10a005c473a3332618c182fdce5aa770df81f0fa90e44161c1"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "2d6603e85789b8593d7a2b4c6783fd4f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 446530,
            "upload_time": "2024-04-23T07:47:40",
            "upload_time_iso_8601": "2024-04-23T07:47:40.151387Z",
            "url": "https://files.pythonhosted.org/packages/60/2e/fd620cbb265110f40c05e961055d9a6747a0816e0d03e83739e8417b5401/tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "851444bec48bdbbdd505eb423aa81e5c0dcac52dae5773304a28e9683b680bbb",
                "md5": "066eed776f62c2f73c494fd12f949d0d",
                "sha256": "1cda89ad313592b30862fe6ce7d6e26b6b69e8dd4b6b84fcee3226c563d08e26"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "066eed776f62c2f73c494fd12f949d0d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 523047,
            "upload_time": "2024-04-23T07:47:41",
            "upload_time_iso_8601": "2024-04-23T07:47:41.813608Z",
            "url": "https://files.pythonhosted.org/packages/85/14/44bec48bdbbdd505eb423aa81e5c0dcac52dae5773304a28e9683b680bbb/tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "66b1d6c958b7cb31a01bcda2bf5490592b1df9e5496a2a604261f2a026ca7dcc",
                "md5": "162c16d3f664de8cb70556cc6cfe2b97",
                "sha256": "6a347f1ee554280830ae9fe3fd5b73da80613e604dc88cfcd3642d12c2cd72d9"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "162c16d3f664de8cb70556cc6cfe2b97",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 530315,
            "upload_time": "2024-04-23T07:47:43",
            "upload_time_iso_8601": "2024-04-23T07:47:43.684856Z",
            "url": "https://files.pythonhosted.org/packages/66/b1/d6c958b7cb31a01bcda2bf5490592b1df9e5496a2a604261f2a026ca7dcc/tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8b4a965ac12c3bda10b2520f417c5652386cf40b3d3335bfa310357f090201d8",
                "md5": "a9b923e205dac6b2146e7bce9847ac26",
                "sha256": "1d2d29f2a7e678e6eec4030d5960896a18b70c37996f90797afaddb50a5d2e36"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a9b923e205dac6b2146e7bce9847ac26",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 464087,
            "upload_time": "2024-04-23T07:47:45",
            "upload_time_iso_8601": "2024-04-23T07:47:45.919177Z",
            "url": "https://files.pythonhosted.org/packages/8b/4a/965ac12c3bda10b2520f417c5652386cf40b3d3335bfa310357f090201d8/tensorneko_lib-0.3.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0caf75c8066a0c58a56813cc58ffe76bca0dec6cb2059b9011180f0023e75c59",
                "md5": "4b68c0e02b18b8cfe4f437c99cb5ffa1",
                "sha256": "dd7049460b107eb5dcc7a8b82ce4c526d6e1539136ca5cded9366855869dc91f"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4b68c0e02b18b8cfe4f437c99cb5ffa1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.7",
            "size": 304368,
            "upload_time": "2024-04-23T07:47:47",
            "upload_time_iso_8601": "2024-04-23T07:47:47.966853Z",
            "url": "https://files.pythonhosted.org/packages/0c/af/75c8066a0c58a56813cc58ffe76bca0dec6cb2059b9011180f0023e75c59/tensorneko_lib-0.3.13-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9935f2072aa2627aa342c1217eab81ec250dc0828fcbc909197822d4ff516b24",
                "md5": "04bc3772b8fc197dceae3728768bbe66",
                "sha256": "8b0185dcf4f5d0bb5c736f476e281874988e42712942127be17291d70c903e4b"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "04bc3772b8fc197dceae3728768bbe66",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 806252,
            "upload_time": "2024-04-23T07:47:50",
            "upload_time_iso_8601": "2024-04-23T07:47:50.459831Z",
            "url": "https://files.pythonhosted.org/packages/99/35/f2072aa2627aa342c1217eab81ec250dc0828fcbc909197822d4ff516b24/tensorneko_lib-0.3.13-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "44adc7deb54f5c39c647d6523cd809f7e7f6c1caf3634adcf3d972ee843f55ab",
                "md5": "50e3c49543414504d226218a55820c2b",
                "sha256": "8d904176a2c791fd447109bd98a9bd49e1bca992f89e0bc4eade3a63f15785c1"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "50e3c49543414504d226218a55820c2b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 451028,
            "upload_time": "2024-04-23T07:47:52",
            "upload_time_iso_8601": "2024-04-23T07:47:52.473570Z",
            "url": "https://files.pythonhosted.org/packages/44/ad/c7deb54f5c39c647d6523cd809f7e7f6c1caf3634adcf3d972ee843f55ab/tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ede671510f81b2bfa2fa84621c0dbf2b0a5f5572a4e772cb0928e732a938c3da",
                "md5": "706b7349ed5a215742c2b73c22466602",
                "sha256": "576b74d541f32fbf9ce11c303988e8ca6710be10f0f70893b48ce21de894bcf0"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "706b7349ed5a215742c2b73c22466602",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 446218,
            "upload_time": "2024-04-23T07:47:54",
            "upload_time_iso_8601": "2024-04-23T07:47:54.555645Z",
            "url": "https://files.pythonhosted.org/packages/ed/e6/71510f81b2bfa2fa84621c0dbf2b0a5f5572a4e772cb0928e732a938c3da/tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b7e76fb618169610a1457d2567f822f85097445e14d60dd55817408b4db0b253",
                "md5": "ba31da9e7c52c1cd9d4153de49d65b1e",
                "sha256": "4e74a20b94d21b590efe488de0424b77b785960f6a98bdc7e9e46b60d15b04a6"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "ba31da9e7c52c1cd9d4153de49d65b1e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 522922,
            "upload_time": "2024-04-23T07:47:56",
            "upload_time_iso_8601": "2024-04-23T07:47:56.832040Z",
            "url": "https://files.pythonhosted.org/packages/b7/e7/6fb618169610a1457d2567f822f85097445e14d60dd55817408b4db0b253/tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e033fda6ac784a042f8e8e79151d3e7e307ee4aeb85e033e46d99b6b568a1c88",
                "md5": "3314973c700ad355277779a700c11794",
                "sha256": "94cdf4c3de54a3182a357a3be6e55f3cad64a717d10c9c862c2ee54a20757a68"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "3314973c700ad355277779a700c11794",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 528981,
            "upload_time": "2024-04-23T07:47:58",
            "upload_time_iso_8601": "2024-04-23T07:47:58.301260Z",
            "url": "https://files.pythonhosted.org/packages/e0/33/fda6ac784a042f8e8e79151d3e7e307ee4aeb85e033e46d99b6b568a1c88/tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "383dad472d16cfd3277d7d4f7342982b658ba609e11ec242335e7377dfbe9c55",
                "md5": "a5ecb4414b6009933b7ea8cac20f5a7d",
                "sha256": "b6da03c186c3e4e6ee49ebf490cdc870dc60592504dfe97fc59506f3b438bcdf"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a5ecb4414b6009933b7ea8cac20f5a7d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 463968,
            "upload_time": "2024-04-23T07:48:00",
            "upload_time_iso_8601": "2024-04-23T07:48:00.467464Z",
            "url": "https://files.pythonhosted.org/packages/38/3d/ad472d16cfd3277d7d4f7342982b658ba609e11ec242335e7377dfbe9c55/tensorneko_lib-0.3.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e90395833dbe7a92837421ef7c5162d8e1aedb393e208e6444cb5f2e08896ef7",
                "md5": "c67c8828f43cc291d0369ebeb3159816",
                "sha256": "07029db59b1424ec715c2ef49dd00301d92bf9113d95e3a98e8cca6220c8be06"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c67c8828f43cc291d0369ebeb3159816",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.7",
            "size": 304313,
            "upload_time": "2024-04-23T07:48:02",
            "upload_time_iso_8601": "2024-04-23T07:48:02.710419Z",
            "url": "https://files.pythonhosted.org/packages/e9/03/95833dbe7a92837421ef7c5162d8e1aedb393e208e6444cb5f2e08896ef7/tensorneko_lib-0.3.13-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "da9992af20362a7623740d45119b9f68a17686502a317607c615d893759890cf",
                "md5": "3a09e100ed1c62d104b7c003c1f5223b",
                "sha256": "bc3f65597c17288fdeb3877a4f64508052c691e31f85f43fda562f215290208b"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "3a09e100ed1c62d104b7c003c1f5223b",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 805904,
            "upload_time": "2024-04-23T07:48:04",
            "upload_time_iso_8601": "2024-04-23T07:48:04.480773Z",
            "url": "https://files.pythonhosted.org/packages/da/99/92af20362a7623740d45119b9f68a17686502a317607c615d893759890cf/tensorneko_lib-0.3.13-cp37-cp37m-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7898554636f57aa8fd8e28223f6b45a1453a8c93fb245ca757ef27de6128c19c",
                "md5": "666a76a400b2d6c0a9b57dbd947403e4",
                "sha256": "700ed9e516f537b2a41e4464a6182b0c7ff1df1bfe4619b260b1c27f8f2b70b4"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "666a76a400b2d6c0a9b57dbd947403e4",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 450810,
            "upload_time": "2024-04-23T07:48:06",
            "upload_time_iso_8601": "2024-04-23T07:48:06.683301Z",
            "url": "https://files.pythonhosted.org/packages/78/98/554636f57aa8fd8e28223f6b45a1453a8c93fb245ca757ef27de6128c19c/tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "621e274f3eeba9cc0169f7ee49833f10cbee828b4589725a7af3e48e08715b6b",
                "md5": "a38d144524cf90f17bb8c3b4351b1762",
                "sha256": "dc727da8cddd807eb06e85ad006eb66b27a67f53b6e7c34ed8e553e7a2473ac0"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "a38d144524cf90f17bb8c3b4351b1762",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 445847,
            "upload_time": "2024-04-23T07:48:08",
            "upload_time_iso_8601": "2024-04-23T07:48:08.472921Z",
            "url": "https://files.pythonhosted.org/packages/62/1e/274f3eeba9cc0169f7ee49833f10cbee828b4589725a7af3e48e08715b6b/tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "efbae79919489d68a60552cbb555bdcbcbf0c04bf10a0a6afc250785ba8ca5e4",
                "md5": "28d7ea2760e116629659b97914e66336",
                "sha256": "439642876ff8bf64cdda4cdfbb4c98b8078783f2bc390ddddfcf2a54964d716c"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "28d7ea2760e116629659b97914e66336",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 522366,
            "upload_time": "2024-04-23T07:48:10",
            "upload_time_iso_8601": "2024-04-23T07:48:10.199176Z",
            "url": "https://files.pythonhosted.org/packages/ef/ba/e79919489d68a60552cbb555bdcbcbf0c04bf10a0a6afc250785ba8ca5e4/tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9e62e04e967f59604e07440bb8e15545cc29d19927515c14e60754e362dd1534",
                "md5": "a187d6f6c68a5b91c56d5f9e98154870",
                "sha256": "18d7ccf227cbc1bd14ebb9b50c040842c30bec1f2eefc25d918e808dab4e02bb"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "a187d6f6c68a5b91c56d5f9e98154870",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 530209,
            "upload_time": "2024-04-23T07:48:12",
            "upload_time_iso_8601": "2024-04-23T07:48:12.324548Z",
            "url": "https://files.pythonhosted.org/packages/9e/62/e04e967f59604e07440bb8e15545cc29d19927515c14e60754e362dd1534/tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7bbeb1266a31682f277f6b38d8fe8368e8f24a50037f4f2779b0c130574d7aa4",
                "md5": "13de9f7fd810f3c866aeee28846bc40a",
                "sha256": "c72e0bb4a8f2825949e36b899734121c80373c8b623928082aebfbcf3862ebc7"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "13de9f7fd810f3c866aeee28846bc40a",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 464045,
            "upload_time": "2024-04-23T07:48:14",
            "upload_time_iso_8601": "2024-04-23T07:48:14.529060Z",
            "url": "https://files.pythonhosted.org/packages/7b/be/b1266a31682f277f6b38d8fe8368e8f24a50037f4f2779b0c130574d7aa4/tensorneko_lib-0.3.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "02f3bf1a7c3b1fddb207d8b581b75d24af009f06deb9bbcca04568f61b6f8aa0",
                "md5": "9143208f0edc4b09460b8126d62b42e4",
                "sha256": "92e56d7bc2535a84a64ed2b945c8c67f27a7ff17c741a323e4bf31f5c7da040e"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp37-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9143208f0edc4b09460b8126d62b42e4",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.7",
            "size": 304097,
            "upload_time": "2024-04-23T07:48:16",
            "upload_time_iso_8601": "2024-04-23T07:48:16.137599Z",
            "url": "https://files.pythonhosted.org/packages/02/f3/bf1a7c3b1fddb207d8b581b75d24af009f06deb9bbcca04568f61b6f8aa0/tensorneko_lib-0.3.13-cp37-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "53121b3caa1fe9d34157556c832f4bebb2b60c982af6e18cf921a070c2be998e",
                "md5": "7130ec3c8ddf601fb5a991337dfc584f",
                "sha256": "861f2fd9afb9a152431286c644bb602175701141c0a64b7696c07c158fe847cf"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "7130ec3c8ddf601fb5a991337dfc584f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 805737,
            "upload_time": "2024-04-23T07:48:17",
            "upload_time_iso_8601": "2024-04-23T07:48:17.863742Z",
            "url": "https://files.pythonhosted.org/packages/53/12/1b3caa1fe9d34157556c832f4bebb2b60c982af6e18cf921a070c2be998e/tensorneko_lib-0.3.13-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ef200925bcfdede4309b7714ec202b5b21df942ee75e2fd1a697f5b43254272f",
                "md5": "b54951d0c5a3a43ceb867d94153e8fec",
                "sha256": "a09c76acc3abb4fda2962f8ac3c518e6e4c8e0fb308c25c988ccdc6e04d19b42"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "b54951d0c5a3a43ceb867d94153e8fec",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 450838,
            "upload_time": "2024-04-23T07:48:20",
            "upload_time_iso_8601": "2024-04-23T07:48:20.695733Z",
            "url": "https://files.pythonhosted.org/packages/ef/20/0925bcfdede4309b7714ec202b5b21df942ee75e2fd1a697f5b43254272f/tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b4dc174a4756618bf88cc739b8b14bb2994c429521d342dafee70a44b7c9fa3c",
                "md5": "d5486f7476fc2fed9fc28659cdd92742",
                "sha256": "e1b489633c3e1a6a9c07032a190cbe42dc940d9e6721cf0d19d09041891b409e"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "d5486f7476fc2fed9fc28659cdd92742",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 445879,
            "upload_time": "2024-04-23T07:48:24",
            "upload_time_iso_8601": "2024-04-23T07:48:24.084104Z",
            "url": "https://files.pythonhosted.org/packages/b4/dc/174a4756618bf88cc739b8b14bb2994c429521d342dafee70a44b7c9fa3c/tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0145cbcd8688c95361426cef41065d64d10ccd318c17f981d7337cac07ade944",
                "md5": "0bb76c967f69ca09670a2ca3759598b1",
                "sha256": "f6f861c0ec0ff8fd4c53dbb7e2d4c6b3c182a3e8d88e2b19f62e248d257f5504"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "0bb76c967f69ca09670a2ca3759598b1",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 522315,
            "upload_time": "2024-04-23T07:48:26",
            "upload_time_iso_8601": "2024-04-23T07:48:26.321909Z",
            "url": "https://files.pythonhosted.org/packages/01/45/cbcd8688c95361426cef41065d64d10ccd318c17f981d7337cac07ade944/tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d43843646e3488343a65833fd05be2a98f969adcbc0e3dd3eda6b46747616229",
                "md5": "ef303801d85c8256ff4a62ca26d9e1b0",
                "sha256": "6be3c8b0a0dbadfe5079218de0fb9a804b494dc283ec1306da35a822f523d2a7"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "ef303801d85c8256ff4a62ca26d9e1b0",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 530210,
            "upload_time": "2024-04-23T07:48:27",
            "upload_time_iso_8601": "2024-04-23T07:48:27.954811Z",
            "url": "https://files.pythonhosted.org/packages/d4/38/43646e3488343a65833fd05be2a98f969adcbc0e3dd3eda6b46747616229/tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d89ca9389c0d65d699bb75a58972327ebb312ecfa318d81615c7a2498885d1fd",
                "md5": "e8093cf9539d331ea01984913f02188f",
                "sha256": "7dc2421054ae013007d40c8d8413bfaae0cca75e9a527f52a6555517a45ddeea"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e8093cf9539d331ea01984913f02188f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 464102,
            "upload_time": "2024-04-23T07:48:29",
            "upload_time_iso_8601": "2024-04-23T07:48:29.758484Z",
            "url": "https://files.pythonhosted.org/packages/d8/9c/a9389c0d65d699bb75a58972327ebb312ecfa318d81615c7a2498885d1fd/tensorneko_lib-0.3.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8508c60b2da0d1a0eb01241d198a73efc86aad706b03202a10c6bd60e2d89369",
                "md5": "3a9a6e7ca023e92d0d343c5e5e1819b6",
                "sha256": "52381bf75cf532f8a0d2febf559703fb1b99caa2228efd4335984e406cf94774"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp38-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3a9a6e7ca023e92d0d343c5e5e1819b6",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.7",
            "size": 304152,
            "upload_time": "2024-04-23T07:48:31",
            "upload_time_iso_8601": "2024-04-23T07:48:31.307522Z",
            "url": "https://files.pythonhosted.org/packages/85/08/c60b2da0d1a0eb01241d198a73efc86aad706b03202a10c6bd60e2d89369/tensorneko_lib-0.3.13-cp38-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d4bf3e1f4b079ed40cb3a5bebedab5f29aa86d0128b2f5cba9c8b413e3b65b9b",
                "md5": "a0294d883977e1c4112fecb241717ffb",
                "sha256": "4c38815ef1cb5ed2df36e3fd40b86ca45baeee1aadb77943c98d8044af794524"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "a0294d883977e1c4112fecb241717ffb",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 806414,
            "upload_time": "2024-04-23T07:48:33",
            "upload_time_iso_8601": "2024-04-23T07:48:33.148079Z",
            "url": "https://files.pythonhosted.org/packages/d4/bf/3e1f4b079ed40cb3a5bebedab5f29aa86d0128b2f5cba9c8b413e3b65b9b/tensorneko_lib-0.3.13-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "883c5b3aa7d07e33e4603095642a21079aecd7e93f16f17b678969dae8f8ab20",
                "md5": "a3fd51e28ab1e65669a4eed9afdfbf62",
                "sha256": "37ff465b79b75efbb22466ca49c12569dd764d0c01ec74d5a9699a455ec29353"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a3fd51e28ab1e65669a4eed9afdfbf62",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 451245,
            "upload_time": "2024-04-23T07:48:35",
            "upload_time_iso_8601": "2024-04-23T07:48:35.274190Z",
            "url": "https://files.pythonhosted.org/packages/88/3c/5b3aa7d07e33e4603095642a21079aecd7e93f16f17b678969dae8f8ab20/tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ce26c296ff39cc82fca63466e0fb3b89aa9c17d40e396d00388b0bef2ef082a",
                "md5": "b0f46f1d0a305aa65db1c667f54f0d96",
                "sha256": "1d4c954b7e42194bccb648304c52e819456363ad8342c0e73a76bee689c50ece"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "b0f46f1d0a305aa65db1c667f54f0d96",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 446300,
            "upload_time": "2024-04-23T07:48:37",
            "upload_time_iso_8601": "2024-04-23T07:48:37.785806Z",
            "url": "https://files.pythonhosted.org/packages/8c/e2/6c296ff39cc82fca63466e0fb3b89aa9c17d40e396d00388b0bef2ef082a/tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dd34699782af6ec945584441845ba5be437e64b4b96921e8f9a67d8363188a6e",
                "md5": "fbd123a558b019c23c8fb45307d15d0d",
                "sha256": "7695a88bc7517422a3a47d44417cf20c2ce981ed7a6ecae0ec6e6060316db027"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "fbd123a558b019c23c8fb45307d15d0d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 523009,
            "upload_time": "2024-04-23T07:48:39",
            "upload_time_iso_8601": "2024-04-23T07:48:39.376930Z",
            "url": "https://files.pythonhosted.org/packages/dd/34/699782af6ec945584441845ba5be437e64b4b96921e8f9a67d8363188a6e/tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d80a075670948c054b8073e05611bb82090dc24a84ddb80081f690844024aa9e",
                "md5": "287fb9023cf84ec24d05485a22df995a",
                "sha256": "01ff5f8bf53b8a1b1785dee7b375f0a1a48b0ccaf58516c32cca2dd7a7bc6a73"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "287fb9023cf84ec24d05485a22df995a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 530103,
            "upload_time": "2024-04-23T07:48:41",
            "upload_time_iso_8601": "2024-04-23T07:48:41.837342Z",
            "url": "https://files.pythonhosted.org/packages/d8/0a/075670948c054b8073e05611bb82090dc24a84ddb80081f690844024aa9e/tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1c4d4c5c5420f84cafec5a82df30ada4bf894e0b1ba00d1d1b4a052f069e7b77",
                "md5": "85bab6768ba63272bae3690f7f1c02da",
                "sha256": "faf4a5df025eb5a85d7d7e5a369f234efc05e51c03b69e56a56d78b7375c2992"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "85bab6768ba63272bae3690f7f1c02da",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 464089,
            "upload_time": "2024-04-23T07:48:43",
            "upload_time_iso_8601": "2024-04-23T07:48:43.405538Z",
            "url": "https://files.pythonhosted.org/packages/1c/4d/4c5c5420f84cafec5a82df30ada4bf894e0b1ba00d1d1b4a052f069e7b77/tensorneko_lib-0.3.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e08231bba98014e4435830a9cb255ce5afc3708beb083628eca14562330ea610",
                "md5": "0a499a58ca09db52da27ae4a0f276875",
                "sha256": "157a7f1d38dcd071d30db1a1641544b590773890e3efa0ee41db3f4d2fe0517f"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0a499a58ca09db52da27ae4a0f276875",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.7",
            "size": 304199,
            "upload_time": "2024-04-23T07:48:45",
            "upload_time_iso_8601": "2024-04-23T07:48:45.668061Z",
            "url": "https://files.pythonhosted.org/packages/e0/82/31bba98014e4435830a9cb255ce5afc3708beb083628eca14562330ea610/tensorneko_lib-0.3.13-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "902caf110fdca65944a6624af3d39f4928d5fbe5bd850e299ef1d37b6869509f",
                "md5": "f0ea346ccf3095cbd583213a64a7e08f",
                "sha256": "1f4b3a60b5c593a0132c560ad0d54324a0ff59270fc49913fdfda25f646f29ad"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "f0ea346ccf3095cbd583213a64a7e08f",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 807360,
            "upload_time": "2024-04-23T07:48:47",
            "upload_time_iso_8601": "2024-04-23T07:48:47.526232Z",
            "url": "https://files.pythonhosted.org/packages/90/2c/af110fdca65944a6624af3d39f4928d5fbe5bd850e299ef1d37b6869509f/tensorneko_lib-0.3.13-pp38-pypy38_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "69b43b078863861dfd9615de28360005fe0a67e1eaa0e770db3239ff3d25b9ac",
                "md5": "711a9a1df77db3583a54949a89fc0ffa",
                "sha256": "a0d266bf28351d28dc6721c5e61e22fd941728220b45f34df5047d59f6a266be"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "711a9a1df77db3583a54949a89fc0ffa",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 451379,
            "upload_time": "2024-04-23T07:48:49",
            "upload_time_iso_8601": "2024-04-23T07:48:49.199351Z",
            "url": "https://files.pythonhosted.org/packages/69/b4/3b078863861dfd9615de28360005fe0a67e1eaa0e770db3239ff3d25b9ac/tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "69d1736902325dcb5b937b0c4772bdb727c0472427e0b373340e413c44cf86bb",
                "md5": "da816f3077ae3484920f93b2c2c76dce",
                "sha256": "939adc965a5b963faace727c7feb51b15c29fbd5942e1c97f90758fc323013ab"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "da816f3077ae3484920f93b2c2c76dce",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 449003,
            "upload_time": "2024-04-23T07:48:51",
            "upload_time_iso_8601": "2024-04-23T07:48:51.558398Z",
            "url": "https://files.pythonhosted.org/packages/69/d1/736902325dcb5b937b0c4772bdb727c0472427e0b373340e413c44cf86bb/tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9c5cd28ff7a6ef77028e4dfd3f0cd97998ff1584c2c364b18507bd947acfbba9",
                "md5": "6bd18c97e9e7c47e35c19b00abd28bb8",
                "sha256": "7f535e3e8266bb20b3f22fb1856af52892574756428e2cc099340a2578d9e2e4"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "6bd18c97e9e7c47e35c19b00abd28bb8",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 525882,
            "upload_time": "2024-04-23T07:48:53",
            "upload_time_iso_8601": "2024-04-23T07:48:53.101908Z",
            "url": "https://files.pythonhosted.org/packages/9c/5c/d28ff7a6ef77028e4dfd3f0cd97998ff1584c2c364b18507bd947acfbba9/tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e7f81267b14fab5d0b46ef970de5249ce730e21301b0b416119c18ece91514d6",
                "md5": "a9b05a8ddeced961805c4a52fa1df4d6",
                "sha256": "f9743c914f3993f05ac4068d53c9ac53d543a3a20c18b0eb1ef65c73bf72795e"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "a9b05a8ddeced961805c4a52fa1df4d6",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 532850,
            "upload_time": "2024-04-23T07:48:55",
            "upload_time_iso_8601": "2024-04-23T07:48:55.091569Z",
            "url": "https://files.pythonhosted.org/packages/e7/f8/1267b14fab5d0b46ef970de5249ce730e21301b0b416119c18ece91514d6/tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97ad490f4d5a76effb70517b79711cd42abb40ae5214ba17d2dfd9a585100a34",
                "md5": "7ba6d8900834a1ca1dede4957db85031",
                "sha256": "b1a09e5a84e8c260420927e79a0a0d3dd009983741eb035256949fd677a71bb7"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7ba6d8900834a1ca1dede4957db85031",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.7",
            "size": 465947,
            "upload_time": "2024-04-23T07:48:56",
            "upload_time_iso_8601": "2024-04-23T07:48:56.900440Z",
            "url": "https://files.pythonhosted.org/packages/97/ad/490f4d5a76effb70517b79711cd42abb40ae5214ba17d2dfd9a585100a34/tensorneko_lib-0.3.13-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0a904dc6754a8d4717b692500abe48daba811d29ad57d07e8b9ecdc82471dba8",
                "md5": "1c5cf5d88992c1eed2409da2c862014c",
                "sha256": "2d1e4787a0241b949fb136e252f17cfd75d24c1c9d73fd9ae825309f23727801"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "has_sig": false,
            "md5_digest": "1c5cf5d88992c1eed2409da2c862014c",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 807436,
            "upload_time": "2024-04-23T07:48:58",
            "upload_time_iso_8601": "2024-04-23T07:48:58.634826Z",
            "url": "https://files.pythonhosted.org/packages/0a/90/4dc6754a8d4717b692500abe48daba811d29ad57d07e8b9ecdc82471dba8/tensorneko_lib-0.3.13-pp39-pypy39_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1c57e8e6ef41e54c304367919f8064fe54843c903e4f595f724dda6d6cb52398",
                "md5": "fda7645478ead0508eb5ac4469f87ff4",
                "sha256": "dbda46a8fcf52c2d632ab4ca1c2726ebbd9073cd56a57ca60ad2bdb138e2c24e"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "fda7645478ead0508eb5ac4469f87ff4",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 451742,
            "upload_time": "2024-04-23T07:49:00",
            "upload_time_iso_8601": "2024-04-23T07:49:00.171564Z",
            "url": "https://files.pythonhosted.org/packages/1c/57/e8e6ef41e54c304367919f8064fe54843c903e4f595f724dda6d6cb52398/tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6929a73b08396f8e7ee9a9ff65a830c8cb6a081c9d98203b0dc0506040ee272",
                "md5": "fbda40c8df001f63e365af63c57f3051",
                "sha256": "ff6456f2c741edba941674f8bbb02b4ba331cbdf1b0697fd4dc1785b2e24ee22"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "fbda40c8df001f63e365af63c57f3051",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 448962,
            "upload_time": "2024-04-23T07:49:02",
            "upload_time_iso_8601": "2024-04-23T07:49:02.063460Z",
            "url": "https://files.pythonhosted.org/packages/b6/92/9a73b08396f8e7ee9a9ff65a830c8cb6a081c9d98203b0dc0506040ee272/tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4744927b63b327b4359333ca030fd6c699fb21cb0dcd94af25d4ad589bffb7ae",
                "md5": "a2d51444cb60871e958383ba3fa4c469",
                "sha256": "2ecf6606fb3c502840bf17a9f985918e28e81f947fb68a6f4cc1d59fb54e0c42"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "a2d51444cb60871e958383ba3fa4c469",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 525926,
            "upload_time": "2024-04-23T07:49:03",
            "upload_time_iso_8601": "2024-04-23T07:49:03.778797Z",
            "url": "https://files.pythonhosted.org/packages/47/44/927b63b327b4359333ca030fd6c699fb21cb0dcd94af25d4ad589bffb7ae/tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c9ffab0df0677bd224012e48fe635e2e1d0159f122bd9b9155f5ade9fb20ee41",
                "md5": "04b6046a09c0299e7dd5f0a3d27ecc08",
                "sha256": "26095ccfc016585a76b3d6ab2d38b32867468a1afd4661011e3880c459ecfcfa"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "04b6046a09c0299e7dd5f0a3d27ecc08",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 532872,
            "upload_time": "2024-04-23T07:49:05",
            "upload_time_iso_8601": "2024-04-23T07:49:05.636984Z",
            "url": "https://files.pythonhosted.org/packages/c9/ff/ab0df0677bd224012e48fe635e2e1d0159f122bd9b9155f5ade9fb20ee41/tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d32508fb18786f73b7ece9bc0cb75e29d3afc119a0a8daa788b984816571b42a",
                "md5": "1f7fa3b6e9e6388f5666ff0953687510",
                "sha256": "143179a7e9d1e7e5ecab9d1f662b7b31e8528e6530255faffc9a8024cb8983bf"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1f7fa3b6e9e6388f5666ff0953687510",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.7",
            "size": 466009,
            "upload_time": "2024-04-23T07:49:07",
            "upload_time_iso_8601": "2024-04-23T07:49:07.200857Z",
            "url": "https://files.pythonhosted.org/packages/d3/25/08fb18786f73b7ece9bc0cb75e29d3afc119a0a8daa788b984816571b42a/tensorneko_lib-0.3.13-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "980f2dc5e43cebcfa27551bc9257f58c807ba3727992412e47bfee4e0f83515d",
                "md5": "40db34ab3fa7a7db5a5424d86647fe58",
                "sha256": "78ee0b214b5cb536b965fa749cdab28f4a0aae81e2ec176b6cd225ea725be08a"
            },
            "downloads": -1,
            "filename": "tensorneko_lib-0.3.13.tar.gz",
            "has_sig": false,
            "md5_digest": "40db34ab3fa7a7db5a5424d86647fe58",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 797348,
            "upload_time": "2024-04-23T07:49:08",
            "upload_time_iso_8601": "2024-04-23T07:49:08.838326Z",
            "url": "https://files.pythonhosted.org/packages/98/0f/2dc5e43cebcfa27551bc9257f58c807ba3727992412e47bfee4e0f83515d/tensorneko_lib-0.3.13.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-23 07:49:08",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ControlNet",
    "github_project": "tensorneko",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "torch",
            "specs": [
                [
                    ">=",
                    "1.9.0"
                ]
            ]
        },
        {
            "name": "torchaudio",
            "specs": [
                [
                    ">=",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "torchvision",
            "specs": [
                [
                    ">=",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "torchmetrics",
            "specs": [
                [
                    ">=",
                    "0.7.3"
                ]
            ]
        },
        {
            "name": "tensorboard",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "lightning",
            "specs": [
                [
                    "<",
                    "2.2"
                ],
                [
                    ">=",
                    "2.0"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    ">=",
                    "8.1"
                ]
            ]
        },
        {
            "name": "av",
            "specs": [
                [
                    ">=",
                    "8.0.3"
                ]
            ]
        },
        {
            "name": "pysoundfile",
            "specs": [
                [
                    ">=",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.20.1"
                ]
            ]
        },
        {
            "name": "einops",
            "specs": [
                [
                    ">=",
                    "0.3.0"
                ]
            ]
        }
    ],
    "lcname": "tensorneko-lib"
}
        
Elapsed time: 0.23989s