MCPcopy Index your code
hub / github.com/RustPython/RustPython / as_number

Method as_number

crates/vm/src/builtins/float.rs:457–493  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

455
456impl 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> {

Callers

nothing calls this directly

Calls 9

try_to_bigintFunction · 0.85
absMethod · 0.80
SomeClass · 0.50
ErrClass · 0.50
is_noneMethod · 0.45
to_pyresultMethod · 0.45
is_zeroMethod · 0.45
mapMethod · 0.45
into_pyobjectMethod · 0.45

Tested by

no test coverage detected