Hello! I need to set an if like this inside an @gr...
# ask-community
s
Hello! I need to set an if like this inside an @graph. how can I do this? Is there any way to compare 'InvokedSolidOutputHandle' objects ? Thanks! @op def return_number1(): number = 1 return number @op def return_number2(): number = 10 return number @op def greater_num(number): print(f"Number {number} is greater!") @graph def compare_numbers(): number1 = return_number1() number2 = return_number2() if number1 > number2: greater_num(number1) else: greater_num(number2) if name == '__main__': result = compare_numbers.execute_in_process()
m
Hi Sara! You could use conditional branching to change the execution of operations in your graph on run time. See here for the documentation of this feature 🙂
s
Thanks @Mathijs Pieters!! I have done the following and I get an error (I need the banching to be a @graph because inside I have to call other @graphs). Any ideas? Greetings!!! @op def return_number1(): number = 1 return number @op def return_number2(): number = 10 return number @op def greater_num(number): print(f"Number {number} is greater!") @graph(out={"branch_1": Out(is_required=False), "branch_2": Out(is_required=False)}) def branching_graph(number1, number2): if number1 > number2: yield Output(number1, "branch_1") else: yield Output(number2, "branch_2") @graph def compare_numbers(): number1 = return_number1() number2 = return_number2() branch_1, branch_2 = branching_graph(number1, number2) greater_num(branch_1) greater_num(branch_2) if name == '__main__': result = compare_numbers.execute_in_process() Error: dagster.check.CheckError: Value in dictionary mismatches expected type for key branch_1. Expected value of type <class 'dagster.core.definitions.output.GraphOut'>. Got value Out(dagster_type=<class 'dagster.core.definitions.utils.NoValueSentinel'>, description=None, is_required=False, io_manager_key=None, metadata=None, asset_key=None, asset_partitions=None) of type <class 'dagster.core.definitions.output.Out'>.
m
Hi, I think
Copy code
@graph(out={"branch_1": Out(is_required=False), "branch_2": Out(is_required=False)})
should be changed to
Copy code
@op(out={"branch_1": Out(is_required=False), "branch_2": Out(is_required=False)})
❤️ 1
s
Indeed, if I put it this way it works in the example. The problem is that I need to execute another graph and it doesn't let me do it from an op 😞