    def emit(self) -> str:
        args = deepcopy(self.__dict__)
        args["thread_cluster_length"] = [str(x) for x in self.thread_cluster_length]
        args["thread_cluster_arrange_order"] = [
            str(x) for x in self.thread_cluster_arrange_order
        ]
        args["src_access_order"] = [str(x) for x in self.src_access_order]

        template = jinja2.Template(
            """
    ck::Sequence<{{thread_cluster_length|join(',')}}>, // thread_cluster_length
    ck::Sequence<{{thread_cluster_arrange_order|join(',')}}>, // thread_cluster_arrange_order
    ck::Sequence<{{src_access_order|join(',')}}>, // src_access_order
    {{src_vector_dim}}, // src_vector_dim
    {{src_scalar_per_vector}}, // src_scalar_per_vector
    {{dst_scalar_per_vector}}, // dst_scalar_per_vector
    {% if add_extra_dim == 1 %}true{% else %}false{% endif %}, // add_extra_dim
"""
        )
        return template.render(**args)
ck::Sequence<{{thread_cluster_length|join(',')}}>, // thread_cluster_length
ck::Sequence<{{thread_cluster_arrange_order|join(',')}}>, // thread_cluster_arrange_order
ck::Sequence<{{src_access_order|join(',')}}>, // src_access_order
{{src_vector_dim}}, // src_vector_dim
{{src_scalar_per_vector}}, // src_scalar_per_vector
{{dst_scalar_per_vector}}, // dst_scalar_per_vector
{% if add_extra_dim == 1 %}true{% else %}false{% endif %}, // add_extra_dim
python/aitemplate/utils/mk_ck_lib/conv2d_operation.py