py: Support mpz -op- float, mpz -op- complex, and complex -op- mpz.
diff --git a/py/obj.c b/py/obj.c
index 86bc7c2..3deee90 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -195,6 +195,9 @@
     } else if (MP_OBJ_IS_SMALL_INT(arg)) {
         *real = MP_OBJ_SMALL_INT_VALUE(arg);
         *imag = 0;
+    } else if (MP_OBJ_IS_TYPE(arg, &mp_type_int)) {
+        *real = mp_obj_int_as_float(arg);
+        *imag = 0;
     } else if (MP_OBJ_IS_TYPE(arg, &mp_type_float)) {
         *real = mp_obj_float_get(arg);
         *imag = 0;
diff --git a/py/objint_mpz.c b/py/objint_mpz.c
index bd82815..75bb1c1 100644
--- a/py/objint_mpz.c
+++ b/py/objint_mpz.c
@@ -57,6 +57,7 @@
     } else if (MP_OBJ_IS_TYPE(lhs_in, &mp_type_int)) {
         zlhs = &((mp_obj_int_t*)lhs_in)->mpz;
     } else {
+        // unsupported type
         return MP_OBJ_NULL;
     }
 
@@ -66,7 +67,14 @@
         zrhs = &z_int;
     } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_int)) {
         zrhs = &((mp_obj_int_t*)rhs_in)->mpz;
+#if MICROPY_ENABLE_FLOAT
+    } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_float)) {
+        return mp_obj_float_binary_op(op, mpz_as_float(zlhs), rhs_in);
+    } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_complex)) {
+        return mp_obj_complex_binary_op(op, mpz_as_float(zlhs), 0, rhs_in);
+#endif
     } else {
+        // unsupported type
         return MP_OBJ_NULL;
     }