+ extend number protocol

This commit is contained in:
wmayer
2014-02-14 12:46:30 +01:00
parent 5b9f076c53
commit 98bab1ebbe
5 changed files with 798 additions and 13 deletions

View File

@@ -695,3 +695,123 @@ int MatrixPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)
{
return 0;
}
PyObject * MatrixPy::number_divide_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_remainder_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_divmod_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_power_handler (PyObject *self, PyObject *other, PyObject *arg)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_negative_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_positive_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_absolute_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int MatrixPy::number_nonzero_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_invert_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_lshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_rshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_and_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_xor_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_or_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int MatrixPy::number_coerce_handler (PyObject **self, PyObject **other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_int_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_long_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_float_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_oct_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * MatrixPy::number_hex_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}

View File

@@ -14,11 +14,11 @@ using namespace Base;
// returns a string which represents the object e.g. when printed in python
std::string QuantityPy::representation(void) const
{
std::stringstream ret;
ret << getQuantityPtr()->getValue() << " ";
ret << getQuantityPtr()->getUnit().getString().toLatin1().constData();
std::stringstream ret;
ret << getQuantityPtr()->getValue() << " ";
ret << getQuantityPtr()->getUnit().getString().toLatin1().constData();
return ret.str();
return ret.str();
}
PyObject *QuantityPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper
@@ -78,7 +78,6 @@ int QuantityPy::PyInit(PyObject* args, PyObject* kwd)
return -1;
}
PyObject* QuantityPy::pow(PyObject * args)
{
PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented");
@@ -192,6 +191,11 @@ PyObject* QuantityPy::number_multiply_handler(PyObject *self, PyObject *other)
double b = PyFloat_AsDouble(other);
return new QuantityPy(new Quantity(*a*b) );
}
else if (PyInt_Check(other)) {
Base::Quantity *a = static_cast<QuantityPy*>(self) ->getQuantityPtr();
double b = (double)PyInt_AsLong(other);
return new QuantityPy(new Quantity(*a*b) );
}
else {
PyErr_SetString(PyExc_TypeError, "A Quantity can only be multiplied by Quantity or number");
return 0;
@@ -286,8 +290,122 @@ int QuantityPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)
return 0;
}
PyObject * QuantityPy::number_divide_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_remainder_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_divmod_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_power_handler (PyObject *self, PyObject *other, PyObject *arg)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_negative_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_positive_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_absolute_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int QuantityPy::number_nonzero_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_invert_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_lshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_rshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_and_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_xor_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_or_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int QuantityPy::number_coerce_handler (PyObject **self, PyObject **other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_int_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_long_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_float_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_oct_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * QuantityPy::number_hex_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}

View File

@@ -193,4 +193,124 @@ int UnitPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)
return 0;
}
PyObject * UnitPy::number_divide_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_remainder_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_divmod_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_power_handler (PyObject *self, PyObject *other, PyObject *arg)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_negative_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_positive_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_absolute_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int UnitPy::number_nonzero_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_invert_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_lshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_rshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_and_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_xor_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_or_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int UnitPy::number_coerce_handler (PyObject **self, PyObject **other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_int_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_long_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_float_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_oct_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * UnitPy::number_hex_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}

View File

@@ -136,6 +136,11 @@ PyObject* VectorPy::number_multiply_handler(PyObject *self, PyObject *other)
double b = PyFloat_AsDouble(other);
return new VectorPy(a * b);
}
else if (PyInt_Check(other)) {
Base::Vector3d a = static_cast<VectorPy*>(self) ->value();
long b = PyInt_AsLong(other);
return new VectorPy(a * (double)b);
}
else {
PyErr_SetString(PyExc_TypeError, "A Vector can only be multiplied by Vector or number");
return 0;
@@ -545,4 +550,122 @@ int VectorPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/)
return 0;
}
PyObject * VectorPy::number_divide_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_remainder_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_divmod_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_power_handler (PyObject *self, PyObject *other, PyObject *arg)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_negative_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_positive_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_absolute_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int VectorPy::number_nonzero_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_invert_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_lshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_rshift_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_and_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_xor_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_or_handler (PyObject *self, PyObject *other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
int VectorPy::number_coerce_handler (PyObject **self, PyObject **other)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_int_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_long_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_float_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_oct_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}
PyObject * VectorPy::number_hex_handler (PyObject *self)
{
PyErr_SetString(PyExc_NotImplementedError, "Not implemented");
return 0;
}