Instantiating a kind of NumPy array
Well I agree with the exception sentiment.  Errors are communicated by
exceptions (unless it is an exceptional case, but really, what you have
seems very standard, I don't see a reason to deviate here).

The typecheck for the input should probably be revised.  It's not
(immediately) clear to me what input arrays you actually want to accept.
In any case the isinstance check should probably be done the other way
round, i.e. check what type you want to accept (just np.ndarray?)
instead of the ones you don't want (because the reader has to infer what
other types there are).  It might also be easier to defer the check
until after np.asarray has returned a result, because afaik things
like nested lists can actually be converted meaningfully as well (unless
you don't want that obviously).

The shape check needs to be tighter as well, e.g. (4, 1, 1) &lt; (4, 2)
is still true.

The method __array_wrap__ is just passing through the values, so is it
even needed?

The first argument of __array_finalize__ is self, so in the interest
of clarity I'd use that as well, although I can see the point in
expressing that it's the new array as well.

The use of hasattr in __repr__ strikes me as a bit odd, since in the
construction of the object you do assign them, so is there a case when
neither name, info, nor applied are available?  I'd also add test
cases if you rely on the output of repr.

As far as I can see from the
subclassing doc
the code seems fine otherwise.

Style-wise the indentation in Python code is four spaces, not two, there
are spaces missing in some method argument lists and I'm sure a tool
like pep8 will pick up more issues if you were to run it on the code.