qmath very strange AttributeError
Question: I'm trying to use qmath, a quaternion lib.

this

    
    
    from qmath import  qmathcore
    a = qmathcore.quaternion([1,2,3,4])
    print a.conj()
    

gives me such traceback

    
    
    Traceback (most recent call last):
      File "*******/q_test.py", line 25, in <module>
        print str(a.conj())
      File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 788, in conj
        return self.real() - self.imag()
      File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 762, in imag
        return self - self.real()      
      File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 522, in __sub__
        self -= other
      File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 407, in __isub__
        self.other = quaternion(other)
      File "*******/venv/lib/python2.7/site-packages/qmath/qmathcore.py", line 81, in __init__
        self.q = q.q
    AttributeError: quaternion instance has no attribute 'q'
    

but in docs they said, that this must work:

    
    
    def conj(self):
        """
        Returns the conjugate of the quaternion
        >>> import qmathcore
        >>> a = qmathcore.quaternion([1,2,3,4])
        >>> a.conj()
        (1.0-2.0i-3.0j-4.0k)
        >>> a = qmathcore.hurwitz([1,2,3,4])
        >>> a.conj()
        (1-2i-3j-4k)
        """
        return self.real() - self.imag()
    

what is this?


Answer: `qmathcore.py` fails its own doctest with a newer (1.9) numpy.

Adding this test to `quatereon()`

    
    
        elif isinstance(q,float) or isinstance(q,int): # accept np.float64
            self.q = 1.0 * np.array([q,0.,0.,0.])
    

allows `qmath.quaternion([1,2,3,4]).imag()` (and `conj`).

The `quaternion` method is using a lot of `type(q)==xxx` tests. `isinstance()`
is a more robust test. Also it ends with a `else:pass`, and thus doesn't catch
`q` values that it can't handle.

After correcting some import errors, the `qmathcore` doctest runs fine.

