Esempio n. 1
0
def replace_output_leaf_nodes(
    root: Output,
    node: Variable,
    leaf: Input,
):
    """
    Replace ``Output`` objects that are used before they are defined
    with ``Input`` objects with same data.
    """
    for dependency in node.dependencies:
        if dependency is root:
            # replace dependency reference with Input node
            node.remove_dependency_node(dependency)
            node.add_dependency_node(leaf)
        replace_output_leaf_nodes(root, dependency, leaf)
Esempio n. 2
0
def _remove_nonresiduals(root: Variable):
    """
    Remove dependence of root on expressions that are not
    residuals

    Parameters
    ----------
    root: Variable
        Node that serves as root for DAG
    """
    remove = []
    for expr in root.dependencies:
        if expr.is_residual == False:
            remove.append(expr)
    for rem in remove:
        root.remove_dependency_node(rem)
Esempio n. 3
0
def replace_input_leaf_nodes(
    node: Variable,
    leaves: Dict[str, Input],
):
    """
    Replace ``Input`` objects that depend on previous subsystems
    with ``Input`` objects that do not. This is required for defining
    graphs for residuals so that ``ImplicitComponent`` objects do
    not include subsystems.
    """
    for dependency in node.dependencies:
        if isinstance(dependency, Input):
            if len(dependency.dependencies) > 0:
                node.remove_dependency_node(dependency)
                if dependency._id in leaves.keys():
                    node.add_dependency_node(leaves[dependency._id])
                else:
                    leaf = Input(dependency.name,
                                 shape=dependency.shape,
                                 val=dependency.val)
                    leaf._id = dependency._id
                    node.add_dependency_node(leaf)
                    leaves[dependency._id] = leaf
        replace_input_leaf_nodes(dependency, leaves)