1use crate::num::arithmetic::traits::{
10 AbsDiff, AbsDiffAssign, BalancedMod, BalancedModPowerOf2, BellNumber, CeilingDivAssignNegMod,
11 CeilingDivNegMod, CeilingLogBase, CeilingLogBase2, CeilingLogBasePowerOf2, CheckedBellNumber,
12 CheckedDoubleFactorial, CheckedFactorial, CheckedFibonacci, CheckedLcm, CheckedLogBase,
13 CheckedLogBase2, CheckedLogBasePowerOf2, CheckedLucasNumber, CheckedMultifactorial,
14 CheckedNextPowerOf2, CheckedPrimorial, CheckedSubfactorial, CoprimeWith, DoubleFactorial,
15 ExtendedGcd, Factorial, Fibonacci, FloorLogBase, FloorLogBase2, FloorLogBasePowerOf2, Gcd,
16 GcdAssign, Lcm, LcmAssign, LucasNumber, ModAbsSquared, ModAbsSquaredAssign, ModAdd,
17 ModAddAssign, ModAddMul, ModAddMulAssign, ModAddMulShl, ModAddMulShlAssign, ModInverse,
18 ModIsReduced, ModMul, ModMulAssign, ModMulPrecomputed, ModMulPrecomputedAssign, ModNeg,
19 ModNegAssign, ModPow, ModPowAssign, ModPowPrecomputed, ModPowPrecomputedAssign, ModPowerOf2,
20 ModPowerOf2AbsSquared, ModPowerOf2AbsSquaredAssign, ModPowerOf2Add, ModPowerOf2AddAssign,
21 ModPowerOf2AddMul, ModPowerOf2AddMulAssign, ModPowerOf2AddMulShl, ModPowerOf2AddMulShlAssign,
22 ModPowerOf2Inverse, ModPowerOf2IsReduced, ModPowerOf2Mul, ModPowerOf2MulAssign, ModPowerOf2Neg,
23 ModPowerOf2NegAssign, ModPowerOf2Pow, ModPowerOf2PowAssign, ModPowerOf2Product, ModPowerOf2Shl,
24 ModPowerOf2ShlAssign, ModPowerOf2Shr, ModPowerOf2ShrAssign, ModPowerOf2Sqrt, ModPowerOf2Square,
25 ModPowerOf2SquareAssign, ModPowerOf2Sub, ModPowerOf2SubAssign, ModPowerOf2SubMul,
26 ModPowerOf2SubMulAssign, ModPowerOf2SubMulShl, ModPowerOf2SubMulShlAssign, ModPowerOf2Sum,
27 ModProduct, ModSquare, ModSquareAssign, ModSquarePrecomputed, ModSquarePrecomputedAssign,
28 ModSub, ModSubAssign, ModSubMul, ModSubMulAssign, ModSubMulShl, ModSubMulShlAssign, ModSum,
29 Multifactorial, NegMod, NegModAssign, NegModPowerOf2, NegModPowerOf2Assign, NextPowerOf2,
30 NextPowerOf2Assign, Primorial, RootAssignRem, RootRem, SqrtAssignRem, SqrtRem, Subfactorial,
31 UnsignedAbs, XMulYToZZ, XXAddYYToZZ, XXDivModYToQR, XXSubYYToZZ, XXXAddYYYToZZZ,
32 XXXSubYYYToZZZ, XXXXAddYYYYToZZZZ,
33};
34use crate::num::basic::integers::PrimitiveInt;
35use crate::num::basic::signeds::PrimitiveSigned;
36use crate::num::comparison::traits::OrdDouble;
37use crate::num::conversion::traits::{
38 Digits, FromOtherTypeSlice, IntegerMantissaAndExponent, PowerOf2DigitIterable, PowerOf2Digits,
39 SciMantissaAndExponent, VecFromOtherType, VecFromOtherTypeSlice,
40};
41use crate::num::factorization::primes::{PrimesIterator, PrimesLessThanIterator};
42use crate::num::factorization::traits::Primes;
43use crate::num::logic::traits::{BitBlockAccess, HammingDistance};
44
45pub trait PrimitiveUnsigned:
47 AbsDiff<Self, Output = Self>
48 + AbsDiffAssign<Self>
49 + BalancedMod<Self, Output: PrimitiveSigned + UnsignedAbs<Output = Self>>
50 + BalancedModPowerOf2<Output: PrimitiveSigned + UnsignedAbs<Output = Self>>
51 + BitBlockAccess<Bits = Self>
52 + CeilingLogBase<Output = u64>
53 + CeilingLogBase2<Output = u64>
54 + CeilingLogBasePowerOf2<u64, Output = u64>
55 + CeilingDivAssignNegMod<Self, ModOutput = Self>
56 + CeilingDivNegMod<Self, DivOutput = Self, ModOutput = Self>
57 + CheckedDoubleFactorial
58 + BellNumber
59 + CheckedBellNumber
60 + CheckedFactorial
61 + CheckedFibonacci
62 + CheckedMultifactorial
63 + CheckedLucasNumber
64 + CheckedPrimorial
65 + CheckedSubfactorial
66 + CheckedLcm<Self, Output = Self>
67 + CheckedLogBase<Output = u64>
68 + CheckedLogBase2<Output = u64>
69 + CheckedLogBasePowerOf2<u64, Output = u64>
70 + CheckedNextPowerOf2<Output = Self>
71 + CoprimeWith<Self>
72 + DoubleFactorial
73 + Digits<u8>
74 + Digits<u16>
75 + Digits<u32>
76 + Digits<u64>
77 + Digits<u128>
78 + Digits<usize>
79 + ExtendedGcd<Self, Gcd = Self>
80 + Factorial
81 + Fibonacci
82 + FloorLogBase<Output = u64>
83 + FloorLogBase2<Output = u64>
84 + FloorLogBasePowerOf2<u64, Output = u64>
85 + From<u8>
86 + FromOtherTypeSlice<u8>
87 + FromOtherTypeSlice<u16>
88 + FromOtherTypeSlice<u32>
89 + FromOtherTypeSlice<u64>
90 + FromOtherTypeSlice<u128>
91 + FromOtherTypeSlice<usize>
92 + Gcd<Self, Output = Self>
93 + GcdAssign<Self>
94 + HammingDistance
95 + IntegerMantissaAndExponent<Self, u64>
96 + Lcm<Self, Output = Self>
97 + LcmAssign<Self>
98 + LucasNumber
99 + ModIsReduced<Self>
100 + ModAdd<Self, Self, Output = Self>
101 + ModAddAssign<Self, Self>
102 + ModInverse<Self, Output = Self>
103 + ModMul<Self, Self, Output = Self>
104 + ModMulAssign<Self, Self>
105 + ModAddMul<Self, Self, Self, Output = Self>
106 + ModAddMulAssign<Self, Self, Self>
107 + ModSubMul<Self, Self, Self, Output = Self>
108 + ModSubMulAssign<Self, Self, Self>
109 + ModAddMulShl<Self, Self, Self, Output = Self>
110 + ModAddMulShlAssign<Self, Self, Self>
111 + ModSubMulShl<Self, Self, Self, Output = Self>
112 + ModSubMulShlAssign<Self, Self, Self>
113 + ModSum<Self, Self>
114 + for<'a> ModSum<&'a Self, Self>
115 + ModProduct<Self, Self>
116 + for<'a> ModProduct<&'a Self, Self>
117 + ModMulPrecomputed<Self, Self, Output = Self>
118 + ModMulPrecomputedAssign<Self, Self>
119 + ModNeg<Self, Output = Self>
120 + ModNegAssign<Self>
121 + ModPow<u64, Self, Output = Self>
122 + ModPowAssign<u64, Self>
123 + ModPowerOf2<Output = Self>
124 + ModPowerOf2Add<Self, Output = Self>
125 + ModPowerOf2AddAssign<Self>
126 + ModPowerOf2Inverse<Output = Self>
127 + ModPowerOf2IsReduced
128 + ModPowerOf2Mul<Self, Output = Self>
129 + ModPowerOf2MulAssign<Self>
130 + ModPowerOf2AddMul<Self, Self, Output = Self>
131 + ModPowerOf2AddMulAssign<Self, Self>
132 + ModPowerOf2SubMul<Self, Self, Output = Self>
133 + ModPowerOf2SubMulAssign<Self, Self>
134 + ModPowerOf2AddMulShl<Self, Self, Output = Self>
135 + ModPowerOf2AddMulShlAssign<Self, Self>
136 + ModPowerOf2SubMulShl<Self, Self, Output = Self>
137 + ModPowerOf2SubMulShlAssign<Self, Self>
138 + ModPowerOf2Sum
139 + for<'a> ModPowerOf2Sum<&'a Self>
140 + ModPowerOf2Product
141 + for<'a> ModPowerOf2Product<&'a Self>
142 + ModPowerOf2Neg<Output = Self>
143 + ModPowerOf2NegAssign
144 + ModPowerOf2Pow<u64, Output = Self>
145 + ModPowerOf2PowAssign<u64>
146 + ModPowerOf2Shl<i8, Output = Self>
147 + ModPowerOf2Shl<i16, Output = Self>
148 + ModPowerOf2Shl<i32, Output = Self>
149 + ModPowerOf2Shl<i64, Output = Self>
150 + ModPowerOf2Shl<i128, Output = Self>
151 + ModPowerOf2Shl<u8, Output = Self>
152 + ModPowerOf2Shl<u16, Output = Self>
153 + ModPowerOf2Shl<u32, Output = Self>
154 + ModPowerOf2Shl<u64, Output = Self>
155 + ModPowerOf2Shl<u128, Output = Self>
156 + ModPowerOf2ShlAssign<u8>
157 + ModPowerOf2ShlAssign<u16>
158 + ModPowerOf2ShlAssign<u32>
159 + ModPowerOf2ShlAssign<u64>
160 + ModPowerOf2ShlAssign<u128>
161 + ModPowerOf2ShlAssign<usize>
162 + ModPowerOf2ShlAssign<i8>
163 + ModPowerOf2ShlAssign<i16>
164 + ModPowerOf2ShlAssign<i32>
165 + ModPowerOf2ShlAssign<i64>
166 + ModPowerOf2ShlAssign<i128>
167 + ModPowerOf2ShlAssign<isize>
168 + ModPowerOf2Shr<i8, Output = Self>
169 + ModPowerOf2Shr<i16, Output = Self>
170 + ModPowerOf2Shr<i32, Output = Self>
171 + ModPowerOf2Shr<i64, Output = Self>
172 + ModPowerOf2Shr<i128, Output = Self>
173 + ModPowerOf2ShrAssign<i8>
174 + ModPowerOf2ShrAssign<i16>
175 + ModPowerOf2ShrAssign<i32>
176 + ModPowerOf2ShrAssign<i64>
177 + ModPowerOf2ShrAssign<i128>
178 + ModPowerOf2ShrAssign<isize>
179 + ModPowerOf2Sqrt<Output = Self>
180 + ModPowerOf2AbsSquared<Output = Self>
181 + ModPowerOf2AbsSquaredAssign
182 + ModPowerOf2Square<Output = Self>
183 + ModPowerOf2SquareAssign
184 + ModPowerOf2Sub<Self, Output = Self>
185 + ModPowerOf2SubAssign<Self>
186 + ModPowPrecomputed<u64, Self, Output = Self>
187 + ModPowPrecomputedAssign<u64, Self>
188 + ModAbsSquared<Self, Output = Self>
189 + ModAbsSquaredAssign<Self>
190 + ModSquare<Self, Output = Self>
191 + ModSquareAssign<Self>
192 + ModSquarePrecomputed<u64, Self, Output = Self>
193 + ModSquarePrecomputedAssign<u64, Self>
194 + ModSub<Self, Self, Output = Self>
195 + ModSubAssign<Self, Self>
196 + Multifactorial
197 + NegMod<Self, Output = Self>
198 + NegModAssign<Self>
199 + NegModPowerOf2<Output = Self>
200 + NegModPowerOf2Assign
201 + NextPowerOf2<Output = Self>
202 + NextPowerOf2Assign
203 + OrdDouble<Self>
204 + PowerOf2Digits<u8>
205 + PowerOf2Digits<u16>
206 + PowerOf2Digits<u32>
207 + PowerOf2Digits<u64>
208 + PowerOf2Digits<u128>
209 + PowerOf2Digits<usize>
210 + PowerOf2DigitIterable<u8>
211 + PowerOf2DigitIterable<u16>
212 + PowerOf2DigitIterable<u32>
213 + PowerOf2DigitIterable<u64>
214 + PowerOf2DigitIterable<u128>
215 + PowerOf2DigitIterable<usize>
216 + Primes<I = PrimesIterator<Self>, LI = PrimesLessThanIterator<Self>>
217 + PrimitiveInt
218 + Primorial
219 + RootRem<u64, RootOutput = Self, RemOutput = Self>
220 + RootAssignRem<u64, RemOutput = Self>
221 + SciMantissaAndExponent<f32, u64>
222 + SciMantissaAndExponent<f64, u64>
223 + SqrtRem<SqrtOutput = Self, RemOutput = Self>
224 + SqrtAssignRem<RemOutput = Self>
225 + Subfactorial
226 + VecFromOtherType<u8>
227 + VecFromOtherType<u16>
228 + VecFromOtherType<u32>
229 + VecFromOtherType<u64>
230 + VecFromOtherType<u128>
231 + VecFromOtherType<usize>
232 + VecFromOtherTypeSlice<u8>
233 + VecFromOtherTypeSlice<u16>
234 + VecFromOtherTypeSlice<u32>
235 + VecFromOtherTypeSlice<u64>
236 + VecFromOtherTypeSlice<u128>
237 + VecFromOtherTypeSlice<usize>
238 + XXAddYYToZZ
239 + XXDivModYToQR
240 + XXSubYYToZZ
241 + XMulYToZZ
242 + XXXAddYYYToZZZ
243 + XXXSubYYYToZZZ
244 + XXXXAddYYYYToZZZZ
245{
246}
247
248macro_rules! impl_basic_traits {
249 ($u:ident) => {
250 impl PrimitiveUnsigned for $u {}
251 };
252}
253apply_to_unsigneds!(impl_basic_traits);