def cat_split_dim_is_static(op: Operator, cat_split_dim: int) -> bool:
    """
    To simplify, we only check either input or output. Assumption, if a certain input dim of any
    input/output tensor is dynamic, the corresponding output/input dim must be dynamic.

    Args:
        op (Operator): only supports split and concatenate ops
        cat_split_dim (int): cat or split dim

    Raises:
        RuntimeError: raises RuntimeError if unsupported op is passed

    Returns:
        bool: returns True if all the dims from cat_split_dim are static
    """
    tensor = None
    if op._attrs["op"] == "split":
        tensor = op._attrs["inputs"][0]
    elif op._attrs["op"] == "concatenate":
        tensor = op._attrs["outputs"][0]
    else:
        raise RuntimeError("Unsupported op:", op._attrs["op"])
    # check all dims after cat_split_dim
    return _dynamic_shape_checker(tensor._attrs["shape"], cat_split_dim)

    To simplify, we only check either input or output. Assumption, if a certain input dim of any
    input/output tensor is dynamic, the corresponding output/input dim must be dynamic.

    Args:
        op (Operator): only supports split and concatenate ops
        cat_split_dim (int): cat or split dim

    Raises:
        RuntimeError: raises RuntimeError if unsupported op is passed

    Returns:
        bool: returns True if all the dims from cat_split_dim are static
    
python/aitemplate/compiler/transform/transform_strided_ops_utils.py