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
# a function you might want to extend
def to_torch_tensor(a_list):
print("this is the non-siphoned part")
return torch.tensor(a_list)
# an new data type which that^ function should handle
class MyCustomContainerStackQueWhatever:
def __init__(self, list_items):
self.list_items = list_items
self.other_data = "blah blah blah"
# wrap to_torch_tensor with a siphon!
# -> when the lambda returns true
# -> the function below is run INSTEAD of the original to_torch_tensor()
@siphon(
when=lambda a_list: isinstance(a_list, MyCustomContainerStackQueWhatever),
is_true_for=to_torch_tensor
)
def custom_handler__name_of_this_func_doesnt_matter(a_list): # the siphon redirects args to <- this custom handler
actually_a_custom_container = a_list
print("this is the siphoned case!")
return torch.tensor(actually_a_custom_container.list_items)
#
# usage!
#
to_torch_tensor(MyCustomContainerStackQueWhatever([1,2,3]))
# >>> "this is the siphoned case!"
# >>> torch.tensor([1,2,3])
to_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=to_torch_tensor)
def name_of_this_func_doesnt_matter(arg1):
return torch.tensor([])
#
# usage!
#
to_torch_tensor(None)
# >>> torch.tensor([])
to_torch_tensor(MyCustomContainerStackQueWhatever([1,2,3]))
# >>> "this is the siphoned case!"
# >>> torch.tensor([1,2,3])
to_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.1.tar.gz
(2.7 kB
view hashes)
Built Distribution
Close
Hashes for slick_siphon-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ea537c9c01ae5ef89bd74a22aefd064bc4f703074f104f5d83ff067ccc5943d |
|
MD5 | 629900ba4b84a6daaabdfad3cfe6ee6d |
|
BLAKE2b-256 | 5bb977b04256f5abcf0c2948e913fae5aec5d1e3d103748e8da446b374d9d3f9 |