<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def expand_char_ngrams(source, minn, maxn, itself='ASIS', name=None):
 """Split unicode strings into char ngrams. Ngrams size configures with minn and max Args: source: `Tensor` or `SparseTensor` of any shape, strings to split minn: Minimum length of char ngram minn: Maximum length of char ngram itself: Scalar value, strategy for source word preserving. One of `"ASIS"`, `"NEVER"`, `"ALWAYS"`, `"ALONE"`. name: A name for the operation (optional). Returns: `SparseTensor` with an additional dimension of size 1 added. """


    with ops.name_scope(name, "ExpandCharNgrams", [source]):
        source = convert_to_tensor_or_sparse_tensor(source, dtype=tf.string)
        if isinstance(source, tf.SparseTensor):
            child_indices, child_values, child_shape = ops_module.expand_char_ngrams(source.values, minn, maxn, itself)
            result = _combine_sparse_successor(source.indices, source.dense_shape, child_indices, child_values,
                                               child_shape)
        else:
            indices, values, shape = ops_module.expand_char_ngrams(source, minn, maxn, itself)
            result = tf.SparseTensor(indices=indices, values=values, dense_shape=shape)

        return result