diff --git a/Cargo.lock b/Cargo.lock index 775b347c..21c7971a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -231,6 +231,27 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "unicode-xid", +] + [[package]] name = "digest" version = "0.10.7" @@ -446,6 +467,19 @@ dependencies = [ "walkdir", ] +[[package]] +name = "malachite-bigint" +version = "0.5.0" +dependencies = [ + "derive_more", + "malachite-base", + "malachite-nz", + "num-bigint", + "num-integer", + "num-traits", + "paste", +] + [[package]] name = "malachite-criterion-bench" version = "0.5.0" @@ -642,6 +676,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "plotters" version = "0.3.7" @@ -1043,6 +1083,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + [[package]] name = "unindent" version = "0.2.3" diff --git a/Cargo.toml b/Cargo.toml index 280f752d..3da4cab9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ['malachite', 'malachite-base', 'malachite-float', 'malachite-nz', 'malachite-q', 'malachite-criterion-bench'] +members = ['malachite', 'malachite-base', 'malachite-bigint', 'malachite-float', 'malachite-nz', 'malachite-q', 'malachite-criterion-bench'] resolver = "2" [workspace.package] diff --git a/malachite-bigint/.github/workflows/rust.yml b/malachite-bigint/.github/workflows/rust.yml deleted file mode 100644 index 9fd45e09..00000000 --- a/malachite-bigint/.github/workflows/rust.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Rust - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -env: - CARGO_TERM_COLOR: always - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Build - run: cargo build --verbose - - name: Run tests - run: cargo test --verbose diff --git a/malachite-bigint/.gitignore b/malachite-bigint/.gitignore deleted file mode 100644 index 96ef6c0b..00000000 --- a/malachite-bigint/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -Cargo.lock diff --git a/malachite-bigint/Cargo.toml b/malachite-bigint/Cargo.toml index 6b51d7ac..1c3a6f4d 100644 --- a/malachite-bigint/Cargo.toml +++ b/malachite-bigint/Cargo.toml @@ -2,14 +2,16 @@ name = "malachite-bigint" version = "0.5.0" authors = ["Steve Shi "] -edition = "2021" +rust-version.workspace = true +edition.workspace = true license = "LGPL-3.0-only" description = "A drop-in num-bigint replacement based on malachite" -repository = "https://github.com/RustPython/malachite-bigint" -rust-version = "1.74.0" +repository = "https://github.com/mhogrefe/malachite" [dependencies] -malachite = { version = "0.5.0", git = "https://github.com/mhogrefe/malachite.git" } +malachite-base = { version = "0.5.0", path = "../malachite-base" } +malachite-nz = { version = "0.5.0", path = "../malachite-nz" } + num-traits = { version = "0.2.19", default-features = false, features = ["i128"] } num-integer = { version = "0.1.46", default-features = false, features = ["i128"] } derive_more = { version = "1.0.0", features = ["display", "from", "into"] } diff --git a/malachite-bigint/LICENSE b/malachite-bigint/LICENSE deleted file mode 100644 index 65c5ca88..00000000 --- a/malachite-bigint/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/malachite-bigint/src/bigint.rs b/malachite-bigint/src/bigint.rs index 58091c41..706f3f61 100644 --- a/malachite-bigint/src/bigint.rs +++ b/malachite-bigint/src/bigint.rs @@ -1,17 +1,15 @@ use derive_more::{Binary, Display, From, Into, LowerHex, Octal, UpperHex}; -use malachite::{ - base::{ - num::{ - arithmetic::traits::{ - Abs, DivRem, DivRound, DivisibleBy, FloorRoot, Mod, Parity, UnsignedAbs, - }, - conversion::traits::{RoundingInto, ToStringBase}, - logic::traits::BitAccess, +use malachite_base::{ + num::{ + arithmetic::traits::{ + Abs, DivRem, DivRound, DivisibleBy, FloorRoot, Mod, Parity, UnsignedAbs, }, - rounding_modes::RoundingMode, + conversion::traits::{RoundingInto, ToStringBase}, + logic::traits::BitAccess, }, - Integer, + rounding_modes::RoundingMode, }; +use malachite_nz::integer::Integer; use num_integer::Roots; use num_traits::{ CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, FromPrimitive, Num, One, Pow, Signed, @@ -210,7 +208,7 @@ impl From for BigInt { impl Zero for BigInt { #[inline] fn zero() -> Self { - Self(::ZERO) + Self(::ZERO) } #[inline] @@ -222,7 +220,7 @@ impl Zero for BigInt { impl One for BigInt { #[inline] fn one() -> Self { - Self(::ONE) + Self(::ONE) } } @@ -516,7 +514,7 @@ impl BigInt { #[inline] pub fn sign(&self) -> Sign { - match <_ as malachite::base::num::arithmetic::traits::Sign>::sign(&self.0) { + match <_ as malachite_base::num::arithmetic::traits::Sign>::sign(&self.0) { Ordering::Less => Minus, Ordering::Equal => NoSign, Ordering::Greater => Plus, diff --git a/malachite-bigint/src/biguint.rs b/malachite-bigint/src/biguint.rs index 86ed8eae..1615f7e5 100644 --- a/malachite-bigint/src/biguint.rs +++ b/malachite-bigint/src/biguint.rs @@ -1,19 +1,15 @@ use derive_more::{Binary, Display, From, Into, LowerHex, Octal, UpperHex}; -use malachite::{ - base::{ - num::{ - arithmetic::traits::{ - DivRem, DivRound, DivisibleBy, FloorRoot, Gcd, Lcm, Mod, ModPow, Parity, - }, - conversion::traits::{ - Digits, FromStringBase, PowerOf2Digits, RoundingInto, ToStringBase, - }, - logic::traits::{BitAccess, BitIterable, CountOnes, SignificantBits}, +use malachite_base::{ + num::{ + arithmetic::traits::{ + DivRem, DivRound, DivisibleBy, FloorRoot, Gcd, Lcm, Mod, ModPow, Parity, }, - rounding_modes::RoundingMode, + conversion::traits::{Digits, FromStringBase, PowerOf2Digits, RoundingInto, ToStringBase}, + logic::traits::{BitAccess, BitIterable, CountOnes, SignificantBits}, }, - Natural, + rounding_modes::RoundingMode, }; +use malachite_nz::{integer::Integer, natural::Natural}; use num_integer::Roots; use num_traits::{ CheckedAdd, CheckedDiv, CheckedMul, CheckedSub, FromPrimitive, Num, One, Pow, ToPrimitive, @@ -163,7 +159,7 @@ impl ToBigUint for BigUint { impl ToBigInt for BigUint { #[inline] fn to_bigint(&self) -> Option { - Some(malachite::Integer::from(&self.0).into()) + Some(Integer::from(&self.0).into()) } } @@ -183,7 +179,7 @@ impl FromPrimitive for BigUint { impl Zero for BigUint { #[inline] fn zero() -> Self { - Self(::ZERO) + Self(::ZERO) } #[inline] @@ -195,7 +191,7 @@ impl Zero for BigUint { impl One for BigUint { #[inline] fn one() -> Self { - Self(::ONE) + Self(::ONE) } } diff --git a/malachite-bigint/src/iter.rs b/malachite-bigint/src/iter.rs index 6793413f..62f18f4d 100644 --- a/malachite-bigint/src/iter.rs +++ b/malachite-bigint/src/iter.rs @@ -1,6 +1,6 @@ use std::iter::FusedIterator; -use malachite::natural::conversion::to_limbs::LimbIterator; +use malachite_nz::natural::conversion::to_limbs::LimbIterator; pub struct U32Digits<'a> { iter: LimbIterator<'a>, diff --git a/malachite-bigint/src/macros.rs b/malachite-bigint/src/macros.rs index e3e01017..ce3802f3 100644 --- a/malachite-bigint/src/macros.rs +++ b/malachite-bigint/src/macros.rs @@ -274,16 +274,16 @@ macro_rules! forward_assign_primitive_into { macro_rules! forward_pow_primitive { ($lhs:ty, $rhs:ty) => { impl_binary_op!($lhs, $rhs, $lhs, Pow, pow, |lhs: $lhs, rhs: $rhs| { - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(lhs.0, rhs as _).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(lhs.0, rhs as _).into() }); impl_binary_op!(&$lhs, $rhs, $lhs, Pow, pow, |lhs: &$lhs, rhs: $rhs| { - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(&lhs.0, rhs as _).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(&lhs.0, rhs as _).into() }); impl_binary_op!($lhs, &$rhs, $lhs, Pow, pow, |lhs: $lhs, rhs: &$rhs| { - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(lhs.0, *rhs as _).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(lhs.0, *rhs as _).into() }); impl_binary_op!(&$lhs, &$rhs, $lhs, Pow, pow, |lhs: &$lhs, rhs: &$rhs| { - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(&lhs.0, *rhs as _).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(&lhs.0, *rhs as _).into() }); }; } @@ -292,8 +292,8 @@ macro_rules! forward_pow_biguint { ($lhs:ty) => { impl_binary_op!($lhs, BigUint, $lhs, Pow, pow, |lhs: $lhs, rhs: BigUint| { let exp = - malachite::base::num::conversion::traits::SaturatingFrom::saturating_from(&rhs.0); - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(lhs.0, exp).into() + malachite_base::num::conversion::traits::SaturatingFrom::saturating_from(&rhs.0); + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(lhs.0, exp).into() }); impl_binary_op!( &$lhs, @@ -302,10 +302,10 @@ macro_rules! forward_pow_biguint { Pow, pow, |lhs: &$lhs, rhs: BigUint| { - let exp = malachite::base::num::conversion::traits::SaturatingFrom::saturating_from( + let exp = malachite_base::num::conversion::traits::SaturatingFrom::saturating_from( &rhs.0, ); - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(&lhs.0, exp).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(&lhs.0, exp).into() } ); impl_binary_op!( @@ -315,10 +315,10 @@ macro_rules! forward_pow_biguint { Pow, pow, |lhs: $lhs, rhs: &BigUint| { - let exp = malachite::base::num::conversion::traits::SaturatingFrom::saturating_from( + let exp = malachite_base::num::conversion::traits::SaturatingFrom::saturating_from( &rhs.0, ); - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(lhs.0, exp).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(lhs.0, exp).into() } ); impl_binary_op!( @@ -328,10 +328,10 @@ macro_rules! forward_pow_biguint { Pow, pow, |lhs: &$lhs, rhs: &BigUint| { - let exp = malachite::base::num::conversion::traits::SaturatingFrom::saturating_from( + let exp = malachite_base::num::conversion::traits::SaturatingFrom::saturating_from( &rhs.0, ); - <_ as malachite::base::num::arithmetic::traits::Pow>::pow(&lhs.0, exp).into() + <_ as malachite_base::num::arithmetic::traits::Pow>::pow(&lhs.0, exp).into() } ); };