decl_raw_opr(
    'extern_c_opr_placeholder',
    desc='create a placeholder operator that would be replaced by a '
    'registered implementation during graph load. '
    'See :class:`.ExternCOprPlaceholder` for more details.',
    inputs=[
        Doc('inputs', 'input vars', 'list of :class:`.SymbolVar`'),
        Doc('output_shapes', 'shapes of output vars', 'list of list of int'),
        Doc('dump_name', 'name to be used for matching the loader', 'str'),
        Doc('dump_data', 'data to be dumped that can be read by loader',
            'bytes'),
        Doc('output_dtypes', 'dtypes of output vars', 'list of dtypes',
            default="None"),
    ],
    body=[
        'cvt_result_kwargs["explode_single"] = False',
        'assert isinstance(dump_data, bytes), '
            '"data must be bytes; got {}".format(type(dump_data))',
        'output_shapes = _helper.cvt_to_vector_of_shape(output_shapes)',
        'output = _mgb._Opr.extern_c_opr_placeholder(inputs, output_shapes, '
            'output_dtypes, dump_name, dump_data, config)'
    ]
)

# vim: ft=python
