Calculating the volume of a tetrahedron
"The most Pythonic way to check the type of an object is... not to check it." The pythonic way to do this is to assume that the calling code/user is sensible enough to pass an object which can be handled by the callee. This allows for subclass items or simply any object with the correct properties to be used in the code.

For maintainability you should:


use self explanatory names such as numpy, matrix, determinant etc.,
use descriptively named constants for any magic numbers such as 288,
split the function into one for sides and one for vertices (one may end up calling the other or they may both call a third, internal function for the final calculation),
run the code through pep8 and possibly a cyclomatic complexity checker like radon, and
in general, go through all comments, and for every comment see if you can refactor the code to make the comment unnecessary. For example, instead of "Set up the Cayley-Menger determinant" create a function get_cayley_menger_determinant.