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

Method as_number

crates/vm/src/builtins/complex.rs:449–500  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

447
448impl AsNumber for PyComplex {
449 fn as_number() -> &'static PyNumberMethods {
450 static AS_NUMBER: PyNumberMethods = PyNumberMethods {
451 add: Some(|a, b, vm| {
452 PyComplex::complex_real_binop(
453 a,
454 b,
455 |a, b| a + b,
456 |a_complex, b_real| Complex64::new(a_complex.re + b_real, a_complex.im),
457 |a_real, b_complex| Complex64::new(a_real + b_complex.re, b_complex.im),
458 vm,
459 )
460 }),
461 subtract: Some(|a, b, vm| {
462 PyComplex::complex_real_binop(
463 a,
464 b,
465 |a, b| a - b,
466 |a_complex, b_real| Complex64::new(a_complex.re - b_real, a_complex.im),
467 |a_real, b_complex| Complex64::new(a_real - b_complex.re, -b_complex.im),
468 vm,
469 )
470 }),
471 multiply: Some(|a, b, vm| PyComplex::number_op(a, b, |a, b, _vm| a * b, vm)),
472 power: Some(|a, b, c, vm| {
473 if vm.is_none(c) {
474 PyComplex::number_op(a, b, inner_pow, vm)
475 } else {
476 Err(vm.new_value_error(String::from("complex modulo")))
477 }
478 }),
479 negative: Some(|number, vm| {
480 let value = PyComplex::number_downcast(number).value;
481 (-value).to_pyresult(vm)
482 }),
483 positive: Some(|number, vm| {
484 PyComplex::number_downcast_exact(number, vm).to_pyresult(vm)
485 }),
486 absolute: Some(|number, vm| {
487 let value = PyComplex::number_downcast(number).value;
488 let result = value.norm();
489 // Check for overflow: hypot returns inf for finite inputs that overflow
490 if result.is_infinite() && value.re.is_finite() && value.im.is_finite() {
491 return Err(vm.new_overflow_error("absolute value too large"));
492 }
493 result.to_pyresult(vm)
494 }),
495 boolean: Some(|number, _vm| Ok(!PyComplex::number_downcast(number).value.is_zero())),
496 true_divide: Some(|a, b, vm| PyComplex::number_op(a, b, inner_div, vm)),
497 ..PyNumberMethods::NOT_IMPLEMENTED
498 };
499 &AS_NUMBER
500 }
501
502 fn clone_exact(zelf: &Py<Self>, vm: &VirtualMachine) -> PyRef<Self> {
503 vm.ctx.new_complex(zelf.value)

Callers

nothing calls this directly

Calls 9

newFunction · 0.85
SomeClass · 0.50
ErrClass · 0.50
is_noneMethod · 0.45
to_pyresultMethod · 0.45
normMethod · 0.45
is_infiniteMethod · 0.45
is_finiteMethod · 0.45
is_zeroMethod · 0.45

Tested by

no test coverage detected