def gen_function_call(func_attrs, backend_spec, indent="  "):
    """Function call generation

    Parameters
    ----------
    func_attrs : Dict[str, Any]
        It describes the operation attributes
    indent : str, optional
        Indent for template, by default "  "

    Returns
    -------
    str
        Rendered function call
    """
    p2 = func_attrs["inputs"][0]
    p3 = func_attrs["inputs"][1]
    p4 = func_attrs["inputs"][2]
    p5 = func_attrs["inputs"][3]
    rois = func_attrs["inputs"][4]
    xshape = p2._attrs["shape"]
    y = func_attrs["outputs"][0]
    yshape = y._attrs["shape"]

    input_type = backend_spec.dtype_to_backend_type(p2._attrs["dtype"])
    output_type = backend_spec.dtype_to_backend_type(y._attrs["dtype"])

    return FUNC_CALL_TEMPLATE.render(
        func_name=func_attrs["name"],
        in_ptr_p2=p2._attrs["name"],
        in_ptr_p3=p3._attrs["name"],
        in_ptr_p4=p4._attrs["name"],
        in_ptr_p5=p5._attrs["name"],
        rois_ptr=rois._attrs["name"],
        out_ptr=y._attrs["name"],
        p_batch="&" + xshape[0]._attrs["name"],
        p_in_ch="&" + xshape[3]._attrs["name"],
        p_in_h="&" + xshape[1]._attrs["name"],
        p_in_w="&" + xshape[2]._attrs["name"],
        p_out_batch="&" + yshape[0]._attrs["name"],
        p_out_h="&" + yshape[1]._attrs["name"],
        p_out_w="&" + yshape[2]._attrs["name"],
        im_h=func_attrs["im_shape"][0],
        im_w=func_attrs["im_shape"][1],
        p2_h="&" + p2._attrs["shape"][1]._attrs["name"],
        p2_w="&" + p2._attrs["shape"][2]._attrs["name"],
        p3_h="&" + p3._attrs["shape"][1]._attrs["name"],
        p3_w="&" + p3._attrs["shape"][2]._attrs["name"],
        p4_h="&" + p4._attrs["shape"][1]._attrs["name"],
        p4_w="&" + p4._attrs["shape"][2]._attrs["name"],
        p5_h="&" + p5._attrs["shape"][1]._attrs["name"],
        p5_w="&" + p5._attrs["shape"][2]._attrs["name"],
        sampling_ratio=func_attrs["sampling_ratio"],
        spatial_scale=func_attrs["spatial_scale"],
        position_sensitive="true" if func_attrs["position_sensitive"] else "false",
        continuous_coordinate=(
            "true" if func_attrs["continuous_coordinate"] else "false"
        ),
        backend_spec=backend_spec,
        elem_input_type=input_type,
        elem_output_type=output_type,
        indent=indent,
    )
Function call generation

    Parameters
    ----------
    func_attrs : Dict[str, Any]
        It describes the operation attributes
    indent : str, optional
        Indent for template, by default "  "

    Returns
    -------
    str
        Rendered function call
    
python/aitemplate/backend/common/vision_ops/multi_level_roi_align_common.py