Basically, there are two forms of multilabel targets supported, corresponding to dense and sparse representations of the same thing.

So,
```
y = [
[0, 3],
[1],
[0, 2]
]
```
is a sequence-of-sequences representation. If the first element of `y` is a sequence, but not a string or ndarray, we assume `y` is multilabel and sequences-of-sequences. It is akin to `lil_matrix`, and looks like the non-multilabel targets format. (But I should correct my post above: `lil_matrix` uses an array of lists. But we reject an array of lists; or an array of arrays.) It is useful when there are very many sparsely-assigned classes.

The same data could be represented as an indicator matrix (dense-like):
```
y = array([
[T F F T],
[F T F F],
[T F T F]
])
```
The type comparison above is to make sure `y_pred` and `y_true` are of the same form, and if not, to convert to the latter. In using `type`, it would make an error if the sequence-of-sequences was itself an `array`, being compared to a label indicator matrix (the condition should be `True`, but would be `False`).