"""PLynx Operations defined as python code. Using slighty more advanced functions than printing variables."""
import math
import random
import sys
import time
import plynx.node
@plynx.node.param(name='value', var_type=int, default=1)
@plynx.node.output(name='x', var_type=int)
@plynx.node.operation(
title="Make integer"
[docs])
def make_int(value):
"""Pass Integer value as output."""
return {
"x": value,
}
@plynx.node.param(name='value', var_type="enum", default={"values": ["a", "b", "c"], "index": 0})
@plynx.node.output(name='x', var_type=str)
@plynx.node.operation(
title="Make Enum"
[docs])
def make_enum(value):
"""Pass Integer value as output."""
return {
"x": str(value),
}
@plynx.node.input(name='x', var_type=int)
@plynx.node.input(name='y', var_type=int)
@plynx.node.output(name='res', var_type=str)
@plynx.node.param(name='coef', var_type=int, default=1)
@plynx.node.operation(
title="Multiple inputs",
description="x * coef + y * pi",
[docs])
def example_func(x, y, coef):
"""Math expression"""
print(f"x: {type(x)}")
print(f"y: {type(y)}")
print(f"coef {type(coef)}")
res = x * coef + y * math.pi
return {'res': str(res)}
@plynx.node.input(name='x', var_type=int, is_array=True, min_count=0)
@plynx.node.param(name='timeout', var_type=int, default=3)
@plynx.node.output(name='x', var_type=int)
@plynx.node.operation(
title="Sleep",
description="Sleep for timeout sec and add 1.",
[docs])
def sleep(x, timeout):
"""Sleep for timeout sec and add 1."""
print(f"Sleeping for {timeout} sec")
time.sleep(timeout)
return {
"x": sum(x) + 1
}
@plynx.node.input(name='x', var_type=int, is_array=True, min_count=0)
@plynx.node.output(name='x', var_type=int)
@plynx.node.operation(
title="Raise exception",
description="Always raise exception",
[docs])
def error(x):
"""Always raise exception"""
raise Exception("Expected exception")
@plynx.node.input(name='x', var_type=int, is_array=True, min_count=0)
@plynx.node.output(name='x', var_type=int)
@plynx.node.operation(
title="Stateful sum",
description="Add 1 and keep the previous value",
[docs])
class Statefull:
"""Add 1 and keep the previous value"""
def __init__(self):
self.accum = 0
self.random = random.random()
print(f"Init worker with id {self.random}")
[docs] def __call__(self, x):
self.accum += sum(x) + 1
print(f"I am {self.random} living on {id(self)}")
print(f"x: {x}")
print(f"self.accum: {self.accum}")
print("I am error", file=sys.stderr)
return {
"x": self.accum
}
@plynx.node.input(name='x', var_type=int, is_array=True, min_count=0)
@plynx.node.output(name='x', var_type=int)
@plynx.node.operation(
title="Wait manual run",
auto_run_enabled=False
[docs])
def auto_run_disabled(x):
"Auto run disabled for this node."
print(f"Run on depand. Input: {x}")
return {"x": x}
[docs]GROUP = plynx.node.utils.Group(
title="Test basics",
items=[
make_int,
make_enum,
example_func,
sleep,
error,
Statefull,
auto_run_disabled,
]
)