Commit 19db347a authored by Kevin Modzelewski's avatar Kevin Modzelewski

Merge commit '91cd46' into refcounting

parents 58366391 91cd46b6
...@@ -1873,6 +1873,7 @@ void setupBuiltins() { ...@@ -1873,6 +1873,7 @@ void setupBuiltins() {
notimplemented_cls->giveAttr("__repr__", notimplemented_cls->giveAttr("__repr__",
new BoxedFunction(FunctionMetadata::create((void*)notimplementedRepr, STR, 1))); new BoxedFunction(FunctionMetadata::create((void*)notimplementedRepr, STR, 1)));
notimplemented_cls->freeze(); notimplemented_cls->freeze();
notimplemented_cls->instances_are_nonzero = true;
NotImplemented = new (notimplemented_cls) Box(); NotImplemented = new (notimplemented_cls) Box();
constants.push_back(NotImplemented); constants.push_back(NotImplemented);
......
...@@ -115,24 +115,24 @@ extern "C" double floordiv_float_float(double lhs, double rhs) { ...@@ -115,24 +115,24 @@ extern "C" double floordiv_float_float(double lhs, double rhs) {
} }
extern "C" Box* floatAddFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatAddFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->d + rhs->d); return boxFloat(lhs->d + rhs->d);
} }
extern "C" Box* floatAddInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatAddInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(lhs->d + rhs->n); return boxFloat(lhs->d + rhs->n);
} }
extern "C" Box* floatAdd(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatAdd(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatAddInt(lhs, static_cast<BoxedInt*>(rhs)); return floatAddInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatAddFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatAddFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -144,26 +144,26 @@ extern "C" Box* floatAdd(BoxedFloat* lhs, Box* rhs) { ...@@ -144,26 +144,26 @@ extern "C" Box* floatAdd(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
raiseDivZeroExcIfZero(rhs->d); raiseDivZeroExcIfZero(rhs->d);
return boxFloat(lhs->d / rhs->d); return boxFloat(lhs->d / rhs->d);
} }
extern "C" Box* floatDivInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatDivInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
raiseDivZeroExcIfZero(rhs->n); raiseDivZeroExcIfZero(rhs->n);
return boxFloat(lhs->d / rhs->n); return boxFloat(lhs->d / rhs->n);
} }
extern "C" Box* floatDiv(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatDiv(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatDivInt(lhs, static_cast<BoxedInt*>(rhs)); return floatDivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatDivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatDivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -175,12 +175,12 @@ extern "C" Box* floatDiv(BoxedFloat* lhs, Box* rhs) { ...@@ -175,12 +175,12 @@ extern "C" Box* floatDiv(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatTruediv(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatTruediv(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatDivInt(lhs, static_cast<BoxedInt*>(rhs)); return floatDivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatDivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatDivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -192,26 +192,26 @@ extern "C" Box* floatTruediv(BoxedFloat* lhs, Box* rhs) { ...@@ -192,26 +192,26 @@ extern "C" Box* floatTruediv(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatRDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatRDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
raiseDivZeroExcIfZero(lhs->d); raiseDivZeroExcIfZero(lhs->d);
return boxFloat(rhs->d / lhs->d); return boxFloat(rhs->d / lhs->d);
} }
extern "C" Box* floatRDivInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatRDivInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
raiseDivZeroExcIfZero(lhs->d); raiseDivZeroExcIfZero(lhs->d);
return boxFloat(rhs->n / lhs->d); return boxFloat(rhs->n / lhs->d);
} }
extern "C" Box* floatRDiv(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatRDiv(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatRDivInt(lhs, static_cast<BoxedInt*>(rhs)); return floatRDivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatRDivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatRDivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -245,26 +245,26 @@ Box* floatRTruediv(BoxedFloat* lhs, Box* rhs) { ...@@ -245,26 +245,26 @@ Box* floatRTruediv(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatFloorDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatFloorDivFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
raiseDivZeroExcIfZero(rhs->d); raiseDivZeroExcIfZero(rhs->d);
return boxFloat(floor(lhs->d / rhs->d)); return boxFloat(floor(lhs->d / rhs->d));
} }
extern "C" Box* floatFloorDivInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatFloorDivInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
raiseDivZeroExcIfZero(rhs->n); raiseDivZeroExcIfZero(rhs->n);
return boxFloat(floor(lhs->d / rhs->n)); return boxFloat(floor(lhs->d / rhs->n));
} }
extern "C" Box* floatFloorDiv(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatFloorDiv(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatFloorDivInt(lhs, static_cast<BoxedInt*>(rhs)); return floatFloorDivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatFloorDivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatFloorDivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -276,16 +276,16 @@ extern "C" Box* floatFloorDiv(BoxedFloat* lhs, Box* rhs) { ...@@ -276,16 +276,16 @@ extern "C" Box* floatFloorDiv(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatRFloorDiv(BoxedFloat* lhs, Box* _rhs) { extern "C" Box* floatRFloorDiv(BoxedFloat* lhs, Box* _rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(_rhs)) { if (PyInt_Check(_rhs)) {
BoxedInt* rhs = (BoxedInt*)_rhs; BoxedInt* rhs = (BoxedInt*)_rhs;
raiseDivZeroExcIfZero(lhs->d); raiseDivZeroExcIfZero(lhs->d);
return boxFloat(floor(rhs->n / lhs->d)); return boxFloat(floor(rhs->n / lhs->d));
} else if (_rhs->cls == float_cls) { } else if (PyFloat_Check(_rhs)) {
BoxedFloat* rhs = (BoxedFloat*)_rhs; BoxedFloat* rhs = (BoxedFloat*)_rhs;
raiseDivZeroExcIfZero(lhs->d); raiseDivZeroExcIfZero(lhs->d);
return boxFloat(floor(rhs->d / lhs->d)); return boxFloat(floor(rhs->d / lhs->d));
} else if (_rhs->cls == long_cls) { } else if (PyLong_Check(_rhs)) {
double rhs_f = PyLong_AsDouble(_rhs); double rhs_f = PyLong_AsDouble(_rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -599,24 +599,24 @@ extern "C" Box* floatGt(BoxedFloat* lhs, Box* rhs) { ...@@ -599,24 +599,24 @@ extern "C" Box* floatGt(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatModFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatModFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(mod_float_float(lhs->d, rhs->d)); return boxFloat(mod_float_float(lhs->d, rhs->d));
} }
extern "C" Box* floatModInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatModInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(mod_float_float(lhs->d, rhs->n)); return boxFloat(mod_float_float(lhs->d, rhs->n));
} }
extern "C" Box* floatMod(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatMod(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatModInt(lhs, static_cast<BoxedInt*>(rhs)); return floatModInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatModFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatModFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -628,24 +628,24 @@ extern "C" Box* floatMod(BoxedFloat* lhs, Box* rhs) { ...@@ -628,24 +628,24 @@ extern "C" Box* floatMod(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatRModFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatRModFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(mod_float_float(rhs->d, lhs->d)); return boxFloat(mod_float_float(rhs->d, lhs->d));
} }
extern "C" Box* floatRModInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatRModInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(mod_float_float(rhs->n, lhs->d)); return boxFloat(mod_float_float(rhs->n, lhs->d));
} }
extern "C" Box* floatRMod(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatRMod(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatRModInt(lhs, static_cast<BoxedInt*>(rhs)); return floatRModInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatRModFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatRModFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -690,14 +690,14 @@ extern "C" Box* floatPow(BoxedFloat* lhs, Box* rhs, Box* mod) { ...@@ -690,14 +690,14 @@ extern "C" Box* floatPow(BoxedFloat* lhs, Box* rhs, Box* mod) {
extern "C" Box* floatPowFloat(BoxedFloat* lhs, BoxedFloat* rhs, Box* mod = None) { extern "C" Box* floatPowFloat(BoxedFloat* lhs, BoxedFloat* rhs, Box* mod = None) {
// TODO to specialize this, need to account for all the special cases in float_pow // TODO to specialize this, need to account for all the special cases in float_pow
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return floatPow(lhs, rhs, mod); return floatPow(lhs, rhs, mod);
} }
extern "C" Box* floatPowInt(BoxedFloat* lhs, BoxedInt* rhs, Box* mod = None) { extern "C" Box* floatPowInt(BoxedFloat* lhs, BoxedInt* rhs, Box* mod = None) {
// TODO to specialize this, need to account for all the special cases in float_pow // TODO to specialize this, need to account for all the special cases in float_pow
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return floatPow(lhs, rhs, mod); return floatPow(lhs, rhs, mod);
} }
...@@ -725,24 +725,24 @@ extern "C" double pow_float_float(double lhs, double rhs) { ...@@ -725,24 +725,24 @@ extern "C" double pow_float_float(double lhs, double rhs) {
} }
extern "C" Box* floatMulFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatMulFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->d * rhs->d); return boxFloat(lhs->d * rhs->d);
} }
extern "C" Box* floatMulInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatMulInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(lhs->d * rhs->n); return boxFloat(lhs->d * rhs->n);
} }
extern "C" Box* floatMul(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatMul(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatMulInt(lhs, static_cast<BoxedInt*>(rhs)); return floatMulInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatMulFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatMulFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -754,24 +754,24 @@ extern "C" Box* floatMul(BoxedFloat* lhs, Box* rhs) { ...@@ -754,24 +754,24 @@ extern "C" Box* floatMul(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatSubFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatSubFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->d - rhs->d); return boxFloat(lhs->d - rhs->d);
} }
extern "C" Box* floatSubInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatSubInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(lhs->d - rhs->n); return boxFloat(lhs->d - rhs->n);
} }
extern "C" Box* floatSub(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatSub(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatSubInt(lhs, static_cast<BoxedInt*>(rhs)); return floatSubInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatSubFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatSubFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -783,24 +783,24 @@ extern "C" Box* floatSub(BoxedFloat* lhs, Box* rhs) { ...@@ -783,24 +783,24 @@ extern "C" Box* floatSub(BoxedFloat* lhs, Box* rhs) {
} }
extern "C" Box* floatRSubFloat(BoxedFloat* lhs, BoxedFloat* rhs) { extern "C" Box* floatRSubFloat(BoxedFloat* lhs, BoxedFloat* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(rhs->d - lhs->d); return boxFloat(rhs->d - lhs->d);
} }
extern "C" Box* floatRSubInt(BoxedFloat* lhs, BoxedInt* rhs) { extern "C" Box* floatRSubInt(BoxedFloat* lhs, BoxedInt* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
assert(PyInt_Check(rhs)); assert(PyInt_Check(rhs));
return boxFloat(rhs->n - lhs->d); return boxFloat(rhs->n - lhs->d);
} }
extern "C" Box* floatRSub(BoxedFloat* lhs, Box* rhs) { extern "C" Box* floatRSub(BoxedFloat* lhs, Box* rhs) {
assert(lhs->cls == float_cls); assert(PyFloat_Check(lhs));
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return floatRSubInt(lhs, static_cast<BoxedInt*>(rhs)); return floatRSubInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return floatRSubFloat(lhs, static_cast<BoxedFloat*>(rhs)); return floatRSubFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else if (rhs->cls == long_cls) { } else if (PyLong_Check(rhs)) {
double rhs_f = PyLong_AsDouble(rhs); double rhs_f = PyLong_AsDouble(rhs);
if (rhs_f == -1.0 && PyErr_Occurred()) { if (rhs_f == -1.0 && PyErr_Occurred()) {
throwCAPIException(); throwCAPIException();
...@@ -812,12 +812,12 @@ extern "C" Box* floatRSub(BoxedFloat* lhs, Box* rhs) { ...@@ -812,12 +812,12 @@ extern "C" Box* floatRSub(BoxedFloat* lhs, Box* rhs) {
} }
Box* floatNeg(BoxedFloat* self) { Box* floatNeg(BoxedFloat* self) {
assert(self->cls == float_cls); assert(PyFloat_Check(self));
return boxFloat(-self->d); return boxFloat(-self->d);
} }
Box* floatPos(BoxedFloat* self) { Box* floatPos(BoxedFloat* self) {
assert(self->cls == float_cls); assert(PyFloat_Check(self));
return PyFloat_FromDouble(self->d); return PyFloat_FromDouble(self->d);
} }
...@@ -830,7 +830,7 @@ Box* floatAbs(BoxedFloat* self) { ...@@ -830,7 +830,7 @@ Box* floatAbs(BoxedFloat* self) {
} }
bool floatNonzeroUnboxed(BoxedFloat* self) { bool floatNonzeroUnboxed(BoxedFloat* self) {
assert(self->cls == float_cls); assert(PyFloat_Check(self));
return self->d != 0.0; return self->d != 0.0;
} }
...@@ -1115,18 +1115,18 @@ extern "C" void printFloat(double d) { ...@@ -1115,18 +1115,18 @@ extern "C" void printFloat(double d) {
static void _addFunc(const char* name, ConcreteCompilerType* rtn_type, void* float_func, void* int_func, static void _addFunc(const char* name, ConcreteCompilerType* rtn_type, void* float_func, void* int_func,
void* boxed_func) { void* boxed_func) {
std::vector<ConcreteCompilerType*> v_ff, v_fi, v_fu; std::vector<ConcreteCompilerType*> v_ff, v_fi, v_uu;
v_ff.push_back(BOXED_FLOAT); v_ff.push_back(BOXED_FLOAT);
v_ff.push_back(BOXED_FLOAT); v_ff.push_back(BOXED_FLOAT);
v_fi.push_back(BOXED_FLOAT); v_fi.push_back(BOXED_FLOAT);
v_fi.push_back(BOXED_INT); v_fi.push_back(BOXED_INT);
v_fu.push_back(BOXED_FLOAT); v_uu.push_back(UNKNOWN);
v_fu.push_back(UNKNOWN); v_uu.push_back(UNKNOWN);
FunctionMetadata* md = new FunctionMetadata(2, false, false); FunctionMetadata* md = new FunctionMetadata(2, false, false);
md->addVersion(float_func, rtn_type, v_ff); md->addVersion(float_func, rtn_type, v_ff);
md->addVersion(int_func, rtn_type, v_fi); md->addVersion(int_func, rtn_type, v_fi);
md->addVersion(boxed_func, UNKNOWN, v_fu); md->addVersion(boxed_func, UNKNOWN, v_uu);
float_cls->giveAttr(name, new BoxedFunction(md)); float_cls->giveAttr(name, new BoxedFunction(md));
} }
......
...@@ -483,7 +483,7 @@ extern "C" Box* intAddInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -483,7 +483,7 @@ extern "C" Box* intAddInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intAddFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intAddFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->n + rhs->d); return boxFloat(lhs->n + rhs->d);
} }
...@@ -494,7 +494,7 @@ extern "C" Box* intAdd(BoxedInt* lhs, Box* rhs) { ...@@ -494,7 +494,7 @@ extern "C" Box* intAdd(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs); BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs);
return add_i64_i64(lhs->n, rhs_int->n); return add_i64_i64(lhs->n, rhs_int->n);
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs); BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs);
return boxFloat(lhs->n + rhs_float->d); return boxFloat(lhs->n + rhs_float->d);
} else { } else {
...@@ -609,7 +609,7 @@ extern "C" Box* intDivInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -609,7 +609,7 @@ extern "C" Box* intDivInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intDivFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intDivFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
if (rhs->d == 0) { if (rhs->d == 0) {
raiseExcHelper(ZeroDivisionError, "float divide by zero"); raiseExcHelper(ZeroDivisionError, "float divide by zero");
...@@ -623,7 +623,7 @@ extern "C" Box* intDiv(BoxedInt* lhs, Box* rhs) { ...@@ -623,7 +623,7 @@ extern "C" Box* intDiv(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return intDivInt(lhs, static_cast<BoxedInt*>(rhs)); return intDivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return intDivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return intDivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else { } else {
return incref(NotImplemented); return incref(NotImplemented);
...@@ -650,7 +650,7 @@ extern "C" Box* intFloordivInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -650,7 +650,7 @@ extern "C" Box* intFloordivInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intFloordivFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intFloordivFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
if (rhs->d == 0) { if (rhs->d == 0) {
raiseExcHelper(ZeroDivisionError, "float divide by zero"); raiseExcHelper(ZeroDivisionError, "float divide by zero");
...@@ -665,7 +665,7 @@ extern "C" Box* intFloordiv(BoxedInt* lhs, Box* rhs) { ...@@ -665,7 +665,7 @@ extern "C" Box* intFloordiv(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return intFloordivInt(lhs, static_cast<BoxedInt*>(rhs)); return intFloordivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return intFloordivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return intFloordivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else { } else {
return incref(NotImplemented); return incref(NotImplemented);
...@@ -696,7 +696,7 @@ extern "C" Box* intTruedivInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -696,7 +696,7 @@ extern "C" Box* intTruedivInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intTruedivFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intTruedivFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
if (rhs->d == 0) { if (rhs->d == 0) {
raiseExcHelper(ZeroDivisionError, "division by zero"); raiseExcHelper(ZeroDivisionError, "division by zero");
...@@ -711,7 +711,7 @@ extern "C" Box* intTruediv(BoxedInt* lhs, Box* rhs) { ...@@ -711,7 +711,7 @@ extern "C" Box* intTruediv(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
return intTruedivInt(lhs, static_cast<BoxedInt*>(rhs)); return intTruedivInt(lhs, static_cast<BoxedInt*>(rhs));
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
return intTruedivFloat(lhs, static_cast<BoxedFloat*>(rhs)); return intTruedivFloat(lhs, static_cast<BoxedFloat*>(rhs));
} else { } else {
return incref(NotImplemented); return incref(NotImplemented);
...@@ -751,7 +751,7 @@ extern "C" Box* intLShift(BoxedInt* lhs, Box* rhs) { ...@@ -751,7 +751,7 @@ extern "C" Box* intLShift(BoxedInt* lhs, Box* rhs) {
raiseExcHelper(TypeError, "descriptor '__lshift__' requires a 'int' object but received a '%s'", raiseExcHelper(TypeError, "descriptor '__lshift__' requires a 'int' object but received a '%s'",
getTypeName(lhs)); getTypeName(lhs));
if (rhs->cls == long_cls) if (PyLong_Check(rhs))
return longLShiftLong(autoDecref(boxLong(lhs->n)), rhs); return longLShiftLong(autoDecref(boxLong(lhs->n)), rhs);
if (!PyInt_Check(rhs)) { if (!PyInt_Check(rhs)) {
...@@ -847,7 +847,7 @@ extern "C" Box* intMulInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -847,7 +847,7 @@ extern "C" Box* intMulInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intMulFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intMulFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->n * rhs->d); return boxFloat(lhs->n * rhs->d);
} }
...@@ -858,7 +858,7 @@ extern "C" Box* intMul(BoxedInt* lhs, Box* rhs) { ...@@ -858,7 +858,7 @@ extern "C" Box* intMul(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs); BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs);
return intMulInt(lhs, rhs_int); return intMulInt(lhs, rhs_int);
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs); BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs);
return intMulFloat(lhs, rhs_float); return intMulFloat(lhs, rhs_float);
} else { } else {
...@@ -896,7 +896,7 @@ extern "C" Box* intPowLong(BoxedInt* lhs, BoxedLong* rhs, Box* mod) { ...@@ -896,7 +896,7 @@ extern "C" Box* intPowLong(BoxedInt* lhs, BoxedLong* rhs, Box* mod) {
extern "C" Box* intPowFloat(BoxedInt* lhs, BoxedFloat* rhs, Box* mod) { extern "C" Box* intPowFloat(BoxedInt* lhs, BoxedFloat* rhs, Box* mod) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
if (mod != None) { if (mod != None) {
raiseExcHelper(TypeError, "pow() 3rd argument not allowed unless all arguments are integers"); raiseExcHelper(TypeError, "pow() 3rd argument not allowed unless all arguments are integers");
...@@ -964,7 +964,7 @@ extern "C" Box* intRShift(BoxedInt* lhs, Box* rhs) { ...@@ -964,7 +964,7 @@ extern "C" Box* intRShift(BoxedInt* lhs, Box* rhs) {
raiseExcHelper(TypeError, "descriptor '__rshift__' requires a 'int' object but received a '%s'", raiseExcHelper(TypeError, "descriptor '__rshift__' requires a 'int' object but received a '%s'",
getTypeName(lhs)); getTypeName(lhs));
if (rhs->cls == long_cls) if (PyLong_Check(rhs))
return longRShiftLong(autoDecref(boxLong(lhs->n)), rhs); return longRShiftLong(autoDecref(boxLong(lhs->n)), rhs);
if (!PyInt_Check(rhs)) { if (!PyInt_Check(rhs)) {
...@@ -994,7 +994,7 @@ extern "C" Box* intSubInt(BoxedInt* lhs, BoxedInt* rhs) { ...@@ -994,7 +994,7 @@ extern "C" Box* intSubInt(BoxedInt* lhs, BoxedInt* rhs) {
extern "C" Box* intSubFloat(BoxedInt* lhs, BoxedFloat* rhs) { extern "C" Box* intSubFloat(BoxedInt* lhs, BoxedFloat* rhs) {
assert(PyInt_Check(lhs)); assert(PyInt_Check(lhs));
assert(rhs->cls == float_cls); assert(PyFloat_Check(rhs));
return boxFloat(lhs->n - rhs->d); return boxFloat(lhs->n - rhs->d);
} }
...@@ -1005,7 +1005,7 @@ extern "C" Box* intSub(BoxedInt* lhs, Box* rhs) { ...@@ -1005,7 +1005,7 @@ extern "C" Box* intSub(BoxedInt* lhs, Box* rhs) {
if (PyInt_Check(rhs)) { if (PyInt_Check(rhs)) {
BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs); BoxedInt* rhs_int = static_cast<BoxedInt*>(rhs);
return intSubInt(lhs, rhs_int); return intSubInt(lhs, rhs_int);
} else if (rhs->cls == float_cls) { } else if (PyFloat_Check(rhs)) {
BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs); BoxedFloat* rhs_float = static_cast<BoxedFloat*>(rhs);
return intSubFloat(lhs, rhs_float); return intSubFloat(lhs, rhs_float);
} else { } else {
......
diff --git a/numpy/__init__.py b/numpy/__init__.py
index d4ef54d..7a49dbd 100644
--- a/numpy/__init__.py
+++ b/numpy/__init__.py
@@ -196,7 +196,7 @@ else:
from . import linalg
from . import fft
from . import polynomial
- from . import random
+ # from . import random
from . import ctypeslib
from . import ma
from . import matrixlib as _mat
@@ -218,7 +218,8 @@ else:
__all__.extend(core.__all__)
__all__.extend(_mat.__all__)
__all__.extend(lib.__all__)
- __all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])
+ __all__.extend(['linalg', 'fft', 'ctypeslib', 'ma'])
+ # __all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])
# Filter annoying Cython warnings that serve no good purpose.
import warnings
diff --git a/numpy/core/include/numpy/ndarrayobject.h b/numpy/core/include/numpy/ndarrayobject.h diff --git a/numpy/core/include/numpy/ndarrayobject.h b/numpy/core/include/numpy/ndarrayobject.h
index fbaaeac..cb4adbb 100644 index fbaaeac..cb4adbb 100644
--- a/numpy/core/include/numpy/ndarrayobject.h --- a/numpy/core/include/numpy/ndarrayobject.h
...@@ -193,20 +170,6 @@ index 7797731..93edc66 100644 ...@@ -193,20 +170,6 @@ index 7797731..93edc66 100644
return NULL; return NULL;
} }
diff --git a/numpy/core/tests/test_function_base.py b/numpy/core/tests/test_function_base.py
index 2df7ba3..88fac0a 100644
--- a/numpy/core/tests/test_function_base.py
+++ b/numpy/core/tests/test_function_base.py
@@ -113,7 +113,8 @@ class TestLinspace(TestCase):
a = PhysicalQuantity(0.0)
b = PhysicalQuantity(1.0)
- assert_equal(linspace(a, b), linspace(0.0, 1.0))
+ # TODO: Need to support operations on inherited floats like divide.
+ # assert_equal(linspace(a, b), linspace(0.0, 1.0))
def test_denormal_numbers(self):
# Regression test for gh-5437. Will probably fail when compiled
diff --git a/numpy/core/tests/test_records.py b/numpy/core/tests/test_records.py diff --git a/numpy/core/tests/test_records.py b/numpy/core/tests/test_records.py
index 7a18f29..a8d4e4b 100644 index 7a18f29..a8d4e4b 100644
--- a/numpy/core/tests/test_records.py --- a/numpy/core/tests/test_records.py
...@@ -282,40 +245,3 @@ index dba74d3..23cfeed 100644 ...@@ -282,40 +245,3 @@ index dba74d3..23cfeed 100644
def test_masked_array_repeat(self, level=rlevel): def test_masked_array_repeat(self, level=rlevel):
# Ticket #271 # Ticket #271
diff --git a/numpy/random/setup.py b/numpy/random/setup.py
index 9d90590..b3ee24f 100644
--- a/numpy/random/setup.py
+++ b/numpy/random/setup.py
@@ -39,18 +39,6 @@ def configuration(parent_package='',top_path=None):
libs = []
# Configure mtrand
- config.add_extension('mtrand',
- sources=[join('mtrand', x) for x in
- ['mtrand.c', 'randomkit.c', 'initarray.c',
- 'distributions.c']]+[generate_libraries],
- libraries=libs,
- depends=[join('mtrand', '*.h'),
- join('mtrand', '*.pyx'),
- join('mtrand', '*.pxi'),],
- define_macros=defs,
- )
-
- config.add_data_files(('.', join('mtrand', 'randomkit.h')))
config.add_data_dir('tests')
return config
diff --git a/setup.py b/setup.py
index 90dcb24..943851a 100755
--- a/setup.py
+++ b/setup.py
@@ -245,7 +245,8 @@ def setup_package():
cwd = os.path.abspath(os.path.dirname(__file__))
if not os.path.exists(os.path.join(cwd, 'PKG-INFO')):
# Generate Cython sources, unless building from source release
- generate_cython()
+ # generate_cython()
+ pass
metadata['configuration'] = configuration
try:
...@@ -22,3 +22,19 @@ test(-3.0, -2.0) ...@@ -22,3 +22,19 @@ test(-3.0, -2.0)
test(1.0 + 1.0j, 2) test(1.0 + 1.0j, 2)
test(1.0 + 1.0j, 2.0) test(1.0 + 1.0j, 2.0)
test(1.0 + 1.0j, 2.0j) test(1.0 + 1.0j, 2.0j)
class PhysicalQuantity(float):
def __new__(cls, value):
return float.__new__(cls, value)
def __div__(self, x):
print('__div__ get called')
return PhysicalQuantity(float(self) / float(x))
def __rdiv__(self, x):
print('__rdiv__ get called')
return PhysicalQuantity(float(x) / float(self))
a = PhysicalQuantity(2.0)
print(a / 3.0)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment