Extras
The same Utility
The special object same allows the application of arbitrary methods to the input -
same.something() is the same as transform(lambda x: x.something()):
>>> from padl import same
>>> concat_lower = add >> same.lower()
>>> concat_lower("HELLO", "you")
"hello you"
same can also be used to get items from the input -
same[0] is equivalent to transform(lambda x: x[0]):
>>> from padl import same
>>> addfirst = add >> same[0]
>>> addfirst(np.array([1, 2, 3], [2, 3, 4]))
3
Applying Transforms Depending on the Mode
Often it can be useful to apply Transforms depending on what mode (infer, eval or train) is being applied. For example, you might want to apply augmentation Transforms only during training.
Use an IfInfer Transform to apply a Transform only in the “infer” mode:
>>> from padl import IfInfer
>>> t = MinusX(100) >> IfInfer(MinusX(100))
>>> t.infer_apply(300)
100
>>> list(t.eval_apply([300]))[0]
200
Analogously, use IfEval or IfTrain to apply a Transform only in the “eval”- or “train” mode, respectively.
Exception Handling
Use Try to handle exceptions:
@transform
def open_file(filename):
return open(filename)
@transform
def read(file):
return file.read()
@transform
def close(file):
file.close()
read_from_path = (
open
>> Try(read, transform(lambda x: ''), finally=close)
)