()
| 455 | |
| 456 | impl AsNumber for PyFloat { |
| 457 | fn as_number() -> &'static PyNumberMethods { |
| 458 | static AS_NUMBER: PyNumberMethods = PyNumberMethods { |
| 459 | add: Some(|a, b, vm| PyFloat::number_op(a, b, |a, b, _vm| a + b, vm)), |
| 460 | subtract: Some(|a, b, vm| PyFloat::number_op(a, b, |a, b, _vm| a - b, vm)), |
| 461 | multiply: Some(|a, b, vm| PyFloat::number_op(a, b, |a, b, _vm| a * b, vm)), |
| 462 | remainder: Some(|a, b, vm| PyFloat::number_op(a, b, inner_mod, vm)), |
| 463 | divmod: Some(|a, b, vm| PyFloat::number_op(a, b, inner_divmod, vm)), |
| 464 | power: Some(|a, b, c, vm| { |
| 465 | if vm.is_none(c) { |
| 466 | PyFloat::number_op(a, b, float_pow, vm) |
| 467 | } else { |
| 468 | Err(vm.new_type_error( |
| 469 | "pow() 3rd argument not allowed unless all arguments are integers", |
| 470 | )) |
| 471 | } |
| 472 | }), |
| 473 | negative: Some(|num, vm| { |
| 474 | let value = PyFloat::number_downcast(num).value; |
| 475 | (-value).to_pyresult(vm) |
| 476 | }), |
| 477 | positive: Some(|num, vm| PyFloat::number_downcast_exact(num, vm).to_pyresult(vm)), |
| 478 | absolute: Some(|num, vm| { |
| 479 | let value = PyFloat::number_downcast(num).value; |
| 480 | value.abs().to_pyresult(vm) |
| 481 | }), |
| 482 | boolean: Some(|num, _vm| Ok(!PyFloat::number_downcast(num).value.is_zero())), |
| 483 | int: Some(|num, vm| { |
| 484 | let value = PyFloat::number_downcast(num).value; |
| 485 | try_to_bigint(value, vm).map(|x| PyInt::from(x).into_pyobject(vm)) |
| 486 | }), |
| 487 | float: Some(|num, vm| Ok(PyFloat::number_downcast_exact(num, vm).into())), |
| 488 | floor_divide: Some(|a, b, vm| PyFloat::number_op(a, b, inner_floordiv, vm)), |
| 489 | true_divide: Some(|a, b, vm| PyFloat::number_op(a, b, inner_div, vm)), |
| 490 | ..PyNumberMethods::NOT_IMPLEMENTED |
| 491 | }; |
| 492 | &AS_NUMBER |
| 493 | } |
| 494 | |
| 495 | #[inline] |
| 496 | fn clone_exact(zelf: &Py<Self>, vm: &VirtualMachine) -> PyRef<Self> { |
nothing calls this directly
no test coverage detected