def make_group_gemm_exec_key(op_keys: str) -> str:
    """make exec_key for group_gemm-family ops based on the given op_keys string

    Parameters
    ----------
    op_keys: str
        op_keys used to make the exec_key, e.g. 2x3x4;4x5x6;7x8x9

    Returns
    ----------
    str
        exec_key
    """
    shapes = op_keys.split(";")
    name_value_strs = []
    for i, shape in enumerate(shapes):
        values = shape.split("x")
        if len(values) != 3:
            raise RuntimeError("invalid op_keys for group_gemm: '{}'".format(op_keys))
        name_values = [
            ("GROUP_{}_M".format(i), int(values[0])),
            ("GROUP_{}_N".format(i), int(values[1])),
            ("GROUP_{}_K".format(i), int(values[2])),
        ]
        name_value_str = " &&".join(["{} == {}".format(n, v) for n, v in name_values])
        name_value_strs.append(" " + name_value_str)
    return "  &&".join(name_value_strs)
make exec_key for group_gemm-family ops based on the given op_keys string

    Parameters
    ----------
    op_keys: str
        op_keys used to make the exec_key, e.g. 2x3x4;4x5x6;7x8x9

    Returns
    ----------
    str
        exec_key
    
tests/ci_profile_cache/update_cache.py