No project description provided
Project description
malib
A few utilities that I find useful.
RateLimiter
from malib import RateLimiter
# call a function at most 10 times per minute
rl = RateLimiter(max_calls=10, period=60)
# call .wait_and_call() every time before calling the function
rl.wait_and_call()
ttl_cache
from malib import ttl_cache
from time import sleep
@ttl_cache(ttl=1)
def f():
print("computing")
return "result"
print(f()) # prints "computing"
print(f()) # cached
sleep(1)
print(f()) # prints "computing"
Exact cover
Code inspired by this blog post.
from malib import exact_cover
piece_to_constraints = {"A": {1}, "B": {2, 4}, "C": {2, 3, 5}, "D": {3, 5}}
next(exact_cover(piece_to_constraints))
# ("A", "B", "D")
PyTorch bivariate normal cdf
Provide two functions to compute a differentiable cumulative distribution function of a bivariate normal distribution.
Requires scipy and pytorch.
import torch
from malib import standard_bivariate_normal_cdf, bivariate_normal_cdf
# standard bivariate normal cdf
x = torch.tensor([0.0, 0.0], requires_grad=True)
cor = 0.5
y = standard_bivariate_normal_cdf(x, cor)
print(y)
# tensor(0.3333, grad_fn=<StandardBivariateNormalCDFBackward>)
y.backward()
print(x.grad)
# tensor([0.1995, 0.1995])
# bivariate_normal_cdf
x = torch.tensor([0.0, 0.0], requires_grad=True)
mean = torch.tensor([0.0, 0.0])
cov = torch.tensor([[1.0, 0.5], [0.5, 1.0]])
y = bivariate_normal_cdf(x, mean, cov)
print(y)
# tensor(0.3333, grad_fn=<BivariateNormalCDFBackward>)
y.backward()
print(x.grad)
# tensor([0.1995, 0.1995])
PyTorch interpolation
import torch
from malib import interp
x = torch.tensor([0.0, 1.0, 2.0])
y = torch.tensor([0.0, 1.0, 4.0])
interp(torch.tensor([0.5, 1.5]), x, y)
# tensor([0.5000, 2.5000])
Async to sync generator
The sync_gen
function allows you to convert an asynchronous generator into a synchronous one. This can be useful when you want to use async code in a synchronous context.
import asyncio
from malib import sync_gen
async def async_generator():
for i in range(5):
await asyncio.sleep(0.1)
yield i
# Convert async generator to sync generator
sync_generator = sync_gen(async_generator())
# Use the sync generator in a regular for loop
for item in sync_generator:
print(item)
Confidence interval
from malib import clopper_pearson_confidence_interval
print(clopper_pearson_confidence_interval(100, 1000, alpha=0.05))
# (0.08210533435557998, 0.12028793651869261)
Testing
poetry install --with dev
pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
malib-0.10.0.tar.gz
(5.4 kB
view details)
Built Distribution
File details
Details for the file malib-0.10.0.tar.gz
.
File metadata
- Download URL: malib-0.10.0.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea0edd2d81f539a90835a81e40edd65bb18bf9ef3774f0a8cbae4850b27d288a |
|
MD5 | b5aa66f88b53eac9ce66e28b7c4b4c59 |
|
BLAKE2b-256 | e594aa741603b483804a04db0118a3e5ce91a74b751ad0fb2c7d19f70aa15a77 |
File details
Details for the file malib-0.10.0-py3-none-any.whl
.
File metadata
- Download URL: malib-0.10.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccea6e9688e1abe044dcb92dfc70040a33cf082346145b4506be70c3d6999e8d |
|
MD5 | 04870ef267a05c73551bb501cda346c9 |
|
BLAKE2b-256 | 9047c4c3ebb296f7b3d46455d87a549e2f7b788741be7792242cac94417c722e |