Split args into outputs, inputs and states
(args, kwargs)
| 330 | |
| 331 | |
| 332 | def handle_grouped_callback_args(args, kwargs): |
| 333 | """Split args into outputs, inputs and states""" |
| 334 | prevent_initial_call = kwargs.get("prevent_initial_call", None) |
| 335 | if prevent_initial_call is None and args and isinstance(args[-1], bool): |
| 336 | args, prevent_initial_call = args[:-1], args[-1] |
| 337 | |
| 338 | # flatten args, to support the older syntax where outputs, inputs, and states |
| 339 | # each needed to be in their own list |
| 340 | flat_args = [] |
| 341 | for arg in args: |
| 342 | flat_args += arg if isinstance(arg, (list, tuple)) else [arg] |
| 343 | |
| 344 | outputs = extract_grouped_output_callback_args(flat_args, kwargs) |
| 345 | flat_outputs = flatten_grouping(outputs) |
| 346 | |
| 347 | if isinstance(outputs, (list, tuple)) and len(outputs) == 1: |
| 348 | out0 = kwargs.get("output", args[0] if args else None) |
| 349 | if not isinstance(out0, (list, tuple)): |
| 350 | # unless it was explicitly provided as a list, a single output |
| 351 | # should be unwrapped. That ensures the return value of the |
| 352 | # callback is also not expected to be wrapped in a list. |
| 353 | outputs = outputs[0] |
| 354 | |
| 355 | inputs_state = extract_grouped_input_state_callback_args(flat_args, kwargs) |
| 356 | flat_inputs, flat_state, input_state_indices = compute_input_state_grouping_indices( |
| 357 | inputs_state |
| 358 | ) |
| 359 | |
| 360 | types = Input, Output, State |
| 361 | validate_callback(flat_outputs, flat_inputs, flat_state, flat_args, types) |
| 362 | |
| 363 | return outputs, flat_inputs, flat_state, input_state_indices, prevent_initial_call |
| 364 | |
| 365 | |
| 366 | def extract_callback_args(args, kwargs, name, type_): |
no test coverage detected
searching dependent graphs…