def {{ schema.name | get_constructor_name }}({%
for param in schema.inputs %}{%
    if is_optional(param)
        %}{{ param.name }}: Optional[Var] = None, {%
    elif is_variadic(param)
        %}{{ param.name }}: Sequence[Var]{{" = ()" if loop.index0 >= schema.min_input else ""}}, {%
    else
        %}{{ param.name }}: Var, {%
endif %}{% endfor %}
    {% if schema.attributes
        %}*, {%
    endif %}{%
if is_variadic(schema.outputs[-1]) and not out_variadic_solution
    %}{{ schema.outputs[-1].name }}_count: int, {% endif %}
{% for attr in attributes %}
    {{ attr.name }}: {{ attr.constructor_type_hint }}{% if attr.constructor_default %} = {{ attr.constructor_default }}{% endif %}, {%
endfor %}
{% for attr in attributes %}{%
    if (attr.attr_constructor == 'AttrGraph') and (attr.subgraph_solution is none)
    %}{{ attr.name }}_input_types: Iterable[Type], {% endif %}
{% endfor %}
) -> {{ get_constructor_return(schema) }}:
{% if gen_docstrings %}
    r"""
{%+ include "docstring.jinja2" %}
    """
{% endif %}
{% filter indent(width=4) %}
    {%+ include "construct.jinja2" %}
{% endfilter %}
