The clean way to extend existing functions
Project description
What is this?
Make 3rd-party functions capable of hanlding new inputs
Examples
pip install slick-siphon
from slick_siphon import siphon
import torch
from torch import tensor
# a new data type that torch.tensor() doesn't know how to handle
class MyCustomContainerStackQueWhatever:
def __init__(self, list_items):
self.list_items = list_items
self.other_data = "blah blah blah"
# wrap torch.tensor with a siphon!
# -> when the lambda returns true
# -> the function below is run INSTEAD of the original torch.tensor()
# EVEN IN OTHER MODULES
@siphon(
when=lambda a_list: isinstance(a_list, MyCustomContainerStackQueWhatever),
is_true_for=tensor,
)
def tensor(a_list): # the siphon redirects args to <- this custom handler
actually_a_custom_container = a_list
print("this is the siphoned case!")
return tensor(actually_a_custom_container.list_items)
#
# usage!
#
import torch
torch.tensor(MyCustomContainerStackQueWhatever([1,2,3]))
# >>> "this is the siphoned case!"
# >>> torch.tensor([1,2,3])
torch.tensor([1,2,3])
# >>> "this is the non-siphoned part"
# >>> torch.tensor([1,2,3])
# extend it again, so it'll accept None as an input (not recommended but its an example)
@siphon(when=( lambda arg1: isinstance(arg1, type(None)) ), is_true_for=torch.tensor)
def torch.tensor(arg1):
return torch.tensor([])
#
# usage!
#
torch.tensor(None)
# >>> torch.tensor([])
torch.tensor(MyCustomContainerStackQueWhatever([1,2,3]))
# >>> "this is the siphoned case!"
# >>> torch.tensor([1,2,3])
torch.tensor([1,2,3])
# >>> "this is the non-siphoned part"
# >>> torch.tensor([1,2,3])
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
slick_siphon-0.1.2.tar.gz
(2.7 kB
view hashes)
Built Distribution
Close
Hashes for slick_siphon-0.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70f6743bcb208e5fb3379a674c5c2ccd7ec082f21ee0746159e11e0551e78eb3 |
|
MD5 | 7636075f29accefaf91e1b448020c565 |
|
BLAKE2b-256 | 915ad7fe156aa6e69b687a0855a81296aef10f18f977acf3bf32c8ab7bc1f21f |