Skip to content

Commit c456550

Browse files
committed
temp
1 parent ea1e750 commit c456550

3 files changed

Lines changed: 38 additions & 34 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ once_cell = "1.20.3"
184184
parking_lot = "0.12.3"
185185
paste = "1.0.15"
186186
proc-macro2 = "1.0.105"
187-
pymath = { version = "0.1.3", features = ["mul_add", "malachite-bigint", "complex"] }
187+
pymath = { git = "https://github.com/RustPython/pymath.git", rev = "564ebb2780a05a9460ad12a2752a67244dc5f89e", features = ["mul_add", "malachite-bigint", "complex"] }
188188
quote = "1.0.43"
189189
radium = "1.1.1"
190190
rand = "0.9"

crates/stdlib/src/math.rs

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -534,10 +534,11 @@ mod math {
534534

535535
if let Some(int_item) = item.downcast_ref::<PyInt>()
536536
&& let Ok(b) = int_item.as_bigint().try_into() as Result<i64, _>
537-
&& let Some(product) = int_result.checked_mul(b) {
538-
int_result = product;
539-
continue;
540-
}
537+
&& let Some(product) = int_result.checked_mul(b)
538+
{
539+
int_result = product;
540+
continue;
541+
}
541542

542543
// Overflow or non-int: restore to PyObject and continue
543544
obj_result = Some(vm.ctx.new_int(int_result).into());
@@ -590,10 +591,11 @@ mod math {
590591
continue;
591592
}
592593
if let Some(i) = item.downcast_ref::<PyInt>()
593-
&& let Ok(v) = i.as_bigint().try_into() as Result<i64, _> {
594-
flt_result *= v as f64;
595-
continue;
596-
}
594+
&& let Ok(v) = i.as_bigint().try_into() as Result<i64, _>
595+
{
596+
flt_result *= v as f64;
597+
continue;
598+
}
597599

598600
// Non-float/int: restore and continue with generic path
599601
obj_result = Some(vm.ctx.new_float(flt_result).into());
@@ -854,11 +856,13 @@ mod math {
854856

855857
// Fast path: n fits in i64
856858
if let Some(ni) = n_big.to_i64()
857-
&& ni >= 0 && ki > 1 {
858-
let result = pymath::math::integer::perm(ni, Some(ki as i64))
859-
.map_err(|_| vm.new_value_error("perm() error"))?;
860-
return Ok(result.into());
861-
}
859+
&& ni >= 0
860+
&& ki > 1
861+
{
862+
let result = pymath::math::integer::perm(ni, Some(ki as i64))
863+
.map_err(|_| vm.new_value_error("perm() error"))?;
864+
return Ok(result.into());
865+
}
862866

863867
// BigInt path: use perm_bigint
864868
let result = pymath::math::perm_bigint(n_big, ki);
@@ -881,25 +885,26 @@ mod math {
881885

882886
// Fast path: n fits in i64
883887
if let Some(ni) = n_big.to_i64()
884-
&& ni >= 0 {
885-
// k overflow or k > n means result is 0
886-
let ki = match k_big.to_i64() {
887-
Some(k) if k >= 0 && k <= ni => k,
888-
_ => return Ok(BigInt::from(0u8)),
889-
};
890-
// Apply symmetry: use min(k, n-k)
891-
let ki = ki.min(ni - ki);
892-
if ki > 1 {
893-
let result = pymath::math::integer::comb(ni, ki)
894-
.map_err(|_| vm.new_value_error("comb() error"))?;
895-
return Ok(result.into());
896-
}
897-
// ki <= 1 cases
898-
if ki == 0 {
899-
return Ok(BigInt::from(1u8));
900-
}
901-
return Ok(n_big.clone()); // ki == 1
888+
&& ni >= 0
889+
{
890+
// k overflow or k > n means result is 0
891+
let ki = match k_big.to_i64() {
892+
Some(k) if k >= 0 && k <= ni => k,
893+
_ => return Ok(BigInt::from(0u8)),
894+
};
895+
// Apply symmetry: use min(k, n-k)
896+
let ki = ki.min(ni - ki);
897+
if ki > 1 {
898+
let result = pymath::math::integer::comb(ni, ki)
899+
.map_err(|_| vm.new_value_error("comb() error"))?;
900+
return Ok(result.into());
902901
}
902+
// ki <= 1 cases
903+
if ki == 0 {
904+
return Ok(BigInt::from(1u8));
905+
}
906+
return Ok(n_big.clone()); // ki == 1
907+
}
903908

904909
// BigInt path: n doesn't fit in i64
905910
// Apply symmetry: k = min(k, n - k)

0 commit comments

Comments
 (0)