From 962a54c4de8f813ca5076bef46f7c230fca13d39 Mon Sep 17 00:00:00 2001 From: Ori Ziv Date: Thu, 26 Sep 2024 15:20:14 +0300 Subject: [PATCH 1/2] Using `Zero` and `One` instead of old traits. Additionally removed double zero-check. commit-id:f4f2aab3 --- corelib/src/math.cairo | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/corelib/src/math.cairo b/corelib/src/math.cairo index aa38de7cb14..e1ea7220800 100644 --- a/corelib/src/math.cairo +++ b/corelib/src/math.cairo @@ -2,6 +2,7 @@ use crate::zeroable::{IsZeroResult, NonZeroIntoImpl, Zeroable}; #[allow(unused_imports)] use crate::traits::{Into, TryInto}; +#[allow(unused_imports)] use crate::option::OptionTrait; use crate::integer::{u256_wide_mul, u512_safe_div_rem_by_u256, U128MulGuarantee}; use crate::RangeCheck; @@ -22,21 +23,23 @@ pub fn egcd< +Add, +Mul, +DivRem, - +Zeroable, - +Oneable, + +core::num::traits::Zero, + +core::num::traits::One, +TryInto>, >( a: NonZero, b: NonZero ) -> (T, T, T, bool) { let (q, r) = DivRem::::div_rem(a.into(), b); - if r.is_zero() { - return (b.into(), Zeroable::zero(), Oneable::one(), false); - } + let r = if let Option::Some(r) = r.try_into() { + r + } else { + return (b.into(), core::num::traits::Zero::zero(), core::num::traits::One::one(), false); + }; // `sign` (1 for true, -1 for false) is the sign of `g` in the current iteration. // 0 is considered negative for this purpose. - let (g, s, t, sign) = egcd(b, r.try_into().unwrap()); + let (g, s, t, sign) = egcd(b, r); // We know that `a = q*b + r` and that `s*b - t*r = sign*g`. // So `t*a - (s + q*t)*b = t*r - s*b = sign*g`. // Thus we pick `new_s = t`, `new_t = s + q*t`, `new_sign = !sign`. @@ -55,14 +58,14 @@ pub fn inv_mod< +Sub, +Mul, +DivRem, - +Zeroable, - +Oneable, + +core::num::traits::Zero, + +core::num::traits::One, +TryInto>, >( a: NonZero, n: NonZero ) -> Option { - if Oneable::::is_one(n.into()) { - return Option::Some(Zeroable::zero()); + if core::num::traits::One::::is_one(@n.into()) { + return Option::Some(core::num::traits::Zero::zero()); } let (g, s, _, sub_direction) = egcd(a, n); if g.is_one() { From 6d0196a347f84b5be74f8db0965b5703d85ba592 Mon Sep 17 00:00:00 2001 From: Ori Ziv Date: Thu, 26 Sep 2024 15:25:15 +0300 Subject: [PATCH 2/2] Added `NonZero()` for const value fmt. commit-id:a8d9671a --- .../src/optimizations/test_data/const_folding | 8 ++++---- crates/cairo-lang-semantic/src/items/fmt.rs | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/crates/cairo-lang-lowering/src/optimizations/test_data/const_folding b/crates/cairo-lang-lowering/src/optimizations/test_data/const_folding index 33e01d5fb04..6907660a377 100644 --- a/crates/cairo-lang-lowering/src/optimizations/test_data/const_folding +++ b/crates/cairo-lang-lowering/src/optimizations/test_data/const_folding @@ -239,7 +239,7 @@ Parameters: v0: core::integer::u8 blk0 (root): Statements: (v1: core::integer::u8) <- 4 - (v2: core::zeroable::NonZero::) <- 4 + (v2: core::zeroable::NonZero::) <- NonZero(4) End: Goto(blk2, {}) @@ -477,7 +477,7 @@ Parameters: v0: core::integer::u256 blk0 (root): Statements: (v1: core::integer::u256) <- { 4: core::integer::u128, 0: core::integer::u128 } - (v2: core::zeroable::NonZero::) <- { 4: core::integer::u128, 0: core::integer::u128 } + (v2: core::zeroable::NonZero::) <- NonZero({ 4: core::integer::u128, 0: core::integer::u128 }) End: Goto(blk2, {}) @@ -719,7 +719,7 @@ blk0 (root): Statements: (v1: core::integer::u64) <- 1 (v2: core::integer::u128) <- 1 - (v3: core::zeroable::NonZero::) <- 1 + (v3: core::zeroable::NonZero::) <- NonZero(1) End: Goto(blk2, {}) @@ -3285,7 +3285,7 @@ Parameters: v0: core::integer::i8 blk0 (root): Statements: (v1: core::integer::i8) <- 4 - (v2: core::zeroable::NonZero::) <- 4 + (v2: core::zeroable::NonZero::) <- NonZero(4) End: Goto(blk2, {}) diff --git a/crates/cairo-lang-semantic/src/items/fmt.rs b/crates/cairo-lang-semantic/src/items/fmt.rs index 5e49e638a97..e25b5bfffce 100644 --- a/crates/cairo-lang-semantic/src/items/fmt.rs +++ b/crates/cairo-lang-semantic/src/items/fmt.rs @@ -33,7 +33,11 @@ impl> DebugWithDb for Const inner.fmt(f, db)?; write!(f, ")") } - ConstValue::NonZero(value) => value.fmt(f, db), + ConstValue::NonZero(value) => { + write!(f, "NonZero(")?; + value.fmt(f, db)?; + write!(f, ")") + } ConstValue::Boxed(value) => { value.fmt(f, db)?; write!(f, ".into_box()")