human
I wrote the below code

    def conv_fn(inputs, filters, kernel_size, **kwargs):
        'Sub-separable    convolution,    splits    into    separability-many    blocks.'
        separability = None
        if ('separability' in kwargs):
            separability = kwargs.pop('separability')
        if separability:
            parts = []
            abs_sep = (separability if (separability > 0) else ((-1) * separability))
            for (split_idx, split) in enumerate(tf.split(inputs, abs_sep, axis=3)):
                with tf.variable_scope(('part_%d' % split_idx)):
                    if (separability > 0):
                        parts.append(tf.layers.conv2d(split, (filters // separability), kernel_size, **kwargs))
                    else:
                        parts.append(tf.layers.separable_conv2d(split, (filters // abs_sep), kernel_size, **kwargs))
            if (separability > 1):
                result = tf.layers.conv2d(tf.concat(parts, axis=3), filters, (1, 1))
            elif (abs_sep == 1):
                assert (len(parts) == 1)
                result = parts[0]
            else:
                result = tf.concat(parts, axis=3)
        else:
            result = tf.layers.separable_conv2d(inputs, filters, kernel_size, **kwargs)
        if (separability is not None):
            kwargs['separability'] = separability
        return result
    return conv_internal(conv_fn, inputs, filters, kernel_size, **kwargs)

What's a good function header?
assistant
#Here's a good function header.

def subseparable_conv(inputs, filters, kernel_size, **kwargs):